OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 699|回复: 8

485总线上有多个设备,用什么编程思路比较好

[复制链接]

14

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2015-7-22
在线时间
122 小时
发表于 2024-9-24 16:41:55 | 显示全部楼层 |阅读模式
100金钱
     485总线上挂路5个设备,其中3个设备的通讯协议不同,采用什么样的编程思路比较好?这里是否可以考虑采用面向对象的方式去编程。485总线属于半双工总线,一次只能读写一个设备。从节点设备有时候需要不停的查询状态。大家有没有好的编程思路交流一下。

work is work!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3280

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8182
金钱
8182
注册时间
2020-5-11
在线时间
3694 小时
发表于 2024-9-24 17:08:21 | 显示全部楼层
面向对象是啥?
协议能发出来看看吗?
还得看设备处理数据是按状态机方式还是像modbus那样有超时机制,
如果二者协议有重叠,那啥思路也没法,得从硬件上分开.
专治疑难杂症
回复

使用道具 举报

14

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2015-7-22
在线时间
122 小时
 楼主| 发表于 2024-9-24 17:19:23 | 显示全部楼层
LcwSwust 发表于 2024-9-24 17:08
面向对象是啥?
协议能发出来看看吗?
还得看设备处理数据是按状态机方式还是像modbus那样有超时机制,

有5个从设备,从设备的协议也不完全一样,每个设备都需要解析。所以考虑是不是可以采用类似面向对象的方式,把每个从机定义成一个对象(每个对象都需要解析协议和发送协议)。或者不说面向对象编程,在这种情况下怎样编写程序更合适。
work is work!!!
回复

使用道具 举报

10

主题

3280

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8182
金钱
8182
注册时间
2020-5-11
在线时间
3694 小时
发表于 2024-9-24 17:36:16 | 显示全部楼层
sanv 发表于 2024-9-24 17:19
有5个从设备,从设备的协议也不完全一样,每个设备都需要解析。所以考虑是不是可以采用类似面向对象的方 ...

一般思路是:
向从机1发送数据;接收数据按从机1的通信协议来处理;延时100ms;
向从机2发送数据;接收数据按从机2的通信协议来处理;延时100ms;
向从机3发送数据;接收数据按从机3的通信协议来处理;延时100ms;
......
专治疑难杂症
回复

使用道具 举报

14

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2015-7-22
在线时间
122 小时
 楼主| 发表于 2024-9-24 17:57:01 | 显示全部楼层
LcwSwust 发表于 2024-9-24 17:36
一般思路是:
向从机1发送数据;接收数据按从机1的通信协议来处理;延时100ms;
向从机2发送数据;接收数据 ...

了解,感谢大佬
work is work!!!
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2024-9-25 08:53:54 | 显示全部楼层
面向对象编程思路和485没关系。对象编程下可以:
dev1.read();
dev2.read();
dev3.read();
如果你要多线程读取,那么需要在对象中static mutex muterx;
在read函数 mutex.lock()和mutex.unlock().
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4471
金钱
4471
注册时间
2013-4-22
在线时间
335 小时
发表于 2024-10-6 17:41:27 | 显示全部楼层
面向对象和你说的不同协议没关系,我当前项目就一个串口解析了3种协议,有slip协议、有modbus协议还有北斗的协议,各不相同,只能分时去处理
回复

使用道具 举报

13

主题

263

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5337
金钱
5337
注册时间
2017-8-14
在线时间
236 小时
发表于 2024-10-9 16:04:15 | 显示全部楼层
本帖最后由 zml13917492379 于 2024-10-22 10:55 编辑

在国内外广范使用的RS485通信总线,因为只支持单主站\多IO模块排队轮询问答协议,通信总周期和从站模块数量成正比,IO模块设备多时,实时性不能保证(“《火力发电厂分散控制系统验收导则》5.10.1 控制器处理周期”要求“处理开关量控制的扫描周期应不大于100ms”), RS485长距离通信易丢包、易被干扰,RS485通信不能称为 正真意义上的“现场总线”。
建议用CAN,CANWeb节点价格与RS485类似,但速度、可靠性却天壤不同,
CANWeb现场总线结合CAN总线、以太网的优点,将节点管理功能和实时数据通信功能分离,Web页面监控节点通信负载及通信质量,Web页面可调试、配置节点(不需要控制器或专用的调试工具);不同于主从问答通信,CANWeb是触发小包通信,检测到节点信号变化即发送,实时性更好,通信负载小;CANWeb总线为屏蔽双绞线并接或光纤串接通信,布线、接口成本低,全部光电隔离设计,总线可选冗余、多主站,冗余总线可应用于高可靠的控制系统。 485CWwl.jpg
开发板 资料见:

05CANWeb节点开发板V3使用说明.zip (3.76 MB, 下载次数: 0)
详细资料扣扣群204408503自行下载
回复

使用道具 举报

13

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
350
金钱
350
注册时间
2018-11-2
在线时间
78 小时
发表于 2024-10-26 15:06:29 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 05:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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