程序的寫法:方便以後的查看和維護。

  寫程序主要是爲了以後自己讀起來不費勁,方便查看和維護。

//返回錯誤的約定:如果該命令與本站有關則根據設定來決定是否返回錯誤信息,
//如果該命令與本站無關則不必返回錯誤信息,接收的全部是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發送整個緩衝區
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章