在西门子315-2PN/DP与PC通讯的时候发现将通讯程序放在OB1中,如果通讯发送TSEND速率过快(比方10ms发送一次)或者外部干扰等原因会造成通讯程序TRCV接收位发生错位的情况,详细情况见图。
当前报头报尾以7B 7D来定义,如果考虑到外部干扰强制性以7B为首位接收字节如何进行设定,如果无法进行设定如何通过编写程序实现?
图片说明:
最佳答案
这个问题以前也遇到过,发生这种情况需要重启CPU比较麻烦,所以可以以下两种解决方案:
1、每次收到的数据首先校验DB块第一个字节是否是报文头,如果不是就丢弃让PC重发,或者尝试重新建立连接;
2、写个程序从接收DB块查找报文头在那个字节,从报文头所在的字节开始把数据取出放在另一个DB块中(比如你现在的程序接收字节数是13,假如接收的数据报文头在第5个字节,那么把接收的数据从第五个字节开始放在另一个DB块的第一个字节,以此类推,接收数据的第13个字节就应该存放到另一个DB块的第9个字节,接收DB块的第1个字节放在另一个DB块的第10个字节;……接收DB块的第4个字节放在另一个DB块的第13个字节)
提问者对于答案的评价:
重新建立链接倒是较为简单的方式
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc185140.html