基于嵌入式STM32的Modbus RTU協議實現_第1頁
基于嵌入式STM32的Modbus RTU協議實現_第2頁
基于嵌入式STM32的Modbus RTU協議實現_第3頁
基于嵌入式STM32的Modbus RTU協議實現_第4頁
基于嵌入式STM32的Modbus RTU協議實現_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第第頁基于嵌入式STM32的ModbusRTU協議實現

2023年第11期儀表技術33

基于嵌入式STM32的ModbusRTU協議實現

磊,彭道剛,趙斌斌,黃麗

(上海電力學院自動化工程學院,上海200090)

Modbus協議以其高效性、

34儀表技術2023年第11期

式的主要優點是在相同波特率下其傳輸的字符的密度

每個信息必須連續傳輸。它的消息高于ASCII模式,幀格式如表1所示。

表1

起始位T1-T2-T3-T4

RTU消息幀格式

數據n個8Bit

CRC校驗16Bit

結束符T1-T2-T3-T4

設備地址功能代碼8Bit

8Bit

地址域:本設計中用到的Modbus功能碼如表2所

示,信息地址包括8位(RTU),有效的從機設備地址范圍0~247(10進制),各從機設備的尋址范圍為1~247。主機把從機地址放入信息幀的地址區,并向從機

圖1

系統硬件設計

接口能實現將數字量的控制信號轉換成模擬量輸出,

達到控制設備的目的。采集的數據可以在LCD液晶便于現場參數的調試和修改,同時也可以將屏上顯示,

485、測量的數據通過RS-以太網傳輸至監控中心工作

站。JTAG接口用于在線仿真和軟件調試。22.1

Modbus協議Modbus協議概述

把自己的地址放入響應信息的地尋址。從機響應時,

讓主機識別已作出響應的從機地址。址區,

功能碼:當主機向從機發送信息時,功能代碼向從機說明應執行的動作。如讀一組離散式線圈或輸入信讀一組寄存器的數據,讀從機的號的ON/OFF狀態,

診斷狀態,寫線圈(或寄存器)等。部分功能代碼代表的操作如表2所示。

表2

功能碼010203040506

名稱讀線圈讀離散量輸入讀保持寄存器讀輸入寄存器寫單個線圈寫單個寄存器

Modbus功能代碼

功能

讀線圈的當前狀態讀取離散量輸入的當前狀態讀取保持寄存器的內容讀輸入寄存器的內容將線圈的輸出寫為ON或OFF將二進制數寫到一個保持寄存器

1979年Modbus協議由Modicon公司(現在是施

具有劃時代、里程碑式的耐德電氣的一個品牌)發明,

意義,從此掀起了工業控制網絡技術的序幕。Modbus

是全球第一個真正用于工業現場的總線協議,近年來在控制器和測量儀表上也得到了大量地使用,目前已成為我國工業自動化領域的一種國際標準。Modbus

232、RS-422、RS-485通信接口和協議支持傳統的RS-以太網接口。

Modbus通信協議采用主-從(Master-Slave)模型,

是一種應用層報文協議,可以在不同類型的總線或網而不管它們是經過何種網絡進行通信的,在同絡鏈接,

一通信網絡上每個設備都有唯一的設備地址,并且只可以有多個從設備。主設備可單獨能有一個主設備,

和從設備通信,也能以廣播方式和所有從設備通信。如果是單獨通信,從設備返回一應答消息作為回應,如則不作任何回應。果是以廣播方式進行查詢的,2.2

Modbus協議的數據幀

Modbus協議有兩種傳輸模式:RTU模式和ASCII模式。ASCII模式中數據用ASCII碼表示,通過冒號(ASCII碼3AH)、0AH)字符回車換行(ASCII碼0DH,采用LRC數據校驗;RTU表示數據幀的開始和結束,

模式中數據用非壓縮BCD碼表示,通過時間標記來實

采用CRC數據校驗。控現數據幀開始和結束的判定,

制器以RTU模式在Modbus總線上進行通信時,信息

該模中的每8位字節分成2個4位16進制的字符,

數據域:數據域和功能碼密切相關,根據功能碼的

不同而不同。

CRC校驗:ModbusRTU采用循環冗余檢驗CRC方法計算錯誤校驗碼,按照CRC算法,使用標準的16位生成多項式對任意長度的信息字段校驗出一個16位的校驗碼。2.3

ModbusRTU通信結構模型

本文用底層數據采集系統為依托建立檢測平臺采

利用ModbusRTU協議實現集標準的電壓電流信號,

數據采集系統與計算機之間的通信。系統組網結構如數據采集系統為從站,主圖2所示。以PC機為主站,

從站根據各自的編號向主站向從站發出取數據命令,

站返回各項采集的數據,主站將接收的數據處理后存入數據庫。3

ModbusRTU協議的實現

ModbusRTU協議采用Master/Slave通信模型。在μC/OS-II操作系統環境下,實現ModbusRTU中PC端主站和MiniARM端從站之間的通信。

2023年第11期儀表技術

Bit字,而PNum是操作的數據。

35

如圖3所示為ModbusRTU主站程序流程圖。為實現ModbusRTU主站協議的功能處理模塊,首先需然后根據服要完成串口的初始化和服務函數的構造,

務構造函數構造Modbus請求幀并且調用串口發送命令將請求幀發送出去,如果程序在設定的時間內接收到應答幀,程序將調用對應的應答幀解析函數進行處

圖2

系統網絡結構

3.1ModbusRTU主站的實現

Modbus主站服務程序的核心模塊是功能處理模

理,否則返回應答超時碼。同時,解析函數對串口緩沖區內接收到的數據進行分析,若應答幀解析正確,函數將數據裝入目標緩沖區,否則返回校驗失敗碼

塊,包括串口初始化、數據幀的構造和解析以及發送數

據幀等功能。發送數據幀時必須將其封裝成標準的Modbus數據幀才能進行發送。在協議幀的組成上,Modbus協議定義了一個與基礎通信層無關的簡單協議數據單元(PDU),通過在PDU上增加地址域和CRC校驗域等附加域定義了應用數據單元(ADU)。CRC碼為2個字節,16位的二進制值。由發送設備計算CRC值,并把它附到信息中去。接收設備在接收信息過程中再次計算CRC值并與CRC的實際值進行比較,若兩者不一致,即產生一個錯誤。校驗開始,時,把16位寄存器的各位都置為“1”然后把信息中

只的相鄰2個8位字節數據放到當前寄存器中處理,

有每個字符的8位數據用于CRC處理,起始位、停止位和校驗位不參與CRC計算。

CRC校驗時,每個8位數據與該寄存器的內容進行異或運算,然后向最低有效位(LSB)方向移位,用零填入最高有效位(MSB)后,再對LSB檢查,若LSB=1,則

不作異或運算。寄存器與預置的固定值異或;若LSB=0,

重復上述處理過程,直至移位8次,最后一次(第

8次)移位后,下一個8位字節數據與寄存器的當前值異或,再重復上述過程。全部處理完信息中的數據字節后,最終得到的寄存器值為CRC值。

CRC值附加到信息時,低位在先,高位在后。為了方便功能參數的獲取,定義了一個如下結構體:

typedefstruct{

unsignedcharSlaveID;unsignedcharFunc;intStartAddr;intPNum;}Parameter

圖3ModbusRTU主站程序流程圖

3.2ModbusRTU從站的實現

ModbusRTU協議是一個一主多從的通信協議,所

以需要對每個從站分配不同的地址。ModbusRTU從

站主要實現數據幀的接收和存儲,并且根據接收到的數據幀中的功能代碼給出一應答消息作為對主站的回應。ModbusRTU從站的程序設計流程圖如圖4所示。首先需要對串口初始化,如設置波特率、數據位和奇偶校驗位等,然后調用串口接收命令讀取主站發送來的數據幀,并判斷接收到的數據幀中的地址與本機是否相符,如果不符,直接結束,否則對數據幀進行CRC校驗。當校驗正確的時候就可以根據相應的功否則向主站能代碼調用對應的函數去執行功能操作,

返回一個錯誤信息的應答幀。下面是功能代碼為03時,讀保持寄存器的功能函數。

voidreadholdingregister(unsignedchar*Rx){

StartAddr=(*Rx++)<<8;StartAddr+=*Rx++;//起始地址

其中SlaveID是從站地址,一個Modbus網絡最多

允許有255個從站。Func是服務功能號的選擇。StartAddr是需要操作的設備在從站中的地址,它是16

36儀表技術2023年第11期

從站能否解析請求幀及時響出請求幀完成相應功能,

應主站請求,發出應答幀。與PC機相連之后,分別對兩種功能服務進行若干測試,并根據ModbusRTU協議的內容驗證所得到的結果是否正確。在主站PC機上的截圖如5所示。

圖4ModbusRTU從站程序流程圖

outputnum=(*Rx++)<<8;

outputnum+=(*Rx++);//輸出數量

if(outputnum<=0x07d0&&outputnum>=0x0001){

if(StartAddr<=0xffff&&startaddr>=0x0000)//起始地址{

send[0]=SlaveID;send[1]=0x03;send[2]=2*outputnum;for(n=1;n<=2*outputnum;n++){

send[n+2]=ox[startaddr+n-1];

re_crc=GetCRC16(send,2*outputnum+3);send[2*outputnum+4]=re_crc&0xff;send[2*outputnum+3]=re_crc>>8&0xff;}

圖5主站PC機通信測試

由圖5可以看出ModbusRTU主站對地址為1的

ModbusRTU從站的操作,讀寄存器地址01和寫寄存這里以03讀寄存器功能為例來分析。器地址01,

主站PC機通過串口發送一個Modbus幀包含8個字節,工控板判斷出是ModbusRTU幀,執行RTU服01代表所請求的從站地址,03代表所要執行的讀務,

0001為寄存器的寄存器號(1號寄存寄存器功能,

0001為寄存器的數量(1個字節),D5CA為器),

CRC校驗碼。從站接到主站的請求幀后,解析幀,返01代回一個響應,反應幀如圖5的接收所示,同樣的,

03代表該幀執行的功能是讀寄存表了該從站的地址,

02代表了字節計數,即為后面讀出來數據的總字器,

7984為CRC校驗碼。其中0001即為數據采集節數,

系統所讀取到的放在1號寄存器里的數字量。4

結論

3.3

系統通信參數

ModbusRTU是基于串口的數據傳輸模式,為了實

現主站和從站之間的通信,在同一網絡上所有設備都必須設置相同的傳輸模式和串口參數。本設計中的通信參數設置如表3所示。

表3

通信參數串口波特率奇偶校驗數據長度停止位

PC端COM19600bit/s

無8位1位

串口通信參數

數據采集系統端ModbusRTU9600bit/s

無8位1

本系統采用了STM32F103ZE嵌入式微控制器,可以使系統小型化,提高了系統性能,并且便于各種外設的擴展,可以實現多功能采集。本系統將基于STM32F103ZE微處理器為核心的數據采集系統作為485總線上,PC機作為主站成功地獲從站配置在RS-取了設備參數,并利用上位機界面顯示采集信號,達到了系統設計的基本要求。

通過實驗測試,本文所介紹的ModbusRTU協議的主從通信模式,可以良好地應用于工業現場的設備參數的通信傳輸。由于系統通信可靠、傳輸速率快,在電力及其他工業現場具有廣闊的應用前景。

(下轉第54頁)

3.4

系統通信調試

采用Modbus調試精靈作為RTU主站軟件,用戶

可以通過該人機界面選擇從站

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論