串口通讯问题---多个终端设备

时间:2022-03-21 07:51:03
大致说明:
一块开发板,用一个485集线器连接,该485集线器又连接了4个终端设备,可以根据终端设备的地址进行区分
在开发板上有一个串口接收程序,用来接收4个终端设备发送过来的信息

现在,我想问的是:
如果4个终端设备发送的信息,同时到达开发板串口上时,会是什么样的?
比如正常情况下,是接收到下面单独的数据
A0000001
B0000002
C0000003
D0000004

如果同时到达串口时,会不会接收到 
A0000001B0000002C0000003D0000004  这样一串???

因为我在串口里只是单独的根据正确的位数(8位)来判断是否接收到正确的数据,不是8位我直接扔掉了不做进一步处理的。
实验的时候,4个终端单独数据都能接收,但是没有办法测试 同时接收的情况,不知道会不会存在问题?



21 个解决方案

#1


不能允许终端设备同时发送数据,同时发送时会打乱数据,最终接收到什么都不是的乱码,这个需要在协议上处理,比如可以是主机依次查询终端设备,被查询的终端返回数据,其余终端不响应。

#2


引用 1 楼 movsd 的回复:
不能允许终端设备同时发送数据,同时发送时会打乱数据,最终接收到什么都不是的乱码,这个需要在协议上处理,比如可以是主机依次查询终端设备,被查询的终端返回数据,其余终端不响应。


还会存在这样的问题? 这里的终端设备是主动发送的数据,不依赖于主机的命令的。

#3


我没看见你用了集线器,用了集线器的话应该不会有问题。

#4


我查了一下资料,用了集线器也不能同时发送

#5


这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus

#6


引用 5 楼 zhxianbin 的回复:
这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus


现在我的情况是,终端设备主动发送信息到开发板,开发板只管接收
那么这样一种模式,能否规避4个终端同时发送数据到开发板时的接收障碍问题??
现在连着4个终端,由于无法现场模拟同时发送数据到达开发板的情况,根本不知道能否规避。

#7


引用 6 楼 wince2000 的回复:
Quote: 引用 5 楼 zhxianbin 的回复:

这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus


现在我的情况是,终端设备主动发送信息到开发板,开发板只管接收
那么这样一种模式,能否规避4个终端同时发送数据到开发板时的接收障碍问题??
现在连着4个终端,由于无法现场模拟同时发送数据到达开发板的情况,根本不知道能否规避。

  不行,这种模式就不能使用 RS485 了,要使用 CAN 或者 网络。

#8


引用 7 楼 zhxianbin 的回复:
Quote: 引用 6 楼 wince2000 的回复:

Quote: 引用 5 楼 zhxianbin 的回复:

这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus


现在我的情况是,终端设备主动发送信息到开发板,开发板只管接收
那么这样一种模式,能否规避4个终端同时发送数据到开发板时的接收障碍问题??
现在连着4个终端,由于无法现场模拟同时发送数据到达开发板的情况,根本不知道能否规避。

  不行,这种模式就不能使用 RS485 了,要使用 CAN 或者 网络。

晕,可是开发板只有485接口.......汗。这是定制的,不提供多种接口,只提供了一种。
目前测试4个终端,接收都好好的。可惜真测不到 同时接收的场景,也不知道以后会不会出问题。

#9


引用 8 楼 wince2000 的回复:
Quote: 引用 7 楼 zhxianbin 的回复:

Quote: 引用 6 楼 wince2000 的回复:

Quote: 引用 5 楼 zhxianbin 的回复:

这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus


现在我的情况是,终端设备主动发送信息到开发板,开发板只管接收
那么这样一种模式,能否规避4个终端同时发送数据到开发板时的接收障碍问题??
现在连着4个终端,由于无法现场模拟同时发送数据到达开发板的情况,根本不知道能否规避。

  不行,这种模式就不能使用 RS485 了,要使用 CAN 或者 网络。

晕,可是开发板只有485接口.......汗。这是定制的,不提供多种接口,只提供了一种。
目前测试4个终端,接收都好好的。可惜真测不到 同时接收的场景,也不知道以后会不会出问题。

  那就改为 master/slave 模式

#10


数据之间有相应的波特率进行传输,在通常情况下以mcu的接收速率是不会出现上述乱麻的现象。不知可否,搂住可以演练一下,检验接收效果。

#11


引用 10 楼 CCTV5_ZENGYI 的回复:
数据之间有相应的波特率进行传输,在通常情况下以mcu的接收速率是不会出现上述乱麻的现象。不知可否,搂住可以演练一下,检验接收效果。

问题是,现在没有测试环境,无法做到同时发送..........在手工测试环境下,没有发现问题。但手工测试应该做不到同时发送,所以....

#12


楼主 485支持一主多从通信,
你用在此处完全可以的
只是需要注意,开发板是主机,只有主机查询从机时,从机才能返回数据。同一时刻,主机只能和一个从机通讯。查询完一个从机后再查询下一个。循环查询
根本就不存在 主机同时收到四个从机数据的可能性!

#13


485集线器是什么设备?有型号么

#14


开发板是主机,只有主机查询从机时,从机才能返回数据,否则有冲突时都是乱码!

#15


485 协议的流程是

1 所有从机处于接收地址状态。

2 主机向所有从机广播某一台从机的地址。

3 地址匹配的从机进入数据接收状态,其他从机不响应。

4 主机向确定的从机发送命令。

5 接收到命令的从机执行命令并返回应答。

6 该从机返回地址接收状态。

在这个协议中,地址消息和数据消息采用不同的帧格式。

以上协议保证了在一个时间内只有一台主机或从机处于发送状态。

在你这个需求中,因为应用命令实际上只有一个,因此可以将主机向从机以数据帧发送命令的环节去掉。

以上说的,是通过 485 协议转换芯片将所有从机并联的一对总线上的。

485 集线器有两类。其中一类是每台从机从集线器连接各自的通讯线,且有背板可以缓存从机发来的数据的。如果采用这种集线器,则通过向集线器发送地址,来逐个取回各个从机的数据。具体操作要看集线器的手册。

#16


引用 15 楼 of123 的回复:
485 协议的流程是

1 所有从机处于接收地址状态。

2 主机向所有从机广播某一台从机的地址。

3 地址匹配的从机进入数据接收状态,其他从机不响应。

4 主机向确定的从机发送命令。


5 接收到命令的从机执行命令并返回应答。

6 该从机返回地址接收状态。

在这个协议中,地址消息和数据消息采用不同的帧格式。

以上协议保证了在一个时间内只有一台主机或从机处于发送状态。

在你这个需求中,因为应用命令实际上只有一个,因此可以将主机向从机以数据帧发送命令的环节去掉。

以上说的,是通过 485 协议转换芯片将所有从机并联的一对总线上的。

485 集线器有两类。其中一类是每台从机从集线器连接各自的通讯线,且有背板可以缓存从机发来的数据的。如果采用这种集线器,则通过向集线器发送地址,来逐个取回各个从机的数据。具体操作要看集线器的手册。



关键是,我这里的终端设备是主动发送模式,只会发送数据(不会接收)
我这个有实时性要求,终端检测到数据了就主动发送到主机,终端没检测到数据时就不发送
主机广播的话,得每50ms就轮询一次,而且是几乎时时在广播啊....会比较占用资源吧?我这是在开发板上,系统资源有限,而且还得运行其他程序.
所以我一个外行来看,应该是主动发送模式比较适合(但是这种模式又无法处理多个终端同时到达集线器总线上的情况)

#17


引用 13 楼 u012586257 的回复:
485集线器是什么设备?有型号么


连接多个终端设备的,比如4路进线(连接4个终端),一路出线(即一路总线,连接到主机)

#18


引用 12 楼 TopVB 的回复:
楼主 485支持一主多从通信,
你用在此处完全可以的
只是需要注意,开发板是主机,只有主机查询从机时,从机才能返回数据。同一时刻,主机只能和一个从机通讯。查询完一个从机后再查询下一个。循环查询
根本就不存在 主机同时收到四个从机数据的可能性!


我前面说了,从机是主动发送数据的,主机不发命令只管接收数据。所以就存在同时发送时,接收到乱码的问题。

#19


为什么不做个中转呢?可以通过中转将同时收到的东西按顺序发送到开发板呀,中转用个单片机就ok啦

#20


我说要查集线器型号,是很可能这个集线器已经完成了多路隔离/数据缓冲,那就一点问题也没有了。否则的话,只好用四个串口来分别接收,外设不够的话,只能加一片单片机来做了。
485 通常用法是总线型,主机主控通讯。你既然有集线器,很可能是有什么功能的,不然所有设备连在一起就行了,不用集线

#21


引用 18 楼 wince2000 的回复:
Quote: 引用 12 楼 TopVB 的回复:

楼主 485支持一主多从通信,
你用在此处完全可以的
只是需要注意,开发板是主机,只有主机查询从机时,从机才能返回数据。同一时刻,主机只能和一个从机通讯。查询完一个从机后再查询下一个。循环查询
根本就不存在 主机同时收到四个从机数据的可能性!


我前面说了,从机是主动发送数据的,主机不发命令只管接收数据。所以就存在同时发送时,接收到乱码的问题。

不知道楼主对采集速度有要求没?如果要求高的话,只能用多路串口芯片分别接受各个从机的数据了,
对数据要求不高的话,可以使用模拟开关或继电器,用一个串口分时采集从机的数据!

#1


不能允许终端设备同时发送数据,同时发送时会打乱数据,最终接收到什么都不是的乱码,这个需要在协议上处理,比如可以是主机依次查询终端设备,被查询的终端返回数据,其余终端不响应。

#2


引用 1 楼 movsd 的回复:
不能允许终端设备同时发送数据,同时发送时会打乱数据,最终接收到什么都不是的乱码,这个需要在协议上处理,比如可以是主机依次查询终端设备,被查询的终端返回数据,其余终端不响应。


还会存在这样的问题? 这里的终端设备是主动发送的数据,不依赖于主机的命令的。

#3


我没看见你用了集线器,用了集线器的话应该不会有问题。

#4


我查了一下资料,用了集线器也不能同时发送

#5


这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus

#6


引用 5 楼 zhxianbin 的回复:
这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus


现在我的情况是,终端设备主动发送信息到开发板,开发板只管接收
那么这样一种模式,能否规避4个终端同时发送数据到开发板时的接收障碍问题??
现在连着4个终端,由于无法现场模拟同时发送数据到达开发板的情况,根本不知道能否规避。

#7


引用 6 楼 wince2000 的回复:
Quote: 引用 5 楼 zhxianbin 的回复:

这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus


现在我的情况是,终端设备主动发送信息到开发板,开发板只管接收
那么这样一种模式,能否规避4个终端同时发送数据到开发板时的接收障碍问题??
现在连着4个终端,由于无法现场模拟同时发送数据到达开发板的情况,根本不知道能否规避。

  不行,这种模式就不能使用 RS485 了,要使用 CAN 或者 网络。

#8


引用 7 楼 zhxianbin 的回复:
Quote: 引用 6 楼 wince2000 的回复:

Quote: 引用 5 楼 zhxianbin 的回复:

这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus


现在我的情况是,终端设备主动发送信息到开发板,开发板只管接收
那么这样一种模式,能否规避4个终端同时发送数据到开发板时的接收障碍问题??
现在连着4个终端,由于无法现场模拟同时发送数据到达开发板的情况,根本不知道能否规避。

  不行,这种模式就不能使用 RS485 了,要使用 CAN 或者 网络。

晕,可是开发板只有485接口.......汗。这是定制的,不提供多种接口,只提供了一种。
目前测试4个终端,接收都好好的。可惜真测不到 同时接收的场景,也不知道以后会不会出问题。

#9


引用 8 楼 wince2000 的回复:
Quote: 引用 7 楼 zhxianbin 的回复:

Quote: 引用 6 楼 wince2000 的回复:

Quote: 引用 5 楼 zhxianbin 的回复:

这种模式下一般以开发板作为为 master,终端作为 slave,数据交互由 master 发起,常见协议为 modbus


现在我的情况是,终端设备主动发送信息到开发板,开发板只管接收
那么这样一种模式,能否规避4个终端同时发送数据到开发板时的接收障碍问题??
现在连着4个终端,由于无法现场模拟同时发送数据到达开发板的情况,根本不知道能否规避。

  不行,这种模式就不能使用 RS485 了,要使用 CAN 或者 网络。

晕,可是开发板只有485接口.......汗。这是定制的,不提供多种接口,只提供了一种。
目前测试4个终端,接收都好好的。可惜真测不到 同时接收的场景,也不知道以后会不会出问题。

  那就改为 master/slave 模式

#10


数据之间有相应的波特率进行传输,在通常情况下以mcu的接收速率是不会出现上述乱麻的现象。不知可否,搂住可以演练一下,检验接收效果。

#11


引用 10 楼 CCTV5_ZENGYI 的回复:
数据之间有相应的波特率进行传输,在通常情况下以mcu的接收速率是不会出现上述乱麻的现象。不知可否,搂住可以演练一下,检验接收效果。

问题是,现在没有测试环境,无法做到同时发送..........在手工测试环境下,没有发现问题。但手工测试应该做不到同时发送,所以....

#12


楼主 485支持一主多从通信,
你用在此处完全可以的
只是需要注意,开发板是主机,只有主机查询从机时,从机才能返回数据。同一时刻,主机只能和一个从机通讯。查询完一个从机后再查询下一个。循环查询
根本就不存在 主机同时收到四个从机数据的可能性!

#13


485集线器是什么设备?有型号么

#14


开发板是主机,只有主机查询从机时,从机才能返回数据,否则有冲突时都是乱码!

#15


485 协议的流程是

1 所有从机处于接收地址状态。

2 主机向所有从机广播某一台从机的地址。

3 地址匹配的从机进入数据接收状态,其他从机不响应。

4 主机向确定的从机发送命令。

5 接收到命令的从机执行命令并返回应答。

6 该从机返回地址接收状态。

在这个协议中,地址消息和数据消息采用不同的帧格式。

以上协议保证了在一个时间内只有一台主机或从机处于发送状态。

在你这个需求中,因为应用命令实际上只有一个,因此可以将主机向从机以数据帧发送命令的环节去掉。

以上说的,是通过 485 协议转换芯片将所有从机并联的一对总线上的。

485 集线器有两类。其中一类是每台从机从集线器连接各自的通讯线,且有背板可以缓存从机发来的数据的。如果采用这种集线器,则通过向集线器发送地址,来逐个取回各个从机的数据。具体操作要看集线器的手册。

#16


引用 15 楼 of123 的回复:
485 协议的流程是

1 所有从机处于接收地址状态。

2 主机向所有从机广播某一台从机的地址。

3 地址匹配的从机进入数据接收状态,其他从机不响应。

4 主机向确定的从机发送命令。


5 接收到命令的从机执行命令并返回应答。

6 该从机返回地址接收状态。

在这个协议中,地址消息和数据消息采用不同的帧格式。

以上协议保证了在一个时间内只有一台主机或从机处于发送状态。

在你这个需求中,因为应用命令实际上只有一个,因此可以将主机向从机以数据帧发送命令的环节去掉。

以上说的,是通过 485 协议转换芯片将所有从机并联的一对总线上的。

485 集线器有两类。其中一类是每台从机从集线器连接各自的通讯线,且有背板可以缓存从机发来的数据的。如果采用这种集线器,则通过向集线器发送地址,来逐个取回各个从机的数据。具体操作要看集线器的手册。



关键是,我这里的终端设备是主动发送模式,只会发送数据(不会接收)
我这个有实时性要求,终端检测到数据了就主动发送到主机,终端没检测到数据时就不发送
主机广播的话,得每50ms就轮询一次,而且是几乎时时在广播啊....会比较占用资源吧?我这是在开发板上,系统资源有限,而且还得运行其他程序.
所以我一个外行来看,应该是主动发送模式比较适合(但是这种模式又无法处理多个终端同时到达集线器总线上的情况)

#17


引用 13 楼 u012586257 的回复:
485集线器是什么设备?有型号么


连接多个终端设备的,比如4路进线(连接4个终端),一路出线(即一路总线,连接到主机)

#18


引用 12 楼 TopVB 的回复:
楼主 485支持一主多从通信,
你用在此处完全可以的
只是需要注意,开发板是主机,只有主机查询从机时,从机才能返回数据。同一时刻,主机只能和一个从机通讯。查询完一个从机后再查询下一个。循环查询
根本就不存在 主机同时收到四个从机数据的可能性!


我前面说了,从机是主动发送数据的,主机不发命令只管接收数据。所以就存在同时发送时,接收到乱码的问题。

#19


为什么不做个中转呢?可以通过中转将同时收到的东西按顺序发送到开发板呀,中转用个单片机就ok啦

#20


我说要查集线器型号,是很可能这个集线器已经完成了多路隔离/数据缓冲,那就一点问题也没有了。否则的话,只好用四个串口来分别接收,外设不够的话,只能加一片单片机来做了。
485 通常用法是总线型,主机主控通讯。你既然有集线器,很可能是有什么功能的,不然所有设备连在一起就行了,不用集线

#21


引用 18 楼 wince2000 的回复:
Quote: 引用 12 楼 TopVB 的回复:

楼主 485支持一主多从通信,
你用在此处完全可以的
只是需要注意,开发板是主机,只有主机查询从机时,从机才能返回数据。同一时刻,主机只能和一个从机通讯。查询完一个从机后再查询下一个。循环查询
根本就不存在 主机同时收到四个从机数据的可能性!


我前面说了,从机是主动发送数据的,主机不发命令只管接收数据。所以就存在同时发送时,接收到乱码的问题。

不知道楼主对采集速度有要求没?如果要求高的话,只能用多路串口芯片分别接受各个从机的数据了,
对数据要求不高的话,可以使用模拟开关或继电器,用一个串口分时采集从机的数据!