3. 数据采集与存储基础:数据采集频率、数据精度、数据存储介质选择

各位同学,咱们今天聊点实在的。数据采集与存储,听起来像是基础课,对吧?但说实话,我见过太多项目栽在这看似简单的一步上。你想想看,SCADA系统的核心使命是什么?就是把现场设备的状态忠实地记录下来,供你事后分析、回放、做决策。如果这一步没打好地基,后面什么高级功能都是空中楼阁。

我个人习惯把数据采集和存储比作「给工业现场拍X光片」。拍得太稀疏,病灶漏掉了;拍得太密,底片不够用;拍得不清晰,诊断就出错。今天咱们就把这三件事掰开揉碎了讲清楚。

3.1 数据采集频率:快与慢的博弈

采集频率,说白了就是「多久采一次」。这个参数在SCADA里通常叫Scan RatePolling Interval。单位是毫秒或秒。

频率怎么定?我一般看三个因素:

  • 信号变化速度:温度变化慢,1秒一次足够;振动信号变化快,可能需要10毫秒一次。
  • 控制需求:如果这个数据要参与闭环控制,频率必须高于控制周期。比如PID控制周期是100ms,那采集至少得50ms一次。
  • 系统容量:频率越高,CPU负载和网络带宽消耗越大。别把PLC或RTU跑死机了。

经验之谈:我在一个水处理项目中遇到过,客户要求所有模拟量点都按100ms采集。结果上位机CPU直接飙到90%,操作界面卡成幻灯片。后来我们做了分级处理:关键控制点100ms,趋势监测点1秒,纯记录点10秒。系统瞬间就稳了。

常见的采集频率参考:

信号类型 推荐频率 典型场景
温度、液位 1~10秒 储罐、反应釜
压力、流量 0.5~2秒 管道、泵站
电机电流、转速 100~500毫秒 变频器、电机
振动、高速脉冲 1~50毫秒 压缩机、涡轮机
开关量(DI/DO) 事件触发或50ms 阀门状态、报警

小技巧:对于变化缓慢的信号,可以用「死区采集」——数值变化超过一定阈值才记录。比如温度变化超过0.5℃才存一条记录。这样能大幅减少存储量,而且回放时曲线更平滑。

3.2 数据精度:够用就好,别浪费

数据精度,就是「采多准」。这里有两个概念容易混淆:分辨率精度

  • 分辨率:ADC能分辨的最小变化。比如12位ADC,分辨率是满量程的1/4096。
  • 精度:测量值与真实值的偏差。受传感器、温漂、噪声影响。

我建议你记住一句话:精度不是越高越好,够用就好。为什么?

举个例子。一个温度传感器标称精度±0.5℃,你用24位ADC去采,分辨率能达到0.0001℃。有意义吗?没有。因为传感器本身的误差就远大于这个分辨率。你存了小数点后四位,纯属浪费存储空间。

我曾经踩过的坑:有个项目,客户要求所有模拟量都按浮点数(32位)存储。结果一年下来,历史数据库膨胀到几百GB,查询慢得要命。后来我分析发现,大部分信号根本不需要那么高精度。比如液位信号,0.1%的精度就足够了,用整数(16位)存完全没问题。改完之后,存储量直接降了60%。

我的建议:

  • 模拟量输入:一般12~16位分辨率就够。除非是分析仪器或高精度称重。
  • 存储格式:能用整数别用浮点。比如把0~100%映射到0~10000的整数,精度0.01%,够用还省空间。
  • 时间戳精度:毫秒级足够。别用微秒,除非你有特殊需求。

3.3 数据存储介质选择:从硬盘到云

存储介质的选择,直接决定了你的历史数据能存多久、查多快。我把它分成三个层次:

3.3.1 本地存储(嵌入式/边缘层)

PLC、RTU、边缘网关自带的存储。通常是SD卡、CF卡或板载Flash。

  • 优点:实时性好,不依赖网络,断电不丢数据。
  • 缺点:容量小(几GB到几十GB),读写寿命有限。
  • 适用场景:缓存最近几小时或几天的数据,作为断网时的临时存储。

注意:Flash存储有写入寿命限制。频繁写入会很快报废。我一般建议用循环覆盖的方式,只保留最近7天的数据。

3.3.2 服务器本地磁盘(SCADA服务器层)

这是最主流的方案。用机械硬盘(HDD)或固态硬盘(SSD)。

介质 优点 缺点 推荐用途
HDD(机械硬盘) 容量大、成本低 读写慢、怕震动 大容量历史归档
SSD(固态硬盘) 读写快、无机械部件 容量小、贵、有写入寿命 实时数据库、缓存
NVMe SSD 极快 非常贵 高频采集、高速回放

我个人习惯的做法是:SSD做热存储,HDD做冷存储。最近3个月的数据放SSD,查询快;超过3个月的自动迁移到HDD,省钱。

3.3.3 网络存储与云存储

现在越来越多的项目开始用NAS、SAN或者云存储(如AWS S3、阿里云OSS)。

  • 优点:容量几乎无限,易于扩展,支持异地容灾。
  • 缺点:依赖网络,延迟高,有持续运营成本。
  • 适用场景:多站点集中存储、长期归档、大数据分析。

重要提醒:千万别把实时数据直接写到云存储。网络抖动一下,数据就丢了。正确的做法是:本地先缓存,再异步上传。我曾经见过一个光伏项目,直接往云端写数据,结果一次网络中断丢了3天的发电量数据,损失惨重。

3.4 综合选型建议

好了,咱们把三个要素串起来。一个典型的中型SCADA项目,我一般这样配置:

# 伪代码示例:数据采集与存储策略配置
config = {
    "采集策略": {
        "关键控制点": {"频率": "100ms", "精度": "16位整数"},
        "趋势监测点": {"频率": "1s",   "精度": "12位整数"},
        "纯记录点":   {"频率": "10s",  "精度": "12位整数"}
    },
    "存储策略": {
        "热存储": {"介质": "SSD 500GB", "保留": "3个月"},
        "冷存储": {"介质": "HDD 4TB",   "保留": "3年"},
        "归档":   {"介质": "云存储",     "保留": "10年"}
    },
    "缓存机制": {
        "边缘缓存": {"介质": "SD卡 32GB", "保留": "7天"},
        "断网续传": "启用"
    }
}

你想想看,这样分层之后,每个环节的压力都不大。边缘设备只存7天,不怕卡死;SSD只存3个月,读写快;HDD存3年,成本低;云存10年,随时调阅。

嗯,这里要注意一点:存储介质的选择一定要和采集频率、精度联动考虑。你采得越密、精度越高,需要的存储空间就越大。我见过有人用1ms频率采温度,一天就产生86,400,000条记录,什么硬盘都扛不住。

最后送大家一句话:数据采集不是越多越好,而是越精越好。把有限的资源用在关键数据上,这才是工业级SCADA系统的设计哲学。