OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
楼主: 刘东君

分享一个ModBus主机自己写的,求点评!支持01 02 03 05 06 15 16 功能码

  [复制链接]

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-4-28 12:21:20 | 显示全部楼层
AV8D 发表于 2017-4-27 15:17
你好,我刚才测试从机的16,现在测试出来的问题是检测到噪音、帧错误或校验错误,然后err的值为1,板子上面 ...

我测试时候,没有出现问题,你可以用debug调试,监视数组实际发出的数据! 看看串口到底接收到了什么数据
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-4-28 12:22:18 | 显示全部楼层
AV8D 发表于 2017-4-27 15:17
你好,我刚才测试从机的16,现在测试出来的问题是检测到噪音、帧错误或校验错误,然后err的值为1,板子上面 ...

做一个断点,然后监视采集到的数据,观察实际串口接收到的数据!
回复 支持 反对

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-5-3 09:54:07 | 显示全部楼层
AV8D 发表于 2017-4-27 15:17
你好,我刚才测试从机的16,现在测试出来的问题是检测到噪音、帧错误或校验错误,然后err的值为1,板子上面 ...

大虾,想问下,我拿你的程序修改!用在F407上!为何出现通讯超时的现象!
1.jpg
笑着熬下去@_@
回复 支持 反对

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
发表于 2017-5-3 10:31:25 | 显示全部楼层
jeff_梁 发表于 2017-5-3 09:54
大虾,想问下,我拿你的程序修改!用在F407上!为何出现通讯超时的现象!

检查你的硬件485

回复 支持 反对

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
发表于 2017-5-3 10:31:38 | 显示全部楼层
AV8D 发表于 2017-5-3 10:31
检查你的硬件485

还有我是串口2
回复 支持 反对

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-5-3 10:34:16 | 显示全部楼层
硬件上没有问题 之前拿来单发数据是没问题的 不懂程序设置是不是有问题 加下你QQ说
笑着熬下去@_@
回复 支持 反对

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-5-3 10:34:37 | 显示全部楼层
AV8D 发表于 2017-5-3 10:31
还有我是串口2


硬件上没有问题 之前拿来单发数据是没问题的 不懂程序设置是不是有问题 加下你QQ说
笑着熬下去@_@
回复 支持 反对

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
发表于 2017-5-3 13:16:41 | 显示全部楼层
AV8D 发表于 2017-5-3 10:31
还有我是串口2

1007183161
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-3-5
在线时间
18 小时
发表于 2017-5-3 14:21:03 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-3-3
在线时间
18 小时
发表于 2017-5-3 15:28:06 | 显示全部楼层
master工程中,modbus_rtu()函数中i=3切换功能号是什么逻辑没有看懂后面的case3也是空的
回复 支持 反对

使用道具 举报

11

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2016-10-11
在线时间
61 小时
发表于 2017-5-3 21:31:07 | 显示全部楼层
我验证主机程序功能码03读保持寄存器的时候 向串口1发送从机返回的数据通过调试助手来看能够正常显示,但是在验证功能码01读取线圈输出状态的时候,为什么通过调试助手 线圈为1的时候显示的是空字符,线圈为0的时候什么都没有,比如说线圈设置的是10100,串口打印出来的是两个空字符。。调试的时候Master_OutputIO的数据都是正确的,但是串口却显示不出来。。 QQ图片20170503212603.png QQ图片20170503212833.png QQ图片20170503213121.png
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-4 12:05:16 | 显示全部楼层
不想偷懒的蜗牛 发表于 2017-5-3 21:31
我验证主机程序功能码03读保持寄存器的时候 向串口1发送从机返回的数据通过调试助手来看能够正常显示,但是 ...

看看是不是显示16进制的数据啊
回复 支持 反对

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-5-8 10:34:06 | 显示全部楼层
刘东君 发表于 2017-5-4 12:05
看看是不是显示16进制的数据啊

为什么我移植到407上 一直显示通讯超时  求助坛主
笑着熬下去@_@
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-11-3
在线时间
11 小时
发表于 2017-5-8 10:39:12 | 显示全部楼层
版主,我想用您的主机程序读另一块版的数据,我这边发送的数据命令是01 03 00 00 00 10 44 06可以实现吗?
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-11-3
在线时间
11 小时
发表于 2017-5-8 10:42:52 | 显示全部楼层
搓澡巾 发表于 2017-5-8 10:39
版主,我想用您的主机程序读另一块版的数据,我这边发送的数据命令是01 03 00 00 00 10 44 06可以实现吗?

序号        含义                          偏移        字节数        说明
1        设备地址                   0                   1        设备唯一标识
2        操作码(读)                   1                   1        固定值0x03
3        寄存器起始编号   2                   2        读取的第一个寄存器编号
4        寄存器个数           4                   2        读取寄存器个数
5        CRC16检验           6                   2        低前高后
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-8 16:20:27 | 显示全部楼层
搓澡巾 发表于 2017-5-8 10:42
序号        含义                          偏移        字节数        说明
1        设备地址                   0                   1        设备唯一标识
2 ...

你可以自己试验下,如果是标准的ModBus就可以,如果不是就抱歉了
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-8 16:32:30 | 显示全部楼层
电子蛋黄酱 发表于 2017-5-3 15:28
master工程中,modbus_rtu()函数中i=3切换功能号是什么逻辑没有看懂后面的case3也是空的

这个是预留的,以后更新程序用的,我现在只用一块电路板做从机,以后从机多了,就需要循环访问从机了
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-8 16:34:09 | 显示全部楼层
搓澡巾 发表于 2017-5-8 10:39
版主,我想用您的主机程序读另一块版的数据,我这边发送的数据命令是01 03 00 00 00 10 44 06可以实现吗?

你这个数据,没有数据内容!
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-8 16:36:12 | 显示全部楼层
jeff_梁 发表于 2017-5-8 10:34
为什么我移植到407上 一直显示通讯超时  求助坛主

可以截图观察下,用DEBUG来调试程序,观察下,你的数组接收到了什么数据!
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-8 16:48:44 | 显示全部楼层
本帖最后由 刘东君 于 2017-5-8 16:51 编辑
电子蛋黄酱 发表于 2017-5-3 15:28
master工程中,modbus_rtu()函数中i=3切换功能号是什么逻辑没有看懂后面的case3也是空的

设计思想:主机发送一条命令,功能码为01,然后接收从机返回的数据,如果从机应答正确,那么切换下一个功能码02 ,如果从机应答错误,继续发送功能码01指令,如果还是错误,在继续发送一次,如果仍然错误,切换功能码02 ,不可能一直发送错误的01功能码,那样就进入死循环了。

    这个是预留的为以后添加程序用的。
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-8 16:49:08 | 显示全部楼层
不想偷懒的蜗牛 发表于 2017-5-3 21:31
我验证主机程序功能码03读保持寄存器的时候 向串口1发送从机返回的数据通过调试助手来看能够正常显示,但是 ...

解决了吗?
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-8 16:49:27 | 显示全部楼层
jeff_梁 发表于 2017-5-8 10:34
为什么我移植到407上 一直显示通讯超时  求助坛主

可以穿上来,让大家看看!
回复 支持 反对

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-5-9 15:00:53 | 显示全部楼层
刘东君 发表于 2017-5-8 16:49
可以穿上来,让大家看看!

解决了 想问下坛主做数据转换吗 转成浮点数的
笑着熬下去@_@
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-9 15:42:00 | 显示全部楼层
jeff_梁 发表于 2017-5-9 15:00
解决了 想问下坛主做数据转换吗 转成浮点数的

木搞过这个!
回复 支持 反对

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-5-9 16:28:39 | 显示全部楼层

你这个只是针对整形数据 如果是仪表监测数据浮点数 呢
笑着熬下去@_@
回复 支持 反对

使用道具 举报

11

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2016-10-11
在线时间
61 小时
发表于 2017-5-9 19:56:22 | 显示全部楼层

解决了  谢谢
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-5-10 09:58:54 | 显示全部楼层
jeff_梁 发表于 2017-5-9 16:28
你这个只是针对整形数据 如果是仪表监测数据浮点数 呢

这个需要你自己找找数据转换的程序了,我目前没有用到!我一般都是把浮点型数据转换为整形的!
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2017-5-16
在线时间
0 小时
发表于 2017-5-16 23:33:30 | 显示全部楼层
jeff_梁 发表于 2017-5-9 15:00
解决了 想问下坛主做数据转换吗 转成浮点数的

能把你移植的程序传我下吗,我也用的是407的。
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2017-5-16
在线时间
0 小时
发表于 2017-5-16 23:34:43 | 显示全部楼层
kazhafeizhale 发表于 2017-5-16 23:33
能把你移植的程序传我下吗,我也用的是407的。

qq联系下吧
回复 支持 反对

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-5-17 09:12:01 | 显示全部楼层

可以从别人的F4那里改啊 都是一样的 代码思想一样的

rs485_s_u_v2.1.0.rar

2.84 MB, 下载次数: 1711

笑着熬下去@_@
回复 支持 1 反对 0

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2017-5-16
在线时间
0 小时
发表于 2017-5-17 12:20:39 | 显示全部楼层
我刚学,谢谢啊
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-11-3
在线时间
11 小时
发表于 2017-5-22 17:00:24 | 显示全部楼层
刘东君 发表于 2017-5-8 16:34
你这个数据,没有数据内容!

什么数据内容啊?我买了一个气象站,这个气象站里是modbus从机,想自己用一块32的板子做主机读取气象站里的内容。
回复 支持 反对

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2017-7-15 14:59:37 | 显示全部楼层
厉害,学习一下,谢谢!!1
回复 支持 反对

使用道具 举报

18

主题

139

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2014-10-29
在线时间
228 小时
发表于 2017-7-26 15:23:55 | 显示全部楼层
本帖最后由 persevere 于 2017-7-26 15:25 编辑
刘东君 发表于 2017-4-7 10:00
这个是从机的,这个弄了2天,

刘东君  你好,我移植你的MODBUS从机代码到战舰V2.2死活不成功的,就改动485的使能端 ,其他跟战舰V3一样的啊,都是串口2,啥情况啊??@刘东君  
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-7-24
在线时间
7 小时
发表于 2017-8-4 10:10:41 | 显示全部楼层
感谢楼主  这几天刚好在学习这个   自己看了一下  真的很有帮助
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-8-4 14:52:52 | 显示全部楼层
persevere 发表于 2017-7-26 15:23
刘东君  你好,我移植你的MODBUS从机代码到战舰V2.2死活不成功的,就改动485的使能端 ,其他跟战舰V3一样 ...

你先确定下硬件连接有没有问题,你的主机是什么呢?

回复 支持 反对

使用道具 举报

18

主题

139

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2014-10-29
在线时间
228 小时
发表于 2017-8-7 20:54:44 | 显示全部楼层
刘东君 发表于 2017-8-4 14:52
你先确定下硬件连接有没有问题,你的主机是什么呢?

硬件连接没问题,主机modbus调试精灵,从机就是收不到,不知道什么情况了??
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-8-8 14:44:06 | 显示全部楼层
persevere 发表于 2017-8-7 20:54
硬件连接没问题,主机modbus调试精灵,从机就是收不到,不知道什么情况了??

有示波器吗吗?  可以观测下波形
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-8-8 14:45:11 | 显示全部楼层
persevere 发表于 2017-8-7 20:54
硬件连接没问题,主机modbus调试精灵,从机就是收不到,不知道什么情况了??

另外可以做个断点,观测下发送的数据,到底是什么
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2017-1-7
在线时间
12 小时
发表于 2017-8-8 17:18:48 | 显示全部楼层
厉害了
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2017-1-7
在线时间
12 小时
发表于 2017-8-8 17:23:19 | 显示全部楼层
很棒
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-8-28 08:42:33 | 显示全部楼层
八度空间 发表于 2017-4-18 10:09
可以这么说,在ST的F0和F3系列当中有modbus的一个溢出时间可以设置的,这个就可以顶替那个定时器做了

能详细说下嘛?
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-8-28 12:41:02 | 显示全部楼层

你弄一份参考手册研究一下就可以了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-8-29 16:41:46 | 显示全部楼层
八度空间 发表于 2017-8-28 12:41
你弄一份参考手册研究一下就可以了

大概在多少页啊,是STM32的手册吗
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-8-29 23:50:29 | 显示全部楼层
刘东君 发表于 2017-8-29 16:41
大概在多少页啊,是STM32的手册吗

UART章节
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-8-30 10:04:48 | 显示全部楼层

好的,多谢
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2017-9-28
在线时间
39 小时
发表于 2017-10-8 14:03:52 | 显示全部楼层
楼主我用你的从机程序实验的时候用pc输入信号的时候没有回复而且ds0闪红灯...请问该怎么处理
用的f1的精英版
转换器和驱动都装好了
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2017-9-28
在线时间
39 小时
发表于 2017-10-8 15:21:21 | 显示全部楼层
本帖最后由 juzzzzzz 于 2017-10-8 15:24 编辑

还有做主机程序的时候,也是显示通信超时@刘东君
实在不知道哪里出现问题,求楼楼能帮帮忙,谢谢楼楼
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-10-9 13:03:13 | 显示全部楼层
juzzzzzz 发表于 2017-10-8 14:03
楼主我用你的从机程序实验的时候用pc输入信号的时候没有回复而且ds0闪红灯...请问该怎么处理
用的f1的精英 ...

线没有连错吧,串号使用的串口几啊? 先把硬件联通了
回复 支持 反对

使用道具 举报

23

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-2-19
在线时间
133 小时
 楼主| 发表于 2017-10-9 13:04:12 | 显示全部楼层
juzzzzzz 发表于 2017-10-8 15:21
还有做主机程序的时候,也是显示通信超时@刘东君
实在不知道哪里出现问题,求楼楼能帮帮忙,谢谢楼楼

根据你的描述感觉有地方配置不对,或者线有问题,你这是主从机都有问题啊。。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 19:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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