OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
12
返回列表 发新帖
楼主: 笨鸟想飞

FreeModbus在STM32103上移植一直回复同一个数据

[复制链接]

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2017-8-28 10:41:35 | 显示全部楼层
564646396 发表于 2017-8-28 10:26
啊哈哈 我现在有点小激动          谢谢解答  啊哈哈 我也能这样控制灯的亮灭了


你实际起始地址2刚好符合你的现象。
小小蜗牛
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2017-8-28 10:42:19 | 显示全部楼层
本帖最后由 jiutianshenjian 于 2017-8-28 10:43 编辑
564646396 发表于 2017-8-28 10:26
啊哈哈 我现在有点小激动          谢谢解答  啊哈哈 我也能这样控制灯的亮灭了

这个怎么删,怎么发了三次。
小小蜗牛
回复

使用道具 举报

10

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2017-4-20
在线时间
102 小时
发表于 2017-8-28 10:47:42 | 显示全部楼层
jiutianshenjian 发表于 2017-8-28 10:42
这个怎么删,怎么发了三次。

辛苦了  真的小激动        
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
 楼主| 发表于 2017-8-30 09:23:31 | 显示全部楼层
564646396 发表于 2017-8-28 10:26
啊哈哈 我现在有点小激动          谢谢解答  啊哈哈 我也能这样控制灯的亮灭了

老铁,你的这个问题应该是没搞清楚如何去读、写某一个寄存器的某一位。如果在原有代码没有更改的情况下,出现你说的那种问题,很有可能就是在MODBUS POLL里的设置没设置对。这种情况有两种办法解决,要么设置正确的MODBUS POLL配置,要么修改你代码的寄存器顺序、地址。
我定义了一个保持寄存器的数组,结构如下
举例:
u16 usRegHoldingBuf[REG_HOLDING_NREGS]={0x0001,0x0002};

从机地址是 0X0A
eMBInit(MB_RTU,0x0A, 1, 9600, MB_PAR_NONE);  //初始化FreeModbus       

说明;

1、usRegHoldingBuf[REG_HOLDING_NREGS] 这个数组只有两个元素,分别是0x0001,0x0002

2、进行判断
if(usRegHoldingBuf[1]==0x01)
                        {
                                LED0=0;
                                delay_ms(1000);                       
                                delay_ms(500);       
                                LED0=1;                                                               
                                usRegHoldingBuf[1]=0;
                        }
                       
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
 楼主| 发表于 2017-8-30 09:27:53 | 显示全部楼层
564646396 发表于 2017-8-28 10:26
啊哈哈 我现在有点小激动          谢谢解答  啊哈哈 我也能这样控制灯的亮灭了

老铁,你的这个问题应该是没搞清楚如何去读、写某一个寄存器的某一位。如果在原有代码没有更改的情况下,出现你说的那种问题,很有可能就是在MODBUS POLL里的设置没设置对。这种情况有两种办法解决,要么设置正确的MODBUS POLL配置,要么修改你代码的寄存器顺序、地址。
我定义了一个保持寄存器的数组,结构如下
举例:
u16 usRegHoldingBuf[REG_HOLDING_NREGS]={0x0001,0x0002};

从机地址是 0X0A
eMBInit(MB_RTU,0x0A, 1, 9600, MB_PAR_NONE);  //初始化FreeModbus       

说明;

1、usRegHoldingBuf[REG_HOLDING_NREGS] 这个数组只有两个元素,分别是0x0001,0x0002

2、进行判断
if(usRegHoldingBuf[1]==0x01)
                        {
                                LED0=0;
                                delay_ms(1000);                       
                                delay_ms(500);       
                                LED0=1;                                                               
                                usRegHoldingBuf[1]=0;
                        }
                       
3、这里的判断,你没搞清楚。if(usRegHoldingBuf[1]==0x01)这里是判断第二个元素是否等于0x01,如果是,点灯。

如果写成if(usRegHoldingBuf[0]==0x01),这样就是判断第一个元素


再根据代码:
#define REG_HOLDING_START               (USHORT)0x0000  //保持寄存器地址   03功能码
#define REG_HOLDING_NREGS                (USHORT)2  //保持寄存器个数


代码搞清楚之后,就是MODBUS POLL里的设置问题,

进行16功能码写操作,根据以上的代码条件,保存寄存器地址为0x00,个数为2
后面就是对位数进行修改了
回复

使用道具 举报

10

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2017-4-20
在线时间
102 小时
发表于 2017-8-30 09:45:28 | 显示全部楼层
笨鸟想飞 发表于 2017-8-30 09:27
老铁,你的这个问题应该是没搞清楚如何去读、写某一个寄存器的某一位。如果在原有代码没有更改的情况下, ...

谢谢啊   刚开始的寄存器的地址为0x0001   那么之前的地址应该是从01开始    usRegHoldingBuf[1]==0x01     usRegHoldingBuf[1]对应的地址是0X02  那么0X02地址的寄存器的值为0X01  那么灯亮        usRegHoldingBuf[1]=0   这个最后=0  屏幕每次发的位值只有  00   和01  01对应的是NO    00对应的是off  
  后面我改成了另外的值 不然每次刚写完亮一下就灭了  应该对函数没影响把     谢谢指导~  理解你的意思了
回复

使用道具 举报

10

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2017-4-20
在线时间
102 小时
发表于 2017-8-31 11:42:10 | 显示全部楼层
笨鸟想飞 发表于 2017-8-30 09:27
老铁,你的这个问题应该是没搞清楚如何去读、写某一个寄存器的某一位。如果在原有代码没有更改的情况下, ...

嘿嘿  大神  我打算把串口1换成 串口2   有哪些要注意的地方吗?
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
 楼主| 发表于 2017-9-4 11:47:54 | 显示全部楼层
564646396 发表于 2017-8-31 11:42
嘿嘿  大神  我打算把串口1换成 串口2   有哪些要注意的地方吗?

修改MODBUS内的portserial.c里面的底层配置就行了
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
 楼主| 发表于 2017-9-7 10:40:59 | 显示全部楼层
今天测试发现,从机地址最多只能到247,后面那几个都异常,初步判断可能是内部代码某些地方的问题,这个原因就不细究了。从应用角度来说,247个从机地址对于我来说足够了
回复

使用道具 举报

10

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2017-4-20
在线时间
102 小时
发表于 2017-9-7 20:23:41 | 显示全部楼层
笨鸟想飞 发表于 2017-9-7 10:40
今天测试发现,从机地址最多只能到247,后面那几个都异常,初步判断可能是内部代码某些地方的问题,这个原 ...

嘿嘿 串口已经改好了     从机地址这么多可以
回复

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2017-11-18
在线时间
11 小时
发表于 2017-11-18 08:13:11 | 显示全部楼层
各位大神,想请教一下,如果把这个代码移植到STM32F103C8T6(中等容量)上,除了startup文件,还需要做哪些改动?
谢谢!







Your help are appreciate!
回复

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2017-11-18
在线时间
11 小时
发表于 2017-11-18 08:27:25 | 显示全部楼层
这是从机的代码吗?如果一个从机,下面还有若干个设备等待它轮询,那是不就既是从又是主机啦?
回复

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2017-11-18
在线时间
11 小时
发表于 2017-11-21 07:44:59 | 显示全部楼层
各位大神,初学stm32,想把这个移植到中等容量的STM32F103C8T6上,把startup文件改成md.s的后,运行会报错(找不到hd.s的文件),想问下为什么它不能自动去调用md.s的文件呢?应该怎样做?
谢谢!
回复

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2017-11-18
在线时间
11 小时
发表于 2017-11-23 08:36:53 | 显示全部楼层
今天尝试很多遍,怎么只有在Slave ID=10,Address=1,Quantity=8时才 modbus poll的Err才会显示0,其他任何数值都报错,有人能告诉我一下原因吗?
谢谢!
回复

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2017-11-18
在线时间
11 小时
发表于 2017-11-23 08:46:08 | 显示全部楼层
Horseman 发表于 2017-11-23 08:36
今天尝试很多遍,怎么只有在Slave ID=10,Address=1,Quantity=8时才 modbus poll的Err才会显示0,其他任何 ...

不会上传图片,就像2楼那个配置Read/Write Definition图中那样,为什么只有在Slave ID=10,Address=1,Quantity=8时 modbus poll的结果才会正确?是哪里限定的?

谢谢!
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2017-11-23 10:14:09 | 显示全部楼层
就普通问答式吗 ,有没有点名机制 ,如何保证实时性
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
 楼主| 发表于 2017-12-5 16:56:50 | 显示全部楼层
Horseman 发表于 2017-11-18 08:13
各位大神,想请教一下,如果把这个代码移植到STM32F103C8T6(中等容量)上,除了startup文件,还需要做哪些 ...

首先基本的改芯片,改路径,改define,和更改烧录的芯片选项,这个就不在这里详细说了,你可以上网搜移植的。硬件底层,主要就是改
port.c------功能码程序
portserial.c-------串口配置    (这个是必须要改的,改回你匹配的引脚)
porttimer.c---------时间配置
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
 楼主| 发表于 2017-12-5 16:58:24 | 显示全部楼层
Horseman 发表于 2017-11-23 08:36
今天尝试很多遍,怎么只有在Slave ID=10,Address=1,Quantity=8时才 modbus poll的Err才会显示0,其他任何 ...

首先确认你用的是我2楼的模版,后面硬件底层驱动改对了,如果改对了的话就会有回复。然后就是回复正不正确的问题了,这个就是上位机的配置问题
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
 楼主| 发表于 2017-12-5 17:01:30 | 显示全部楼层
xyl210xyl 发表于 2017-11-23 10:14
就普通问答式吗 ,有没有点名机制 ,如何保证实时性

这个freemodbus,大致是主机对从机进行点名的读写操作。如果应用在通信领域,基本是用在点对点,主机广播,从机接收,相匹配的才会有回复。因为modbus的协议机制是,主机发送数据会带有目标从机地址的,而相匹配的从机收到以后才会有回复,如果不是目标从机地址,从机是不会回复的
回复

使用道具 举报

32

主题

230

帖子

0

精华

高级会员

Rank: 4

积分
508
金钱
508
注册时间
2016-4-14
在线时间
113 小时
发表于 2018-7-19 14:38:19 | 显示全部楼层
楼主我咱觉得你485的发送接收使能没配置呢。。。我是错觉吗?
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:41:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:45:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:45:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:47:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:47:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:47:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:47:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:48:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:48:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:49:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:50:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:52:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:52:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:52:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:52:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:53:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:58:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:59:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 14:59:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 15:00:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 15:00:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 15:00:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽

0

主题

23

帖子

0

精华

禁止访问

积分
41
金钱
41
注册时间
2018-7-18
在线时间
1 小时
发表于 2018-7-19 15:00:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-7-23 11:10:02 | 显示全部楼层
楼主你好,能不能把你的Modbus Poll 测试软件发我一下 或者分享出来  
回复

使用道具 举报

60

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
478
金钱
478
注册时间
2017-11-22
在线时间
136 小时
发表于 2018-8-16 11:09:32 | 显示全部楼层
jiutianshenjian 发表于 2017-8-11 16:22
#define REG_HOLDING_START                        (USHORT)0x0005  //保持寄存器
#define REG_HOLDING_N ...

应该是0A 03 00 05 00 04 ******才对吧
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
发表于 2018-11-3 17:47:20 | 显示全部楼层
问下为什么我的起始地址设置的1,用软件测的时候起始地址只能是0


#define REG_INPUT_START                          (USHORT)0x0001 //输入寄存器起始地址
#define REG_INPUT_NREGS                          (USHORT)8          //输入寄存器个数
#define REG_HOLDING_START                        (USHORT)0x0001 //保持寄存器起始地址
#define REG_HOLDING_NREGS                        (USHORT)8          //保持寄存器个数

Poll设置图.PNG
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-5 21:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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