回复:我想修正一下一个公认的概念。我有新的解释。

yanxiao

版主

  • 帖子

    12173
  • 精华

    47
  • 被关注

    188

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2016-10-17 00:09:52

25楼

展开查看
以下是引用WWCWWC在2016-10-15 09:25:02的发言 >13楼

小结一下:主站读、写请求指令MSG的其中一些特性

1)modbus通讯是串口异步通信的其中一种方式,主站请求指令MSG工作于程序的异步状态,当指令完成后,DONE位为1,并保持,直到指令触发被取消止。

2)该指令(MSG)的ERROR端子出现数字6,说明在同一个程序的扫描周期出现了2个或2个以上的MSG指令被同时激活的现象,而第二个被同时激活的指令将被终止指令的执行。(指令还包含其它故障信息)

3)MSG指令的执行时间是根据通讯频率,通讯数量,程序结构,外部硬件条件所决定的,一般一个字节在9600波特率下大概需要3mS多左右时间。

4)通讯最大“字”数为120个,当进行以“位”为单位传输时,必须确保为字节是最小单位。

第二点是这次讨论的主题,有楼主点了这个题,大家来讨论关于同一个周期触发2个以上的MSG指令的具体含义。即如何界定为同一个时刻。

以下是我个人的观点:

    所谓同一个时刻触发2个以上的MSG指令,指在“同一个扫描周期内”有效了2个或2个以上的MSG指令。其目的是规避串口通信半双工工作机制时,只能在同一时刻允许一个或者一组数据的传递。

    而MSG指令的工作机制又是异步与程序的扫描周期,所以,当激活一条MSG指令后,不能够依据程序的周期来确定是否在同一个时刻,而是需要根据该指令的DONE位来界定该指令是否被执行完毕。当该指令的DONE为1时的同一个周期内,则允许触发第二个(下一个)MSG指令。

题外话,顺控指令可以有效规避这个错误。

我点评一点,若有错误,请指正。

1、无异议。

2、所谓的第二个MSG中止,我认为说成是拒绝比较好理解。拒绝第二个,就意味着第一个MSG不受影响。而说成是中止,会误以为整个指令中止,必须另写第一个MSG继续执行。(手册写的是中止)

3、9600波特率传一个字节大约是1ms,1个字节是10位或11位。

4、通讯最大字数为120,并不是modbus协议本身的上限,而是这个库程序的上限。以255个字节的一帧数据,最多可容123个word。


关于两个MSG的限制,我的看法是:

mdobus执行非常耗时。既然是主站,进度控制权在主站手中,它可以把这些耗时的工作分散到多个扫描周期中去。所以,一次扫描周期只做一件事情。第二次请求,直接拒绝。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33266条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。