恭喜,你发布的帖子
发布于 2016-10-17 11:12:54
30楼
没有进一步的了。m0.0 m0.1是用于调用msg。我仅仅是想说:第三第四种情况就会报6,就会认为是同时调用。对于第二种情况,时下惯用30的朋友,觉得这是很多功能指令不允许的。例如,无法在一个周期内变更脉冲的频率两次。(我仅针对那些特定指令的功能障碍,并不代表30不能完成)
而后面说到的done位的事情,是寄生出来讨论的。眼下我也有兴趣,所以就一起讨论了。
为何我那么注意这个牛角尖?争取时间。
可能Z他都没有用过这个msg指令做什么。怎样可以把通讯时间安排得滴水不漏但是又不重叠控制。这是一种我追求的状态。
常常看见有帖说,用sm0.5 加个上升缘去触发些什么。那么到底这个时间能不能再缩减呢?减到最后是什么事件阻止了时间的继续缩减?这里有一个什么信号说明已经是最快了的。过了最快的时候就可以此时此刻驱动下一个msg任务了,那么这两个指令之间就没有间隙,通讯口没有休闲时间。
可以引申到另外一个话题:假如当前是仅有一个msg指令,连续不间断地读取伺服当前位置值。我们研究一下这个值什么时刻是最新的?什么时候你要是读了,正好msg指令正在写向这地址?什么时候读了,这个值怎么还是上一次的值?
我只是走向领域的边缘。这条路当然同道的人少。
实际m0.0、m0.1是为MSG服务的。就说MSG吧。
可以做个实验。当启动一次发送请求后,故意延长扫描时间,延长至1000ms。modbus从站一定有返回了,CPU也一定能收到。那就不断地访问MSG,遇到错误6,不管。直至1000ms结束。这期间,会有非6的情况吗?能够报数据已收到吗?
1、如果不能,一直是6错误,表示MSG不能再次调用是刚性的,就是不允许。
2、如果有非6的情况,甚至可以成功接收到返回数据,表示第二次调用报错误,的确是“内部正忙”。
当一个请求发送出去,后续的MSG调用,是发触发它处理,在这个请求未完成前,又发一个请求,不管这个请求是否在同一扫描周期发的,都是属于逻辑错误,乱来。不在讨论范围。
请填写推广理由:
分享
只看
楼主