您好,登錄后才能下訂單哦!
寫程序主要是為了以后自己讀起來不費勁,方便查看和維護。
//返回錯誤的約定:如果該命令與本站有關則根據設定來決定是否返回錯誤信息,
//如果該命令與本站無關則不必返回錯誤信息,接收的全部是16進制的數字
bool Inspect=true;
uint8_t ErrorCode=0;
//CRC檢查
......
//分析文件頭
if (rx_buffer1[0] != 0x59 || rx_buffer1[1] != 0x51 || rx_buffer1[2]!=0x43 || rx_buffer1[3]!=0x59 ){
Inspect=false;
ErrorCode=0x011;//錯誤代碼11:標識文件頭的錯誤
}
//分析文件尾
if ( rx_buffer1[66]!=0x59 || rx_buffer1[67]!=0x42 || rx_buffer1[68]!=0x44 || rx_buffer1[69]!=0x57 ){
Inspect=false;
ErrorCode=0x022;//錯誤代碼22:標識文件尾的錯誤
}
//是否是屬于本線和本站的接收命令
if( rx_buffer1[4]!=0x01 || rx_buffer1[6]!=0x00 ){
Inspect=false;
ErrorCode=0x33;//錯誤代碼33:不是本次的測試命令
}
//是否是屬于本線和本站的接收命令
if( rx_buffer1[5]!=YBDWPipeline || rx_buffer1[7]!=YBDWPile ){
Inspect=false;
ErrorCode=0x44;//錯誤代碼44:不是本線或者本站的接收命令
}
......
if(Inspect==true){
//準備返回的數據
//根據具體的命令來進行實際操作
switch(rx_buffer1[9]){
case Set_SystemDatetime: //設置系統日期和時間
break;
case Set_EngineeringOffset: //設置工程偏移量
break;
case Set_LineAndPile://設置線號和站號、本線的起始和結束站號
break;
case Set_Version://設置版本信息
break;
case Get_LineAndPile://獲取線號和站號、本線的起始和結束站號
break;
case Get_CurrentYBDW://獲取當前的數據
break;
default: //不支持的命令
break;
}
......
}
else
{
if(rx_buffer1[17]==0x99 && rx_buffer1[5]!=YBDWPipeline && rx_buffer1[7]!=YBDWPile ){
//根據配置決定是否將錯誤返回,只與本站的信號才回饋信息
......
HAL_UART_Transmit(&hlpuart1,Send_Buffer,70,10); //串口1向LORA發送整個緩沖區
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。