对于每个跟控制器交换信息的设备,都需要了解它的通信协议,非EtherNet/IP的设备通常是不使用预定性连接来交换信息的。常遇到的如Modbus TCP/IP、条码扫描仪、RFID阅读器,则由一个执行堆栈服务的界面来实现信息交流,这就是控制器中的MSG指令来完成的。
指令的执行在控制器实施以下操作:
●打开连接。
●接收Incoming连接。
●送出数据。
●接收数据。
控制器支持最多32个堆栈,且必须是如下类型之一:
●UDP堆栈:送出或接收UDP数据块。
●TCP客户端堆栈:编程初始化连接。
●TCP服务器堆栈:其他设备初始化连接。
●TCP旁听堆栈:在指定端口上的旁听Incoming连接数目。
UDP和TCP的送出和接收服务见表3-1。
表3-1 UDP和TCP服务
每一个TCP端口接收连接必须有一个旁听堆栈。如果在同一个端口有多个TCP服务堆栈连接,则能够共享一个旁听堆栈。
在UDP和TCP的堆栈之间,可以分隔可用的Socket Instances,有如下方法:
●为客户端TCP连接使用所有的Instance。
●为Incoming TCP连接使用一个Instance,且从其他设备接收保持的连接。
●完成TCP客户端和服务器的两种操作。
●完成TCP和UDP的两种操作。
可用的Instance见表3-2。
表3-2 可用的Instance
(续)
图3-156 创建新的结构类型
一旦在客户端的Socket Instance上打开连接,则不能使用相同的Socket Instance接收In-coming连接,同样地,如果在Socket In-stance上接收连接,不能用Instance打开Outgoing连接。这样的运行方式与标准堆栈API是一致的。
在CompactLogix 5370控制器程序中,用MSG指令的CIP Generic方式请求堆栈服务。
下面用一个打开连接的实例,来说明堆栈的操作是如何通过MSG指令的执行来实现的。(www.daowen.com)
首先,在用户自定义数据结构,创建堆栈打开连接参数的结构数据,如图3-156所示。
结构说明如下:
●Timeout:双整字类型,指定超时
时间,单位毫秒。
●DestAddr:字符串类型,指定字
符数组(最大64),定义连接的
目标地址。指定如下之一:
—Hostname?port=xxxzaz
—IPAddr?port=xxx
例如,指定IP地址,键入10.88.81.10?port=2813。
●.LEN:双整字类型,目标地址的长度。
●.DATA:短整数数组,包含目标地址的数组。
在控制器区域数据库,创建数据结构为SockOpenParameters的新标签,如图3-157所示。
单击创建标签完成。
图3-157 创建新标签
在梯形图的例程中编写MSG指令梯级逻辑,如图3-158所示。
图3-158 编写MSG指令
单击进入MSG指令组态,组态信息如图3-159所示。
这是一条服务性指令,选定服务类型后,服务代码被指定,对应的In-stance,根据对应服务的类型来设定,一般要查证资料。选择刚才创建的SockOpenParameters标签作为数据源以及说明数据的字节长度。本操作没有目标数据。
单击Communication进入通信路径组态页面,如图3-160所示。
图3-159 MSG组态
图3-160 MSG指令通信路径组态
MSG指令的传送路径不同于其他的控制器,因为它是送给自己的,所以路径书写固定的为“1,0”,无论控制器位于哪一个槽。
MSG指令选择必须是非连接的,因为端口的Incoming的资源是十分有限的,一旦数据传送完毕,应该及时释放,留给其他的数据传送使用。所以此选项一定要清除勾选,如图3-160中所示。
最后,在例程运行的梯级逻辑中,执行这条MSG指令,完成堆栈连接的打开。这条指令的执行,打开了堆栈的连接,面对一台设备交换数据(读/写)的过程,需要执行多条MSG指令才能完成,MSG指令的编写都是类似的,这里就不再重复。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。