格式:

起始位 +地址位+功能位+数据位 + 检验 + 结束位

说明:

  1. 起始位和结束位是用来控制同步的,读的时候先判断起始位和结束位是否正常,再对中间的进行校验;
  2. 由于一些设备某个端口下挂载的不止一个设备,故需要使用地址位来区别多个设备;
  3. 功能位针对不同的操作(如查询,操作等);
  4. 保证数据的正确性用得多的是CRC校验;
  5. 在判断数据全部符合要求的时候要先发应答帧,然后再去处理数据,这样实时性会高一点,同时也有时间去做buffer的管理。

协议的使用:
发送端发送数据加上源地址和目标地址,接收端接收数据,先读数据类型,数据帧?
判断目标地址,不是自己的地址,丢弃,继续监听接收数据;是自己的地址,则判断数据长度,不正确,发送应答帧,要求对方重发;数据长度正确,计算CRC,与帧尾的CRC不相同,发送应答帧,要求对方重发;相同,呵呵,去处理数据吧!别忘了全部判断正确后发送一个应答帧个发送方,告送它接收正确。应答标志你可以自己规定,如0x01是接收应答成功、0x02是数据接收CRC错误等等,如要求可靠性、还有必要的速度,你还可以使用应答标志来开设多几个缓存区,用来做流的管理。CRC可以查表,MCU算CRC太浪费时间了。

摘自:http://www.yourdelphi.com/topic_181888_c605.htm