在自由口通信中如何实现从站恢复后自动连接
今天我们谈一谈在自由口通信中如何实现从站重新恢复后PLC主动与从站建立连接的一个过程。
前几天有个朋友做了一个S7-200的PLC与仪表的自由口通信程序读取仪表数据的程序,程序编好调试好后可以正常读取仪表的数据,但出现一个这样的情况,只要仪表断电或是通信线断开后重新连接上后PLC就不能正常读取到仪表的数据了,必须把PLC的拨码开关拨到STOP模式后再重新拨回到RUN模式或是对PLC重新上电后才可以与仪表建立连接,问需要如何解决这个问题。
问题分析:
需要解决这个问题,首先要了解清楚为什么会出现这个问题,然后才能够根据这个问题去解决,PLC的自由口通信使用的是半双工通信,也就是说PLC中的发送和接收过程不是同时进行的,PLC先发送数据给仪表,然后等待仪表数据的回传,因此PLC在数据发送完成后,需要切换为接收的状态去接收数据,PLC接收到仪表回传的数据完户,又会切换到发送状态给仪表发送数据,这样周而复始的进行,但是从站断电或是通信线断开后,PLC发送数据出去后,仪表接收不到PLC发过来的数据,而PLC发送完数据后又会自动的转到接收状态去接收数据,此时由于从站断线接收不到PLC发过来的数据,也就不会给PLC回传数据,那么PLC就一直处于接收状态。当从站恢复了连接,PLC处于接收状态也无法向从站发送数据,从站接收不到PLC发过来的数据也就不会向PLC回传数据,所以此时就算你从站恢复了连接,PLC也无法读取到数据了。若PLC上电或是从 把拨码开拨回到RUN后,PLC会重新给仪表发一次数据,此时正常的话才可以接收到数据。
问题解决:
要解决此问题的思路是这样的,首先我们要让PLC判断,在发送出去数据后开始做延时,如果超过这个时间后不能接收到数据的话PLC就需要关断接收功能,然后重新启用发送功能发送一次数据,另外可以设定重试次数,必然说重试三次后,还是不能够接收到数据,则可以报警,说明从站丢失。
如何关断接收功能:
接收的控制字节SMB87/SMB187的最高位用于启用接收功能或是禁止接收功能,当把该位设置为0时则表示的是禁止接收功能,因此只需要把该位设置为1,然后重新激活一次接收指令就可以禁止接收功能,接收功能禁止后,在重新启用发送功能发送一次数据。
程序如下所示:
发送完成中断程:
接收完成中断程序:
从站断开处理子程序:
程序并不是一个完整的程序,仅供参考,如有不对之处,望指正,谢谢......