| 作者 | 主题 |
|---|---|
|
WWCWWC 至圣
经验值:79646 发帖数:9206 精华帖:158 |
楼主
主题:说说西门子200smart modbus自由口通讯的那些事6
说说西门子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校验法。当接收到的数据出现错误时,通过校验来确认这串数据的正确性,如果出现错误,则拒绝接收错误信息,同时要求重新发送数据。另一种出错的原因是,当主站发送数据请求后,从站由于自身故障或通讯被迫中断,使主站在接收指令中出现程序回传的死循环,这就需要利用消息定时器强制接收指令的中断。连续、、、、、、 |