西门子S7-200smart modbus自由口通讯连载2

上文说到发送指令(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在整个通讯程序中的应用相对还是比较简单的,这如同打球,无论发出什么样的类型球,一旦发出去了,就要看接球方的判断和应变能力了。