OpenEdv-开源电子网

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

modbus丢字节问题

[复制链接]

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
发表于 2017-4-24 13:34:26 | 显示全部楼层 |阅读模式
1金钱
写了一个从机232程序,用modbus poll软件与从机通信,但是一直提示丢字节,Bytes Missing Error ,Debug发现丢了主机发送的字节数,01 03 00 04 00 02 0A 84 标红的丢了。有没有遇到过的,一起交流下

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

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
 楼主| 发表于 2017-4-24 15:03:19 | 显示全部楼层
yklstudent 发表于 2017-4-24 14:50
检查自己的代码吧

、、、、、、、、、、、、、、、、、
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12995
金钱
12995
注册时间
2012-11-26
在线时间
3790 小时
发表于 2017-4-24 15:06:30 | 显示全部楼层
检查接收发送逻辑吧
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
 楼主| 发表于 2017-4-24 15:10:42 | 显示全部楼层
jermy_z 发表于 2017-4-24 15:06
检查接收发送逻辑吧

我看看
回复

使用道具 举报

2

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2015-12-8
在线时间
43 小时
发表于 2017-4-24 22:47:54 | 显示全部楼层
把发生每字节的延时改大一点 比如 100um
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
 楼主| 发表于 2017-4-25 13:53:32 | 显示全部楼层
jiewen9 发表于 2017-4-24 22:47
把发生每字节的延时改大一点 比如 100um

我试试
回复

使用道具 举报

6

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2016-9-24
在线时间
80 小时
发表于 2017-4-25 20:51:58 | 显示全部楼层
遇到过但是是丢最后的字节(CRC校验的后一个字节),最后发现是RS485控制线转发送或接收的时间点问题,看似逻辑方面没有问但就不行,最后延迟1ms转就OK了。
你这个丢到数据最后一个字节就不知道是不是我遇到过的那个问题了。况且你的是走232。我只是把我遇到的类似问题拿出来给你参考参考。
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
 楼主| 发表于 2017-4-26 08:17:39 | 显示全部楼层
lygxnb 发表于 2017-4-25 20:51
遇到过但是是丢最后的字节(CRC校验的后一个字节),最后发现是RS485控制线转发送或接收的时间点问题,看似 ...

我最近也在找问题,等我发现在分享出来
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-11-5
在线时间
19 小时
发表于 2021-4-15 17:09:44 | 显示全部楼层
lygxnb 发表于 2017-4-25 20:51
遇到过但是是丢最后的字节(CRC校验的后一个字节),最后发现是RS485控制线转发送或接收的时间点问题,看似 ...

老哥您好 最近在移植freemodbus 然后也出现了接收数据CRC校验码最后一个字节丢失的问题,请问您当时是怎么解决的 ,请问一下在哪个地方加延时

void
vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
    /* If xRXEnable enable serial receive interrupts. If xTxENable enable
     * transmitter empty interrupts.
     */
        if(xRxEnable == TRUE){
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_RESET);                                        //接收模式
                __HAL_UART_ENABLE_IT(&Modbus_Uart_Port, UART_IT_RXNE);
        }else{
                 __HAL_UART_DISABLE_IT(&Modbus_Uart_Port, UART_IT_RXNE);
               
        }
        if(xTxEnable == TRUE){
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_SET);                                                //发送模式
                __HAL_UART_ENABLE_IT(&Modbus_Uart_Port, UART_IT_TXE);
        }else{
                __HAL_UART_DISABLE_IT(&Modbus_Uart_Port, UART_IT_TXE);
        }
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 03:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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