打印

modbus从机接收的问题

[复制链接]
3979|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuaaa|  楼主 | 2010-5-31 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wuaaa 于 2010-5-31 16:47 编辑

我刚接触modbus,各位大侠能不能帮我解答一下下面几个问题:
1、当有数据发送过来时,从机是先接收一位地址为赖和本身的地址匹配,还是把一帧数据都接收后再进行地址匹配?
2、如果没有地址码(帧格式错误时),怎么知道这一帧数据是错误的呢?就是怎么知道它没有地址码
3、从机要是在中断程序内接收数据,那么在这个中断中可以打开定时器中断吗?

各位大侠帮帮忙。
沙发
stonejust| | 2010-6-1 08:54 | 只看该作者
首先你要搞清modbus有两种模式,一种RTU,一种ASCII。你到底用哪种?看你后面说的要用到定时器,估计应该是前面一种了。好好看看国标,不是接收来就开始判断,数据间隔必须大于4个周期才认为下面接收的是新数据的开始。不太明白你的思路,一般接收完一组数据需要校验的,校验合格再判断其他的内容。整个程序执行过程中都不关闭定时器中断,在接收正确的时候从新置数。

使用特权

评论回复
板凳
wuaaa|  楼主 | 2010-6-1 09:46 | 只看该作者
是RTU模式,我忘加上“在大于4个周期的前提下”这个条件了。我再问一下定时器是在主程序里打开,然后在中断函数接受数据时检测定时器中断标志吗?我是新手,就连接触编程也没多长时间

使用特权

评论回复
地板
kfawj| | 2010-6-1 13:36 | 只看该作者
如果地址错误,直接放弃这一帧数据就可以撒

使用特权

评论回复
5
yewuyi| | 2010-6-1 14:10 | 只看该作者
1# wuaaa

1、都可以
2、首先必须确定通信数据收发结束,是否存在地址码是由你的数据包中地址位对应数据决定的,通过CRC16等手段可以发现通信数据包的收发错误。
3、数据收发在中断内开始,但数据的处理应该放到任务中完成,两者速度通过RAM缓冲区匹配,是否能打开定时器中断无从把握,需要看你实际的代码写法。

使用特权

评论回复
6
wuaaa|  楼主 | 2010-6-1 16:01 | 只看该作者
谢谢5楼的兄弟,不知道有没有关于modbus rtu功能码编解方面的程序片段,我现在又想不明白当接收到数据后功能码应该怎么解析。

使用特权

评论回复
7
stonejust| | 2010-6-2 08:27 | 只看该作者
功能码很好判断呀,只要判断功能码位置的数值就好了。是3就是读,是6就是写。多说几句,判断好是哪个命令后,还要判断其他参数,起始位置,数据长度什么的。5楼是高手,班门弄斧了,还有叫兄弟可能不太合适,应该是大哥。

使用特权

评论回复
8
wuaaa|  楼主 | 2010-6-2 09:23 | 只看该作者
叫兄弟确实不合适,在这里对5楼的大哥道歉。我是新手,以后恐怕还得要麻烦你们

使用特权

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

本版积分规则

0

主题

40

帖子

1

粉丝