久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2016|回復: 0
打印 上一主題 下一主題
收起左側

基于usart串口的通過信號機——通信協議設計

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 Andrew888 于 2020-3-18 11:54 編輯

一、本項目意義:實現通過USART通信,通過幀信息控制通過信號機狀態,可以設置燈絲故障,設置區間狀態,點燈信息基于Flash內的固定信息,與幀序列無直接交互,相當于實現了電子連鎖,可用于教學實驗。
二、通信協議定義
1、發送幀格式

2、返回幀格式


3、具體實現代碼
  1. //通信協議內容識別邏輯
  2.                
  3.                 //非廣播命令 及 CRC校驗 及 設備類型 及 密鑰檢驗 及 是否收到新的幀
  4.                 //CRCCHECK = CRCcheck();return true/false;
  5.                 CRCcheck();
  6.                 if( CRCCHECK && TypeFrame == TongGuoXHJ && AccessFrame == 0xAA && key)
  7.                 {
  8. if(OrderFrame == 0x01)
  9.                         {
  10.                                 //修改flash設備編號
  11.                                 //傳回相應幀;void SendBackMessage(0x01);根據參數判斷需要的返回信息,自動形成格式,提取flash中內容填充幀序列;
  12.                                 Write_CV(SerailFrame,QJ_Position_Addr);
  13.                                 SendBackFrame[0] = 0x10;
  14.                                 SendBackFrame[1] = STMFLASH_ReadHalfWord(Device_Type_Addr);//0x03
  15.                                 SendBackFrame[2] = STMFLASH_ReadHalfWord(QJ_Position_Addr);       
  16.         SendBack();                               
  17.                         }
  18.                        
  19.                         else if(SerailFrame == STMFLASH_ReadHalfWord(QJ_Position_Addr))
  20.                         {
  21.                                 switch(OrderFrame)
  22.                                 {
  23.                                         case 0x02:
  24.                                                 //讀狀態:命令+密鑰(0xAA)+設備類型+設備編號+00+00+CRC
  25.                                           //返回格式:命令+設備類型+設備編號+燈絲狀態+故障信息+00+CRC
  26.                                                 //參數:cv位置
  27.                                                 SendBackFrame[0] = 0x20;
  28.                                                 SendBackFrame[1] = STMFLASH_ReadHalfWord(Device_Type_Addr);//0x03
  29.                                           SendBackFrame[2] = STMFLASH_ReadHalfWord(QJ_Position_Addr);
  30.                                                 SendBackFrame[3] = STMFLASH_ReadHalfWord(DS_State_Addr);
  31.                                                 SendBackFrame[4] = STMFLASH_ReadHalfWord(Fault_Setting_Addr);
  32.                                                 SendBack();
  33.                                                 break;
  34.                                         case 0x03:
  35.                                                 //寫狀態:命令+密鑰(0xAA)+設備類型+設備編號+故障信息+00+CRC
  36.                                           //返回格式:命令+設備類型+設備編號+故障信息+00+00+CRC
  37.                                                 //參數:故障內容
  38.                                        
  39.                                                 Write_CV(Context5Frame,Fault_Setting_Addr);
  40.                                                 SendBackFrame[0] = 0x30;
  41.                                                 SendBackFrame[1] = STMFLASH_ReadHalfWord(Device_Type_Addr);//0x03
  42.                                           SendBackFrame[2] = STMFLASH_ReadHalfWord(QJ_Position_Addr);
  43.                                                 SendBackFrame[3] = STMFLASH_ReadHalfWord(Fault_Setting_Addr);
  44.                                                 SendBack();
  45.                                                 break;
  46.                                         case 0x04:
  47.                                                 //讀區間狀態:命令+密鑰(0xAA)+設備類型+設備編號+00+00+CRC
  48.                                           //返回格式:命令+設備類型+設備編號+最近四個分區的狀況+00+00+CRC
  49.                                           //返回此區間前4個區間的狀態
  50.                                                 SendBackFrame[0] = 0x40;
  51.                                                 SendBackFrame[1] = STMFLASH_ReadHalfWord(Device_Type_Addr);//0x03
  52.                                           SendBackFrame[2] = STMFLASH_ReadHalfWord(QJ_Position_Addr);
  53.                                                 SendBackFrame[3] = QJ_Situation();
  54.                                                 SendBack();
  55.                                                 break;
  56.                                        
  57.                                         default:break;
  58.                                        
  59.                                 }
  60.                         }
  61.                        
  62.                 }
  63.                
  64.                 //區間信息廣播幀;不產生返回幀
  65.                 if(OrderFrame == 0x05 && CRCCHECK && TypeFrame == TongGuoXHJ && key)
  66.                 {
  67.                         //第一組數據區間1~8;9~16;17~24
  68.                         if(AccessFrame == 0x01)
  69.                         {
  70.                                 Write_CV(rs485buf[3],FQ_State_1_8_Addr);
  71.                                 Write_CV(rs485buf[4],FQ_State_9_16_Addr);
  72.                                 Write_CV(rs485buf[5],FQ_State_17_24_Addr);
  73.                         }
  74.                         //第二組數據區間25~32;33~40;41~48
  75.                         if(AccessFrame == 0x02)
  76.                         {
  77.                                 Write_CV(rs485buf[3],FQ_State_25_32_Addr);
  78.                                 Write_CV(rs485buf[4],FQ_State_33_40_Addr);
  79.                                 Write_CV(rs485buf[5],FQ_State_41_48_Addr);
  80.                         }
  81.                         //第三組數據區間49~56;57~64
  82.                         if(AccessFrame == 0x03)
  83.                         {
  84.                                 Write_CV(rs485buf[3],FQ_State_49_56_Addr);
  85.                                 Write_CV(rs485buf[4],FQ_State_57_64_Addr);
  86.                         }
  87.                         //單幀區域廣播;命令+密鑰(幀類型)+設備類型+區間Sector(0~7;可擴展)+區間信息+00+CRC
  88.                         if(AccessFrame == 0x10)
  89.                         {
  90.                                 Write_CV(Context5Frame,FQ_State_1_8_Addr * 2 * (int)SerailFrame);//待測試(int)SerailFrame
  91.                         }
  92.                 }
復制代碼
4,點燈部分還未調試完成,后續發帖再寫


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天拍天天操 | 成人性视频在线 | h视频在线播放 | 蜜月aⅴ国产精品 | 国产日韩一区二区三免费高清 | 91精品在线看 | 亚洲精品成人免费 | 一区二区三区欧美 | 亚洲精品国产电影 | av在线亚洲天堂 | 青娱乐一区二区 | 国产成人亚洲精品 | 九九热免费在线观看 | 在线免费黄色小视频 | 麻豆av片 | 国产精品久久久久久久久久免费看 | 在线男人天堂 | 热久久性| 国内精品久久久久 | 综合国产 | 在线观看a视频 | 91色啪| 亚洲一区二区中文字幕 | 91久久精品国产91久久性色tv | 97精品国产97久久久久久免费 | 91在线视频免费观看 | 亚洲第一av网站 | www.久久99 | 天天躁日日躁xxxxaaaa | 亚洲精品不卡 | 三级国产三级在线 | 日本不卡在线观看 | 国产精品久久毛片av大全日韩 | 久久性 | 亚洲国产精品一区二区www | 成人久久久 | 在线一区观看 | 精品欧美一区二区精品久久久 | 亚洲国产精品一区二区三区 | 久久免费精品 | 伊人一二三 |