Modbus数据帧接收编程思路

在单片机上实现MODBUS通信的从机协议,首先需要解决的问题是如何保证主机发送的MODBUS的数据帧能够可靠的接收。


方法1:

1. 开串口接收中断,设置接收缓冲区ReceBuf[100],发送缓冲区SendBuf[100],指向两个缓冲区的指针*pr,*ps

2. 当单片机接收到一帧数据之后,进入串口接收中断,在串口中断函数中做如下处理:开启定时器,延时一段时间,在这个时间段内认为一帧数据接收完毕,定时结束后,进入定时器中断,这个时候置数据帧接收标志位Flag,认为一帧数据接收完毕。

3. 当Flag被置位后,关闭定时器,开始对接收缓冲区ReceBuf[100]内的这一帧数据进行解析。根据具体的数据内容完成相应操作后,重新赋定时器初值,清空接收缓冲区,等待下一帧数据的接收和处理。

方法2:

1. 设置循环接收缓冲区ReceBuf[100];为该缓冲区设置两个指针:接收指针*pr,处理指针*pw;设置接收完成时间rececount,开定时器;

2. 开串口中断,当接收到数据之后,进入串口中断,将数据存入接收缓冲区,接收指针pr开始移位,并将rececount赋值为20,在定时器中断中rececount--。

3. 判断rececount是否为0,若为0,表示1帧数据接收完毕;

4. 判断接收指针pr与处理指针pw是否相同,若不相同,说明这帧数据还没有被处理,进入数据帧处理函数,


思考:

是否存在丢帧现象;

数据能否及时被解析;





  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值