恭喜,你发布的帖子
发布于 2018-06-07 00:38:10
11楼
如果中断的时间间隔在50MS以内,那么我认为在中断里和在OB1里调用MB-RTU的通讯程序几乎是没有什么区别的,如果中断的间隔大于100ms,那我认为是会有问题的,通讯的结果返回因为中断的延时被延迟了,除非有通讯接收中断,但MB-RTU通讯没有这样的机制。
因此,整体来说,我并不建议把MB-RTU通讯程序放在定时中断子程序中,增加编程的难度,固定的定时触发间隔受制与通讯波特率,太长了不行,太短了也不行,跟OB1一样没有啥意义,现在的OB1也是可以固定扫描周期的。
想想还真的是这么回事儿。如果主循环扫描周期就是30毫秒左右,放在主扫描循环中,和30毫秒中断中不是一码事么。
要是主扫描周期100毫秒,30毫秒的循环中断,实际上,30毫秒中断已经与CM模块交换了3次,主循环OB中才处理一次。这前两次接收的数据不是丢了么?
这就是说,主循环扫描周期要少于30毫秒才行。
看来真是有些要注意的地方呢。
幸亏我的程序主循环扫描瞬时最大才十几毫秒。所以才不会出现丢数据的情况。
如果100毫秒主循环要不丢数据,那在30毫秒中断中,要能“压入”至少3次以上读回的数据才行。(如果CM是接收数据模式的话。)
-------------------
再一次说明,要知道硬件是如何工作的!不能仅就程序说话。
CM通讯模块是自己工作的!每次访问它,如果通讯没完成,会告诉你Busy;完成了就交换数据。
请填写推广理由:
分享
只看
楼主