说说西门子200smart modbus自由口通讯的那些事6
上文说到采用起始符、结束符编写的简单自由口通讯的测试程序,并用串口调试软件监控程序运行情况。又一次联想起了乒乓球理论,就是打球时必须按比赛规则进行,不然将会受到处罚的。通讯的理论也一样需要主、从双方来遵守通讯协议,违背了协议规则,plc是不会按要求正确执行的。
假设,我简单地编一个通讯程序,仍然用起始符和结束符作为接收指令的判断条件。这次我用一个SM0.5秒脉冲同时触发发送指令XMT和接收指令RCV,结果又会如何呢?
程序:
主程序:


在数据块随便写入一串数据,图示:由VB1开始的一串数据5个。

编译、保存,并下载到plc,打开串口调试软件,在发送区编写:3A/11/12/13/14/15/0A数据,图示:

监控程序发现发送指令及接收指令有“红色”框显示,说明程序存在问题,图示:

出现发送、接收指令红色边框的原因:
1) 在调用发送指令未发送完成时,再次调用发送指令
2) 在调用接收指令未接收完成时,再次调用接收指令
3) 在调用发送指令未发送完成时,再次调用接收指令
4) 在调用接收指令未接收完成时,再次调用发送指令
根据报警可能的原因,调用发送或者接收指令只能是用沿触发;中断子程序中调用,且不允许同时多个指令触发调用。
检查这个报警信息的方法:
1) 点击工具栏中的PLC按钮
2) 在弹出的PLC信息窗口中点击cpu(CR60)标签
3) 查看错误信息:“在端口0中,同时执行XMT/RCV指令,在OB1的网络2中”,属于非致命性错误!

监控串口调试软件,能够发送和接收定义的数据,但数据存在可能的错误,图示:

由于指令调用时的错误,数据发生了回传错误。改为分别执行由上升沿和下降沿分别触发,结果会如何?重新编辑程序后,编译、保存下载到cpu并监控程序,图示:

数据被正确的回传了。

由于实际应用自由口通讯,难以避免接收到通讯线路的干扰、通讯连接的接触性问题及指令调用的合理性等问题,使发送或者接收的数据出错、程序进入死循环。这样,在实际应用自由口通讯时,需要具备一种检测手段,校验程序是检验数据出错其中的一种方法,一般常用的校验方式有CRC、LRC校验法。当接收到的数据出现错误时,通过校验来确认这串数据的正确性,如果出现错误,则拒绝接收错误信息,同时要求重新发送数据。另一种出错的原因是,当主站发送数据请求后,从站由于自身故障或通讯被迫中断,使主站在接收指令中出现程序回传的死循环,这就需要利用消息定时器强制接收指令的中断。连续、、、、、、