最近接触了一款国产PLC用于项目,记录一下使用心得和经验供参考,文章附了程序实例,可下载使用AutoShop打开。
关键词:TCP、CMP、UDP、RS485、RS232、串口
先建立TCP通信:
TCP监听与建立连接程序,这是TCP的通信建立的重要环节。一个程序中可以设置多个TCP_Accept指令,从而实现同一本地端口与多台客户端建立通信连接。本机作为服务器端使用所以不用TCP_Connect指令。TCP具体的通信原理网上有很多讲解,可自行查询相关资料。
这款PLC的通信建议使用TCP,因为相对于UDP,TCP实际使用中更稳定易用。
TCP接收指令,想要PLC接受客户端的控制,这一步是必须建立的。在通信建立后,接收指令就会一直处于活跃状态,注意,这里的Socket是TCP_Accept指令的Socket。在一个程序中可以有多个TCP_Accept指令,连接不同TCP_Accept指令的Socket就可以监听接收不同的设备发来的数据。
为了实现上位机发指令控制IO口输出,需要对指令进行解析。
先将收到的数据用BMOV -16位一并转移指令存到一个备用Buffer里面。
再将收到的数据用CMP指令进行比对,数据对了就开启相应的IO口。CMP指令的用法需要注意:
比如我要开启Y1,那么需要TCP_RCVBUF[0]与IO_CMP1的值相同,这时候S41这个软元件才会置ON,而不是S40置ON。
动作后回传信息给上位机形成反馈闭环。
动作完成后要复位元件,不然会影响下一次动作。
这是将网口接收到的指令转发给串口,串口再发给设备,设备再返回数据的一组程序,原理和控制IO相似。串口指令的注意事项:RcvSize的大小需要严格按照接收数据的大小定义,如果接收的长度与定义不一致Status会报48错误,Done就不会输出,依靠此步骤的程序就不会执行,如图。
总结:PLC的网络稳定性还是不错的,但是串口功能不够强,不能实现一些复杂的数据传送,指令解析等操作。与单片机相比,灵活性不够,如果对通信灵活性有要求还是选择单片机开发比较妥当。