<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何將FreeMODBUS協議棧移植到AT32 MCU

MCU開發加油站 ? 來源:AT32 MCU 雅特力科技 ? 2023-12-15 16:22 ? 次閱讀

概述

Modbus是一種串行通信協議,是Modicon公司(現施耐德電氣)于1979年為使用可編程邏輯控制器PLC)通信而發表。如今Modbus已成為工業領域通信協議的業界標準,并且是工業電子設備之間常用的連接方式。

關于Modbus協議

Modbus協議使用的是主從的通訊技術,即由主設備主動查詢和操作從設備。一般將主控設備方所使用的協議稱為Modbus Master,從設備方所使用的協議稱為Modbus Slave。典型的主設備包括工控機和工業控制器等;典型的從設備如可編程邏輯控制器(PLC)等。

MODBUS是OSI模型第7層上的應用層報文傳輸協議,它在連接至不同類型總線或網絡的設備之間提供客戶機/服務器通信。 Modbus通訊物理接口可以選用串口(包括RS232、RS485等),也可以選擇以太網口等。 圖1. Modbus通信棧

a05d2096-9b1f-11ee-8b88-92fbcf53809c.png

MODBUS協議定義了一個與基礎通信層無關的簡單協議數據單元(PDU)。特定總線或網絡上的MODBUS協議映射能夠在應用數據單元(ADU)上引入一些附加域。

圖2. 通用Modbus幀

a074ec3a-9b1f-11ee-8b88-92fbcf53809c.png

當服務器對客戶機響應時,它使用功能碼域來指示正常(無差錯)響應或者出現某種差錯(稱為異常響應)。需要管理超時,以便明確地等待可能不會出現的應答。

圖3. Modbus事務處理(無差錯)

a0820208-9b1f-11ee-8b88-92fbcf53809c.png

圖4. Modbus事務處理(異常響應)

a09cf4f0-9b1f-11ee-8b88-92fbcf53809c.png

MODBUS使用一個‘big-Endian’表示地址和數據項。這意味著當發射多個字節時,首先發送最高有效位。例如,寄存器大小16-bit的值為0x1234,先發送的第一字節為0x12,然后為0x34。

MODBUS的數據模型以一系列具有不同特征表格上的數據模型為基礎。四個基本表格為:

表1. Modbus數據模型

a0a9ff1a-9b1f-11ee-8b88-92fbcf53809c.png

MODBUS有三類功能碼:公共功能碼、用戶定義功能碼、保留功能碼。

公共功能碼是較好地被定義的功能碼,保證是唯一的、公開證明的,具有可用的一致性測試。

圖5. 公共功能碼定義

a0adc1b8-9b1f-11ee-8b88-92fbcf53809c.png

Modbus串行鏈路協議是一個主從協議。在同一時刻,只有一個主節點連接于總線,一個或多個子節點(最大編號為247)連接于同一個串行總線。Modbus通信總是由主節點發起。子節點在沒有收到來自主節點的請求時,從不會發送數據。子節點之間從不會互相通信。主節點在同一時刻只會發起一個Modbus事務處理。

主節點以兩種模式對子節點發出Modbus請求:

1、單播模式,主節點以特定地址訪問某個子節點,子節點接到并處理完請求后,子節點向主節點返回一個報文(一個'應答')。每個子節點必須有唯一的地址(1到247),這樣才能區別于其它節點被獨立的尋址。

圖6. 單播模式

a0be2e90-9b1f-11ee-8b88-92fbcf53809c.png

2、廣播模式,主節點向所有的子節點發送請求。對于主節點廣播的請求沒有應答返回。廣播請求一般用于寫命令。所有設備必須接受廣播模式的寫功能。地址0是專門用于表示廣播數據的。

圖7. 廣播模式

a0d02cd0-9b1f-11ee-8b88-92fbcf53809c.png

Modbus有兩種串行傳輸模式被定義:RTU模式(默認)和ASCII模式。

圖8. RTU和ASCII模式的位序列

a0db3c88-9b1f-11ee-8b88-92fbcf53809c.png

Modbus串行鏈路上所有設備的傳輸模式(和串行口參數)必須相同。

有關Modbus實現和特性的詳細信息,請訪問Modbus官網:https://modbus.org。

關于FreeModbus協議棧

FreeMODBUS是一個針對通用的Modbus協議棧在嵌入式系統中應用的實現。它提供了RTU/ASCII傳輸模式及TCP協議支持。FreeModbus遵循BSD許可證,這意味著用戶可以將FreeModbus應用于商業環境中。目前FreeMODBUS只免費提供了一個Modbus從機節點的協議棧。該協議棧使用ANSI C編寫,并且支持多個變量。 本應用指南將介紹如何在AT32F435單片機上,通過FreeMODBUS協議棧實現Modbus從機節點的主要功能,并提供基于AT32F43x_StdPeriph_Lib和FreeMODBUS協議棧的源代碼。如結合AT32-Comm-EV Board和AT-START Board可以方便快速的搭建起基于RS485的Modbus從機節點。

關于Modbus Poll調試軟件

Modbus Poll是一個Modbus主機模擬器,支持Modbus RTU、ASCI、TCP/IP傳輸模式。它可以協助開發人員調試Modbus從設備,測試和模擬Modbus協議的通信。通過多文檔界面接口,可以同時監控多個Modbus從機設備、數據域等。每個窗口可簡單地設定從設備ID、功能碼、地址、長度和輪詢間隔。支持Modbus數據模型的四個基本表格,支持Modbus的多個公共功能碼。

本應用指南中將下載安裝Modbus Poll在PC機上作為Modbus主機,與AT-START Board(作為Modbus從機)通過USB轉RS485的模塊相連,實現一個完整的、可測試的Modbus通信網絡。

AT32硬件準備

硬件主要由AT32-Comm-EV Board和AT-START Board組成。

本應用指南提供的demo使用到的外設資源有USARTTMR等,用戶可根據具體需要靈活配置和修改,使用RS232或RS485來實現Modbus物理層的連接。

圖9. AT32 Modbus結構原理圖

a0ecdee8-9b1f-11ee-8b88-92fbcf53809c.png

AT-START Board

當前提供例程基于AT-START-F435??商峁┗赗S232的Modbus通信。

圖10. AT-START-F435 V1.0實驗板

a0ff1c66-9b1f-11ee-8b88-92fbcf53809c.png

AT32-Comm-EV Board

可提供例程基于RS485的Modbus通信支持。

圖11. AT-START結合AT32-Comm-EV使用

a1298adc-9b1f-11ee-8b88-92fbcf53809c.png

將FreeModbus移植到AT32上

基礎工程準備

下載最新版本BSP&PACK文件,按照其應用指南進行安裝及配置,本文檔及例程均基于AT32F4xx_StdPeriph_Lib_V2.x.x的BSP&PACK文件進行開發??山栌胊t_start_f435文件夾下的temple工程來進行修改,更改文件夾及工程名為freemodbus,并準備在該工程內添加FreeMODBUS源碼。

工程內添加FreeModbus源碼

用戶需前往FreeMODBUS官網或Github上下載最新版源碼。源碼包解壓后,內有如下文件。

本文及所有移植例程均基于freemodbus-v1.6版本進行移植。

圖12. FreeMODBUS源碼文件

a141c2d2-9b1f-11ee-8b88-92fbcf53809c.png

將源碼包解壓后,復制modbus文件夾和demoBAREport文件夾到前面的基礎工程freemodbus目錄下面,將port文件夾改名為modbus_port。如下圖所示。

圖13. freemodbus工程目錄

a161d5b8-9b1f-11ee-8b88-92fbcf53809c.png

打開工程文件,并按以下2個步驟添加到工程文件內??蓞⒖糀T提供的例程文件進行添加。

1、添加modbus和modbus_port內的所有.c文件(與tcp相關的除外)到工程項目內。

圖14. freemodbus工程的項目

a17c4452-9b1f-11ee-8b88-92fbcf53809c.png

2、需將添加的.c文件所對應的.h文件的路徑添加到工程的文件夾設置內。

圖15. freemodbus工程的文件夾設置

a1889a68-9b1f-11ee-8b88-92fbcf53809c.png

工程代碼的修改

1、修改“port.h”文件。在該文件中添加包含關于AT32 MCU的“at32f435_437.h”頭文件。補全用于互斥操作的開關中斷宏定義。屏蔽掉關于TRUE、FALSE的宏定義,因在AT BSP的頭文件中已有定義,避免編譯出錯。 2、修改“portserial.c”和“porttimer.c”文件。在該文件中添加關于USART和TMR外設的底層驅動部分代碼。用戶可根據自己的硬件環境來自行修改,所以這里不進行具體說明,也可參考AT所提供的例程文件。 3、需特別注意的是,因USART寄存器DT的值里包含數據位和校驗位,而FreeMODBUS源碼里在讀取USART接收的數據后,會把所有值都當作數據位來處理而出錯,這可能是和其他廠家的MCU有差異,所以這里需在“mbascii.c”文件中去修改源碼。具體可參考AT所提供的例程文件。 4、在工程中新建并添加“mbtask.c/.h”文件。該文件用于創建Modbus的通信任務(作從機)來調用FreeMODBUS協議棧的API層,并建立Modbus的數據模型(4個基本表格)用于與ModbusPoll(作主機)進行模擬通信測試。 “mbtask.c/.h”文件中實現的調用管理:

保持寄存器的讀/寫

輸入寄存器的讀取

線圈的讀/寫

離散量輸入的讀取

“mbtask.h”文件中定義的Modbus數據模型和建立通信所需的參數:

表2. Modbus的配置參數

a1945060-9b1f-11ee-8b88-92fbcf53809c.png

設備功能的實現

1、在“mbtask.c”文件中編寫void modbus_task(void)函數去調用協議棧的API層,來實現modbus從機任務的功能。

a1a3222a-9b1f-11ee-8b88-92fbcf53809c.png

2、在“main.c”文件中,由int main(void) 主函數去調用modbus_task()任務函數即可。

a1b9a4d2-9b1f-11ee-8b88-92fbcf53809c.png

設備的測試

至此,官方例程移植完畢,編譯并下載,開打與AT-Link相連的串口,可看到如下打印信息。 圖16. 串口打印信息

a1ca76fe-9b1f-11ee-8b88-92fbcf53809c.png

從打印信息可以看到,從設備已經正常的運行起來。

這時我們需要將此設備與上位機相連接,再打開Modbus Poll軟件,模擬主設備來進行單播通信,即發送請求并接收應答。

1. 首先對Modbus Poll軟件進行連接設置,選擇與從設備相同的傳輸模式(RTU Mode),并配置相應串口的參數,也須與從設備相同。

圖17. Modbus Poll連接設置

a1e54092-9b1f-11ee-8b88-92fbcf53809c.png

2. 再對Modbus Poll軟件進行讀寫命令的定義,下面僅以功能碼03(讀保持寄存器)為例來講解,用戶可自行用同樣的方式測試其他功能碼。

圖18. Modbus Poll讀/寫定義

a1f1a38c-9b1f-11ee-8b88-92fbcf53809c.png

3. 在Modbus Poll軟件的文檔界面中,可以看到已成功讀回保持寄存器的值,并與從設備的程序中初始化保持寄存器時的值一致,測試通過。

圖19. Modbus Poll文檔界面

a1ff15c6-9b1f-11ee-8b88-92fbcf53809c.png

來源:AT32 MCU 雅特力科技

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    16100

    瀏覽量

    344549
  • 通信協議
    +關注

    關注

    28

    文章

    752

    瀏覽量

    39920
  • MODBUS
    +關注

    關注

    28

    文章

    1467

    瀏覽量

    75804
  • 移植
    +關注

    關注

    1

    文章

    369

    瀏覽量

    27882
  • AT32
    +關注

    關注

    1

    文章

    103

    瀏覽量

    1869
收藏 人收藏

    評論

    相關推薦

    如何將freemodbus移植stm32平臺

    modbus是一個非常好的串口協議(當然也能用在網口上),它簡潔、規范、強大??梢詽M足大部分的工業、嵌入式需求。這里詳細說下如何將freemodbus移植
    發表于 08-16 06:59

    如何將LwIP協議移植μC/OS-II實時操作系統上去呢

    LwIP協議是什么?什么是μC/OS-II實時操作系統呢?如何將LwIP協議移植μC/OS-
    發表于 11-05 08:44

    如何將FreeModbus移植STM32平臺上去

    modbus是什么?如何將FreeModbus移植STM32平臺上?
    發表于 11-17 07:44

    介紹Modbus協議在STM32平臺上的移植

    在STM32平臺上的移植。1.1 freemodbus介紹??freemodbus是一個奧地利人寫的Modbus協議。它是一個針對嵌入式應用的一個免費(自由)的通用
    發表于 01-14 06:57

    怎樣去獲取FreeMODBUS協議

    FreeMODBUS是什么呢?FreeMODBUS協議有何功能呢?怎樣去獲取FreeMODBUS協議呢?
    發表于 01-24 07:45

    FreeMODBUS是什么

    1 free modbus是什么FreeMODBUS 是針對通用的Modbus協議在嵌入式系統中應用的一個實現。Modbus協議是一個在工業制造領域中得到廣泛應用的一個網絡
    發表于 01-26 08:22

    RT-Thread freemodbus協議移植實現

    前言繼續熟悉RT-Thread freemodbus的應用,熟悉modbus協議。平臺:Pandora STM32L475,Keil MDK5,RT-Thread 4.0.3有前幾次的移植,本次驗證
    發表于 04-29 14:40

    Modbus on AT32 MCU

    Modbus on AT32 MCU前言本應用筆記介紹了如何將FreeMODBUS協議移植
    發表于 07-26 20:22

    GUIX移植AT32 MCU的過程和方法

    本應用筆記主要演示GUIX移植AT32 MCU的過程和方法。本應用筆記在ThreadX OS基礎上進行講解,因此建議閱讀者先看AT32的如
    發表于 10-25 07:51

    如何將FreeMODBUS協議移植AT32F43x單片機

    本應用筆記介紹了如何將FreeMODBUS協議移植AT32F43x單片機方法。本文檔提供的源代碼演示了使用Modbus的應用程序。單片機
    發表于 10-26 06:18

    其實ST的HAL庫與FreeModbus移植很配哦--FreeModbus從站設計(8)

    用HAL庫函數理清Modbus的數據收發流程。闡述了HAL庫與FreeModbus協議棧接口的基本框架。最初設想是能不能完全用HAL庫的函數來實現的FreeModbus移植?;贖AL庫實現vMBPortSerialEnable
    發表于 12-20 18:55 ?15次下載
    其實ST的HAL庫與<b class='flag-5'>FreeModbus</b><b class='flag-5'>移植</b>很配哦--<b class='flag-5'>FreeModbus</b>從站設計(8)

    FreeModbus 在 STM32F1 平臺的移植和解析

    Modbus協議在STM32平臺上的移植。1.1 freemodbus介紹??freemodbus是一個奧地利人寫的Modbus協議。它是一
    發表于 01-14 13:57 ?39次下載
    <b class='flag-5'>FreeModbus</b> 在 STM32F1 平臺的<b class='flag-5'>移植</b>和解析

    如何將FreeMODBUS協議移植AT32 MCU

    之間常用的連接方式。關于Modbus協議Modbus協議使用的是主從的通訊技術,即由主設備主動查詢和操作從設備。一般將主控設備方所使用的協議稱為ModbusMast
    的頭像 發表于 11-14 08:15 ?439次閱讀
    <b class='flag-5'>如何將</b><b class='flag-5'>FreeMODBUS協議</b>棧<b class='flag-5'>移植</b>到<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>

    如何將FreeMODBUS協議移植到AT32F43x單片機方法

    電子發燒友網站提供《如何將FreeMODBUS協議移植到AT32F43x單片機方法.pdf》資料免費下載
    發表于 12-18 11:15 ?0次下載
    <b class='flag-5'>如何將</b><b class='flag-5'>FreeMODBUS協議</b>棧<b class='flag-5'>移植</b>到AT32F43x單片機方法

    FreeMODBUS協議移植AT32 MCU的方案設計

    Modbus協議使用的是主從的通訊技術,即由主設備主動查詢和操作從設備。一般將主控設備方所使用的協議稱為Modbus Master,從設備方所使用的協議稱為Modbus Slave。典型的主設備包括工控機和工業控制器等
    發表于 12-15 16:09 ?182次閱讀
    <b class='flag-5'>FreeMODBUS協議</b>棧<b class='flag-5'>移植</b>到<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>的方案設計
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>