OpenEdv-开源电子网

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

F407 vet6的modbus协议通讯。

[复制链接]

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
发表于 2019-3-29 18:25:09 | 显示全部楼层 |阅读模式
5金钱
1.  407发送的数据直接用485工具显示在电脑上,显示的数据是正常的。但是为什么连接模块时,模块相应的数据没办法传回来。功能码是03。
2.  为什么每次都只是发送一次数据就结束了,必须按复位键才能再次发送数据。


11111111111.jpg

modbus-03.zip

17.32 MB, 下载次数: 233

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

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6681
金钱
6681
注册时间
2017-4-12
在线时间
1254 小时
发表于 2019-3-29 20:36:17 | 显示全部楼层
void modbus_rtu(void)
{        
        static u8 i=0;
        static u8 j=0;
        //printf("modbus_rtu");
        switch(i)
        {
                case 0:
                                RS485_TX_Service();
                                if(TX_RX_SET) i=1;
                                break;
                case 1:
                                RS485_RX_Service();
                                if(ComErr==0)
                                {
                                        i=3;//完成命令更换功能码!
                                }
                                else
                                {
                                        i=1;//
                                        j++;//一个命令发送3次没有应答切换下一个命令
                                        if(j>=2)
                                        {
                                                j=0;
                                                i=3;
                                                //ComErr=7;  //通讯超时
                                        }
                                       
                                }
                                break;
                case 2: //从机地址++
                                //SlaverAddr++;
                                break;
                case 3://功能码
                                break;                                
                        
        }
        
}

这是你的源码,这里看看你就知道问题在哪里了
回复

使用道具 举报

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
 楼主| 发表于 2019-4-1 08:59:38 | 显示全部楼层
245925587 发表于 2019-3-29 20:36
void modbus_rtu(void)
{        
        static u8 i=0;

你说的是0和1的时候就有break,然后直接跳出switch循环了吗???
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6681
金钱
6681
注册时间
2017-4-12
在线时间
1254 小时
发表于 2019-4-1 11:18:29 | 显示全部楼层
17862984059 发表于 2019-4-1 08:59
你说的是0和1的时候就有break,然后直接跳出switch循环了吗???

i=3后,没有对应的处理
回复

使用道具 举报

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
 楼主| 发表于 2019-4-1 14:17:12 | 显示全部楼层
245925587 发表于 2019-4-1 11:18
i=3后,没有对应的处理

我就只验证一个功能码03需要怎么改啊,没明白后面两个case什么意思。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 13:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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