硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2241|回复: 8
收起左侧

[技术讨论] 485多主机防冲突

[复制链接]

4

主题

6

回帖

18

积分

新手上路

积分
18
发表于 2021-10-12 09:51:40 | 显示全部楼层 |阅读模式

应用需要485总线进行多主机发送(能改硬件就上CAN了,关键改不了),这就不可避免要进行侦听防冲突,斑竹、各位大神有没有好的思路大家一起研究一下,谢谢!万能能互联网,阿门
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106638
QQ
发表于 2021-10-12 10:04:00 | 显示全部楼层
回复

使用道具 举报

4

主题

6

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-10-12 15:41:04 | 显示全部楼层
eric2013 发表于 2021-10-12 10:04
https://github.com/blackdog70/mm485

斑竹,非常感谢你的回复。这个网站电信网打不开................给点提示,我搜搜看
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106638
QQ
发表于 2021-10-12 15:53:21 | 显示全部楼层
zhongmeijun007 发表于 2021-10-12 15:41
斑竹,非常感谢你的回复。这个网站电信网打不开................给点提示,我搜搜看

这几天Github貌似歇菜了,无法访问,修改了hosts文件,凑合能用了
http://www.armbbs.cn/forum.php?m ... 5120&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

4

主题

6

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-10-12 16:07:21 | 显示全部楼层
eric2013 发表于 2021-10-12 15:53
这几天Github貌似歇菜了,无法访问,修改了hosts文件,凑合能用了
http://www.armbbs.cn/forum.php?mod= ...

斑竹,非常感谢你的回复。用您给的方法,还是开不了网站,您可以将资料转发一份给我么,万分感谢!38455496@qq.com 原来还能爬个墙头,现在不知道咋爬墙了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106638
QQ
发表于 2021-10-12 16:35:52 | 显示全部楼层
mm485-master.zip (9.09 KB, 下载次数: 28)

QQ截图20211012163418.png
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-10-13 16:58:37 | 显示全部楼层
如果主机数量比较少,可以在设备上电的时候先协商出一个主机,让这个主机去轮询其他主机比较稳妥。
假设有32个主机 波特率9600,8,N,1。一秒传输960字节数据。默认每个主机分配10ms数据发送时间,如果采用空闲中断触发接收,理论上10ms可以发送8字节数据。设计上采用叫地主的方式。32个主机分别分配1~32地址。
假设协议2个字节:命令+主机地址。
1.主机上电时,如果100ms内没有接收到数据,进入叫地主环节。叫地主命令为00。
2.主机1在第一个10ms发送00 01。其他主机根据收到的叫地主里面的地址A信息和自身地址信息B,等待(B-A)*10ms的时间后叫地主,
如果没有前置主机那么A=0, 每个主机在叫地主期间需要记录主机的地址信息。叫地主以地址低优先。
3.主机在叫地主完成后,进入抢地主环节,为了防止不同主机开机速度不一导致未能在叫地主阶段及时发送自身地址。在最后一个主机发送或者延迟时间到了以后,进行第二轮的叫地主环节.重复2的过程
4.主机在成为地主后,依次轮询[命令01]叫地主期间记录到的各个主机:01+农民地址。其他农民主机在自己要出牌的时候发送数据,没有数据的时候就发送一个默认的ACK【命令AA】: AA+农民地址
地主在接收到农民主机的响应后轮询下一个主机。如果100ms内没有响应,也轮询下一个农民
5.为了在通信过程中对设备卸载和加载,可以在设定轮询农民8次不在线就把该农民剔除,不轮询。如果地主掉线,100ms内其他设备将接收不到信息,重复2、3的过程。
如果有新的主机加入,我们设定一个时间,比如5分钟,地主在运行5分钟以后洗牌,发送FF FF,重新进行2,3的过程。
如果新的主机是一个个挂载,那么可以在地主轮询地址最后加入轮询命令01+地址FF,新的主机在接收到这个地址后进行响应,地主根据响应的地址来进行添加到轮询列表还是直接发送FF FF进行2、3过程

2、3过程根据主机数量,基本上可以在1~3s内完成

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106638
QQ
发表于 2021-10-14 00:11:01 | 显示全部楼层
旮旯旭 发表于 2021-10-13 16:58
如果主机数量比较少,可以在设备上电的时候先协商出一个主机,让这个主机去轮询其他主机比较稳妥。
假设有 ...

牛,码这么多字,太详细了
回复

使用道具 举报

28

主题

178

回帖

262

积分

高级会员

积分
262
发表于 2021-10-15 10:47:06 | 显示全部楼层
很无敌啊~  最近闲着无聊刚好想看一下冲突处理,没想到就发现了这个~
还有叫地主的文字说明
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 10:36 , Processed in 0.260197 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表