LG的PLC虽然用得不多,但是从介绍来看,通信方面做的还算不错,很适合我们的一个控制类的CASE。买PLC的时候卖方送给我们几个册子,里面讲了些通信方面的东西,告诉了PLC和控制端的接线方式,通信协议等。册子上说的有点杂,我们最终看的还是附送的光盘中的文档。
要通过通信方式远程控制PLC,首先要打开PLC的CNET模式,然后按照文档中的说明将PLC和控制端通过串口(由于我们的通信方式采用的是串口方式,并且中间加了电气隔离)连接起来。打开串口调试助手,按照文档中的说明给PLC发送相应的控制指令数据包就可以了,这个实验过是没有问题的。
但是在我们的系统中存在一个问题,我们的控制终端是之前已经成型的,主控器采用的是计算机,通过串口实现一对多的通信。就是说原来的控制系统中存在一套完整的通信协议。这套协议是固定的、成熟的,不允许更改。但是PLC的通信协议和原系统上的通信协议完全不一样,而且当PLC收到一个错误包时都会回送出错信息数据,这一点很是麻烦,当向其他的控制终端发送数据的时候,PLC可能会回送一些错误信息等,导致通信线路冲突,计算机不能够接受到正确的应答包。这一点是必须要克服的,看了文档后,只能采用PLC的自定义通信协议了,可是文档介绍的比较简单,也只给了个很简单的例子。
以前根本没接触过PLC,只能硬着头皮上了,首先把文档上的例子跑通,这个比较简单,调试通过了后就要根据自己的协议要改了。开始不了解,卡在这个地方,花了不少时间。最后想到一个方法就是让PLC把我设定的数据包格式定时的发送出来,观看数据报格式,达到要求后再设定接收数据包的格式。通过这种方法我们建立了基本上一样的通信协议,因为PLC的数据包的报头包含一个字节的数据不能去除,不过在整个数据串的开头,不影响整个的通信协议处理,另外PLC的校验位和结束位也和原来的系统有点不同,这个虽然不影响其他的控制终端,但是必须针对PLC单独写上位机的协议处理程序,这个还不算麻烦。
最终我们达到了我们自己的要求,PLC的程序异常简单,因为需要控制的东西非常简单,逻辑图如下:
通信口的设置如下: