有一300PLC控制氨冷机,其中有一块CP341卡与DCS进行通讯(DCS侧为master),可能当时厂家是为了节省费用还是怎么,CP341是采用ASCII通讯,无dongle。
但是使用以来通讯一直存在问题,时好时断,DCS侧报CRC校验错,然后拿电脑连PLC发现一会儿cpu的SF灯就亮,在线诊断缓冲区显示读取全局DB时地址出错(#2522),
在线删除OB121让cpu停机后,查堆栈发现是在处理FC80,读取DB14时出错,这时open block定位到一段CRC校验程序去,因为刚诊断缓冲区地址是770,怀疑是定位到的这段程序中MW250给AR1然后指针寻址时出错,所以监视MW250这时显示MW250=6160,770 SLD3后刚好为6160,所以无疑错误出在这一处,
但是这段CRC指令表程序有点看不懂,所以一并也把程序附上来,还请大家帮忙分析下,错误是怎么产生的?这段指令表程序有没有错?谢谢!
所有图片如附图所示!
程序上传不了啊,程序放在百度网盘,麻烦各位下载下,帮忙分析下为何出错,谢谢了!
链接:https://pan.baidu.com/s/1hMZUcCr_JAaG-dwXo57D6A
提取码:yc59
图片说明:
最佳答案
参考下述论文中处理CRC的方法:
、《基于cp341的modbusrtu通信的设计与实现.pdf》:
该方案基于S7 - 300 PLC CP341 串口. 通信模块的ASCII 通信方式,下载:
http://www.gkzdh.cn/PdfDownload.aspx?ArticleID=671
提问者对于答案的评价:
阿鸣大师,请问用查表法计算CRC16校验码时,对取出的字节内容(比如说0X02)需要先做什么处理吗?像程序中先与B#16#FF异或,然后再*2,后面才形成指针去块里面取对应的CRC码?谢谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc284446.html