OpenEdv-开源电子网

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

STM32移植modbus协议应用

[复制链接]

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-8-19
在线时间
13 小时
发表于 2016-8-21 17:24:55 | 显示全部楼层 |阅读模式
1金钱
如何利用基于STM32的modbus协议多机通讯?如从机地址设定?主机地址又是什么?数据发送有什么要求?有什么关于采集环境信息的例子?

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

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-8-19
在线时间
13 小时
 楼主| 发表于 2016-8-21 18:51:32 | 显示全部楼层
有没有,多机通讯的例子?如果要从机1 只给主机发送数据 ,从机2只给主机发送数据,数据前需要发送什么地址?
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-8-19
在线时间
13 小时
 楼主| 发表于 2016-8-21 18:52:07 | 显示全部楼层
yklstudent 发表于 2016-8-21 18:07
主机要毛的地址,从机地址你自己分配好了;
用一个8位拔码开关设置就可以了


有没有,多机通讯的例子?如果要从机1 只给主机发送数据 ,从机2只给主机发送数据,数据前需要发送什么地址?
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-8-19
在线时间
13 小时
 楼主| 发表于 2016-8-21 21:28:25 | 显示全部楼层
yklstudent 发表于 2016-8-21 20:54
你需要先去了解MODBUS协议;
或者直接移植FreeModbus

已经移植好了
每台机子发送数据广播都能接收到,怎样才能做到只给指定的机子发送数据?
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2016-8-21 23:53:08 | 显示全部楼层
不是有从机地址吗?
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-8-19
在线时间
13 小时
 楼主| 发表于 2016-8-23 14:20:11 | 显示全部楼层
d1z1y2 发表于 2016-8-21 23:53
不是有从机地址吗?

该怎么用?是基于STM32的
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-8-23 15:03:15 | 显示全部楼层
18419951276 发表于 2016-8-23 14:20
该怎么用?是基于STM32的

和stm32没关系,主要看你程序怎么写
我有故事,你有酒吗
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2016-1-15
在线时间
72 小时
发表于 2016-8-23 15:31:57 | 显示全部楼层
在初始化Modbus时,设置从机地址,就是   eMBInit(MB_RTU, 0x01, 0x02, 9600, MB_PAR_NONE)        中的第二个参数,设置为01,主机就可以和01从机进行通信,设置为02,就可以和02从机进行通信。你要设置多个从机,就多初始化几次就好了,收发数据时注意从机地址不搞错。
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2016-8-24 12:19:39 | 显示全部楼层
Modbus 协议与STM32没什么关系,按照协议规范编写就行,好好理解一下“协议”是什么意思,简单来讲
一般的,从机应该设计成可设置参数,比如波特率、从机地址等。在设备使用阶段,所有从机波特率与主机一致,但是各从机地址不能重复,只能唯一。
当从机接收主机发来的命令时,先解析出从机地址,再与自身的地址比对,如果一致,说明这个命令是发给自己的,然后执行命令中所要求的动作。如果地址不一致,就不做任何动作。
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-8-19
在线时间
13 小时
 楼主| 发表于 2016-8-24 13:49:26 | 显示全部楼层
会划水的小鱼 发表于 2016-8-23 15:31
在初始化Modbus时,设置从机地址,就是   eMBInit(MB_RTU, 0x01, 0x02, 9600, MB_PAR_NONE)        中的第二个参数 ...

主机程序中的 初始化    eMBInit(MB_RTU, 0x01, 0x02, 9600, MB_PAR_NONE);
如果说从机要对主机发送数据(0x06)                                       
                                        USART_SendData(USART2,0x01);//发送主机地址
                                        USART_SendData(USART2,0x06);//发送数据               
                                        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
是这样吗?
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-8-19
在线时间
13 小时
 楼主| 发表于 2016-8-24 13:51:59 | 显示全部楼层
d1z1y2 发表于 2016-8-24 12:19
Modbus 协议与STM32没什么关系,按照协议规范编写就行,好好理解一下“协议”是什么意思,简单来讲
一般的 ...

主机程序中的 初始化    eMBInit(MB_RTU, 0x01, 0x02, 9600, MB_PAR_NONE);
如果说从机要对主机发送数据(0x06)                                       
                                        USART_SendData(USART2,0x01);//发送主机地址
                                        USART_SendData(USART2,0x06);//发送数据               
                                        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
是这样吗?
功能码怎么用?怎么写?可以举个例子吗?
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-8-19
在线时间
13 小时
 楼主| 发表于 2016-8-24 14:30:40 | 显示全部楼层
会划水的小鱼 发表于 2016-8-23 15:31
在初始化Modbus时,设置从机地址,就是   eMBInit(MB_RTU, 0x01, 0x02, 9600, MB_PAR_NONE)        中的第二个参数 ...

好像还是不合适,初始化多个从机地址是就不合适了就直接不工作了
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2016-1-15
在线时间
72 小时
发表于 2016-8-24 16:55:16 | 显示全部楼层
18419951276 发表于 2016-8-24 13:49
主机程序中的 初始化    eMBInit(MB_RTU, 0x01, 0x02, 9600, MB_PAR_NONE);
如果说从机要对主机发送数 ...

并不是这样用的,freemodbus有自己 的协议的,从机是不能主动的去给上位机发消息,而是要上位机给从机发消息后,从机去给上位机一个回应。Modbus中有很多功能码,你熟悉了这些功能码就知道数据是如何收发的了。
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2016-8-25 12:14:14 | 显示全部楼层
同楼上,所以说,楼主没有明白什么叫“协议”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 13:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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