C语言与物联网之简单通信协议

用C语言做物联网网关开发时,经常需要通过串口、485接口等从一些传感器读取数据,由于网关设备和传感器所处的环境复杂多样,电磁干扰等常常会破坏传输的数据,为了确保传输数据的可靠性。 2020-06-24 14:15:56 C语言物联网通信 美国商务部:针对华为新规没有漏洞,已向半导体企业发出新规指南 据路透社报道,美国商务部长威尔伯·罗斯于当地时间周二表示,美国政府认为今年5月公布的针对华为新的出口管制规则没有漏洞,并将“积极”阻止任何违背遏制意图的方法。此外他还透露,本月已经向半导体企业发布了关于针对华为新规的指南。 2020-06-24 14:13:27 华为禁令开发 一文带你走进Python中的数据类 数据类适用于Python3.7或更高版本,它不仅可以用作数据容器,还可以编写样板代码,简化创建类的过程。

C语言物联网网关开发时,经常需要通过串口、485接口等从一些传感器读取数据,由于网关设备和传感器所处的环境复杂多样,电磁干扰等常常会破坏传输的数据,为了确保传输数据的可靠性。

用C语言做物联网网关开发时,经常需要通过串口、485接口等从一些传感器读取数据,由于网关设备和传感器所处的环境复杂多样,电磁干扰等常常会破坏传输的数据,为了确保传输数据的可靠性,通常会采取一些策略,常用的策略:数据校验+超时重传,具体过程如下:

[[331222]]

发送方在发送数据时,在元数据的基础上增加校验数据形成请求数据包(data pack),然后将请求数据包发送出去,并启动守卫计时器(Guard Timer)。

接收方在收到请求数据包后,以跟发送方相同的算法对元数据进行计算得到校验数据,然后跟收到的校验数据进行比较,若相同,则说明数据可靠,可以使用;反之,说明数据被破坏,直接丢弃掉。若数据可靠,接收方以同样的格式做成响应数据包回复给发送方;若发现数据被破坏,接收方不回复任何数据。

如果发送方在守卫计时器超时前正确地接收到了接收方回复的响应数据包,则停止守卫计时器,并进行后续的处理;若发送方在守卫计时器超时时仍未收到接收方回复的响应数据包,则重新发送"1."中的数据包,如此反复,直到正确发送或达到了重传次数。

步骤1~3重点为了讲述如何确保数据可靠传输,真实情景中为了能正确地断包(识别数据包),通常会按照如下结构来定义数据包:

C语言与物联网之简单通信协议

  • 包起始标识:通常使用固定数据,比如0xFA, 0xAA, 0xA5等;
  • 元数据长度:根据元数据长度进行断包。比如:元数据长度占1字节,校验数据占2字节,当元数据长度取值为10时,则数据包大小为14字节;
  • 元数据:发送的或接收的,有一定格式或意义的应用数据;

校验数据:按照某种校验算法(比如checksum,crc等)计算得到的值。

  1. #defineMAX_DATA_LEN100/*假设元数据的最大长度为100字节*/
  2. typedefstructtag_data_pack{
  3. uint8_tsop;/*包起始标识,(StartOfPack)*/
  4. uint8_tlen;/*元数据长度,假设为1字节*/
  5. uint8_tdatas[MAX_DATA_LEN+2];/*元数据+2字节的校验数据*/
  6. }data_pack_t;

总线式的通信中,通常还会在数据包中加入目标设备的地址,以便于确定数据是发往总线上的哪个设备,数据包的参考结构如下:

C语言与物联网之简单通信协议

用C语言描述如下:

  1. #defineMAX_DATA_LEN100/*假设元数据的最大长度为100字节*/
  2. typedefstructtag_data_pack{
  3. uint8_tsop;/*包起始标识,(StartOfPack)*/
  4. uint8_taddr;/*目标设备地址,假设为1字节*/
  5. uint8_tlen;/*元数据长度,假设为1字节*/
  6. uint8_tdatas[MAX_DATA_LEN+2];/*元数据+2字节的校验数据*/
  7. }data_pack_t;

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月5日 11:57
下一篇 2023年5月5日 11:57

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信