RS485通信的帧格式问题

wopabe 2010-09-30 10:39:07
有的帧格式是:起始字节 数据长度 数据长度(重复) 起始字节(重复) ... 校验字节 结束字节
在写通信接收程序时,首先判断第一个起始字节,看是不是要接收的帧,
但我不知道数据长度、数据长度(重复)和起始字节(重复)怎么接收,是直接接收还是先判断再接收?
在线等各位大侠的指导!
...全文
2829 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wopabe 2010-10-25
  • 打赏
  • 举报
回复
谢谢各位了
galle 2010-10-10
  • 打赏
  • 举报
回复
判断开始头,不同就丢弃,相同就开始接收第一个数据,接收第二个数据长度,同第一个比较,相同就连续接收数据长度个数据。否则从头开始。接收完数据后,接收验证码,再判断!
mb0919 2010-10-09
  • 打赏
  • 举报
回复
串口中断里面只做一个简单的判断,设置一个接收字节个数的变量,接收起始字节并判断,若不是,接收字节清零,继续判断帧头;如果是收字节加一;依次类推,发生错误后接收字节个数清零,直到正确接收完毕。

wangshao123lll 2010-10-08
  • 打赏
  • 举报
回复
好难。。。。
yanzhaozhiqing 2010-10-01
  • 打赏
  • 举报
回复
看看 学习一下
DISINHUI 2010-10-01
  • 打赏
  • 举报
回复
这个问题应该这样看:
1.如果缓冲区足够,则可以尝试接受两个数据包,然后判断是否有合法完整数据包。
2.如果数据缓冲区不够,找头的办法也是可行的。

从实际应该用角度上说,最好的办法是第一种方案。如果空间受限,则采用第二种方案,不过最好是硬件串口,如果软件模拟,可能会降低发送成功率。
lbing7 2010-09-30
  • 打赏
  • 举报
回复
直接接收还是先判断再接收?

你的协议约定

我习惯于,收完完整的一帧再做有效性检查
dian_technology 2010-09-30
  • 打赏
  • 举报
回复
我司485通信格式与你所说差不多,我处理的大概流程是这样的:
一,先判断帧头(起始字节),若不对,弃包。
二,再接收整帧的数据,接收完毕后,根据接收到的数据长度和实际工资接收到的数据个数比较,若不等,弃包。
三,再将接收到的数据帧进行校验,将计算的校验值与接收到的校验值比较,若不等,弃包。
wopabe 2010-09-30
  • 打赏
  • 举报
回复
哥,你太有才了!我第一次见你这么有才的
codesnail 2010-09-30
  • 打赏
  • 举报
回复
实践是检验真理的唯一方法。
wopabe 2010-09-30
  • 打赏
  • 举报
回复
我想的流程是这样的:
1 接收起始字节并判断,若不是,丢弃,再接收数据长度;
2 判断数据长度(重复)和刚才的数据长度一样不?若相等,接收,否则丢弃。同理进行起始字节(重复);
3 根据数据长度大小接收后面的数据;
4 校验,接收停止字节。

不知道我说清楚没。
我的问题是我的流程对吗?
codesnail 2010-09-30
  • 打赏
  • 举报
回复
不知道数据长度你不是能判断起始和结束字节吗?
不知楼主疑惑在哪?

27,521

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧