在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

雅特力 AT32 MCU ? 2023-11-14 08:15 ? 次閱讀

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

關于Modbus協議

Modbus協議使用的是主從的通訊技術,即由主設備主動查詢和操作從設備。一般將主控設備方所使用的協議稱為Modbus Master,從設備方所使用的協議稱為Modbus Slave。典型的主設備包括工控機和工業控制器等;典型的從設備如可編程邏輯控制器(PLC)等。MODBUS是OSI模型第7層上的應用層報文傳輸協議,它在連接至不同類型總線或網絡的設備之間提供客戶機/服務器通信。Modbus通訊物理接口可以選用串口(包括RS232RS485等),也可以選擇以太網口等。圖1. Modbus通信棧e3aafeaa-8282-11ee-9788-92fbcf53809c.png

MODBUS協議定義了一個與基礎通信層無關的簡單協議數據單元(PDU)。特定總線或網絡上的MODBUS協議映射能夠在應用數據單元(ADU)上引入一些附加域。圖2. 通用Modbus幀e3c5208c-8282-11ee-9788-92fbcf53809c.png

當服務器對客戶機響應時,它使用功能碼域來指示正常(無差錯)響應或者出現某種差錯(稱為異常響應)。需要管理超時,以便明確地等待可能不會出現的應答。圖3. Modbus事務處理(無差錯)e3d896d0-8282-11ee-9788-92fbcf53809c.png

圖4. Modbus事務處理(異常響應)e3e4b92e-8282-11ee-9788-92fbcf53809c.png

MODBUS使用一個‘big-Endian’表示地址和數據項。這意味著當發射多個字節時,首先發送最高有效位。例如,寄存器大小16-bit的值為0x1234,先發送的第一字節為0x12,然后為0x34。MODBUS的數據模型以一系列具有不同特征表格上的數據模型為基礎。四個基本表格為:表1. Modbus數據模型e3fed34a-8282-11ee-9788-92fbcf53809c.png

MODBUS有三類功能碼:公共功能碼、用戶定義功能碼、保留功能碼。公共功能碼是較好地被定義的功能碼,保證是唯一的、公開證明的,具有可用的一致性測試。圖5. 公共功能碼定義e416cd06-8282-11ee-9788-92fbcf53809c.pngModbus串行鏈路協議是一個主從協議。在同一時刻,只有一個主節點連接于總線,一個或多個子節點(最大編號為247)連接于同一個串行總線。Modbus通信總是由主節點發起。子節點在沒有收到來自主節點的請求時,從不會發送數據。子節點之間從不會互相通信。主節點在同一時刻只會發起一個Modbus事務處理。主節點以兩種模式對子節點發出Modbus請求:1、單播模式,主節點以特定地址訪問某個子節點,子節點接到并處理完請求后,子節點向主節點返回一個報文(一個'應答')。每個子節點必須有唯一的地址(1到247),這樣才能區別于其它節點被獨立的尋址。圖6. 單播模式e42b5d70-8282-11ee-9788-92fbcf53809c.png2、廣播模式,主節點向所有的子節點發送請求。對于主節點廣播的請求沒有應答返回。廣播請求一般用于寫命令。所有設備必須接受廣播模式的寫功能。地址0是專門用于表示廣播數據的。圖7. 廣播模式e448469c-8282-11ee-9788-92fbcf53809c.pngModbus有兩種串行傳輸模式被定義:RTU模式(默認)和ASCII模式。圖8. RTU和ASCII模式的位序列e45aa0bc-8282-11ee-9788-92fbcf53809c.pngModbus串行鏈路上所有設備的傳輸模式(和串行口參數)必須相同。有關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結構原理圖e46f08ea-8282-11ee-9788-92fbcf53809c.png

  • AT-START Board

當前提供例程基于AT-START-F435。可提供基于RS232的Modbus通信。圖10. AT-START-F435 V1.0實驗板e4880098-8282-11ee-9788-92fbcf53809c.png

  • AT32-Comm-EV Board

可提供例程基于RS485的Modbus通信支持。圖11. AT-START結合AT32-Comm-EV使用e4b3efd2-8282-11ee-9788-92fbcf53809c.png

將FreeModbus移植到AT32上

基礎工程準備

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

工程內添加FreeModbus源碼

用戶需前往FreeMODBUS官網或Github上下載最新版源碼。源碼包解壓后,內有如下文件。本文及所有移植例程均基于freemodbus-v1.6版本進行移植。圖12. FreeMODBUS源碼文件e4f46ada-8282-11ee-9788-92fbcf53809c.png將源碼包解壓后,復制modbus文件夾和demo\BARE\port文件夾到前面的基礎工程freemodbus目錄下面,將port文件夾改名為modbus_port。如下圖所示。圖13. freemodbus工程目錄e5195782-8282-11ee-9788-92fbcf53809c.png打開工程文件,并按以下2個步驟添加到工程文件內。可參考AT提供的例程文件進行添加。1、添加modbus和modbus_port內的所有.c文件(與tcp相關的除外)到工程項目內。圖14. freemodbus工程的項目e539baa4-8282-11ee-9788-92fbcf53809c.png2、需將添加的.c文件所對應的.h文件的路徑添加到工程的文件夾設置內。圖15. freemodbus工程的文件夾設置e54eb45e-8282-11ee-9788-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的配置參數e5669862-8282-11ee-9788-92fbcf53809c.png

設備功能的實現

1、在“mbtask.c”文件中編寫void modbus_task(void)函數去調用協議棧的API層,來實現modbus從機任務的功能。e57dc8e8-8282-11ee-9788-92fbcf53809c.png2、在“main.c”文件中,由int main(void) 主函數去調用modbus_task()任務函數即可。e59240de-8282-11ee-9788-92fbcf53809c.png

設備的測試

至此,官方例程移植完畢,編譯并下載,開打與AT-Link相連的串口,可看到如下打印信息。圖16. 串口打印信息e5b44d1e-8282-11ee-9788-92fbcf53809c.png從打印信息可以看到,從設備已經正常的運行起來。這時我們需要將此設備與上位機相連接,再打開Modbus Poll軟件,模擬主設備來進行單播通信,即發送請求并接收應答。1. 首先對Modbus Poll軟件進行連接設置,選擇與從設備相同的傳輸模式(RTU Mode),并配置相應串口的參數,也須與從設備相同。圖17. Modbus Poll連接設置e5c67b6a-8282-11ee-9788-92fbcf53809c.png2.?再對Modbus Poll軟件進行讀寫命令的定義,下面僅以功能碼03(讀保持寄存器)為例來講解,用戶可自行用同樣的方式測試其他功能碼。圖18. Modbus Poll讀/寫定義e5e6a0c0-8282-11ee-9788-92fbcf53809c.png3.?在Modbus Poll軟件的文檔界面中,可以看到已成功讀回保持寄存器的值,并與從設備的程序中初始化保持寄存器時的值一致,測試通過。圖19. Modbus Poll文檔界面e60093cc-8282-11ee-9788-92fbcf53809c.png

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

    關注

    146

    文章

    17148

    瀏覽量

    351197
  • MODBUS
    +關注

    關注

    28

    文章

    1805

    瀏覽量

    76997
  • AT32
    +關注

    關注

    1

    文章

    113

    瀏覽量

    2102
收藏 人收藏

    評論

    相關推薦

    DJN Modbus協議

    DJN Modbus協議
    的頭像 發表于 11-27 13:52 ?1113次閱讀
    DJN <b class='flag-5'>Modbus協議</b>

    Modbus協議網關簡介

    在工業自動化領域,設備間的通信與數據交換是實現高效、智能控制的關鍵。Modbus協議作為一種廣泛應用的通信協議,自1971年由Modicon公司首次推出以來,便以其標準、開放、支持多種電氣接口等特點
    的頭像 發表于 09-23 14:51 ?258次閱讀
    <b class='flag-5'>Modbus協議</b>網關簡介

    如何將WOLFSSL移植TI Sitara AM335入門套件

    電子發燒友網站提供《如何將WOLFSSL移植TI Sitara AM335入門套件.pdf》資料免費下載
    發表于 09-19 11:29 ?1次下載
    <b class='flag-5'>如何將</b>WOLFSSL<b class='flag-5'>移植</b><b class='flag-5'>到</b>TI Sitara AM335入門套件

    Linux網絡協議的實現

    請求并與底層的網絡硬件進行交互。本文深入探討 Linux 網絡協議的架構與實現,涵蓋數據包處理流程、關鍵模塊、協議層次以及性能優化等方
    的頭像 發表于 09-10 09:51 ?314次閱讀
    Linux網絡<b class='flag-5'>協議</b><b class='flag-5'>棧</b>的實現

    ESP32S3如何移植PJSIP協議用于使用SIP通話?

    ESP32S3 如何移植PJSIP協議用于使用SIP通話
    發表于 07-19 06:56

    Modbus協議轉Profibus協議網關接溫控表與PLC通訊

    。它集成了Modbus和Profibus兩種協議,可以接收Modbus協議的數據并將其轉換為Profibus協議的數據,或者接收Profibus協議的數據并將其轉換為
    的頭像 發表于 06-21 11:31 ?1918次閱讀
    <b class='flag-5'>Modbus協議</b>轉Profibus<b class='flag-5'>協議</b>網關接溫控表與PLC通訊

    基于MM32F5270的Ethernet實現LwIP協議移植

    LwIP是輕量化的TCP/IP協議,由瑞典計算機科學院(SICS)的Adam Dunkels 開發的一個小型開源的TCP/IP協議。LwIP具有高度可移植性、代碼開源,提供了三種編程
    的頭像 發表于 06-21 10:28 ?1195次閱讀
    基于MM32F5270的Ethernet實現LwIP<b class='flag-5'>協議</b><b class='flag-5'>棧</b><b class='flag-5'>移植</b>

    Modbus協議轉Profinet協議網關與氣體監測系統配置案例

    Modbus協議和Profinet協議作為工業領域常見的兩種通訊協議,各自具有一定的特點和應用范圍。Modbus轉Profinet網關(XD-MDPN100/300)在工業自動化控制系統中,可以
    的頭像 發表于 06-13 17:50 ?1405次閱讀
    <b class='flag-5'>Modbus協議</b>轉Profinet<b class='flag-5'>協議</b>網關與氣體監測系統配置案例

    STM32F407移植LWIP協議總是進入硬件中斷的原因?

    在f407上移植LWIP協議這個地方就進入硬件中斷 請問是我的指針沒初始化好嗎?還是其他原因?? /* entry point to the LwIP stack */ err
    發表于 05-16 07:59

    基于MM32G5330的FlexCAN實現CANopenNode協議移植

    本文介紹如何基于靈動MM32G5330的FlexCAN實現CANopenNode協議移植,并使用靈動官方提供的開發板Mini-G5333進行驗證。
    發表于 04-12 09:15 ?1497次閱讀
    基于MM32G5330的FlexCAN實現CANopenNode<b class='flag-5'>協議</b><b class='flag-5'>棧</b><b class='flag-5'>移植</b>

    Modbus協議網關是什么?Modbus協議網關的功能

    Modbus協議網關是一種專門用于工業自動化環境中的網絡設備,其主要功能是實現不同通信協議之間的轉換,尤其是基于Modbus協議的設備或系統與使用其他
    的頭像 發表于 04-11 15:51 ?745次閱讀

    stm32f103zet6在freertos環境使用freemodbus協議不通怎么解決?

    在freertos中移植freemodbus協議按照協議初始化了發送的串口,以及485控制引腳,但是通過modbus poll ping 不通,一直顯示timeout, 檢查并沒有
    發表于 03-12 08:07

    modbus協議功能碼分類 modbus協議功能碼是什么,有什么作用

    Modbus協議是一種用于工業領域常見的通信協議,它基于主從結構,用于在不同設備之間實現數據交換。Modbus協議的功能碼是決定數據交換類型和操作的重要部分。下面詳細介紹
    的頭像 發表于 01-31 14:47 ?7134次閱讀

    如何將UCOSIII系統移植ADSPBF609建立的工程文件中?

    如何將UCOSIII系統移植ADSPBF609建立的工程文件中,編譯環境是CCES
    發表于 01-12 08:20

    modbus協議與485協議區別

    Modbus協議與485協議是工業通信領域中常用的兩種協議,它們在不同的層面上具有不同的功能和設計理念。本文將對Modbus協議與485協議
    的頭像 發表于 01-11 11:06 ?2.2w次閱讀
    主站蜘蛛池模板: www.四虎影院在线观看| 色天天网| 福利片在线观看免费高清| 男女交性无遮挡免费视频| 日本三级成人中文字幕乱码| sese国产| dyav午夜片| 日韩电影毛片| 天天色成人| 老师在办公室被躁得舒服小说| 欧美性色黄在线视| 天天干天天射天天插| 色视频免费观看高清完整| 国内精品手机在线观看视频| 老师下面好紧| 久久青草免费91观看| 免费永久视频| 在线看片地址| 五月婷久久| aaa特级毛片| 一区中文字幕| 免费一级成人毛片| 欧美肉到失禁高h视频在线| 99久久精品免费看国产| 狠狠色视频| 欧美另类v| 日本wwwwwwwww| 欧美精品影院| 香蕉视频在线免费播放| 夜夜五月天| 老司机午夜永久在线观看| 国模私拍视频在线观看| 日本人xxxxxxxxxⅹ68| 日本三级在线视频| 免费一级特黄特色大片在线观看看| 直接看的黄色网址| bt种子搜索-bt天堂| 亚洲福利秒拍一区二区| 久久极品| 免费大片av手机看片| 五月婷花|