两台PC能否以Modbus协议互相发送数据

ili99132 2016-06-07 07:55:27
有点关于modbus的地方不明白,因为我在网上查的modbus协议只支持主问从答,不能两个都相对发发送数据。但是实验室有个课题有个地方让我难以理解。通讯程序是老师写的,
说是两台PC,其中一个是PC104主板,作为下位机,与上位机(MCGS)无线通讯,下位机的两个串口,一个com1接陀螺仪,另一个com2接无线模块,下位机通过com1串口把陀螺仪采集的数据,经com2无线传输传到上位机显示,我看了,通讯程序里面在陀螺仪数据前后加了设备地址,功能码,寄存器地址,crc校验之类的,我在网上查正好就是modbus rtu的格式进行封装,送到com2口发送到上位机的的就是这个封装好的数据。
这就是我疑惑的地方,因为同时上位机也要发送数据给下位机,下位机com2口收到上位机发送的数据后,只对这个数据逐字节判断,如果与设定一直的后进行其它操作,我看了一下,这个数据也是modbus rtu格式的。
...全文
1875 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2017-03-20
  • 打赏
  • 举报
回复
引用 25 楼 ili99132 的回复:
[quote=引用 23 楼 of123 的回复:] 实际上,楼主所述的 Modbus 协议(或许仅仅是帧格式)仅在无线通讯层面。从机通过两个串口控制传感器模块和无线通讯模块,均不涉及 Modbus。也就是说,很可能仅仅是套用 Modbus RTU 数据格式,包括 CRC 校验,并非严格意义上的 Modbus 协议。 其实,最关键的是无线通讯如何防止双方的发送冲突。也就是说,下位机是否随机地主动向上位机发送数据。如果是,有何措施防止双方同时发送的发生,抑或所用的无线通讯通道本来就是全双工的。 由于你使用的不是串行介质,不必关于拘泥于从机能否主动发送,如果不会造成冲突的话。 当然,还有一种可能,下位机仅仅是以广播命令的格式传输应答,只有在上位机发出特定命令后才发送传感器数据。
”抑或所用的无线通讯通道本来就是全双工的“ 这个跟无线通道有关系吗,难道不是取决于无线模块与串口的连接方式是RS232码?[/quote]见得多了,你自然就知道了。另外,看问题首先要看本质,初期阶段不要拘泥实现细节。
schlafenhamster 2016-06-18
  • 打赏
  • 举报
回复
ili99132 2016-06-16
  • 打赏
  • 举报
回复
引用 16 楼 worldy 的回复:
modbus适用主从模式,你说是的数据包协议,主从机都必须按照数据包协议打包数据! 但是你可以抛开主从的要求,只使用modbus数据包格式打包数据进行双工通信 主从要求,最重要的是可以在485上进行传输
嗯嗯,是的,厉害~!!
ili99132 2016-06-16
  • 打赏
  • 举报
回复
引用 23 楼 of123 的回复:
实际上,楼主所述的 Modbus 协议(或许仅仅是帧格式)仅在无线通讯层面。从机通过两个串口控制传感器模块和无线通讯模块,均不涉及 Modbus。也就是说,很可能仅仅是套用 Modbus RTU 数据格式,包括 CRC 校验,并非严格意义上的 Modbus 协议。 其实,最关键的是无线通讯如何防止双方的发送冲突。也就是说,下位机是否随机地主动向上位机发送数据。如果是,有何措施防止双方同时发送的发生,抑或所用的无线通讯通道本来就是全双工的。 由于你使用的不是串行介质,不必关于拘泥于从机能否主动发送,如果不会造成冲突的话。 当然,还有一种可能,下位机仅仅是以广播命令的格式传输应答,只有在上位机发出特定命令后才发送传感器数据。
”抑或所用的无线通讯通道本来就是全双工的“ 这个跟无线通道有关系吗,难道不是取决于无线模块与串口的连接方式是RS232码?
ili99132 2016-06-16
  • 打赏
  • 举报
回复
谢谢大家,我有限的知识尽力理解出的大概跟大家差不多,只是参考了Modbus RTU协议帧的格式, 无线模块主模块和子模块都以RS232与上位机和下位机相连,所以支持全双工通信,上位机下位机可以 互相发送数据
of123 2016-06-13
  • 打赏
  • 举报
回复
实际上,楼主所述的 Modbus 协议(或许仅仅是帧格式)仅在无线通讯层面。从机通过两个串口控制传感器模块和无线通讯模块,均不涉及 Modbus。也就是说,很可能仅仅是套用 Modbus RTU 数据格式,包括 CRC 校验,并非严格意义上的 Modbus 协议。 其实,最关键的是无线通讯如何防止双方的发送冲突。也就是说,下位机是否随机地主动向上位机发送数据。如果是,有何措施防止双方同时发送的发生,抑或所用的无线通讯通道本来就是全双工的。 由于你使用的不是串行介质,不必关于拘泥于从机能否主动发送,如果不会造成冲突的话。 当然,还有一种可能,下位机仅仅是以广播命令的格式传输应答,只有在上位机发出特定命令后才发送传感器数据。
zhuimeng0001 2016-06-12
  • 打赏
  • 举报
回复
从机不能主动发送信息给主机的。从机可以先缓存起来,主机定时去读就是了。
jiqiang01234 2016-06-12
  • 打赏
  • 举报
回复
如果不涉及主从关系,仅仅是点对点的双向通讯,我觉得用modbus不合适。毕竟modbus如果传输不定长的数据是比较麻烦的,而且容错处理用到了超时。不如自定义一种通讯格式,方便一些。我的项目中,使用GPRS的DTU通讯,就是用的自定义的通讯协议。
line_us 2016-06-11
  • 打赏
  • 举报
回复
看看到底该怎么弄
fly 100% 2016-06-11
  • 打赏
  • 举报
回复
可以是可以的
worldy 2016-06-10
  • 打赏
  • 举报
回复
引用 17 楼 zhujinqiang 的回复:
[quote=引用 16 楼 worldy 的回复:] modbus适用主从模式,你说是的数据包协议,主从机都必须按照数据包协议打包数据! 但是你可以抛开主从的要求,只使用modbus数据包格式打包数据进行双工通信 主从要求,最重要的是可以在485上进行传输
看上去楼主似乎没有用到485 只是参考modbus协议定义了232的数据帧[/quote] 使用485只能用应答式,否则容易引起收发冲突
zhujinqiang 2016-06-09
  • 打赏
  • 举报
回复
引用 16 楼 worldy 的回复:
modbus适用主从模式,你说是的数据包协议,主从机都必须按照数据包协议打包数据! 但是你可以抛开主从的要求,只使用modbus数据包格式打包数据进行双工通信 主从要求,最重要的是可以在485上进行传输
看上去楼主似乎没有用到485 只是参考modbus协议定义了232的数据帧
  • 打赏
  • 举报
回复
引用 12 楼 ili99132 的回复:
[quote=引用 11 楼 zhzht19861011 的回复:] [quote=引用 10 楼 ili99132 的回复:] [quote=引用 9 楼 zhzht19861011 的回复:] 设备地址为0, 这是广播信息, 根据modbus标准GB/T19582.2-2008对串行链路的说明:主站可以向所有从站发送广播信息、广播信息必须是写命令、从站不得应答、地址0被保留用作识别广播通讯 你看一下 下位机给上位机发送数据后,上位机有没有回应
广播信息是只能主机给从机发送吧?下位机给上位机发送的数据上位机没有回应~ 可是这里下位机给上位机发送了数据,同时上位机也给上位机发送了另外数据,就是上面的两组,设备地址都是00 感觉这个真心麻烦啊 [/quote] 真心乱,你把它当成自定义协议吧,跟modbus的思想有很大差别,我们用modbus是为了有一个统一标准,各个厂家的设备可以互联,如果不按照modbus标准来,也就失去了它的意义,只能理解为自定义协议,借鉴了modbus的数据封装[/quote] 嗯,只能这样了,谢谢你啊 因为是要写到论文里面,你看看我这样描述恰当吗: 标准的Modbus协议只支持主问从答,即主机发送命令,从机接收命令应答。 但是这里上位机需要向下位机发送命令字节,同时下位机向上位机发送陀螺仪数据, 所以只是参考Modbus消息帧的格式对数据进行封装,并不是标准的Modbus协议。[/quote] 不是太好,跟Modbus的术语不符,建议你直接按照国标GB/T19582.1-2008和国标GB/T19582.2-2008关于主从结构的描述
ili99132 2016-06-08
  • 打赏
  • 举报
回复
引用 11 楼 zhzht19861011 的回复:
[quote=引用 10 楼 ili99132 的回复:] [quote=引用 9 楼 zhzht19861011 的回复:] 设备地址为0, 这是广播信息, 根据modbus标准GB/T19582.2-2008对串行链路的说明:主站可以向所有从站发送广播信息、广播信息必须是写命令、从站不得应答、地址0被保留用作识别广播通讯 你看一下 下位机给上位机发送数据后,上位机有没有回应
广播信息是只能主机给从机发送吧?下位机给上位机发送的数据上位机没有回应~ 可是这里下位机给上位机发送了数据,同时上位机也给上位机发送了另外数据,就是上面的两组,设备地址都是00 感觉这个真心麻烦啊 [/quote] 真心乱,你把它当成自定义协议吧,跟modbus的思想有很大差别,我们用modbus是为了有一个统一标准,各个厂家的设备可以互联,如果不按照modbus标准来,也就失去了它的意义,只能理解为自定义协议,借鉴了modbus的数据封装[/quote] 嗯,只能这样了,谢谢你啊 因为是要写到论文里面,你看看我这样描述恰当吗: 标准的Modbus协议只支持主问从答,即主机发送命令,从机接收命令应答。 但是这里上位机需要向下位机发送命令字节,同时下位机向上位机发送陀螺仪数据, 所以只是参考Modbus消息帧的格式对数据进行封装,并不是标准的Modbus协议。
  • 打赏
  • 举报
回复
引用 10 楼 ili99132 的回复:
[quote=引用 9 楼 zhzht19861011 的回复:] 设备地址为0, 这是广播信息, 根据modbus标准GB/T19582.2-2008对串行链路的说明:主站可以向所有从站发送广播信息、广播信息必须是写命令、从站不得应答、地址0被保留用作识别广播通讯 你看一下 下位机给上位机发送数据后,上位机有没有回应
广播信息是只能主机给从机发送吧?下位机给上位机发送的数据上位机没有回应~ 可是这里下位机给上位机发送了数据,同时上位机也给上位机发送了另外数据,就是上面的两组,设备地址都是00 感觉这个真心麻烦啊 [/quote] 真心乱,你把它当成自定义协议吧,跟modbus的思想有很大差别,我们用modbus是为了有一个统一标准,各个厂家的设备可以互联,如果不按照modbus标准来,也就失去了它的意义,只能理解为自定义协议,借鉴了modbus的数据封装
ili99132 2016-06-08
  • 打赏
  • 举报
回复
引用 9 楼 zhzht19861011 的回复:
设备地址为0, 这是广播信息, 根据modbus标准GB/T19582.2-2008对串行链路的说明:主站可以向所有从站发送广播信息、广播信息必须是写命令、从站不得应答、地址0被保留用作识别广播通讯 你看一下 下位机给上位机发送数据后,上位机有没有回应
广播信息是只能主机给从机发送吧?下位机给上位机发送的数据上位机没有回应~ 可是这里下位机给上位机发送了数据,同时上位机也给上位机发送了另外数据,就是上面的两组,设备地址都是00 感觉这个真心麻烦啊
  • 打赏
  • 举报
回复
设备地址为0, 这是广播信息, 根据modbus标准GB/T19582.2-2008对串行链路的说明:主站可以向所有从站发送广播信息、广播信息必须是写命令、从站不得应答、地址0被保留用作识别广播通讯 你看一下 下位机给上位机发送数据后,上位机有没有回应
worldy 2016-06-08
  • 打赏
  • 举报
回复
modbus适用主从模式,你说是的数据包协议,主从机都必须按照数据包协议打包数据! 但是你可以抛开主从的要求,只使用modbus数据包格式打包数据进行双工通信 主从要求,最重要的是可以在485上进行传输
  • 打赏
  • 举报
回复
引用 14 楼 ili99132 的回复:
[quote=引用 13 楼 zhzht19861011 的回复:] [quote=引用 12 楼 ili99132 的回复:] [quote=引用 11 楼 zhzht19861011 的回复:] [quote=引用 10 楼 ili99132 的回复:] [quote=引用 9 楼 zhzht19861011 的回复:] 设备地址为0, 这是广播信息, 根据modbus标准GB/T19582.2-2008对串行链路的说明:主站可以向所有从站发送广播信息、广播信息必须是写命令、从站不得应答、地址0被保留用作识别广播通讯 你看一下 下位机给上位机发送数据后,上位机有没有回应
广播信息是只能主机给从机发送吧?下位机给上位机发送的数据上位机没有回应~ 可是这里下位机给上位机发送了数据,同时上位机也给上位机发送了另外数据,就是上面的两组,设备地址都是00 感觉这个真心麻烦啊 [/quote] 真心乱,你把它当成自定义协议吧,跟modbus的思想有很大差别,我们用modbus是为了有一个统一标准,各个厂家的设备可以互联,如果不按照modbus标准来,也就失去了它的意义,只能理解为自定义协议,借鉴了modbus的数据封装[/quote] 嗯,只能这样了,谢谢你啊 因为是要写到论文里面,你看看我这样描述恰当吗: 标准的Modbus协议只支持主问从答,即主机发送命令,从机接收命令应答。 但是这里上位机需要向下位机发送命令字节,同时下位机向上位机发送陀螺仪数据, 所以只是参考Modbus消息帧的格式对数据进行封装,并不是标准的Modbus协议。[/quote] 不是太好,跟Modbus的术语不符,建议你直接按照国标GB/T19582.1-2008和国标GB/T19582.2-2008关于主从结构的描述[/quote] 嗯,好的~ 还有一个地方,这个协议的自定义怎么体现呢, 比如说下位机传送传感器的数据,下位机程序把传感器数据加上设备地址、功能码、CRC后打包后发送, 请问这个自定义可以说就体现在这里吗?[/quote] 协议可以分为标准协议和自定义协议两种 标准协议就是公开的,大家都遵循的,使用了这个协议,不管是哪个厂家生产的设备都可以通讯 自定义协议也可以理解为私有协议,只有自己厂家的设备或者特定的设备之间能通讯
ili99132 2016-06-08
  • 打赏
  • 举报
回复
引用 13 楼 zhzht19861011 的回复:
[quote=引用 12 楼 ili99132 的回复:] [quote=引用 11 楼 zhzht19861011 的回复:] [quote=引用 10 楼 ili99132 的回复:] [quote=引用 9 楼 zhzht19861011 的回复:] 设备地址为0, 这是广播信息, 根据modbus标准GB/T19582.2-2008对串行链路的说明:主站可以向所有从站发送广播信息、广播信息必须是写命令、从站不得应答、地址0被保留用作识别广播通讯 你看一下 下位机给上位机发送数据后,上位机有没有回应
广播信息是只能主机给从机发送吧?下位机给上位机发送的数据上位机没有回应~ 可是这里下位机给上位机发送了数据,同时上位机也给上位机发送了另外数据,就是上面的两组,设备地址都是00 感觉这个真心麻烦啊 [/quote] 真心乱,你把它当成自定义协议吧,跟modbus的思想有很大差别,我们用modbus是为了有一个统一标准,各个厂家的设备可以互联,如果不按照modbus标准来,也就失去了它的意义,只能理解为自定义协议,借鉴了modbus的数据封装[/quote] 嗯,只能这样了,谢谢你啊 因为是要写到论文里面,你看看我这样描述恰当吗: 标准的Modbus协议只支持主问从答,即主机发送命令,从机接收命令应答。 但是这里上位机需要向下位机发送命令字节,同时下位机向上位机发送陀螺仪数据, 所以只是参考Modbus消息帧的格式对数据进行封装,并不是标准的Modbus协议。[/quote] 不是太好,跟Modbus的术语不符,建议你直接按照国标GB/T19582.1-2008和国标GB/T19582.2-2008关于主从结构的描述[/quote] 嗯,好的~ 还有一个地方,这个协议的自定义怎么体现呢, 比如说下位机传送传感器的数据,下位机程序把传感器数据加上设备地址、功能码、CRC后打包后发送, 请问这个自定义可以说就体现在这里吗?
加载更多回复(8)

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧