打印

关于modbus通讯顺序的问题

[复制链接]
1618|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雨声|  楼主 | 2017-9-30 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新人刚接触modbus有几个通讯顺序的问题不太懂,想问一下大神们:1.主机发送一条指令后,在从机还没有做出应答前(即主机还没有进入应答中断程序前),是否可以继续发第二条指令(第二条指令也是给那个从机的,这里就考虑一个主机一个从机)?
2.如果上面第1条问题的答案是不可以的,那么就表明modbus通讯顺序必须是一问一答的形式,在没有得到上一次指令的应答之前就不允许发下一条指令,那么我就想问接受应答要在中断中进行的意义何在,发送完指令后主机反正都是要等在那里的,何不加个延时判断接受是否完成就好了,何必在中断中进行。(难不成接受应答要在中断中进行是想让主机先干除了继续发送指令的其他事?可是我主机除了继续发下一条指令还真没其它事可做。。)
3.如果第1条答案是可以的,那我又想问一下主机在收到从机的应答前已经向从机发送了n条指令了,这个时候主机收到从机的一条应答,主机该如何判断这条应答是对应哪条指令的?就这三个问题
我网上找过一些资料,但是说法都不太统一,有人说可以有人说不可以。

希望大神能帮我解答一下

相关帖子

沙发
xuyaqi| | 2017-9-30 14:54 | 只看该作者
1 主机发送一条指令后,肯定给从机要留有一定应答时间,然后发第二条指令。
2 留一定应答时间后不需要一直等从机回答。
3 根据modbus协议,主机根据收到的报文内容就会知道谁发来的,回答什么问题。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
雨声 + 1 神马都是浮云
板凳
雨声|  楼主 | 2017-9-30 15:10 | 只看该作者
xuyaqi 发表于 2017-9-30 14:54
1 主机发送一条指令后,肯定给从机要留有一定应答时间,然后发第二条指令。
2 留一定应答时间后不需要一直 ...

没明白你的意思,留给从机应答时间和主机等待应答时间不一样吧?你的意思是主机发送完第一条指令后留给从机一定的反应时间(主机还没有接受到应答),之后不管主机是否已经接收到应答都可以继续向从机发第二条指令?

使用特权

评论回复
地板
ningling_21| | 2017-9-30 18:08 | 只看该作者
雨声 发表于 2017-9-30 15:10
没明白你的意思,留给从机应答时间和主机等待应答时间不一样吧?你的意思是主机发送完第一条指令后留给从 ...

主机发送第一条指令后的等待时间可以设定(如MODSCAN32软件),等待时间到了之后不管从机是否应答都会继续发下一条指令

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
雨声 + 1 赞一个!
5
chunyang| | 2017-9-30 18:16 | 只看该作者
指令是否可以连续发送,这要看指令类型,有些可以,有些不可以。ModBus不是一个有严格规定的协议,只是给出了基本框架,不同应用在设计时的考虑不同,所以千差万别。协议如果要严格,最好是问答式的,主机需确认目标节点是否正确收到指令并执行,但这么做会降低效率,所以不同应用应该有不同的追求,自然没有也无需统一。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
雨声 + 1 很给力!
6
nethopper| | 2017-10-1 08:58 | 只看该作者
一般是设置好超时(TimeOut),TimeOut要大于正常情况下从机的回复时间,超时后还未收到从机回复则可重发同样的指令,即TimeOut & Retry机制。Retry次数可以设置,也可以是一直retry。此后发别的指令也是可以的,看具体逻辑。

中断是忙里偷闲,可做其它事情了。如果没有其它事情可做,在那里干等也是可以的。

使用特权

评论回复
7
雨声|  楼主 | 2017-10-1 11:13 | 只看该作者
本帖最后由 雨声 于 2017-10-1 11:19 编辑
ningling_21 发表于 2017-9-30 18:08
主机发送第一条指令后的等待时间可以设定(如MODSCAN32软件),等待时间到了之后不管从机是否应答都会继 ...

你的意思也就是说主机是可以在未收到应答之前是可以继续发送指令的,只要指令与指令之间留一定的等待时间就可以了。是不是这样?还有个问题,是不是所有的从机都支持主机连续向它写命令吗?

使用特权

评论回复
8
雨声|  楼主 | 2017-10-1 11:15 | 只看该作者
chunyang 发表于 2017-9-30 18:16
指令是否可以连续发送,这要看指令类型,有些可以,有些不可以。ModBus不是一个有严格规定的协议,只是给出 ...

能否连续发送还和指令有关?能举些例子吗?

使用特权

评论回复
9
雨声|  楼主 | 2017-10-1 11:31 | 只看该作者
nethopper 发表于 2017-10-1 08:58
一般是设置好超时(TimeOut),TimeOut要大于正常情况下从机的回复时间,超时后还未收到从机回复则可重发同 ...

嗯嗯,这就是一问一答模式,但它使得接受应答中断的作用变小。你的那句“中断是忙里偷闲,可做其它事情了。如果没有其它事情可做,在那里干等也是可以的。”正是我的意思,主机在等待从机应答期间,一不能继续向从机发指令,二没收到从机回复不能处理数据,只能去做和通讯不相关的事情,这有点蛋疼

使用特权

评论回复
10
zyj9490| | 2017-10-1 11:38 | 只看该作者
主机发送完一祯后,从机怎么判一条命令已完整发送呢?通过总线的空闲时间。一发一收,主机完全可以不用中断中判断接收完毕,但接收字节必须要用中断的,或者主机通过死循环判断一响应完毕,但效率有点低(影响别的任务)。

使用特权

评论回复
11
山东电子小菜鸟| | 2017-10-1 14:52 | 只看该作者
MODBUS是问答式 一问一答

使用特权

评论回复
12
xuyaqi| | 2017-10-1 17:11 | 只看该作者
雨声 发表于 2017-9-30 15:10
没明白你的意思,留给从机应答时间和主机等待应答时间不一样吧?你的意思是主机发送完第一条指令后留给从 ...

是这样的

使用特权

评论回复
13
zyj9490| | 2017-10-1 23:19 | 只看该作者
要有一个接收中断响应函数,是否响应接收完毕或超时。

使用特权

评论回复
14
chunyang| | 2017-10-2 22:42 | 只看该作者
雨声 发表于 2017-10-1 11:15
能否连续发送还和指令有关?能举些例子吗?

比如有些无需回复的广播指令就可以,建议你最好还是仔细看看Modbus规范,我的blog中就有。

使用特权

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

本版积分规则

4

主题

24

帖子

0

粉丝