恭喜,你发布的帖子
发布于 2016-10-17 00:09:52
25楼
小结一下:主站读、写请求指令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执行非常耗时。既然是主站,进度控制权在主站手中,它可以把这些耗时的工作分散到多个扫描周期中去。所以,一次扫描周期只做一件事情。第二次请求,直接拒绝。
请填写推广理由:
分享
只看
楼主