串列埠通訊上位機資料傳輸協議
一、上位機協議
1.1 上位機對下位機<–傳送引數–>協議
1.1.1 協議表
1.2.1 協議解釋
傳送資料包引數協議一個資料包或者一個資料幀的資料長度為21位元組,其中資料頭2位元組,資料型別1位元組,資料長度1位元組,資料塊14位元組,校驗碼1位元組,資料尾2位元組。
資料頭和資料尾為人為設定,資料型別共有兩種0x01和0x02;0x01為傳送引數,0x02為傳送命令;資料塊長度為要傳送的資料配置引數如波特率等;校驗碼為人為設定,也可以為其它資料的求和;資料尾為人為設定。
由於串列埠傳送資料每次只能傳送1個位元組,而實際引數(比如波特率為115200)位元組數不為1個位元組,因此,為了統一需要將其先存放在4位元組的int中,然後將其拆分成4個位元組的陣列形式;然後用串列埠傳送到下位機(採集節點),下位機對資料包進行解析,同時提取資料塊資料,對資料塊中的單個位元組進行合成,合成後配置下位機引數。
1.2.3上位機對下位機傳送引數配置協議部分程式碼
用的是qt寫上位機
/*--------------------------------<--資料包初始化-->--------------------------------*/
//資料包初始化
Host_Communication_Protocol Data_Packet;//資料包(幀)
/*--------<--幀頭-->--------*/
Data_Packet.Head0=0xAA;//幀頭0
Data_Packet.Head1=0x55;//幀頭1
Data_Packet.Type=0x01;//命令型別
Data_Packet.Length=14;//資料塊長度(單位位元組)
/*--------<--資料塊-->--------*/
//資料塊,資料塊拆解成單位元組,<--由於write()只能發單位元組,因此上位機需要將4位元組的拆成1個位元組,下位機再合成-->
Data_Packet.Data.Baud_Rate=ui->comboBox_2->currentText().toUInt();//波特率
Data_Packet.Data.Sampling_Length=ui->comboBox_3->currentText().toUInt();;//取樣長度(點)
Data_Packet.Data.Sampling_Rate=ui->comboBox_4->currentText().toUInt();;//取樣率
char Baud_Rate_Byte[4];//波特率
Baud_Rate_Byte[0]=Data_Packet.Data.Baud_Rate>>24;//高位元組
Baud_Rate_Byte[1]=Data_Packet.Data.Baud_Rate>>16;
Baud_Rate_Byte[2]=Data_Packet.Data.Baud_Rate>>8;
Baud_Rate_Byte[3]=Data_Packet.Data.Baud_Rate;//低位元組
char Sampling_Length_Byte[4];//取樣長度(點)
Sampling_Length_Byte[0]=Data_Packet.Data.Sampling_Length>>24;//高位元組
Sampling_Length_Byte[1]=Data_Packet.Data.Sampling_Length>>16;
Sampling_Length_Byte[2]=Data_Packet.Data.Sampling_Length>>8;
Sampling_Length_Byte[3]=Data_Packet.Data.Sampling_Length;//低位元組
char Sampling_Rate_Byte[4];//取樣率
Sampling_Rate_Byte[0]=Data_Packet.Data.Sampling_Rate>>24;//高位元組
Sampling_Rate_Byte[1]=Data_Packet.Data.Sampling_Rate>>16;
Sampling_Rate_Byte[2]=Data_Packet.Data.Sampling_Rate>>8;
Sampling_Rate_Byte[3]=Data_Packet.Data.Sampling_Rate;//低位元組
Data_Packet.Data.Trigger_Voltage=ui->comboBox_5->currentText().toUShort();//觸發電壓
Data_Packet.Data.Sampling_Mode=ui->comboBox_6->currentIndex();//取樣模式
/*--------<--幀尾-->--------*/
Data_Packet.Check=0x03;//校驗碼
Data_Packet.End0=0x55;//幀尾0
Data_Packet.End1=0xAA;//幀尾1
/*--------------------------------<--資料包存放到緩衝區-->--------------------------------*/
//將資料包放到陣列裡面
QByteArray Data_Packet_Buffer;//資料包緩衝區
Data_Packet_Buffer.append(Data_Packet.Head0);//幀頭0
Data_Packet_Buffer.append(Data_Packet.Head1);//幀頭1
Data_Packet_Buffer.append(Data_Packet.Type);//命令型別
Data_Packet_Buffer.append(Data_Packet.Length);//資料塊長度(單位位元組)
Data_Packet_Buffer.append(Baud_Rate_Byte[0]);//波特率
Data_Packet_Buffer.append(Baud_Rate_Byte[1]);
Data_Packet_Buffer.append(Baud_Rate_Byte[2]);
Data_Packet_Buffer.append(Baud_Rate_Byte[3]);
Data_Packet_Buffer.append(Sampling_Length_Byte[0]);//取樣長度(點)
Data_Packet_Buffer.append(Sampling_Length_Byte[1]);
Data_Packet_Buffer.append(Sampling_Length_Byte[2]);
Data_Packet_Buffer.append(Sampling_Length_Byte[3]);
Data_Packet_Buffer.append(Sampling_Rate_Byte[0]);//取樣率
Data_Packet_Buffer.append(Sampling_Rate_Byte[1]);
Data_Packet_Buffer.append(Sampling_Rate_Byte[2]);
Data_Packet_Buffer.append(Sampling_Rate_Byte[3]);
Data_Packet_Buffer.append(Data_Packet.Data.Trigger_Voltage);//觸發電壓
Data_Packet_Buffer.append(Data_Packet.Data.Sampling_Mode);//取樣模式
Data_Packet_Buffer.append(Data_Packet.Check);//校驗碼
Data_Packet_Buffer.append(Data_Packet.End0);//幀尾0
Data_Packet_Buffer.append(Data_Packet.End1);//幀尾1
pSerialCollection->write(Data_Packet_Buffer);
相關文章
- 串列埠通訊協議串列埠協議
- 串列埠通訊系列六-串列埠與上位機通訊呼叫Flash及Flash視訊切換(非互動)串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 一種MODBUS RTU擴充套件串列埠通訊協議套件串列埠協議
- C#如何開發透過USB進行串列埠通訊的Androud上位機C#串列埠
- 串列埠通訊串列埠
- 串列埠通訊 (轉)串列埠
- IP協議號和傳輸層埠號【Z】協議
- 資料通訊與網路 第五版第24章 傳輸層協議-TCP協議部分要點協議TCP
- 詳解通訊資料協議ProtoBuf協議
- 03_QT上位機開發之串列埠助手QT串列埠
- linux 串列埠通訊Linux串列埠
- Android 串列埠通訊Android串列埠
- C# 串列埠通訊C#串列埠
- 11. 串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- (10)uart串列埠通訊串列埠
- 無線通訊模組透過TCP/IP協議實現與PC端的資料傳輸TCP協議
- 通過串列埠進行通訊 :串列埠
- WebRTC:資料傳輸相關協議簡介Web協議
- DDTP 分散式資料傳輸協議白皮書分散式協議
- Socket開發框架之資料傳輸協議框架協議
- 訊息佇列面試解析 - 傳輸協議佇列面試協議
- 安卓串列埠通訊疑問安卓串列埠
- java串列埠通訊例項 -Java串列埠
- VC++ 串列埠通訊(轉)C++串列埠
- 串列埠無法正常通訊串列埠
- 傳輸層協議協議
- 通訊協議協議
- 如何實現臺達PLC與上位機的資料通訊?
- Python 基於 TCP 傳輸協議的網路通訊實現PythonTCP協議
- 網路協議之:基於UDP的高速資料傳輸協議UDT協議UDP
- C# 簡易的串列埠監視上位機實現C#串列埠
- QT串列埠助手(四):資料傳送QT串列埠
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- ROS環境下串列埠通訊ROS串列埠