做数据采集这行久了,会发现一个挺普遍的现象:很多人把"数据采集"这四个字理解得太窄了。有人觉得数据采集就是传感器接根线,有人觉得是用Python写个脚本定时抓网页,还有人以为买块DAQ卡插到电脑上就万事大吉。真实情况远没那么简单——数据采集是一门横跨硬件、软件、网络、存储和业务逻辑的系统工程。它决定了你后续的数据分析、机器学习、产线监控、量化策略这些上层建筑的地基稳不稳。
这篇文章就是给刚接触数据采集、被各种术语和方案绕晕的新手准备的,也适合传统业务转采集领域的同学系统补课。我会从系统构成、硬件采集、软件采集、核心参数、落地流程和实战避坑几个维度,把数据采集的基础知识完整过一遍。看完之后,你心里那张地图基本能清晰起来。
1. 数据采集的本质:从一根传感器到一个决策的完整链路
1.1 为什么"采集数据"这件事没听起来那么简单
打个比方。人的眼睛采集光线,耳朵采集声波,皮肤采集触感和温度,这些信号汇总到大脑之后,你才做出"前面那杯水太烫,先别碰"的决策。数据采集系统干的就是给机器"安装感官"这件事,但机器这套感官要处理的现实杂音比人复杂得多。
一套完整的数据采集链路,从信号产生到最后被使用,至少要经过这么几个环节:
- 传感器把物理量(温度、压力、振动、电流)变成电信号
- 信号调理电路把电信号变成采集设备能接受的电压或电流范围
- ADC(模数转换器)把连续模拟信号转成离散的二进制数字
- 传输链路(总线、网络、无线)把数据送到计算机
- 存储系统把数据落盘
- 上层应用做清洗、分析和展示,最终支撑一个决策
每个环节都会引入误差。传感器有非线性误差,调理电路有温漂,ADC有量化噪声,传输过程可能丢包,存储可能被覆盖。你以为自己采到的是"真实世界的原始数据",实际上是一条被层层加工过的信号链。这就是为什么数据采集这件事,绝不能抱着"接上线就行"的心态去做。
1.2 四个维度看懂一套采集系统的边界
我接触过不少项目,一上来就急着买设备、写代码。其实先花半小时理清下面四个维度,能少走很多弯路。
第一个维度是数据源类型。物理量数据,比如温度、压力、振动、电流、位移,通常需要传感器加采集设备;业务数据,比如交易记录、用户行为、设备日志,通常走软件接口或文件对接。这两类从原理到工具链完全不同,别混着谈。
第二个维度是采集方式。硬件采样、协议对接、软件抓取、日志采集,四种方式对应的技术栈和难点都不一样。硬件采样关注采样率和信号完整性,协议对接关注寄存器表和报文解析,软件抓取关注接口稳定性和合规性,日志采集关注可靠投递和格式规范。
第三个维度是时间特征。连续流数据需要实时采集和流处理,周期批量数据重点在调度和增量抽取,事件触发数据则要关注触发条件和缓存窗口。这个维度直接决定你用消息队列、定时任务还是中断驱动。
第四个维度是应用场景。你是要做监控预警,做过程控制,还是做离线分析?监控预警允许几分钟的延迟,过程控制要求秒级甚至毫秒级反馈,离线分析反而可以慢慢来,但对数据完整性和可追溯性要求更高。场景不同,整个架构的取舍就完全不同。
把这四个维度写在一张纸上,项目边界就出来了,后面每一步选型都跟着这张纸走。
2. 硬件采集路线:DAQ卡、LabVIEW与工业设备联网
2.1 DAQ采集系统的构成与参数选型
DAQ(Data Acquisition)是硬件采集领域绕不开的基石概念。一套典型的基于DAQ卡的采集系统由四部分组成:传感器、信号调理模块、DAQ硬件、上位机软件。
拿最常用的电压采集来举例。传感器把物理量变成电压信号,比如热电偶输出的毫伏级电压信号或者4-20mA电流环信号。信号调理模块负责把信号放大、滤波、隔离,变成DAQ卡ADC能量程接受的统一电压范围。DAQ卡内部完成采样保持和模数转换,把模拟信号变成二进制数值,通过PCIe、USB或以太网总线传给上位机。
选型时最核心的参数有四个。
采样率决定单位时间内采多少个点,单位是Sa/s(每秒采样次数)。你测工频50Hz的电网信号,理论上100Sa/s就够,但要做谐波分析就得几千甚至几万。分辨率是ADC的位数,常见12bit、16bit、24bit。通道数决定能同时接多少路信号。量程决定信号允许的幅值范围,比如正负10V、正负5V、0到10V。
我见过不少人选DAQ卡时只盯着采样率,忽略了通道间的同步方式。多通道同时采样和依次扫描采样,在相位要求高的场合完全是两种结果。做振动模态分析,通道间相位偏差1毫秒都会让结果面目全非。
2.2 LabVIEW+DAQ:为什么这对组合流行了几十年
最近看到"labview daq数据采集下载"这类搜索词,说明很多人还在用LabVIEW搭配DAQ卡做数据采集。这对组合之所以流行几十年,核心原因是三个:
一是驱动统一。NI的DAQmx驱动把所有自家DAQ硬件的采集逻辑封装成一致的API,管你用的是M系列还是X系列,上层代码基本不用重写。
二是图形化开发上手快。拖拽节点连线就能搭出采集程序,外加内置的波形图表,做原型验证效率极高。
三是调试工具直观。DAQmx自带测试面板,先试采一下看波形对不对,再写正式程序,这个习惯能省很多排查时间。
但我不建议一上来就陷入LabVIEW的图形化编程细节里。先用DAQmx测试面板确认硬件正常工作,再开始搭软件架构。另外务必注意版本匹配,LabVIEW版本和DAQmx驱动版本、硬件固件版本三者之间必须兼容。我踩过典型的坑是:装了个新版LabVIEW,结果老驱动不识别新硬件,排查了半天才发现是版本不对。
除了LabVIEW,现在很多新一代采集项目用Python配合DAQ设备驱动也能做,优势在后续分析生态丰富。不过对实时性要求高的场景,还是建议用厂商原生驱动或C/C++调用,Python的GIL和系统调度延迟在关键时刻会掉链子。
2.3 注塑机等工业设备的采集与联网方案
"注塑机数据采集联网"这个热搜词背后,是很多传统制造企业转型时遇到的真实需求。注塑机、CNC、压铸机这类设备,你要采集的数据主要分两个层级。
第一个层级是控制器层。注塑机通常由PLC或专用控制器控制,里面已经有大量工艺参数:注射压力、料筒温度、锁模力、注射速度、周期时间。这些数据通过Modbus RTU/TCP、OPC UA、Profinet这类工业协议就能读出来。难点不在协议本身,而在拿到设备的寄存器表之后,怎么可靠地轮询和解析。
第二个层级是传感器层。有些参数控制器里没有,需要在设备外加装传感器,比如振动传感器监测机台健康状态,或者外部温度传感器验证实际温度与设定值是否一致。这类数据往往需要独立的采集终端,走模拟量或数字量输入。
实际部署时典型的链路是:设备侧采用边缘采集网关,通过Modbus或OPC UA从PLC读取数据,边缘网关再做本地解析和缓存,用MQTT或OPC UA把数据上行到车间的数据平台。选边缘网关时注意几个点:支持的协议驱动是不是够全、是否支持断线缓存、本地是否带一套轻量级的规则引擎做报警。至于"注塑机数据采集"这个搜索词本身带不带系统名,都不重要,重要的是你先把设备侧的通讯参数表和变量表整理清楚。
部署联网时有个容易被忽视的点:工业现场的网络环境不一定稳定。车间里电磁干扰强,无线网络时延抖动大,跨楼层的光纤接头可能松动。数据采集链路里一定要留缓存重传的机制,否则一个网络抖动就是一大段数据空洞。
2.4 现场布线、信号调理与干扰处理
硬件采集里最容易被低估的环节,是现场布线和信号调理。很多刚入行的同学在实验室里跑得很好的采集程序,一到现场就出现大量毛刺和跳变,最后查来查去,问题全出在信号链路上。
工业现场最常见的信号类型是4-20mA电流环和0-10V电压信号。电流环抗干扰能力强、传输距离远,优先选电流环。热电偶和RTD温度传感器的接线方式完全不同,热电偶要补偿导线,RTD是三线制或四线制接法,接错直接出系统性偏差。
干扰源通常来自几个方面:变频器和大功率电机的高频谐波、信号电缆与动力电缆近距离平行敷设、多点接地形成地环路。对应的对策也很明确:信号线用屏蔽双绞线,屏蔽层单端接地;信号电缆和动力电缆至少保持30厘米以上距离,必须平行时加金属穿管隔离;模拟量信号经过隔离器切断地环路;电源端加EMI滤波器。
调试时常用的方法是脱开信号线,用信号发生器送一个标准信号,确认采集端读数准确无误,再接上现场传感器。这样能快速定位问题出在采集设备本身还是现场线路。这条经验,我几乎在每个现场项目里都用得到。
3. 软件采集路线:API、爬虫与日志数据收集
3.1 从"雪球数据采集"这类需求说起
"雪球数据采集"这类热搜词,代表着一大类需求:从公开网站上采集行情、资讯、社区讨论等数据。这类数据有几个共同特点:网页结构频繁变化、接口通常有鉴权、数据时效性要求高、数据量大且带有噪声。
先说方法论层面的原则,再谈具体技术。
搜索引擎或分析平台做数据采集,首先要想清楚数据边界和合规边界。只采集公开可访问的数据、尊重平台的服务条款和robots协议、不尝试绕过登录和反爬机制、控制请求频率避免对目标站点造成压力。这些不是空话,是实际项目能不能长期跑下去的底线。
我见过有人一门心思研究怎么绕过验证码和风控,结果网站一个改版,所有采集逻辑全部作废,还面临法律和账号风险。真正的工程化方向应该放在:稳定获取公开数据、做好增量更新、把数据结构化和清洗做好。这三件事做好了,价值远大于跟风控斗智斗勇。
3.2 优先走API:最省心的结构化采集路径
判断一个数据采集需求用哪种方案,我第一条经验是:先看有没有官方API。无论是金融行情、天气数据、社交平台内容还是企业内部系统,官方API是最省心的路径。原因很明显:API有文档、有稳定的返回格式、有明确的限流策略,出错机制也透明。
以Python为例,一个基本的API采集函数至少要考虑三件事:超时、重试和限速。
import requests import time from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry def fetch_api(url, params, headers, max_retries=3): session = requests.Session() retry = Retry( total=max_retries, backoff_factor=1, # 指数退避:1s, 2s, 4s status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["GET"] ) adapter = HTTPAdapter(max_retries=retry) session.mount("https://", adapter) for attempt in range(max_retries): try: resp = session.get(url, params=params, headers=headers, timeout=10) resp.raise_for_status() return resp.json() except requests.exceptions.RequestException as e: wait = 2 ** attempt time.sleep(wait) raise RuntimeError("API请求失败")这里的关键点是:429状态码代表接口限流了,必须退避重试,不能硬刚;网络超时和连接错误要区分处理;重试之间用指数退避,避免自己把自己限流。这些细节决定了采集程序在长期运行中是否稳定。
3.3 工程化网页采集的规范操作与合规边界
确实存在没有官方API的场景,必须走网页采集。这时候工程化水平就体现出来了。
先说合规与道德边界。规范的做法是:检查robots.txt,确认哪些路径允许访问;设置合理的User-Agent标识自己;控制采集频率,单线程加随机间隔是常态;只采集公开页面,绝不尝试破解登录、验证码或加密参数。一个健康的采集程序对目标站点的影响,应该小于一个普通人类重度使用浏览器的量级。
工程上,一套规范的网页采集程序至少包含四个模块。
请求模块负责下载页面,必须有超时和重试。解析模块用XPath或CSS选择器提取字段,注意容错,页面结构微调时不至于全盘崩溃。调度模块决定采集顺序和频率,推荐APScheduler这类工具做定时触发。存储模块写增量判断逻辑,避免重复抓取和重复入库。
这里分享一个我常用的增量采集思路:对于列表页,先抓取条目唯一ID,和数据库里已有ID对比,只采集新增部分;对于详情页,记录内容哈希值,内容没变化就跳过。这套逻辑能让采集成本随时间收敛到很低,而不是越跑越慢。
3.4 日志与埋点采集:另一种被忽略的"数据采集"
"数据采集"这个词在互联网领域还指一类场景:采集服务端日志和客户端埋点数据。这类采集虽然不涉及传感器和模数转换,但架构思路和硬件采集惊人地一致。
日志采集的经典链路是:Filebeat或Fluentd这类轻量采集器部署在业务服务器上,监听日志文件变化,把新增日志行发到Kafka这类消息队列,下游再由消费程序写入数仓或搜索集群。这跟硬件采集先缓存再上行是同一个道理——中间加一层缓冲,上游抖动不会直接打垮下游。
埋点采集则是客户端SDK把用户行为事件以特定JSON格式上报到网关,网关做校验后落盘。埋点采集的核心痛点不是采集本身,而是数据质量。字段名不统一、事件重复上报、时间戳时区错乱,这些问题的杀伤力比采集不到还大。所以规范化的做法是从一开始就定义清楚事件字典,每个字段有唯一名称、类型和取值说明,并且上报端和服务端各自做一次校验。
我观察到一个普遍现象:很多人对"数据采集"的理解过于偏向自己熟悉的那个领域。搞硬件的看不起爬虫,搞爬虫的觉得硬件土。但实际上,它们共享同一套核心思维——稳定获取、可靠传输、统一格式、完整存储。把这套思维掌握了,具体用什么工具反而不重要。
4. 绕不开的核心参数:采样率、分辨率、时钟同步与数据质量
4.1 采样率与混叠:一个反直觉的坑
采样率是硬件数据采集里最重要的参数,没有之一。根据奈奎斯特采样定理,要无失真地还原一个频率为f的信号,采样率至少要达到2f。注意,这只是理论下限,实际工程里一般取信号最高频率的5到10倍,给滤波和后续分析留出余量。
混叠现象是个特别反直觉的坑。当一个高频信号以过低频率采样时,采出来的点会被"伪装"成一个不存在的低频信号,而且这个假信号完全无法通过后处理还原。我常拿电影里汽车车轮的视觉错觉做类比——车轮辐条本来在正转,摇镜头时看起来却像倒转,这就是时间维度的混叠。
工程上解决混叠的办法,不是把采样率无限调高,而是先用抗混叠滤波器把高于目标频率的信号成分滤掉,再用足够高的采样率去采。很多专业DAQ卡自带抗混叠滤波器,但如果你用的是通用采集板卡或者自研电路,就必须自己加一级低通滤波。否则你看到的波形里,高频干扰已经"变成"了低频假信号,数据出来就是错的。
4.2 分辨率、量程与精度的换算关系
分辨率是ADC的位数,它和量程一起决定了你能分辨的最小电压变化。计算公式很简单:最小分辨率 = 量程 / 2^n,其中n是ADC位数。
举例来说,一块12bit的DAQ卡,量程正负10V,那么满量程是20V。2的12次方是4096,最小分辨电压就是20/4096,约4.88mV。这意味着低于约5毫伏的电压变化,在这个配置下是看不出来的。换成16bit,同样量程下最小分辨电压变成20/65536,约0.3mV,精细度提升了16倍。
这里有个新手常犯的错误:想要高分辨率就无脑买高位数ADC,却不考虑量程匹配。传感器的输出范围可能只有正负100毫伏,你却把量程设在正负10V,那再高的位数也浪费了,因为有效信号只占ADC量程的一小部分。选型时要让信号幅值尽量占满量程的70%以上,分辨率才真正被利用起来。
另外,分辨率和精度是两回事。分辨率高只代表读数能区分得很细,不代表读得准。精度受传感器误差、参考电压温漂、噪声等因素影响,是另一个层级的指标。买设备时别被"24bit"这种数字迷惑,先看整体精度指标和噪声指标。
4.3 多通道与多设备的时间同步
很多项目根本不是单通道采集,而是几十个通道甚至几十台设备同时采集。这时候时间同步就成了数据质量的关键。
同一块DAQ卡上的多通道,如果是依次扫描采样,通道之间的时间偏差等于通道数乘以单通道采样时间。对于大多数静态或缓变信号,这个偏差可以忽略;但对于高频振动或者需要做相位分析的信号,必须确认硬件是否支持同步采样。同步采样意味着每个通道都有独立的ADC同时采样,不同通道之间没有相位差,但成本也相应更高。
多台独立设备之间要做到严格时间同步,常用的方案包括:
- 硬件对时:GPS授时、PTP(IEEE 1588)精确时间协议、IRIG-B码。GPS授时精度在微妙到亚微秒量级,适合分布式户外节点;PTP在局域网内可以达到亚微秒级;IRIG-B是电力行业的老牌对时方案。
- 软件对时:NTP协议,精度在毫秒级,对于大多数温度、压力、流量这类缓变信号足够用,但对高速振动信号不够。
判断自己需要哪种同步级别,先问一个问题:分析时需不需要把多个通道的数据按严格时间对齐?如果需要,而且信号本身的频率很高,就别在时间同步上省钱。我在一个桥梁监测项目里就吃过亏——起初用NTP对时,两台设备的时间偏差在几十毫秒,导致模态分析结果完全对不上,后来换成PTP才解决。
4.4 数据完整性的兜底策略
采集系统最怕的不是数据慢,而是中间断了一段没人发现。等出了问题往回查,才发现某个时间段的数据压根不存在,或者存在但明显是错的。数据完整性靠的是兜底策略。
第一层兜底是本地缓存。采集端先把数据写到本地缓存,再异步上传到中心平台,网络中断时数据留在本地,恢复后自动续传。缓存文件要做成可轮换的,比如按小时或按大小滚动,避免磁盘写满。
第二层兜底是序列号和时间戳校验。每条数据记录都带一个连续递增的序号和采集时间戳。下游接收时校验序号是否连续,发现跳号就该报警。这相当于给数据加了个"邮戳",中间漏了快递,一看邮戳就知道。
第三层兜底是双写或冗余。对高价值数据,可以同时写两个存储,或者写一份原始数据、一份经过处理的数据。磁盘虽然便宜,但别把所有的宝押在一个存储系统上。
我在实际项目中还会做一个简单的完整性监控:每五分钟统计一下采集点数和最新数据时间,如果新增点数为零或者最新时间戳停滞超过N分钟,立刻告警。这种"心跳监控"成本极低,但能救你无数次。
5. 数据采集项目的落地流程与选型决策
5.1 需求拆解:先回答清楚这几个问题
我每次被叫去评估一个新数据采集项目,不管对方说得多么天花乱坠,都会先按下面这张清单确认一遍需求。很多项目做到一半才发现方向错了,就是因为需求阶段没问仔细。
- 最终要回答什么问题?是设备故障预警、工艺参数优化、市场舆情监控,还是科研分析?
- 数据源的物理位置在哪里?传感器接口是什么类型?设备是否支持网络通讯?
- 数据需要多高的频率?毫秒级、秒级还是分钟级够用?
- 数据要保存多久?原始数据和分析结果分开保存吗?
- 实时性要求多高?允许几秒乃至几分钟的延迟,还是一分钟内的延迟都不可接受?
- 预算和现有基础设施是什么情况?
这些问题问完之后,大概率能筛选掉一半的伪需求。比如"我们想把所有设备的数据都采上来",这个需求一定要追问"采上来干什么"。如果对方答不上来,你就得帮他把数据在这台设备上的业务价值定义清楚。一个没有分析目标和动作的数据,采集回来也是死数据,徒增存储成本。
5.2 方案选型对比与决策逻辑
数据采集方案没有绝对的好坏,只有合不合适。我把常见的采集路线摆在一起做个对比,方便你对照自己的场景选择。
| 路线方向 | 典型场景 | 优势 | 主要痛点 |
|---|---|---|---|
| 硬件DAQ采集 | 高频物理信号、科研实验、振动噪声测试 | 采样率高、时间精度可控、同步性好 | 成本高、布线和抗干扰要求高 |
| 工业协议采集 | 注塑机、CNC、PLC等设备数据 | 无需改线,直接读控制器数据 | 协议种类多,寄存器表混乱,设备兼容性是个坑 |
| API数据采集 | 行情、天气、开放平台数据 | 稳定、结构化、合规边界清晰 | 有调用限额,字段受平台约束 |
| 网页采集 | 无API的公开数据、舆情 | 灵活,范围广 | 页面变脸风险高,需持续维护 |
| 日志与埋点 | 互联网业务行为数据 | 覆盖广、数据量大 | 格式规范和数据质量控制是难点 |
决策逻辑其实不复杂。数据源是可编程设备吗?先看设备支不支持Modbus、OPC UA这类标准协议,支持就走协议采集。数据源是物理量吗?对精度和频率要求高就走DAQ加传感器,要求不高用数据记录仪更省事。数据源在网络上吗?优先找API,没有API再评估网页采集的合规性和可持续性。
给一个我常用的判断标准:如果数据量每天在几千条以内,用简单的定时批量采集就够了,别把架构搞得过分复杂;如果数据量上万条且有时间连续性,就要考虑流处理和队列缓冲了。架构设计不是追求最先进,而是匹配实际规模和投入。
5.3 从原型验证到正式运行的节奏
数据采集项目最忌讳的就是一次铺开几十上百个采集点,结果三天两头出问题,团队到处救火。我一般分成三步走。
第一步是原型验证。挑最小的范围,一台上位机加一台采集设备,或者写一个采集脚本验证某一路数据。这一阶段的目标只有一个:把从物理量到最终存储到数据库的完整链路跑通,确认数据质量符合要求。很多问题在这一步就该暴露出来,哪怕后来才发现的,也都是好的。
第二步是有限试点。扩大到三五台设备或者几十个通道,跑一到两周,重点观察长时间运行的可靠性——内存泄漏、文件句柄耗尽、网络连接不释放、时间漂移,这些毛病短时间跑不出来,只有连续运行才会露出马脚。
第三步才是全量推广。推广时要配套监控和运维手段,包括采集进程存活监控、采集数据量监控、存储水位监控。我特别建议给每台采集设备做一张运行状态表,记录设备ID、采集状态、最近心跳时间、今日数据量、异常次数,每天扫一遍这张表比什么都管用。
6. 我在采集项目里踩过的几个坑(实战清单)
6.1 协议文档和实际设备对不上的时候
有一年给某厂做设备数据采集,对方给的Modbus寄存器表写得清清楚楚,地址、数据类型、缩放系数一目了然。我按文档把采集程序写完,联调时一读数据,数值乱得离谱。后来拿Modbus调试工具一个一个寄存器地址手动去读,才发现文档里第9个寄存器实际是32位浮点数,不是文档写的16位有符号整数,而且地址整体偏了一位。
这几乎是工业数据采集里最普遍的坑。设备厂商的协议文档和实际固件版本对不上,实在是太常见了。我的建议永远是:程序里别硬编码寄存器地址,先用Modbus调试工具逐段扫描寄存器,把实际读到的数据画在Excel表里,对照现场仪表确认每个寄存器对应的物理量、数据类型和字节序,然后再写正式程序。前期多花一天摸清寄存器表,后面能省一周的排查时间。
6.2 采集端一旦卡住,下游全崩的连锁事故
有一次我在一个数据采集网关里同时跑了三个采集任务,分别采不同的设备,共用一个上传通道。某个设备偶尔响应超时,导致轮询线程被阻塞,缓存队列越积越多,最终整个网关的上传通道被堵死,三台设备的数据全部中断。这类"一个环节卡住、下游全崩"的连锁事故太典型了。
解决办法是三个思路的组合:第一个思路是采集任务之间做隔离,每个设备一个独立进程或线程,超时时间单独设置,谁卡住就重启谁,不连累别人。第二个思路是采集和上传之间用消息队列解耦,采集端只管往队列里塞数据,上传端独立消费,任何一方的抖动都不会直接传导给对方。第三个思路是给采集程序加看门狗,进程假死时自动拉起,并且报警通知。这套保护机制在我后来的所有采集项目里都成了标配。
6.3 存储层设计不当,"采了等于白采"
还有一个坑不是在采集端,而是在存储端。很多项目前期图方便,把原始采集数据直接塞进关系型数据库,一张表从年头写到年尾。结果数据量一上来,查询性能急剧下降,想删旧数据又怕删错,整个分析流程卡在数据库这一层。
我的经验是把原始数据和应用数据分开。原始数据按时间分区存储,使用列存或时序数据库,比如InfluxDB、TDengine这类对时序天然友好的存储;应用数据经过清洗加工之后,再放进关系型数据库供业务系统查询。还要提前规划归档策略:热数据保留最近一个月,温数据保留一年,冷数据压缩归档到对象存储。这样查询性能和数据成本才能同时兼顾。
还有一点与存储相关但常被忽略——数据字典。每条数据字段的定义、单位、采集频率、来源设备、可能取值范围,都要记录在案。数据采得再多,如果没人知道"CH03通道的单位是摄氏度还是毫伏",这些数据就是一堆无法解释的数字。这个习惯,值得你从第一个采集项目就开始养成。