奏奏奏 发表于 2020-1-4 11:57:53

我做的是CAN总线的,但是485总线有共性。我简单说一下我的解决方案:
(1)默认485地址是STM32的UID的12字节中最后一个字节;
(2)每个485子设备往485总线发送一条查询地址是否重复的指令;
(3)如果有回复数据证明有子设备是有地址重复的情况的话,就将当前地址加上UID的12字节中倒数第二个字节地址作为新地址,隔一段时间后执行步骤(2)(如此类推,下一次是加上倒数第三个字节……)直到不出现重复地址为止(因为地址更新后可能会与另外一个或几个设备地址重复)。当然如果子设备接近200个的话时间就比较长了而且不一定成功。485总线一般挂的子设备不超过60个。

qiangtech 发表于 2020-1-4 12:23:43

奏奏奏 发表于 2020-1-4 11:57
我做的是CAN总线的,但是485总线有共性。我简单说一下我的解决方案:
(1)默认485地址是STM32的UID的12字 ...

第2点,怎么分时让子设备在总线上发送数据是关键。子设备的先后顺序怎么确定?

奏奏奏 发表于 2020-1-4 13:33:09

qiangtech 发表于 2020-1-4 12:23
第2点,怎么分时让子设备在总线上发送数据是关键。子设备的先后顺序怎么确定? ...

参考我之前回复的帖子中说的,开机后每隔50毫秒从485地址是1的顺序开始发。
例如有个485子设备,它的STM32的UID的12字节中最后一个字节是03,它就在开机后150毫秒发。

tanic 发表于 2020-1-6 11:27:51

稳定方案:
1.地址配置:安装时给每台终端手动配好地址(可用红外遥控配置),配完一个+1配置下一个,如此地址连续,操作也很快。
2.终端搜索:主机上添加搜索功能,从刚才配置的地址逐一轮询,记录响应情况,安装人员根据响应和实际配置确认一一对应后,把终端地址固化,每次开机按照之前的固化结果和终端通讯。这才是工业稳妥方案。

无地址RS485那就很不稳定了

maxtch 发表于 2020-1-6 11:40:41

奏奏奏 发表于 2020-1-4 11:57
我做的是CAN总线的,但是485总线有共性。我简单说一下我的解决方案:
(1)默认485地址是STM32的UID的12字 ...

CAN 是可以做 CSMA/CD 的。只要可以 CSMA/CD,就可以用 DHCP 来分配地址。

maxtch 发表于 2020-1-6 11:44:00

tanic 发表于 2020-1-6 11:27
稳定方案:
1.地址配置:安装时给每台终端手动配好地址(可用红外遥控配置),配完一个+1配置下一个,如此地址 ...

RS485 可以做 CSMA/CD,也就是说可以通过协议保证数据完整。有 CSMA/CD 为基础就可以跑 DHCP,用其中一台设备给其余设备分配地址。(再进一步甚至可以在带 CSMA/CD 的 RS485 上跑 SLIP 和完整的 TCP/IPv4。)

tanic 发表于 2020-1-6 11:53:36

maxtch 发表于 2020-1-6 11:44
RS485 可以做 CSMA/CD,也就是说可以通过协议保证数据完整。有 CSMA/CD 为基础就可以跑 DHCP,用其中一台 ...

确实可以,一次DHCP成功后,固化结果,以后就可以高速通讯了

maxtch 发表于 2020-1-7 12:17:10

tanic 发表于 2020-1-6 11:53
确实可以,一次DHCP成功后,固化结果,以后就可以高速通讯了

最好是每隔一段时间 DHCP 一次,这样的话节点可增可减。
页: 1 2 [3]
查看完整版本: 无地址RS485怎么完成握手