| 作者 | 主题 |
|---|---|
|
WWCWWC 至圣
经验值:79175 发帖数:9105 精华帖:157 |
楼主
主题:说说西门子200smart modbus自由口通讯的那些事8
说说西门子200smart modbus自由口通讯的那些事8 最近,在整理文档资料时,发现之前在网上下载的网友自由口通讯的程序【一个简单实用的通讯程序】发帖时间:2009-12-24 21:31:22,于是拿来下载到cpu中进行了实验,用串口调试软件验证了一个小“问题”(仅仅是没有与plc同步时间的问题)。 网友采用的是定时中断SMB34,150mS后启动发送指令XMT。将数据VB100 16#8( 16#12 16#03 16#00 16#0A 16#00 16#02 16#E6 16#AA)发送出去,发送完成后进入接收指令,接收指令规定时间为250mS之内(相当于消息定时器SMW92),中断定时250mS时间到再返回到发送指令,仍然把上述数据再次发送出去,如此循环。 那位热心的网友还用图片加以说明通讯过程,图示:摘自网友文档图片,通讯程序大家可以自行下载验证,在此感谢那位热心的网友提供了一次加深影响的学习机会。 如果仅仅按上图plc发送数据是没有问题的,但串口调试软件没有建立起与cpu时间同步的功能,大家知道自由口通讯是基于半双工通讯模式,即通讯线路上只能存在一种通讯模式的,要么是发送指令;要么是接收指令,当某一时刻同时存在2种及以上指令时,发送或者接收的字符将会出错。下面我先关闭串口调试软件的发送命令,看接收区字符,图示:显示正常的字符 但,当我激活发送指令时,看串口调试软件的接收区字符,图示:按10mS自动发送模式 与上图比较,明显的出现了若干的错误字符,原因当然大家都知道是由于串口调试软件在plc实现发送指令期间,串口调试软件在同一时刻也发送了字符,plc和串口调试软件同时发送字符。无论修改串口调试软件的发送时间,结果仅仅是出错的概率问题。图示: 将串口调试软件自动发送时间修改为1000mS时,某一段时间中仅仅出现2次错误。 该现象是采用串口调试软件自动发送时,无法避免的一些缺陷,当然也与plc的通讯参数SMB87设置选择有关。如果串口调试软件能够感知到plc信息发送完成,再进入发送指令那就不存在类似的问题了。 反之,plc接收字符指令改为串口调试软件发送信息标志位后,再进行接收就没有类似的问题了。如何定义串口调试软件发送信息结束呢?回答应该是可以的。假设,plc的发送数据前必须是接收到串口调试软件发送过来结束符以后才发送数据,状态字节SMB86,同时,plc判断串口调试软件的字符串结束符应该是“S”这个字符。这样,反过来需要重新修改plc的接收信息控制字节SMB87了。连续、、、、、、 |