C++ 西门子PLC数据监控

背景

与西门子PLC通讯,snap7
绘图,qucustomplot
程序UI框架,qt6
使用visual 2022编译,因为qt6的原因,只能在win10上运行。使用VxKex神器有时候不灵。

场景

南山铝业航材生产线,主要是西门子300、400的PLC。因此本程序主要测试了NetToPLsim连接模拟。
有两台拉伸机设备配备了ibaPDA,带的加密狗,C#写的很流畅。它与西门子PLC通讯,UI界面买的是商业库,确实强。
当前6.x的版本,它是连续采集,分析数据需要先确定时间范围,选用文件存储则要装载连续的文件。
可以使用数据库存储,需要增加授权。

特点

  1. 数据库
    TDengine不错,但是开源版只能运行于linux,win10开了wsl跑docker也可以,就是16G内存紧张。

    所以后来又加了questDB,速度确实没有前者快。
    在win10下把questDB安装成服务,通过http://127.0.0.1:9000访问仪表盘。

  2. qt6使用高精度定时器,采集0.5s PWM波宽度不均匀,我看ibaPDA波形也不好。原因应该是win系统不是实时的,定时器根本上不准。

  3. 采用task方式触发数据采集,PLC提供DB的交换区,但是当前状态,程序不修改PLC数据。所以又任务执行日志。

  4. 可以导入step7/博途的地址簿,博途测试过的版本是V13和V16 .博途非常混乱,有可能其他版本不正确。

  5. 可以调用python脚本分析数据,因为python库丰富。

软件流程简单,定义信号->从PLC采集->存储->回放数据。没有实现FFT变换等数据分析。

屏幕快照

  • 主界面,多Y轴,共享X轴,不会legend分组和legend拖动调顺序,改用拖动Y轴调曲线顺序。
  • 选了两个时序数据库,TDengine保留数据时间可以配置。
  • 任务触发是从容克的报告程序学习得来,它是炉内不为空时才采集温度,可以减少数据库空间占用。
  • 信号选择、定义,地址簿尚没有搜索
  • 地址簿导入
    问智谱就是手动导出再人工导入。好在glm5.1强大,使用nvidia的旅游api熬出来了。
  • 任务日志,就是一个简单的master/detail表。

写在最后

  • opencode 还是很好用的,给我这半吊子程序员节省了很多力气。
  • 大佬黄仁勋说的对:

英语专业的学生可能会是最成功的那批人,英语专业将血洗计算机,文科将成为AI时代的新贵族。
当前AI技术发展已实现重大突破,底层操作不再依赖复杂代码指令,自然语言已成为操控AI的核心方式。

本地使用llama.cpp,好处是可以向不同的模型去问同一个问题。deepseek的网页版经常应付了事,反而glm5要负责任。
免费的没法苛求。