當前位置:首頁 > 公眾號精選 > 程序員小哈
[導讀]風向變送器有8方位風向和360度風向兩種; 外殼分為鋁合金和聚碳兩種; 風向傳感器/變速器測量方式分為: 模擬量(4-20mA/0-5V/0-10V) RS485 由于風速和風向變送器是分開的,所以我們選擇了RS485總線的測量方式,這樣我們將兩個模塊并到一起,設為不同的地址



風向變送器有8方位風向和360度風向兩種;


外殼分為鋁合金和聚碳兩種;


風向傳感器/變速器測量方式分為:

  • 模擬量(4-20mA/0-5V/0-10V)
  • RS485


由于風速和風向變送器是分開的,所以我們選擇了RS485總線的測量方式,這樣我們將兩個模塊并到一起,設為不同的地址,這樣就可以只占用一個串口資源就可以獲取風速和風向的數據了。

應用場景

廣泛適用于氣象、海洋、環(huán)境、機場、港口、實驗室、工農業(yè)及交通等領域的風速和風向測量。

數據幀格式定義

采用Modbus-RTU 通訊規(guī)約,格式如下: 

初始結構 ≥4 字節(jié)的時間 

地址碼 = 1 字節(jié) 

功能碼 = 1 字節(jié) 

數據區(qū) = N 字節(jié) 

錯誤校驗 = 16 位CRC 碼 

結束結構 ≥4 字節(jié)的時間 

地址碼:為變送器的地址,在通訊網絡中是唯一的(出廠默認0x01)。 

功能碼:主機所發(fā)指令功能指示,本變送器只用到功能碼0x03(讀取寄存器數據)。

數據區(qū):數據區(qū)是具體通訊數據,注意16bits數據高字節(jié)在前! 

CRC碼:二字節(jié)的校驗碼。

注意:此通訊協議只適用于我購買過的那款風速風向儀,不同廠家協議不同。

主機問詢幀結構:

地址碼 功能碼 寄存器起始地址 寄存器長度 校驗碼低位 校驗碼高位
1字節(jié) 1字節(jié) 2字節(jié) 2字節(jié) 1字節(jié) 1字節(jié)

從機應答幀結構:

地址碼 功能碼 有效字節(jié)數 數據一區(qū) 第二數據區(qū) 第N數據區(qū) 校驗碼
1字節(jié) 1字節(jié) 1字節(jié) 2字節(jié) 2字節(jié) 2字節(jié) 2字節(jié)


通訊實例:

讀取設備地址0x01的風向

問詢幀:
地址碼 功能碼 起始地址 數據長度 CRC低位 CRC高位
0x01 0x03 0x00 0x00 0x00 0x02 0xC4 0x0B


應答幀:(例如讀到風向值(0-7檔)為2,(0-360°)為90°)
地址碼 功能碼 返回字節(jié)數 風向(0-7檔) 風向(0-360°) CRC低位 CRC高位
0x01 0x03 0x04 0x00 0x02 0x00 0x5A 0xDB 0xC8
風向計算:

(0-7檔):0002H(十六進制)= 2=> 風向 = 東風 

(0-360°):005AH (十六進制)= 90=> 風向= 東風

讀取設備地址0x01的風速值

問詢幀:
地址碼 功能碼 起始地址 數據長度 CRC低位 CRC高位
0x01 0x03 0x00 0x00 0x00 0x01 0x84 0x0A
應答幀:(例如讀到當前風速為8.6m/s)
地址碼 功能碼 返回字節(jié)數 當前風速值 CRC低位 CRC高位
0x01 0x03 0x02 0x00 0x56 0x38 0x7A
風速計算:

當前風速:0056H(十六進制)= 86=> 風速 = 8.6m/s

硬件連接

  • 風速和風向變速器12V供電;
  • 我們使用一個485接口,將風速和風向變速器并聯到了一起。

由于RS485的子設備之間的設備地址不能相同,所以我們將風速儀的地址設為了1,風向儀的地址設為了2。

RS485總線參考電路

要想獲取風速或風向值,我們要經過如下三步操作:

(1)發(fā)送問詢幀:

if(times%10==1){           times2++;             if(times2%10==0)       {              //求風速              sprintf(dtbuf, "%c%c%c%c%c%c%c%c", 0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A);              MAX485DE=1;              USART2_OUT((u8 *)dtbuf, 8);              MAX485DE=0;                    }       else if(times2%10==5)       {              //求風向              sprintf(dtbuf, "%c%c%c%c%c%c%c%c", 0x02,0x03,0x00,0x00,0x00,0x02,0xC4,0x38);              MAX485DE=1;              USART2_OUT((u8 *)dtbuf, 8);              MAX485DE=0;       }}

(2)接收串口數據:

u16 USART2_RX_STA=0;         void USART2_IRQHandler(void){       u8 res;                if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)       {              res =USART_ReceiveData(USART2);                      if(USART2_RX_STA<USART2_MAX_RECV_LEN)              {                     TIM_SetCounter(TIM2,0);                       if(USART2_RX_STA==0)                            TIM2_Set(1);                      USART2_RX_BUF[USART2_RX_STA++]=res;               }              else              {                     USART2_RX_STA|=1<<15              }       }                                                                           }

(3)解析數據幀:

//解析RS485信息if(USART2_RX_STA&0x8000){       uart2Len=USART2_RX_STA&0x3f             if(uart2Len==7)       {              nCRC16 = crc16(USART2_RX_BUF,5);                           checkBitHig=(nCRC16>>8)&0xFF;              checkBitLow=nCRC16&0xFF               if(checkBitHig==USART2_RX_BUF[5]&&checkBitLow==USART2_RX_BUF[6])              {                     printf("收到風速數據包\r\n");                                         u16Value = USART2_RX_BUF[3] * 256 + USART2_RX_BUF[4];                      stuAliOSIoT.WindSpeed = u16Value/10.0;              }       }       else if(uart2Len==9)       {              nCRC16 = crc16(USART2_RX_BUF,7);                           checkBitHig=(nCRC16>>8)&0xFF;              checkBitLow=nCRC16&0xFF;               if(checkBitHig==USART2_RX_BUF[7]&&checkBitLow==USART2_RX_BUF[8])              {                     printf("收到風向數據包\r\n");                      stuAliOSIoT.WindDirection = USART2_RX_BUF[4];              }       }             USART2_RX_STA=0;          memset(USART2_RX_BUF, 0, sizeof(USART2_RX_BUF)); }

上面函數返回的數據幀,首先要對返回的數據進行CRC校驗,只有合法的數據幀我們才會對數據幀進行解析,防止出現臟包。


推薦閱讀:
STM32單片機最小系統詳解
STM32F103 串口的使用方法
STM32中精確延時函數的實現




免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯合牽頭組建的NVI技術創(chuàng)新聯盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯...

關鍵字: VI 傳輸協議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉