找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3363|回复: 17
打印 上一主题 下一主题
收起左侧

关于单片机多机通讯解决方案建议

[复制链接]
跳转到指定楼层
楼主
ID:36977 发表于 2021-9-26 18:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、用STC8H单片机
2、一个主设备N个从设备(采用软件分配地址-首次分配-增加从设备分配-根据距离长短从小到大分配)
3、通讯方式,485或者其他不易分析的通讯方式
4、地址码,控制码,数据,数据,数据,数据长度,校验位



考虑用Modbus 不知道有没有更好的建议。  
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:419909 发表于 2021-9-26 19:03 | 只看该作者
还没研究过。不过目前我也在做一种多机级联的项目。用的是通用串口方式。在试用中。
回复

使用道具 举报

板凳
ID:36977 发表于 2021-9-26 19:06 | 只看该作者
一般单片机地址都是采用拨码方式设定,现在考虑成本 想用软件 根据唯一ID 赋值地址 再根据距离让从机从小到大获取地址。
回复

使用道具 举报

地板
ID:419909 发表于 2021-9-26 20:11 | 只看该作者
我这个是通过串口传输,但是采用的是应答方式来处理主,从关系。并自动软件分配ID,获得主机权限有两种方式。第一个开机的设备为主机,或者通过按键手动设置。
回复

使用道具 举报

5#
ID:36977 发表于 2021-9-26 20:14 | 只看该作者
wfqxgw 发表于 2021-9-26 20:11
我这个是通过串口传输,但是采用的是应答方式来处理主,从关系。并自动软件分配ID,获得主机权限有两种方式 ...

你说的我们项目实际情况不容许,我们设备不可能固定谁第一个开机,也不好从机固定不变。所以想这如何根据唯一ID 查编码 再根据返回ID的先后顺序固定ID。感谢您的回复
回复

使用道具 举报

6#
ID:624769 发表于 2021-9-26 22:03 | 只看该作者
xuchun 发表于 2021-9-26 20:14
你说的我们项目实际情况不容许,我们设备不可能固定谁第一个开机,也不好从机固定不变。所以想这如何根据 ...

串口多机通信,本来就是依靠不同的地址,来区分哪台机,你既不让从机地址固定,又要区分各从机,感觉上,只能用一个变通的方法。

确保,从机不同一时间一起开机。
主机,定期呼叫某一特定编号从机。比如 0xee (纯粹举例子)
从机,开机默认 0xee,等待主机分配新地址
主机给这台新从机分配一个新的地址,并登记到已开机列表。
从机,重新登记主机分配的地址为新地址,并且亮一个指示灯。

开下一台从机,重复上面步骤。直到所有从机被分配地址

按你的需求好像只能这样变通实行。

当然,还有一个模仿对码的方案,就是从机按一个按键,就进入对码状态,给自己分配对码频道 0xee 等待主机分配新地址。
主机按一个钮,进入对码状态,查找 0xee从机,给他分配新地址。
也是一个方案。

回复

使用道具 举报

7#
ID:36977 发表于 2021-9-26 22:17 | 只看该作者
188610329 发表于 2021-9-26 22:03
串口多机通信,本来就是依靠不同的地址,来区分哪台机,你既不让从机地址固定,又要区分各从机,感觉上, ...

感谢您的回复,可能我的表述有问题,需求是:从设备依次从近至远安装到指定位置,系统运行主设备寻找发现从设备,询问发现的从设备数量是否与实际安装的设备数量一致,如果一致系统开始分配地址,从机最近  -先获取到数据  取最小数地址!但是考虑后期从设备可能更换或者增加,所以不知道大家都是如何处理的。
回复

使用道具 举报

8#
ID:624769 发表于 2021-9-26 22:34 | 只看该作者
xuchun 发表于 2021-9-26 22:17
感谢您的回复,可能我的表述有问题,需求是:从设备依次从近至远安装到指定位置,系统运行主设备寻找发现 ...

你这个只能从非标通信角度去考虑了。

比如环状串口模式,即,主机 TX =>  一号机 RX,  一号机 TX => 二号机 RX  ……………… , N号机 TX => 主机RX

那么,主机发送    “开始设置”    一号机收到, 给自己标记  1号机,然后发送  “你是2号机”, …………………… N号机收到 后  给自己标注 N号机, 并发送 你是 “N + 1 号机”  , 主机收到后, 标记,总共 N 号机。

通信时, 主机发送:  X 号机 做 ABC       然后每个从机接力,收到后判断自己是不是 X 号机,不是的话继续传下去,是的话, 就做 ABC   做完后, 发送: X号机说: CDE    然后,再一圈接力。直到主机收到 后 记录。
回复

使用道具 举报

9#
ID:36977 发表于 2021-9-26 22:43 | 只看该作者
188610329 发表于 2021-9-26 22:34
你这个只能从非标通信角度去考虑了。

比如环状串口模式,即,主机 TX =>  一号机 RX,  一号机 TX =>  ...

感谢,我是想先根据ID判断有多少从机 然后丢多少地址出去 让先收到从机自己捡最小的拿走!主机发功能码时候直接带地址 丢出去 是谁的自己判断 然后干活。
回复

使用道具 举报

10#
ID:624769 发表于 2021-9-26 22:59 | 只看该作者
xuchun 发表于 2021-9-26 22:43
感谢,我是想先根据ID判断有多少从机 然后丢多少地址出去 让先收到从机自己捡最小的拿走!主机发功能码时 ...

我知道你的意思,但是,带地址多从机串口通讯(其实就是并联) 在从机没有分配地址前,所有从机都为收到相同的内容,又会同时发送信息,这是无法调节的矛盾,要么,你手动每个从机设置好地址,要么就是我说的建立一个对码“频道”,要么,就只能环状通信这一条路,
当然,还有一个办法,就是搭建一个串行路由器,所有通讯通过这个串行路由来分配。不过,这个成本,还不如上网络模块了。通过以太网方式通讯就不存在这个问题了。

当然,如果你主机IO多,通过,不同的IO,下拉不同从机的 指定IO 告诉从机,这是我和你私密通讯,也是一个方法。这就类似 SPI 的一主多从模式,通过不同的 SS 线控制,SPI的的片选。
回复

使用道具 举报

11#
ID:36977 发表于 2021-9-26 23:04 | 只看该作者
188610329 发表于 2021-9-26 22:59
我知道你的意思,但是,带地址多从机串口通讯(其实就是并联) 在从机没有分配地址前,所有从机都为收到 ...

好的,感谢您。我再考虑考虑
回复

使用道具 举报

12#
ID:47286 发表于 2021-9-27 02:00 来自触屏版 | 只看该作者
xuchun 发表于 2021-9-26 22:17
感谢您的回复,可能我的表述有问题,需求是:从设备依次从近至远安装到指定位置,系统运行主设备寻找发现 ...

其他都不是问题 就是要求距离确定先后没想出怎么弄
回复

使用道具 举报

13#
ID:343102 发表于 2021-9-27 07:38 | 只看该作者
试试提前写入地址,用I2C通讯。缺点是速率较低。
回复

使用道具 举报

14#
ID:236035 发表于 2021-9-27 08:05 | 只看该作者
要按距离来,就只能手拉手了。远的从机把离主机近的上一个从机作为主机。
回复

使用道具 举报

15#
ID:800529 发表于 2021-9-27 09:21 | 只看该作者
多机通讯的话,也可以考虑下CAN总线通讯。
回复

使用道具 举报

16#
ID:236035 发表于 2021-9-27 10:04 | 只看该作者
baonng 发表于 2021-9-27 09:21
多机通讯的话,也可以考虑下CAN总线通讯。

楼主要求无地址。
回复

使用道具 举报

17#
ID:123289 发表于 2021-9-27 11:06 | 只看该作者
说白了,就是个通讯协议!
通用的格式是:
起始标记、字节数、源机号、的机号、命令号、数据[N]、校验码、结束标记。
这样比较全。可根据具体情况删除一些,如楼主条件是1拖N。由于1是固定的,所以源机号可省。
通过字节数据可以计算出结束标记的位置,结束标记可省。不省也有不省的好处。谁写程序谁清楚。
回复

使用道具 举报

18#
ID:81196 发表于 2021-9-29 13:40 | 只看该作者
当然你也可以选择CAN总线,速度又快,也有自己的仲裁机制。
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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