作者 | 主题 |
---|---|
荧惑mars 侠士 ![]() ![]() 经验值:1423 发帖数:157 精华帖:6 |
楼主
![]() 主题:1200和温控器通过透传网关modbus tcp按寄存器地址逐条读写 ![]() 背景: 山武、欧陆等温控器,寄存器地址很多,但实际需要呈现在HMI上的只是一小部分,所以需要挑挑拣拣,选择需要的,那么避免不了存在寄存器地址不连续的情况。 备注:当然,可以放在HMI/wincc上直接读取,但放在PLC里读取,更利于做自动程序/一键启停/自动流程等等。 本帖所涉及的硬件型号如下: PLC:1214C;温控器:山武C36+宇电;透传网关:有人USR-N540。 初衷:由于合同要求HMI上需要PID参数和若干上下限等参数开放设定框给甲方,但平时我们又不需要实时读取,所以,本帖程序也做了一个类似于“监听”的功能,数组遍历对比,不一致,即先写入后读取。 未完成功能:本帖一个TCP端口对应一个程序,并未考虑一个端口下挂多个仪表的情况,请提前悉知。但有保留MB_Unit_ID接口,方便本人以后再次开发用,以及对应不同仪表不同从站地址用。 本体仅为modbus tcp client的程序,UDP本人也在考虑,但目前还在应付无休止的项目。 以下为本帖内容:(特别提醒,本人技术有限,欢迎对程序内容和立意等表达评头论足) 输入输出+静态变量接口 程序内容文本如下:
简单介绍下程序内容: 初始化需要去做读写的寄存器数量,初始化比对数组。 实时比对静态变量里保存的数值和写入的数值。 从站地址赋值;给予轮询30ms触发延迟。 以上是读写,寄存器地址赋值、长度赋值、modbus tcp client 缓存区数据转存+清空,以及客户端触发的置位+复位。 以下挑几个UDT的截图,大同小异。 每次只需要在UDT里填入寄存器地址即可,通过Excel整理modbus仪表地址的对应关系,按列复制即可。 这是我自己用的excel模板,以wincc导出的变量表为基础改的。 温控器的数值在读取和写入,需要做小数点的换算,大家都知道的,INT/WORD么。 最后呈现的就是如此,read数组实时读取,不停。parameter和write在初始化读取,值改变,PLC才会写入或读取。 DB块里的最后呈现。 这是配置的UDT,包含是否连接、IP地址端口、寄存器地址、是否需要比例换算等。 DB块里呈现。 最后呈现在梯形图上就是如此。 写这个参数的参考案例如下: S7-1200Modbus TCP通信 (siemens.com.cn) 【开源】Modbus设备的单FB封装和多设备平行调用的通用架构 ------ 一个温控器案例的完整项目文件-技术论坛-工业支持中心-西门子(中国)有限公司(SLC) (siemens.com.cn) 不使用UDT的设备FB封装---ModbusRTU通信的温控器的例子-技术论坛-工业支持中心-西门子(中国)有限公司(SLC) (siemens.com.cn) 用自由口通信制作的ModbusRTU协议的Master指令的SCL源码-技术论坛-工业支持中心-西门子(中国)有限公司(SLC) (siemens.com.cn) 通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码-技术论坛-工业支持中心-西门子(中国)有限公司(SLC) (siemens.com.cn) 擅用博图中的Trace功能-技术论坛-工业支持中心-西门子(中国)有限公司(SLC) (siemens.com.cn) Modbus设备FB接口设计背后的理念-技术论坛-工业支持中心-西门子(中国)有限公司(SLC) (siemens.com.cn) 写在最后: 我的自动化的行业相关知识80%来源于互联网; 技术有限,欢迎斧正,谢谢。
活到老,学到老。
|