汇川PLC使用socket与其他控制器通讯的完整示例
汇川PLC使用socket与其他控制器通讯的完整示例
本文主要介绍汇川PLC使用socket通讯的详细步骤和示例代码,包括环境配置、具体指令的使用方法等。文章内容较为专业,主要面向有一定PLC编程基础的技术人员。
环境配置
系统:Windows 10
平台:汇川PLC编程软件autoshop
PLC型号:Eazy521
PLC编程语言:梯形图
汇川PLC socket通讯程序示例
1. 监听(TCP_Listen)
汇川PLC提供整套socket通讯的指令,包括ModbusTCP、TCP、UDP三种协议,其中TCP又包括服务端、客户端指令。本文仅以PLC作为服务端示例。
socket通讯,作为服务端,首先需要进行监听,汇川PLC中,使用TCP_Listen指令。
图中指令的变量,我们需要提前创建好,我们可以新建一个全局变量:
此处,为了方便调用,我们可以使用结构体,如listen指令块的相应变量,我们创建一个ListenCMD结构体:
监听的端口号,根据实际需求来设置,如果有触摸屏,可以添加到触摸屏上,自定义修改。
2. 接受客户端(TCP_Accept)
在FC中添加TCP_Accept指令块:
新建一个AcceptCMD结构体,与ListenCMD结构体类似,不再赘述。
查看以上两个指令,会发现出现了两个socket实例,socekt_server和socket_client。这两个实例数组是用于存储当前建立的服务端,以及接受的客户端的实例的数据:
但autoshop中,暂时还不支持自定义socket实例相关变量,因此,如果在autoshop中创建socket实例数组,使用INT[20]数组代替。所以,我们也需要创建两个INT[20]数组,用于表示serversocket实例与clientsocket实例,当然,如果你有多个客户端连接,那么就需要创建多个对应的客户端实例。
3. 关闭连接(TCP_Close)
socket连接可以主动关闭,但是需要注意,在汇川PLC中,如果要关闭连接,最好是将服务端与客户端的实例一起关闭。
我们同样创建CloseCMD结构体,然后在FC块中添加TCP_Close指令:
此处因为我们要同时关闭服务端与客户端实例,所以调用了两次TCP_Close指令。需要注意的是,两个close指令块对应的socket实例应该是不同的。
4. 发送数据(TCP_Send)
可以看到,理论上发送的最大数据长度为32767字节,而且要注意,发送长度不能大于数据缓存区即Buffer的数组的大小。
但一般来说,在PLC中进行的数据通讯,不会用到这么多,通常PLC用于工业现场的数据收集,大多是开关量数据,或者一些模拟量仪表数据,这么大的数据长度是肯定够用的。
同样的,我们创建SendCMD结构体,并在FC块中添加TCP_Send指令:
如上图,此处我们使用了定时器来模拟定时发送数据(M8013,1s脉冲),但是通常实际工况中,数据发送的触发条件与现场工艺或者其他因素有关,是有条件触发,这个可以根据实际情况,调整触发时机。
有个需要注意的点是,实际使用时,发送数据长度需要与客户端的控制器的设置匹配,如果双方设置不同,可能会造成发送接收不一样,引起不必要的误差。不过,通常如果工业现场进行通讯,肯定是设备双方提前进行沟通,数据协议也是提前定好的,应该不会存在这方面的失误,此处权作为一个提醒。
5. 接受数据(TCP_Receive)
接收指令块与发送指令块的结构基本上是一样的,一个小小的区别是,二者的预设数据长度的取值范围稍有差别,发送数据的预设值可以为0(为0时,发送数据以字符串格式进行),而接收数据时,其预设长度的范围是1-32767,如果设置为0,指令块会报错。
我们新建一个RecvCMD结构体,然后在FC块中添加TCP_Receive指令:
对于接收到的数据的处理,则根据自己需要,原则上,通过socket发送和接收的底层数据,是字节数组。可以转为PLC中的任意类型,如int、dint、real等。
总结
以上介绍了汇川PLC通用socket通讯的示例,事实上,汇川的官方手册也有使用示例,可以直接仿照使用,也可以加以修改。
如需源码的朋友,可以在此链接下载:
https://download.csdn.net/download/normer123456/90343690