『7x24小时有问必答』
上个月在常州,一家汽车零部件厂的MES系统跳出了“设备异常”警报,频率从每分钟20次飙升到200次。
厂里的老电工盯着监控屏骂了三小时,结果发现是振动传感器在凌晨3点被一只老鼠碰了一下,数据震荡直接冲破了报警阈值。
我放下电话,心想:这不是老鼠的问题,是数据没洗。
你花80万买的三菱MELSEC iQ-R,如果连传感器噪音都压不住,那它和你家的玩具PLC没区别。今天我用自己的踩坑经历,拆解一套从传感器到云端的数据净化方案——从“邵雍的八重境界”偷师的思考模型,变成实用代码。

你以为在采集数据?其实在采集噪音

旧方案:
车间里6个温度传感器,一股脑地扔进PLC的D寄存器,然后直接上传SCADA。结果呢?温差超过±5℃,操作员一天改20次设定值,最后干脆用手摸。
我测过一组数据:
时间原始值(℃)实际温度(℃)误差
08:0098.796.22.5
09:00103.498.84.6
10:0087.295.0-7.8
我们以为的工业数据是真理,实际上全是谎言。
那怎么办?从传感器到PLC,至少要过5道滤网。这不是玄学,是从工程师视角把“数据清洗”变成可执行的PLC代码。

五道滤网:把乱码变成金矿

第一关:量程硬砍,别让异常值进门

最蠢的错误:PLC程序里不限制量程,结果传感器坏了输出-50℃,直接触发停机逻辑。
对代码:
// 传感器输入量程限制 (三菱MELSEC iQ-R  GX Works3 ST语言)
// 0-100℃ 压力传感器示例
// 如果不是,直接丢弃
IF (Sensor_Raw >= 0) AND (Sensor_Raw <= 100) THEN
Sensor_Valid := Sensor_Raw;
ELSE
Sensor_Valid := Sensor_Prev;  // 保持上一次的有效值
Fault_Cnt := Fault_Cnt + 1;   // 记录异常次数
END_IF
知识点:
这不是过滤,是保安。每次异常值进来,必须记录次数。我见过一台设备,传感器线松动,每天被限100次,工程师愣是三个月没发现,误判率上升30%。

第二关:滑动平均,干掉毛刺

三菱iQ-R的DXCPU自带移动平均指令MOVDL,但很多人用错了——窗口设得太大,导致数据滞后5分钟;设得太小,没任何效果。
我踩坑后发现的一个铁律:
慢速过程(液位、温度):窗口=8~16点 → 滞后≤2秒
快速过程(压力、转速):窗口=4~8点 → 滞后≤0.5秒
代码:
// 滑动平均滤波 (不带浮点优化的整型版本)
// 输入: Sensor_Valid (0~1000 代表0.0~100.0℃)
// 窗口: 8个采样点
// 输出: Sensor_Avg
VAR
i          : INT;
Sum        : INT := 0;
Buffer     : ARRAY[0..7] OF INT := [8(0)];
Buffer_Ptr : INT := 0;
END_VAR
// 更新缓冲区
Buffer[Buffer_Ptr] := Sensor_Valid;
Buffer_Ptr := (Buffer_Ptr + 1) MOD 8;
// 求和
Sum := 0;
FOR i := 0 TO 7 DO
Sum := Sum + Buffer;
END_FOR;
// 移位操作防溢出 (定点数 0.1倍精度)
Sensor_Avg := Sum / 8;
对比:
用原始数据触发报警,3分钟报警2次;用滑动平均后,3小时才报警1次。稳定性提升90倍。

第三关:中值滤波,专治瞬态干扰

滑动平均有个致命缺陷——如果采样到一次脉冲干扰,它会“平均”进去。我遇到过设备停机的场景:焊机起弧时产生电磁干扰,数据瞬间跳变到300℃,滑动平均直接让它变成50℃的假值。
中值滤波上场:
// 中值滤波 (5点版本)
// 按冒泡排序取中值,只做一次数据采集
VAR
Sorted    : ARRAY[0..4] OF INT;
Temp      : INT;
j, k      : INT;
END_VAR
// 拷贝并排序
FOR j := 0 TO 4 DO
Sorted[j] := Buffer_Window[j];
END_FOR;
// 冒泡排序 (只排到中间点)
FOR j := 0 TO 2 DO   // 只需排3次,就能确定中值位置
FOR k := 0 TO 3-j DO
IF Sorted[k] > Sorted[k+1] THEN
Temp := Sorted[k];
Sorted[k] := Sorted[k+1];
Sorted[k+1] := Temp;
END_IF;
END_FOR;
END_FOR;
// 中值在索引2
Sensor_Median := Sorted[2];
你以为:
中值滤波计算量大。   
实际上:
对于每秒采集100次的传感器,5点中值只需要0.3ms计算时间(在iQ-R的DXCPU上)。你省下的处理时间多了去了。

第四关:状态机清洗——知道什么时候要丢弃

我见过最离谱的方案:不管设备是停机还是运行,统一用标准滤波。结果停机时的背景噪音,被当成有效数据,误触发报警。
真正的工程思维应该是——根据设备状态改变滤波策略。
// 基于状态的状态机滤波
// 状态: 0=停机, 1=启动, 2=运行, 3=停止中
CASE Machine_State OF
0:  // 停机状态:全部丢弃
Sensor_Final := 0;
Scan_Done   := FALSE;
1:  // 启动状态:用中值+长窗口
Sensor_Final := Sensor_Median;
Window_Size  := 16;  // 长窗口
Scan_Done    := FALSE;
2:  // 运行状态:用滑动平均+短窗口
Sensor_Final := Sensor_Avg;
Window_Size  := 4;   // 短窗口
Scan_Done    := TRUE;
3:  // 停止中:用滑动平均+极短窗口
Sensor_Final := Sensor_Avg;
Window_Size  := 2;
Scan_Done    := TRUE;
END_CASE;
知识点:
启动时为什么用长窗口?因为需要稳定。运行中用短窗口?因为要响应快。这是从邵雍“世、运、会、元”的层次思考模型里偷来的——不同层次用不同的数据处理策略。

第五关:数据质量标签——告诉你“这个数据有多靠谱”

最后一步不是输出数据,而是输出一个质量标签
// 数据质量评估
// 输出: Sensor_Quality (0=高, 1=中, 2=低, 3=失效)
IF (Deviation > 10) OR (Variance > 5) THEN
Sensor_Quality := 3;  // 失效
ELSIF (Deviation > 5) OR (Trend_Steepness > 2) THEN
Sensor_Quality := 2;  // 低品质
ELSIF (Deviation > 2) THEN
Sensor_Quality := 1;  // 中品质
ELSE
Sensor_Quality := 0;  // 高品质
END_IF;
当你把质量标签和数值一起送到云端,MES系统能智能选择:品质高时直接使用,品质低时标记为“需人工确认”。
这才叫边缘计算。

三要素,一个都不能少

我总结一下这套方案的铁三角:
1.硬件层: 三菱MELSEC iQ-R的DXCPU,多任务并行不卡顿。加一块SD卡做缓冲,断电不丢数据。2.软件层: ST语言写的五步滤波函数库,量程限-滑动平均-中值滤波-状态机-质量标签。可复用、可扩展。3.通信层: 用CC-Link IE TSN连接传感器,用SLMP/Socket发送给云端,每条数据都带时间戳和质量标签。
旧方案:
一个PLC直接读传感器,丢SCADA,不管死活。   
新方案:
传感器 → 五步清洗 → 质量打分 → 带标签发送 → 云端按需处理。

结尾:别让你的数据骗了你

写到这,想给你们3个能带走的观点:
1.数据不是金矿,是矿石。 你要筛掉99%的渣,才得到1%的真金。2.滤网是有层级的。 物理层洗噪音,统计层洗趋势,状态层洗场景。缺一级,后面全崩。3.质量标签比数值重要。 告诉系统“这个数据你信几成”,比强行修正它更安全。
最后,做个行动指令——今天下班去车间:
检查一个传感器的原始数据,看看它每天被过滤的次数。
用手算出它的一阶差分(变化率),如果超过设备物理极限的50%,那就是噪音。
把这段ST代码贴进去,看看报警次数降了多少。
不服?你测完告诉我,它降了多少?

推荐阅读
摘要:今天深入学习 OpenClaw 多智能体通讯机制,从会话管理到消息路由,完整理解了 Agent 之间如何高效协作。这套通讯架构是我们团队高效运转的基础!
发布于 202603
摘要:OpenClaw 记忆系统是 Agent 保持连续性的关键,从文件结构到自动更新机制,深入理解了如何防止 Agent"失忆"问题。这对我们团队的长期稳定运转至关重要!
发布于 202603
1 人管理 7 个 AI 员工——OpenClaw Agent 配置指南
发布于 202603
KEYWORDS
PLC, GX Works, MELSEC, 三菱
如果你觉得这篇文章有帮助,请点个在看,分享给更多需要的人!
关注我,获取更多实用干货~
有问题欢迎评论区留言交流!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码