OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32/FPGA开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
楼主: 八度空间

FreeModbus在STM32上移植

  [复制链接]

  离线 

1

主题

2

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2014-11-4
在线时间
6 小时
发表于 2018-5-18 08:44:28 | 显示全部楼层
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 2018-5-18 23:40:42 | 显示全部楼层
752151619 发表于 2018-5-18 07:09
是的。我用232通讯很正常 换了485芯片 加了一个收发控制状态I/O口 ,结果是有时正常,有时会死机。有什么 ...

抓一下DE、RX、TX这几个脚的时序图看下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

  离线 

16

主题

118

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2490
金钱
2490
注册时间
2015-4-18
在线时间
264 小时
发表于 2018-5-19 20:16:52 | 显示全部楼层
八度空间 发表于 2018-5-18 23:40
抓一下DE、RX、TX这几个脚的时序图看下

很奇怪的现象,把485芯片换了就好像正常了,之前买的一批MAX485都有出现通讯死机。但后来重新买了一批回来,换上去就没出现原来的问题了。难道是芯片本身的问题了,我感觉芯片应该都是好的。
回复 支持 反对

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2722
金钱
2722
注册时间
2013-8-27
在线时间
327 小时
发表于 2018-5-19 22:52:23 | 显示全部楼层
有个文件报毒啊。
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 2018-5-20 12:35:38 | 显示全部楼层
ligeng 发表于 2018-5-19 22:52
有个文件报毒啊。

什么杀毒软件辣么牛逼
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 2018-5-20 12:35:49 | 显示全部楼层
752151619 发表于 2018-5-19 20:16
很奇怪的现象,把485芯片换了就好像正常了,之前买的一批MAX485都有出现通讯死机。但后来重新买了一批回 ...

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

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-5-21
在线时间
3 小时
发表于 2018-5-23 15:42:58 | 显示全部楼层
怎么不能发言
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-5-21
在线时间
3 小时
发表于 2018-5-23 16:14:57 | 显示全部楼层
发送:  0A 04 00 01 00 01 61 71
接收:  0A 90 00 1D F5 FF
我的接收怎么是这样?
回复 支持 反对

使用道具 举报

  离线 

34

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
486
金钱
486
注册时间
2013-4-23
在线时间
67 小时
发表于 2018-5-26 15:07:21 | 显示全部楼层
大神出品,必须顶
努力做,耐心等
回复 支持 反对

使用道具 举报

  离线 

17

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2017-3-27
在线时间
63 小时
发表于 2018-6-11 19:33:33 | 显示全部楼层
八度大神,有没有modbus协议的资料?跪求
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 2018-6-11 20:48:05 | 显示全部楼层
1213333 发表于 2018-6-11 19:33
八度大神,有没有modbus协议的资料?跪求

我用的是这个

MODBUS协议中文版.pdf

1.11 MB, 下载次数: 43

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

使用道具 举报

  离线 

17

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2017-3-27
在线时间
63 小时
发表于 2018-6-12 19:18:53 | 显示全部楼层

谢谢。八度哥
回复 支持 反对

使用道具 举报

  离线 

6

主题

127

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2018-4-18
在线时间
10 小时
发表于 2018-6-19 16:54:49 | 显示全部楼层
学习了 谢谢楼主分享
回复 支持 反对

使用道具 举报

  离线 

1

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-6-20
在线时间
7 小时
发表于 2018-6-25 09:26:52 | 显示全部楼层
来看看,最近也准备移植
回复 支持 反对

使用道具 举报

  离线 

1

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2018-6-22
在线时间
6 小时
发表于 2018-6-28 10:12:07 | 显示全部楼层
谢谢分享,
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-7-6
在线时间
1 小时
发表于 2018-7-6 15:03:46 | 显示全部楼层
发送:  0A 04 00 01 00 01 61 71
接收:  0A 04 02 00 32 9D
发送:  0A 04 00 01 00 01 61 71
接收:  0A 04 02 00 32 9D
发送:  0A 04 00 01 00 01 61 71
接收:  0A 04 02 00 32 9D
发送:  0A 04 00 01 00 01 61 71
接收:  0A 04 02 00 32 9D


楼主您好,感谢您的移植,看了很久终于把Modbus协议摸清楚了。
不过就最后这里,接收到单片机返回的数据总是少一位怎么解决。
您貌似发了解决方法,但没怎么看懂。
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-7-6
在线时间
1 小时
发表于 2018-7-6 15:12:20 | 显示全部楼层
jsnjwmd 发表于 2018-7-6 15:03
发送:  0A 04 00 01 00 01 61 71
接收:  0A 04 02 00 32 9D
发送:  0A 04 00 01 00 01 61 71

额,刚发求助就自行解决了。

                        //
                                //插入以下代码完成一次发送,启动发送完成中断
                                //
                                xMBPortSerialPutByte( ( CHAR )*pucSndBufferCur );
                                pucSndBufferCur++;
//                                usSndBufferCount--;              //这一句代码删掉就发送正常了
                                //
                                //结束
                                //


下面是改完后的发送接收:
发送:  0A 04 00 01 00 01 61 71
接收:  0A 04 02 00 32 9D 24
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 2018-7-7 21:34:28 | 显示全部楼层
jsnjwmd 发表于 2018-7-6 15:12
额,刚发求助就自行解决了。

                        //

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

使用道具 举报

  离线 

0

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-9-21
在线时间
5 小时
发表于 2018-9-21 16:39:08 | 显示全部楼层
按照你的方法做了还是没有返回值呢,和你一样的操作啊
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 2018-9-29 21:26:15 | 显示全部楼层
Thisway 发表于 2018-9-21 16:39
按照你的方法做了还是没有返回值呢,和你一样的操作啊

我用的都很正常啊,没找个问题,是不是忽略了什么没弄好
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

  离线 

0

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-9-21
在线时间
5 小时
发表于 2018-10-5 13:39:22 | 显示全部楼层
你好,怎么用这个发送自己想要的数据饿,比如说一个温度什么的
回复 支持 反对

使用道具 举报

  离线 

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2018-7-3
在线时间
14 小时
发表于 2018-10-5 18:53:26 | 显示全部楼层
jsnjwmd 发表于 2018-7-6 15:12
额,刚发求助就自行解决了。

                        //

你这个是人为多计数一次,,是不是没用TC用的TXE,八度大哥已经做过测试,用TXE会少一个。
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 2018-10-7 20:36:39 | 显示全部楼层
Thisway 发表于 2018-10-5 13:39
你好,怎么用这个发送自己想要的数据饿,比如说一个温度什么的

小数温度值转换成整数就可以了,比如高8位为整数位,低8位为小数位,又或者第一个寄存器值为整数,接下来一个寄存器为小数位之类的,总之按自己喜好进行定义即可
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

  离线 

0

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-9-21
在线时间
5 小时
发表于 2018-10-9 12:09:49 | 显示全部楼层
八度空间 发表于 2018-10-7 20:36
小数温度值转换成整数就可以了,比如高8位为整数位,低8位为小数位,又或者第一个寄存器值为整数,接下来 ...

就是不知道mudbus寄存器如何和单片机的寄存器或者程序变量映射起来
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-3-23
在线时间
6 小时
发表于 2018-10-21 15:38:12 | 显示全部楼层
请问可以转载吗
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 2018-10-24 21:45:44 | 显示全部楼层

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

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-7-27
在线时间
4 小时
发表于 2018-10-29 16:50:21 | 显示全部楼层
F407和F103都移植成功了、感谢一下您。
现在开始找资料移植MODBUS-MASTER协议。
回复 支持 反对

使用道具 举报

  离线 

16

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2018-6-6
在线时间
55 小时
发表于 2018-11-3 17:45:42 | 显示全部楼层
问下为什么我的起始地址设置的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
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 2018-11-4 13:46:46 | 显示全部楼层
ljfljf 发表于 2018-11-3 17:45
问下为什么我的起始地址设置的1,用软件测的时候起始地址只能是0
#define REG_INPUT_START                ...

你初始化的时候eMBInit( eMBMode eMode, UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity )这个函数的ucSlaveAddress这个形参设置的是什么,然后你调试软件上的就是什么,比如,你初始化的是0x01那么,软件上的Address也设置0x01,modbus中0x00是广播命令,所有同一个总线的modbus设备都会响应,没有应答帧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

  离线 

16

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2018-6-6
在线时间
55 小时
发表于 2018-11-4 21:44:28 | 显示全部楼层
八度空间 发表于 2018-11-4 13:46
你初始化的时候eMBInit( eMBMode eMode, UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBPar ...

eMBException
eMBFuncWriteHoldingRegister( UCHAR * pucFrame, USHORT * usLen )
{
    USHORT          usRegAddress;
    eMBException    eStatus = MB_EX_NONE;
    eMBErrorCode    eRegStatus;

    if( *usLen == ( MB_PDU_FUNC_WRITE_SIZE + MB_PDU_SIZE_MIN ) )
    {
        usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF] << 8 );
        usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF + 1] );
//        usRegAddress++;

        /* Make callback to update the value. */
        eRegStatus = eMBRegHoldingCB( &pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF],
                                      usRegAddress, 1, MB_REG_WRITE );

        /* If an error occured convert it into a Modbus exception. */
        if( eRegStatus != MB_ENOERR )
        {
            eStatus = prveMBError2Exception( eRegStatus );
        }
    }
    else
    {
        /* Can't be a valid request because the length is incorrect. */
        eStatus = MB_EX_ILLEGAL_DATA_VALUE;
    }
    return eStatus;
}

从机地址设置的就是1,我把那句注释掉就对了,为什么啊。
回复 支持 反对

使用道具 举报

  离线 

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-11-10
在线时间
5 小时
发表于 2018-11-5 20:07:32 | 显示全部楼层
为什么最后一个下载不下来了
回复 支持 反对

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 4 天前 | 显示全部楼层
ljfljf 发表于 2018-11-4 21:44
eMBException
eMBFuncWriteHoldingRegister( UCHAR * pucFrame, USHORT * usLen )
{

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

使用道具 举报

  离线 

116

主题

7649

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11212
金钱
11212
注册时间
2013-9-10
在线时间
369 小时
 楼主| 发表于 4 天前 | 显示全部楼层
唯爱yoga 发表于 2018-11-5 20:07
为什么最后一个下载不下来了

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

使用道具 举报

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

本版积分规则




关闭

正点原子双11大促销上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-11-18 13:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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