前言: 在给很多朋友上远程培训课讲解MSG指令时,虽然有2台实体控制器进行联网通信演示,但是学习的朋友,很多没有实体PLC在手上,于是提出问题,能否通过仿真软件来练习MSG指令?另外,还有提出MSG指令是否支持UDT数据类型?那么,今天这篇文章就这两个问题给出明确的答复。
01
测试环境
1. 操作系统:Windows 7 旗舰版 SP1 64位
2. 编程软件:Studio 5000 V32.00.00中文版
3. 仿真软件:Studio 5000 Logix Emulate V32
02
答复提问
1. MSG指令是可以仿真软件来模拟多个PLC之间进行数据交互,理论支持来源手册上关于通信路径的描述,其中一条:基于背板的通信.
2. MSG指令支持的数据类型除了通用的SINT、INT、DINT、REAL单个标签或数组,另外,我还是在英文手册《1756-pm012_-en-p》的角落里面找到了用户自定义数据类型,即UDT。感慨,还是原版英文手册完整啊.
3. MSG指令使用用户自定义数据类型(UDT)有什么好处呢,可以将很多数据类型整合在一起,并命名以可读性强的标签,另外,可以最大程度的减少MSG连接数,以及节省控制器处理资源.
03
实现方法
1. 打开仿真软件Studio 5000 Logix Emulate V32.00.00,分别在2号槽、10号槽添加仿真控制器Emulate 5570 Controller.
2. 打开V32.00.00中文版本Stduio 5000软件,创建一个仿真CPU,设置在2号槽,命名为em_MSG_Send,作为MSG发送数据的一端,并创建用户自定义数据类型UDT_Comm_Data,其中整合了BOOL、DINT、REAL[5]数据类型,详见下图.
3. 在《em_MSG_Send》控制器标签里面, 创建2个标签: Comm_Data_Send,数据类型为UDT_Comm_Data; MSG_Send,数据类型为MESSAGE.
4. 直接在主例程中编写MSG指令,其中MSG设置:
-
配置
消息类型:CIP数据表写
源元素:Comm_Data_Send
元素数:1
目标元素:Comm_Data_Receive
-
通信
路径:1,10
说明:1--代表背板;10--通信伙伴控制器所在的槽号;中间为英文逗号.
5. 由于双方使用MSG指令交互数据,其数据类型必须一致,故可以将UDT数据类型导出,在接收端将其导入,避免重复创建,提供编程效率.
6. 再次打开Studio 5000软件,创建一个仿真控制器,放置在10号槽,命名为em_MSG_Receive,作为数据接收端,导入UDT_Comm_Data数据类型,并在控制器标签里创建2个标签:Comm_Data_Receive,数据类型为UDT_Comm_Data;MSG_Receive,数据类型为MESSAGE.
7. 在《em_MSG_Receive》项目中编写MSG指令,其中MSG设置:
-
配置
消息类型:CIP数据表读
源元素:Comm_Data_Send
元素数:1
目标元素:Comm_Data_Receive
-
通信
路径:1,2
说明:1--代表背板;2--通信伙伴控制器所在的槽号;中间为英文逗号.
8. 通信测试:分别将2个项目程序下载,控制器运行起来并在线,在发送端《em_MSG_Send》的Comm_Data_Send键入一些数值,在接收端《em_MSG_Receive》的Comm_Data_Receive即可接收到这些数据.
9. 本文的案例MSG只交换了一个UDT数据,其实MSG指令也是支持UDT数组交换的,感兴趣的朋友,可自行测试. 结语: 综上所述,本文补充了MSG指令的用法,针对硬件条件有限的朋友,可以通过仿真软件来模拟MSG指令交换数据,加深学习效果。另外,也特别介绍了MSG如何实现UDT数据交互,虽然本文是仿真的,但同样适用于实体控制器,这种方法,增强了数据交互的灵活性、可读性、高效性。
【AB PLC工作室】
微信公众号ID:abseme
坚持原创 注重实用
如果本文,对您有一点帮助或启示。
请分享给更多的朋友,对小编以示鼓励,谢谢!