上文说到发送指令(XMT)型同打乒乓球的发球,球由发球一方遵循比赛规则(通讯协议)发出去。如何检测发球是否按规则来发?是否已经发过了界等一系列问题,用什么方法来判断、界定?这样,就说到了串口调试软件“cktszs”(当然也可以用另一台plc的接收指令来确认,串口调试软件适用于单个PLC做通讯测试用),该软件安装后,插入USB转串口电缆(我这里使用的是深圳力特的那根转换电缆),打开软件,图示:
设置通讯口为COM3这个是我安装USB转换电缆时选择的端口,这个由黑色圈变红色亮圈,说明通讯口COM3设置正确,根据SMB30参数对应设置通讯参数,图示:
PPI电缆、USB转换电缆连接与200smart PLC集成的基于RS485端子,启动cpu运行,可以看到cpu向串口调试软件按每一秒/次的频率,发送字符“siemens”,图示:(这个测试程序是【说文1】编辑的)
看到这个由PLC发送过来的字符信息时,说明PLC程序及通讯电缆连接正常了的。 再写入一句“ni hao!”(你好)字符,让秒脉冲的上升沿发送“siemens”后,再由下降沿发送“ni hao!”这串字符试试,图示:
将程序下载到cpu中,看结果,图示:
在一片模糊的字符中终于仔细地找到了cpu发送过来的字符,见红色小框,图示:
既然说modbus通讯如同打乒乓球,那再来试试打几个“擦边球”试试球路如何? 先试把发送数据改为0,即VB0 = 0(VB20 = 0)下载到cpu中,看结果,图示:
串口调试助手接收区没有了字符,但发送完成中断仍然在工作,参见“状态图标”图示:
说明发送完成中断是在执行的,图示此刻的中断次数已经在510次发送完成中断了。但字符将不做发送任务。那设置VB0 = 大于7的数字的结果又将如何呢?假设设置为VB0 = 100,(VB20 = 100)图示:
中间会多出一些莫名其妙的字符或字符串出来,见上图红色框,说明发送指令的发送个数应根据实际的数据个数来确定。这个原因当然有很多,相信大家都能够看的出来问题的所在。 看来打擦边球是要给裁判处罚、没收发球权的,此路行不通!总结发送指令XMT:1) 发送指令TBL管脚最大字符数为255个,这个原因应该是这个管脚的数据类型是byte所规约的,发送指令的个数必须严格按实际个数填写,第一个储存区数据不参与通讯。2) 字符间的空格位同样占一个字符的储存区。3) PROT管脚只能填0或者1是PLC的通讯口地址硬件所决定了的。4) 通讯前需确定好双方的通讯参数协议内容必须是一致的,电缆连接是可靠的。5) 如果多个字符轮询发送,需要有字符间的开始和结束标志字符来区分,如空格符。这条仅仅对串口调试软件的显示部分而言,实际应用时因地址区的区分,不存在这个问题。发送指令XMT在整个通讯程序中的应用相对还是比较简单的,这如同打球,无论发出什么样的类型球,一旦发出去了,就要看接球方的判断和应变能力了。