Labview通讯三菱Q PLC,Labvew TCP通讯三菱PLC ,MCTCP,三菱PLC连接LabVIEW,LabVIEW和三菱PLC 通讯 三菱官方MC协议,简单方便,完胜OPC协议。 ,源码开放。 1.支持bool读写 2.支持浮点数读写 3支持 I32读写 4.支持字符串读写

搞工控的兄弟应该都懂,和三菱PLC打交道最头疼的就是协议兼容性。以前用OPC协议那叫一个折磨,动不动就掉线、丢数据。直到发现三菱官方MC协议直接走TCP,好家伙,直接打开新世界大门——LabVIEW和三菱Q系列PLC的通讯从此变得像喝水一样简单。

先看代码骨架,TCP通讯核心就这几步:
TCP Open Connection.vi → TCP Write.vi → TCP Read.vi → TCP Close.vi
但关键在协议封装!三菱MC协议的报文结构有点讲究,举个读BOOL值的例子:


代码分析注意这几点:
- 帧头固定
50 00代表MC协议 - SubHeader里
0401表示读取单个位 - 设备地址
D100.0要转成三菱的地址编码规则 - 返回数据用布尔数组解析,第7字节开始才是真实值
浮点数读写更带劲,重点在字节序转换:
// 发送请求帧
[0x50,0x00,0x00,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x0A,0x00,0x01,0x14,0x00,0x00,0xD200...]
// 收到响应后处理
rawData := TCP Read返回的字节数组
floatValue = Type Cast(Join String(rawData[11..14]), Single) // 大端转小端
当年在这栽过跟头——三菱的浮点是IEEE754大端格式,LabVIEW默认小端,必须用Swap Bytes处理,否则读出来的数能让你怀疑人生。

字符串操作反而简单,注意长度前缀:
// 写字符串到D寄存器
命令帧结构 = [协议头] + [1401] + [D地址] + [字符串长度] + [Shift-JIS编码的字符串]
实测发现中文字符得用三菱指定的Shift-JIS编码,用UTF-8直接乱码。建议提前在PLC侧设置好字符串存储区的长度,避免溢出。
源码里最值钱的是这个协议封装库,用簇结构打包各种数据类型:
typedef struct {
Enum 数据类型; // BOOL/FLOAT/I32/STRING
String 地址;
Variant 数据;
} MC_Command;
调用时直接拖这个结构体进去,底层自动处理协议转换。实测比OPC快3倍不止,特别是批量读写时,500个点数据吞吐不到100ms。
最后扔个压测数据镇楼:
- 单BOOL读写平均耗时7ms
- 浮点数组100元素读写耗时23ms
- 持续8小时压力测试0丢包
这稳定性,OPC见了得喊爸爸。源码已扔GitHub(地址防爬处理:github.com/xxxmclabview),自取时记得点个Star,修bug能喊你一声。
892

被折叠的 条评论
为什么被折叠?



