Labview 与汇川AM400 AM600 AM800 AC800 PLC 通讯 官方协议,报文读取,安全稳定。 通讯配置,辅助测试。 无程序网络通讯实现。 常用功能一网打尽。 1.命令帧读写。 2.支持 I16 I32 Float 批量读写。 3.支持字符串读写。 4.支持Bool批量读写。 5.支持Q单点读写。 程序源码,命令帧文本编写,不调用dll,不安装插件,完胜OPC 等。
最近在工业自动化项目里倒腾LabVIEW和汇川AM系列PLC通讯,发现市面上的方案不是要装插件就是要买授权库,实在忍不了这种绑架式开发。咱们直接掏出TCP/IP协议搞报文交互,实测AM400到AM800全系通用,这才是工程师该有的姿势。
先甩个通讯配置的硬核操作:
TCP创建侦听器 -> 设置超时(2000ms) -> TCP打开连接 -> 写入握手报文重点在握手报文得按汇川的规矩来,十六进制格式的魔数头不能错:
0x4C4D5F5F(ASCII码是LM)后面跟着两字节的协议版本号,AM800用0x0103版本。记得用强制类型转换处理字节序,别被大小端坑了。
读32位浮点数的命令帧长这样:
LM__0103RDDM4.100.10拆解这个字符串:R表示读取,D表示双字,DM4是数据区地址,100是起始地址,10是读取个数。LabVIEW里用字符串拼接生成命令帧时,记得地址要转成PLC认的格式,比如DM1000要写成DM4.1000(前边4代表双字区域)
处理返回数据的时候得注意报文结构:
TCP读取 -> 取第7字节开始的有效数据 -> 按I32数组转换这里有个坑点:返回的每个数据项占4字节,前两字节是序号,后两才是实际数值。用分割数组+类型强转才能准确解析,别直接用字符串转数值!
Labview 与汇川AM400 AM600 AM800 AC800 PLC 通讯 官方协议,报文读取,安全稳定。 通讯配置,辅助测试。 无程序网络通讯实现。 常用功能一网打尽。 1.命令帧读写。 2.支持 I16 I32 Float 批量读写。 3.支持字符串读写。 4.支持Bool批量读写。 5.支持Q单点读写。 程序源码,命令帧文本编写,不调用dll,不安装插件,完胜OPC 等。
写布尔量批量操作更刺激,命令帧里每个bit对应一个点位:
"LM__0103WX0.10.2" //写X0开始的2个布尔量 数据部分转成字节:0x03(二进制00000011)这表示X0=ON,X1=ON,其他位保持原状。LabVIEW处理时要玩位运算,把布尔数组压成字节流,实测过同时写256个点只需31毫秒。
字符串读写需要处理变长问题,命令帧里带长度标识:
"LM__0103RDS4.100.20" //读20个字符 返回数据前两字节是实际长度,后面跟着UTF8编码的内容建议用平铺字符串处理,避免编码转换时的乱码问题。注意汇川的字符串存储是预分配空间的,超过定义长度会截断。
最骚的操作是直接读写Q点,不用经过中间寄存器:
"LM__0103WQ0.5.1" //写Q0.5单点 数据部分直接给0x01或0x00配合LabVIEW的事件结构,做HMI画面简直不要太爽。实测这种直连方式比OPC快3倍以上,特别是多标签同步刷新时优势明显。
源码里最关键的是报文校验算法,别用常见的CRC16,汇川用的是累加和校验:
字节数组逐字节相加 -> 取低16位 -> 转十六进制字符串补零这步要是错了,PLC直接不搭理你。建议封装成子VI反复验证,曾经因为校验位少个零折腾了一下午...
项目实测这套方案连续运行72小时无丢包,关键是在VI里加了心跳检测机制。每5秒发个空包探测连接,配合错误队列处理重连,比那些靠GUI设置重试次数的方案靠谱多了。代码仓库里已经扔了封装好的AM系列驱动VI,拿走不谢。