0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

libmodbus源碼框架分析

瑞薩MCU小百科 ? 來源:瑞薩MCU小百科 ? 2024-11-21 13:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

11.2libmodbus源碼框架分析

libmodbus作為一個優(yōu)秀且免費(fèi)開源的跨平臺支持RTU 和 TCP模式的Modbus開發(fā)庫,非常值得大家借鑒和學(xué)習(xí)。本章對libmodbus源代碼進(jìn)行閱讀和分析。

11.2.1核心函數(shù)

以Modbus RTU協(xié)議為例,主設(shè)備、從設(shè)備初始化后:

①主設(shè)備就可以啟動請求,即“發(fā)送消息”給從設(shè)備。

②從設(shè)備接收到請求后構(gòu)造數(shù)據(jù),啟動響應(yīng)即“發(fā)送回復(fù)”。

③主機(jī)收到響應(yīng)后,會“檢查響應(yīng)”。

如下圖所示:

e06cd046-a307-11ef-93f3-92fbcf53809c.png

分析“l(fā)ibmodbus-3.1.10 estsunit-test-client.c”、“l(fā)ibmodbus-3.1.10 estsunit-test-server.c”,可以得到下面核心函數(shù)的使用過程:

e0747896-a307-11ef-93f3-92fbcf53809c.png

11.2.2框架與數(shù)據(jù)結(jié)構(gòu)

站在APP開發(fā)的角度來說,使用上一節(jié)里介紹的libmodbus函數(shù)即可。但是,數(shù)據(jù)的傳輸必定涉及到底層數(shù)據(jù)傳輸。所以,從數(shù)據(jù)的收發(fā)過程,可以把使用libmodbus的源碼分為3層:

①APP:它知道要做什么,主設(shè)備要讀寫哪些寄存,從設(shè)備提供、接收什么數(shù)據(jù)。

②Modbus核心層:向上提供接口函數(shù),向下調(diào)用底層代碼構(gòu)造數(shù)據(jù)包并發(fā)送、接收數(shù)據(jù)包并解析。

③后端(數(shù)據(jù)傳輸):進(jìn)行硬件相關(guān)的數(shù)據(jù)封包與發(fā)送、接收與解包。

e097e894-a307-11ef-93f3-92fbcf53809c.png

對于核心層、后端,抽象出了如下結(jié)構(gòu)體:

e0a2cb74-a307-11ef-93f3-92fbcf53809c.png

核心層modbus_t結(jié)構(gòu)體的成員含義如下:

e0b54696-a307-11ef-93f3-92fbcf53809c.png

后端modbus_backend_t結(jié)構(gòu)體的成員含義如下:

成員 含義
unsigned int backend_type; 后端類型,是RTU還是TCP
unsigned int header_length; 頭部長度,比如RTU數(shù)據(jù)包前面需要有1字節(jié)的設(shè)備地址,頭部長度就是1
unsigned intchecksum_length; 校驗(yàn)碼長度,RTU的校驗(yàn)碼是2字節(jié)
unsigned int max_adu_length; ADU(數(shù)據(jù)包)最大長度
set_slave 設(shè)置從站地址
build_request_basis 設(shè)置RTU請求包的基本數(shù)據(jù),這些數(shù)據(jù)的格式是一樣的,比如req[0]是從設(shè)備地址,req[1]是功能碼,req[2]和req[3]是寄存器地址,req[4]和req[5]是寄存器數(shù)量
build_response_basis 設(shè)置RTU回應(yīng)包的基本數(shù)據(jù),這些數(shù)據(jù)的格式是一樣的,比如req[0]是從設(shè)備地址,req[1]是功能碼
prepare_response_tid 生產(chǎn)傳輸標(biāo)識TID,在TCP中使用
send_msg_pre 發(fā)送消息前的準(zhǔn)備工作,對于RTU是填充CRC檢驗(yàn)碼,對于TCP是填充頭部的Length
send 發(fā)送數(shù)據(jù)包
receive 接收數(shù)據(jù)包
recv 接收原始數(shù)據(jù),receive會調(diào)用recv得到原始數(shù)據(jù)然后解析出數(shù)據(jù)包
check_integrity 檢查數(shù)據(jù)包的完整性
pre_check_confirmation 檢查響應(yīng)數(shù)據(jù)包是否有效時,先執(zhí)行pre_check_confirmation做一些簡單的檢查
connect 硬件相關(guān)的連接,對于RTU就是打開串口、設(shè)置串口波特率等;對于TCP則是連接對端
is_connected 判斷是否已經(jīng)連接
close 關(guān)閉連接
flush 清空接收到的、未處理的數(shù)據(jù)
select 阻塞一段時間以等待數(shù)據(jù)
free 釋放分配的modbus_t等結(jié)構(gòu)體

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    671

    瀏覽量

    30286
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40713
  • RTU
    RTU
    +關(guān)注

    關(guān)注

    0

    文章

    435

    瀏覽量

    29474
  • LibModbus
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7447

原文標(biāo)題:libmodbus源碼框架分析 - RZ MPU工業(yè)控制教程連載(38)

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    第6章_libmodbus使用

    libmodbus是一個免費(fèi)的跨平臺支持RTU和TCP的Modbus庫,遵循LGPL V2.1+協(xié)議。libmodbus支持Linux、Mac Os X、FreeBSD、QNX和Windows等
    的頭像 發(fā)表于 06-29 14:36 ?4009次閱讀
    第6章_<b class='flag-5'>libmodbus</b>使用

    【米爾-瑞薩RZ/G2UL開發(fā)板】3.libmodbus移植使用

    的工具集。 實(shí)現(xiàn)步驟 新建文件,拉取libmodbus源碼,地址如下: https://github.com/stephane/libmodbus 在這個目錄下新建一個文件夾用于存放
    發(fā)表于 02-02 23:49

    【米爾-瑞米派兼容樹莓派擴(kuò)展模塊-試用體驗(yàn)】安裝libmodbus

    上篇測試了串口的通信,本篇安裝開源modbus庫協(xié)議,為后續(xù)的項(xiàng)目做準(zhǔn)備。 1、源碼下載: git clone https://github.com/stephane/libmodbus
    發(fā)表于 04-23 23:24

    《HarmonyOS 2.0源碼框架分析》直播答疑

    :鴻蒙的編譯框架是怎樣的;如何利用整個編譯框架實(shí)現(xiàn)簡單的 MCU 平臺移植,如STM32 ?回答:鴻蒙OS的源碼框架較復(fù)雜,本身涉及到移植的部分主要有2大塊:一塊是kernel內(nèi),一塊
    發(fā)表于 12-10 22:28

    libmodbus使用ubuntu系統(tǒng)

    libmodbus使用ubuntu系統(tǒng)使用libmodbusarm-linux使用libmodbus解壓安裝移植編譯modbus從機(jī)模擬ubuntu系統(tǒng)使用libmodbusubuntu系統(tǒng)可以直接
    發(fā)表于 11-04 07:57

    基于select操作的libmodbus

    libmodbus庫從軟件包里啟用, libmodbus是基于select操作的,依賴于文件系統(tǒng)和libc,需要在rt-thread中開啟對應(yīng)的支持。一開始以為作為主站時,有函數(shù)可以自動的指定讀取
    發(fā)表于 01-11 08:13

    OpenHarmony Camera源碼分析

    captureInfoVideo是video相關(guān)的信息參數(shù)。三、總結(jié)本文首先對相機(jī)預(yù)覽、拍照和錄像功能的應(yīng)用層進(jìn)行了代碼分析,其次對框架層的流程進(jìn)行了梳理,最后再對框架源碼進(jìn)行
    發(fā)表于 09-06 11:21

    淺析基于serialX串口驅(qū)動移植libmodbus

    example” rtu 樣例程序。使用命令 pkgs --update 下載 libmodbus 源碼libmodbus源碼文件數(shù)量比 freemodbus 少很多了??雌饋?/div>
    發(fā)表于 02-15 11:07

    【悟空派H3開發(fā)板免費(fèi)體驗(yàn)】4、安裝libmodbus

    做的項(xiàng)目需要和stm32進(jìn)行串口通信,隨選用Modbus_RTU協(xié)議。以下為wukunpi安裝libmodbus庫的步驟。 下載源碼 可以直接下載附件 *附件
    發(fā)表于 10-25 01:29

    Java反射的工作原理和源碼分析

    Java反射的工作原理和源碼分析
    發(fā)表于 07-08 15:11 ?14次下載
    Java反射的工作原理和<b class='flag-5'>源碼</b><b class='flag-5'>分析</b>

    嵌入式linux libmodbus的移植

    Modbus是一個工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計算機(jī)通過公用線路或局部專用線路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過程監(jiān)控。具體是啥,百度吧源碼下載
    發(fā)表于 11-01 16:57 ?9次下載
    嵌入式linux <b class='flag-5'>libmodbus</b>的移植

    libmodbus之嵌入式Linux使用及測試

    libmodbus使用ubuntu系統(tǒng)使用libmodbusarm-linux使用libmodbus解壓安裝移植編譯modbus從機(jī)模擬ubuntu系統(tǒng)使用libmodbusubuntu系統(tǒng)可以直接
    發(fā)表于 11-01 16:57 ?16次下載
    <b class='flag-5'>libmodbus</b>之嵌入式Linux使用及測試

    基于STM32移植UCGUI圖形界面框架(3.9.0源碼版本)

    基于STM32移植UCGUI圖形界面框架(3.9.0源碼版本)
    發(fā)表于 11-30 16:06 ?0次下載
    基于STM32移植UCGUI圖形界面<b class='flag-5'>框架</b>(3.9.0<b class='flag-5'>源碼</b>版本)

    存放OpenHarmony驅(qū)動子系統(tǒng)源碼信息的HDF驅(qū)動框架

    簡介 該倉主要存放OpenHarmony驅(qū)動子系統(tǒng)核心源碼信息(包括驅(qū)動框架、配置管理、配置解析、驅(qū)動通用框架模型、硬件通用平臺能力接口等),旨在為開發(fā)者提供更精準(zhǔn)、更高效的開發(fā)環(huán)境,力求做到一次開發(fā),多系統(tǒng)部署。 圖1 驅(qū)動
    發(fā)表于 04-13 11:13 ?8次下載
    存放OpenHarmony驅(qū)動子系統(tǒng)<b class='flag-5'>源碼</b>信息的HDF驅(qū)動<b class='flag-5'>框架</b>

    SSM框架源碼解析與理解

    SSM框架(Spring + Spring MVC + MyBatis)是一種在Java開發(fā)中常用的輕量級企業(yè)級應(yīng)用框架。它通過整合Spring、Spring MVC和MyBatis三個框架,實(shí)現(xiàn)了
    的頭像 發(fā)表于 12-17 09:20 ?967次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品