打印

MODBUS通讯过程中遇到更高优先级中断正在运行,而被丢失?

[复制链接]
4525|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
perry0428|  楼主 | 2010-7-20 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,如果运行过程中,CPU要进行其他的工作而不能被打断,此时上位机发的命令将不被理睬,这是就会报错,我现在的程序大概是发10条命令就会报错1个,不知道这样是不是被允许,希望前辈指教~小女子不胜感激

相关帖子

沙发
bonafides| | 2010-7-20 16:17 | 只看该作者
发送无回答,应该从新发送,而不是报错!

使用特权

评论回复
板凳
perry0428|  楼主 | 2010-7-20 16:32 | 只看该作者
也不是报错,就是显示超时
Timeout error
因为有段时间CPU必须要做其他的事情,上位机在这段时间发命令就不接收,上位机软件就会显示超时出错。隔1s后又重新发送。

使用特权

评论回复
地板
chunyang| | 2010-7-20 18:24 | 只看该作者
协议上,报错后应有通讯重启机制,这时通讯就可以继续了,而报错信息要分类记录,以供人工分析或调用专门程序来处理。

使用特权

评论回复
5
perry0428|  楼主 | 2010-7-21 10:12 | 只看该作者
上位机软件我用的是MODBUS POLL这个软件,可能它没有分类,就认为不响应他就是timeout

使用特权

评论回复
6
chunyang| | 2010-7-21 13:15 | 只看该作者
如果不影响整个系统可不必理睬,否则就需要调整协议的工艺性。

使用特权

评论回复
7
perry0428|  楼主 | 2010-7-21 15:29 | 只看该作者
非常感谢~

使用特权

评论回复
8
BitFu| | 2010-7-22 09:29 | 只看该作者
我认为MODBUS从机应当是在中断里处理响应,而不是接收到数据后等待任务去处理
无非就是读寄存器或写寄存器,在中断中简单响应一下OK。至于寄存的更改结果由任务在不“忙”的时候再处理是完全可以的。

使用特权

评论回复
9
perry0428|  楼主 | 2010-7-26 11:41 | 只看该作者
我是接收完数据后,设置个标志,3.5个字符的延时中断后处理数据发送数据的,如果在这个3.5字符的时间内有更高优先级中断发生,如传感器测量数据,接收到的数据就得不到处理,或者说干脆发来的命令不与应答~

使用特权

评论回复
10
perry0428|  楼主 | 2010-7-26 11:54 | 只看该作者
8楼所说的话,我明白你是说,接受完之后马上处理数据发回数据,但是还是不能保证每次发过来的命令都应答,如果隔1S后发过来,我的传感器正在测量数据,不能被打断,还是无法响应
有些任务是必须处理的且不能打断的,打断的话可能导致传感器传输的数据不准确的
觉得6楼的大哥说的比较有道理,希望大家多讨论

使用特权

评论回复
11
icecut| | 2010-7-26 18:03 | 只看该作者
你的系统设计不合理.中断占用cpu时间太长.

使用特权

评论回复
12
airwill| | 2010-7-30 12:08 | 只看该作者
系统设计不合理. 要出的问题多呢, 岂止就这个问题. 赶快, 改进

使用特权

评论回复
13
perry0428|  楼主 | 2010-8-2 11:07 | 只看该作者
恩,谢谢各位
再想办法了

使用特权

评论回复
14
supermanvv| | 2010-8-5 21:12 | 只看该作者
搞不懂

使用特权

评论回复
15
btzhy| | 2010-8-10 11:00 | 只看该作者
这个高优先级中断程序的处理时间不要超过当前波特率下一个字符传输的时间

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:有限的生命里,活出精彩!!

5

主题

47

帖子

1

粉丝