自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C語言與物聯(lián)網(wǎng)之簡單通信協(xié)議

開發(fā) 前端
用C語言做物聯(lián)網(wǎng)網(wǎng)關(guān)開發(fā)時,經(jīng)常需要通過串口、485接口等從一些傳感器讀取數(shù)據(jù),由于網(wǎng)關(guān)設(shè)備和傳感器所處的環(huán)境復(fù)雜多樣,電磁干擾等常常會破壞傳輸?shù)臄?shù)據(jù),為了確保傳輸數(shù)據(jù)的可靠性。

用C語言做物聯(lián)網(wǎng)網(wǎng)關(guān)開發(fā)時,經(jīng)常需要通過串口、485接口等從一些傳感器讀取數(shù)據(jù),由于網(wǎng)關(guān)設(shè)備和傳感器所處的環(huán)境復(fù)雜多樣,電磁干擾等常常會破壞傳輸?shù)臄?shù)據(jù),為了確保傳輸數(shù)據(jù)的可靠性,通常會采取一些策略,常用的策略:數(shù)據(jù)校驗(yàn)+超時重傳,具體過程如下:

[[331222]]

發(fā)送方在發(fā)送數(shù)據(jù)時,在元數(shù)據(jù)的基礎(chǔ)上增加校驗(yàn)數(shù)據(jù)形成請求數(shù)據(jù)包(data pack),然后將請求數(shù)據(jù)包發(fā)送出去,并啟動守衛(wèi)計時器(Guard Timer)。

接收方在收到請求數(shù)據(jù)包后,以跟發(fā)送方相同的算法對元數(shù)據(jù)進(jìn)行計算得到校驗(yàn)數(shù)據(jù),然后跟收到的校驗(yàn)數(shù)據(jù)進(jìn)行比較,若相同,則說明數(shù)據(jù)可靠,可以使用;反之,說明數(shù)據(jù)被破壞,直接丟棄掉。若數(shù)據(jù)可靠,接收方以同樣的格式做成響應(yīng)數(shù)據(jù)包回復(fù)給發(fā)送方;若發(fā)現(xiàn)數(shù)據(jù)被破壞,接收方不回復(fù)任何數(shù)據(jù)。

如果發(fā)送方在守衛(wèi)計時器超時前正確地接收到了接收方回復(fù)的響應(yīng)數(shù)據(jù)包,則停止守衛(wèi)計時器,并進(jìn)行后續(xù)的處理;若發(fā)送方在守衛(wèi)計時器超時時仍未收到接收方回復(fù)的響應(yīng)數(shù)據(jù)包,則重新發(fā)送"1."中的數(shù)據(jù)包,如此反復(fù),直到正確發(fā)送或達(dá)到了重傳次數(shù)。

步驟1~3重點(diǎn)為了講述如何確保數(shù)據(jù)可靠傳輸,真實(shí)情景中為了能正確地斷包(識別數(shù)據(jù)包),通常會按照如下結(jié)構(gòu)來定義數(shù)據(jù)包:

 

C語言與物聯(lián)網(wǎng)之簡單通信協(xié)議
  • 包起始標(biāo)識:通常使用固定數(shù)據(jù),比如0xFA, 0xAA, 0xA5等;
  • 元數(shù)據(jù)長度:根據(jù)元數(shù)據(jù)長度進(jìn)行斷包。比如:元數(shù)據(jù)長度占1字節(jié),校驗(yàn)數(shù)據(jù)占2字節(jié),當(dāng)元數(shù)據(jù)長度取值為10時,則數(shù)據(jù)包大小為14字節(jié);
  • 元數(shù)據(jù):發(fā)送的或接收的,有一定格式或意義的應(yīng)用數(shù)據(jù);

校驗(yàn)數(shù)據(jù):按照某種校驗(yàn)算法(比如checksum,crc等)計算得到的值。

  1. #define MAX_DATA_LEN  100     /* 假設(shè)元數(shù)據(jù)的最大長度為100字節(jié) */ 
  2. typedef struct tag_data_pack { 
  3.     uint8_t sop;                     /* 包起始標(biāo)識,(Start Of Pack) */ 
  4.     uint8_t len;                     /* 元數(shù)據(jù)長度,假設(shè)為1字節(jié) */ 
  5.     uint8_t datas[MAX_DATA_LEN + 2]; /* 元數(shù)據(jù) + 2字節(jié)的校驗(yàn)數(shù)據(jù) */ 
  6. }data_pack_t; 

總線式的通信中,通常還會在數(shù)據(jù)包中加入目標(biāo)設(shè)備的地址,以便于確定數(shù)據(jù)是發(fā)往總線上的哪個設(shè)備,數(shù)據(jù)包的參考結(jié)構(gòu)如下:

 

C語言與物聯(lián)網(wǎng)之簡單通信協(xié)議

用C語言描述如下:

  1. #define MAX_DATA_LEN  100     /* 假設(shè)元數(shù)據(jù)的最大長度為100字節(jié) */ 
  2. typedef struct tag_data_pack { 
  3.     uint8_t sop;                     /* 包起始標(biāo)識,(Start Of Pack) */ 
  4.     uint8_t addr;                    /* 目標(biāo)設(shè)備地址,假設(shè)為1字節(jié) */ 
  5.     uint8_t len;                     /* 元數(shù)據(jù)長度,假設(shè)為1字節(jié) */ 
  6.     uint8_t datas[MAX_DATA_LEN + 2]; /* 元數(shù)據(jù) + 2字節(jié)的校驗(yàn)數(shù)據(jù) */ 
  7. }data_pack_t; 

 

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2018-04-10 14:16:14

物聯(lián)網(wǎng)

2023-04-27 17:49:38

物聯(lián)網(wǎng)通信協(xié)議

2020-06-01 14:15:57

物聯(lián)網(wǎng)通信協(xié)議無線通訊

2021-12-16 10:49:32

物聯(lián)網(wǎng)通信協(xié)議網(wǎng)絡(luò)

2024-01-23 12:47:27

2018-12-07 13:58:38

物聯(lián)網(wǎng)通信協(xié)議IOT

2022-02-23 19:38:22

物聯(lián)網(wǎng)通信協(xié)議

2019-12-03 12:16:36

物聯(lián)網(wǎng)ZigBee藍(lán)牙低功耗

2020-02-20 22:44:01

通信協(xié)議物聯(lián)網(wǎng)終端設(shè)備

2018-08-04 05:08:50

物聯(lián)網(wǎng)架構(gòu)通信協(xié)議IOT

2024-03-20 10:26:08

物聯(lián)網(wǎng)物聯(lián)網(wǎng)協(xié)議通信協(xié)議

2019-04-29 10:26:49

TCP網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)通信

2019-06-21 14:17:52

工業(yè)物聯(lián)網(wǎng)通信協(xié)議IIOT

2020-07-05 22:57:04

物聯(lián)網(wǎng)通信協(xié)議IOT

2023-10-12 19:37:50

通信協(xié)議HTTP

2022-06-18 09:02:00

I2C 子系統(tǒng)通信協(xié)議

2023-10-28 16:14:38

RS485通信協(xié)議

2010-07-01 15:45:22

網(wǎng)絡(luò)通信協(xié)議

2024-02-20 19:53:57

網(wǎng)絡(luò)通信協(xié)議

2018-08-10 06:27:49

Thread物聯(lián)網(wǎng)通信協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號