曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

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

基于RK3576開發(fā)板的modbus通訊

ljx2016 ? 來源:ljx2016 ? 作者:ljx2016 ? 2025-05-10 14:18 ? 次閱讀

1. MODBUS簡介

MODBUS是一項(xiàng)應(yīng)用層報(bào)文傳輸協(xié)議,用于在通過不同類型的總線或網(wǎng)絡(luò)連接的設(shè)備之間的客戶機(jī)/服務(wù)器通信。Modbus比其他通信協(xié)議使用的更廣泛的主要原因是因?yàn)樗_發(fā)表并且無版權(quán)要求;而且易于部署和維護(hù);對供應(yīng)商來說,修改移動本地的比特或字節(jié)沒有很多限制。

1.1 協(xié)議版本與內(nèi)容

Modbus協(xié)議目前存在用于串口、以太網(wǎng)以及其他支持互聯(lián)網(wǎng)協(xié)議的網(wǎng)絡(luò)的版本。

大多數(shù)Modbus設(shè)備通信通過串口EIA-485物理層進(jìn)行。對于串行連接,存在兩個變種,它們在數(shù)值數(shù)據(jù)表示不同和協(xié)議細(xì)節(jié)上略有不同。MODBUS模式分為三類,一種模式是RTU(遠(yuǎn)程終端設(shè)備),另一種模式是ASCII(美國信息交換碼),第三種模式為TCP(運(yùn)行在以太網(wǎng)上的協(xié)議)?!綧odbus RTU】是一種緊湊的,采用二進(jìn)制表示數(shù)據(jù)的方式(Modbus協(xié)議上規(guī)定,且默認(rèn)模式必須是RTU,ASCII作為選項(xiàng)),【Modbus ASCII】是一種人類可讀的,冗長的表示方式。這兩個變種都使用串行通信(serial communication)方式。對于通過TCP/IP(例如以太網(wǎng))的連接,存在多個【Modbus/TCP】變種,這種方式不需要校驗(yàn)和計(jì)算。對于所有的這三種通信協(xié)議在數(shù)據(jù)模型和功能調(diào)用上都是相同的,只有封裝方式是不同的。

1.2 通信和設(shè)備

Modbus協(xié)議是一個master/slave架構(gòu)的協(xié)議。有一個節(jié)點(diǎn)是master節(jié)點(diǎn),其他使用Modbus協(xié)議參與通信的節(jié)點(diǎn)是slave節(jié)點(diǎn)。每一個slave設(shè)備都有一個唯一的地址。在串行和MB+網(wǎng)絡(luò)中,只有被指定為主節(jié)點(diǎn)的節(jié)點(diǎn)可以啟動一個命令(在以太網(wǎng)上,任何一個設(shè)備都能發(fā)送一個Modbus命令,但是通常也只有一個主節(jié)點(diǎn)設(shè)備啟動指令)。

一個ModBus命令包含了打算執(zhí)行的設(shè)備的Modbus地址。所有設(shè)備都會收到命令,但只有指定位置的設(shè)備會執(zhí)行及回應(yīng)指令(地址0例外,指定地址0的指令是廣播指令,所有收到指令的設(shè)備都會運(yùn)行,不過不回應(yīng)指令)。所有的Modbus命令包含了檢查碼,以確定到達(dá)的命令沒有被破壞?;镜腗odBus命令能指令一個RTU改變它的寄存器的某個值,控制或者讀取一個I/O端口,以及指揮設(shè)備回送一個或者多個其寄存器中的數(shù)據(jù)。

1.3 MODBUS使用要點(diǎn)

通過以上敘述可知,使用Modubs需要時刻圍繞以下幾點(diǎn):

Modbus是主從方式通信,不能同步進(jìn)行通信;

主機(jī)不發(fā)送,總線上就沒有數(shù)據(jù)通信;

設(shè)備必須要有RTU協(xié)議,這是Modbus協(xié)議上規(guī)定的;

基本流程如下

發(fā)送:從機(jī)的地址+功能碼+寄存器的地址+寄存器地址的個數(shù)+校驗(yàn)碼

回復(fù):從機(jī)的地址+功能碼+要發(fā)送給主機(jī)數(shù)據(jù)的字節(jié)數(shù)+數(shù)據(jù)+校驗(yàn)碼

我司的easyeai-api軟件開源庫將復(fù)雜的報(bào)文格式、收發(fā)操作做了統(tǒng)一的封裝,為客戶提供簡單便捷的調(diào)用方式實(shí)現(xiàn)Modubs通訊功能。

2. 快速上手

如果您初次閱讀此文檔,請閱讀:《入門指南/源碼管理及編程介紹/源碼工程管理》,按需管理自己工程源碼(注:此文檔必看,并建議采用【遠(yuǎn)程掛載管理】方式,否則有代碼丟失風(fēng)險(xiǎn)?。。。?。

2.1 源碼工程下載

先在PC虛擬機(jī)定位到nfs服務(wù)目錄,再在目錄中創(chuàng)建存放源碼倉庫的管理目錄:

cd ~/nfsroot
mkdir GitHub
cd GitHub

再通過git工具,在管理目錄內(nèi)克隆遠(yuǎn)程倉庫(需要設(shè)備能對外網(wǎng)進(jìn)行訪問)

git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-3576.git
wKgZO2ge8lCAUEGHAAFHkLhl81w787.png

注:

* 此處可能會因網(wǎng)絡(luò)原因造成卡頓,請耐心等待。

* 如果實(shí)在要在gitHub網(wǎng)頁上下載,也要把整個倉庫下載下來,不能單獨(dú)下載本實(shí)例對應(yīng)的目錄。

2.2 開發(fā)環(huán)境搭建

通過adb shell進(jìn)入板卡開發(fā)環(huán)境,如下圖所示。

wKgZPGge8lCAHZILAAC7JgRVz1M068.png

通過以下命令,把nfs目錄掛載上nfs服務(wù)器。

mount -t nfs -o nolock : /home/orin-nano/Desktop/nfs/
wKgZO2ge8lGAEdr-AAD6_a7KK6A146.png

2.3 例程編譯

然后定位到nfs的掛載目錄,再在目錄中創(chuàng)建存放源碼倉庫的管理目錄:

cd /home/orin-nano/Desktop/nfs/GitHub

進(jìn)入到對應(yīng)的例程目錄執(zhí)行編譯操作,具體命令如下所示:

cd EASY-EAI-Toolkit-3576/Demos/common-modbus/
./build.sh
wKgZPGge8lGAe2iRAAJgFVswG3g235.png

2.4 例程運(yùn)行及效果

進(jìn)入Release目錄,執(zhí)行下方命令,運(yùn)行示例程序:

cd Release
./test-modbus_tcp_master &
./test-modbus_tcp_slave

TCP模式執(zhí)行效果如下所示:

wKgZO2ge8lGAazfkAADtIHysKKQ955.png

如果需要更換RTU模式可自行修改代碼

代碼路徑:EASY-EAI-Toolkit-3576/Demos/common-modbus/ test-modbus_tcp_slave.c

wKgZPGge8lGADihrAABHHqQ8xIM203.png

API的詳細(xì)說明,以及API的調(diào)用(本例程源碼),詳細(xì)信息見下方說明。

3. MODBUS庫函數(shù)說明

本章節(jié)介紹EASY EAI的MODBUS庫函數(shù)的使用方法。

3.1 引用方式

EASY EAI api庫位于本倉庫的easyeai-api目錄中。為方便客戶在本地工程中直接調(diào)用我們的EASY EAI api庫,此處列出工程中需要鏈接的庫以及頭文件等,方便用戶直接添加。

描述 CMake寫法 Makefile寫法
api.cmake ${common_root}/modbus/api.cmake
頭文件目錄 ${MODBUS_INCLUDE_DIRS} -I ../../easyeai-api/common/modbus
源文件目錄 ${MODBUS_SOURCE_DIRS} ../../easyeai-api/common/modbus
庫文件目錄
庫鏈接參數(shù) ${MODBUS_LIBS}

API源代碼路徑為EASY-EAI-Toolkit-3576/easyeai-api/common/modbus/。用戶可通過源代碼了解接口實(shí)現(xiàn),甚至可對源碼進(jìn)行修改。

3.2 創(chuàng)建實(shí)例

以TCP方式創(chuàng)建Modbus實(shí)例,并初始化:

modbus_t* modbus_new_tcp(const char *ip, int port);

具體介紹如下所示。

函數(shù)名:modbus_new_tcp()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ip:ip地址
port:端口號
返回值 成功:Modbus實(shí)例
失?。篘ULL
注意事項(xiàng)

3.3 設(shè)置從機(jī)ID

設(shè)置從機(jī)ID的函數(shù)原型為:

void modbus_set_slave(modbus_t *ctx, int slave);

具體介紹如下所示。

函數(shù)名:modbus_set_slave()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx:Modbus實(shí)例
slave:從機(jī)ID
返回值 成功:0
失?。?1
注意事項(xiàng)

3.4 和從機(jī)進(jìn)行連接

和從機(jī)建立連接的函數(shù)原型為:

void  modbus_connect(modbus_t *ctx);

具體介紹如下所示。

函數(shù)名: modbus_connect()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx:Modbus實(shí)例
返回值 成功:0
失敗:-1
注意事項(xiàng)

3.5 寄存器進(jìn)行操作,功能碼對應(yīng)函數(shù)

3.5.1 讀取線圈狀態(tài),可讀取多個連續(xù)線圈的狀態(tài)(對應(yīng)功能碼為0x01)

int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest);

具體介紹如下所示。

函數(shù)名: modbus_read_bits()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx :Modbus實(shí)例
addr :寄存器起始地址
nb :寄存器個數(shù)
dest :得到的狀態(tài)值
返回值
注意事項(xiàng)

3.5.2 讀取輸入狀態(tài),可讀取多個連續(xù)輸入的狀態(tài)(對應(yīng)功能碼為0x02)

int  modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest);

具體介紹如下所示。

函數(shù)名: modbus_read_input_bits()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx :Modbus實(shí)例
addr :寄存器起始地址
nb :寄存器個數(shù)
dest :得到的狀態(tài)值
返回值 成功:返回nb的值
注意事項(xiàng)

3.5.3 讀取保持寄存器的值,可讀取多個連續(xù)保持寄存器的值(對應(yīng)功能碼為0x03)

int  modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);

函數(shù)名: modbus_read_registers()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx :Modbus實(shí)例
addr :寄存器起始地址
nb :寄存器個數(shù)
dest :得到的寄存器的值
返回值 成功:讀到寄存器的個數(shù)
失敗:-1
注意事項(xiàng)

3.5.4 讀輸入寄存器的值,可讀取多個連續(xù)輸入寄存器的值(對應(yīng)功能碼為0x04)

int   modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);

具體介紹如下所示。

函數(shù)名: modbus_read_input_registers()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx :Modbus實(shí)例
addr :寄存器起始地址
nb :寄存器個數(shù)
dest :得到的寄存器的值
返回值 成功:讀到寄存器的個數(shù)
失?。?1
注意事項(xiàng)

3.5.5 寫入單個線圈的狀態(tài)(對應(yīng)功能碼為0x05)

int  modbus_write_bit(modbus_t *ctx, int addr, int status);

具體介紹如下所示。

函數(shù)名:modbus_write_bit()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx :Modbus實(shí)例
addr :線圈地址
status:線圈狀態(tài)
返回值 成功:0
失?。?1
注意事項(xiàng)

3.5.6 寫入多個連續(xù)線圈的狀態(tài)(對應(yīng)功能碼為15)

int  modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *src);

具體介紹如下所示。

函數(shù)名: modbus_write_bits()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx :Modbus實(shí)例
addr :線圈地址
nb :線圈個數(shù)
src:多個線圈狀態(tài)
返回值 成功:0
失敗:-1
注意事項(xiàng)

3.5.7 寫入單個寄存器(對應(yīng)功能碼為0x06)

int  modbus_write_register(modbus_t *ctx, int addr, int value);

具體介紹如下所示。

函數(shù)名:modbus_write_register()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx :Modbus實(shí)例
addr :寄存器地址
value :寄存器的值
返回值 成功:0
失?。?1
注意事項(xiàng)

3.5.8 寫入多個連續(xù)寄存器(對應(yīng)功能碼為16)

int  modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *src);

具體介紹如下所示。

函數(shù)名: modbus_write_registers()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx :Modbus實(shí)例
addr :寄存器地址
nb :寄存器的個數(shù)
src:多個寄存器的值
返回值 成功:0
失敗:-1
注意事項(xiàng)

3.6 關(guān)閉套接字

關(guān)閉套接字函數(shù)原型為:

void  modbus_close(modbus_t *ctx);

具體介紹如下所示。

函數(shù)名: modbus_close()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx:Modbus實(shí)例
返回值
注意事項(xiàng)

3.7 釋放實(shí)例

和從機(jī)建立連接的函數(shù)原型為:

void  modbus_free(modbus_t *ctx);

具體介紹如下所示。

函數(shù)名: modbus_free()
頭文件 easyeai-api/common/modbus/modbus.h
輸入?yún)?shù) ctx:Modbus實(shí)例
返回值
注意事項(xiàng)

4. 使用實(shí)例

示例主機(jī)代碼路徑EASY-EAI-Toolkit-3576/Demos/common-modbus/ test-modbus_tcp_master.c。

示例從機(jī)代碼路徑EASY-EAI-Toolkit-3576/Demos/common-modbus/ test-modbus_tcp_slave.c。

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

    關(guān)注

    28

    文章

    1960

    瀏覽量

    78743
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9618

    瀏覽量

    87074
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5432

    瀏覽量

    101237
  • rk3576
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    497
收藏 人收藏

    評論

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

    基于RK3576開發(fā)板的WDT看門狗使用說明

    RK3576開發(fā)板的WDT使用說明
    的頭像 發(fā)表于 05-06 17:15 ?370次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的WDT看門狗使用說明

    基于RK3576開發(fā)板的PCIE固態(tài)硬盤使用說明

    RK3576開發(fā)板的PICE固態(tài)硬盤使用方法
    的頭像 發(fā)表于 05-06 17:33 ?1066次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的PCIE固態(tài)硬盤使用說明

    基于RK3576開發(fā)板的TF卡槽使用說明

    RK3576開發(fā)板使用TF卡槽
    的頭像 發(fā)表于 05-07 09:24 ?444次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的TF卡槽使用說明

    基于RK3576開發(fā)板的PWN使用說明

    RK3576開發(fā)板使用PWN教程及Demo
    的頭像 發(fā)表于 05-07 14:07 ?1027次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的PWN使用說明

    基于RK3576開發(fā)板的RTC使用說明

    文章主要展示RK3576開發(fā)板的RTC信息和快速上手例程
    的頭像 發(fā)表于 05-07 15:04 ?482次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的RTC使用說明

    基于RK3576開發(fā)板的人臉識別算法

    RK3576開發(fā)板展示人臉識別算法例程和API說明
    的頭像 發(fā)表于 05-07 16:48 ?909次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的人臉識別算法

    新品體驗(yàn) | RK3576開發(fā)板

    RK3399、RK3566、RK3568、RK3588、RK3576等型號的核心與評估
    的頭像 發(fā)表于 11-01 08:08 ?1615次閱讀
    新品體驗(yàn) | <b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>

    米爾RK3576開發(fā)板特惠活動!

    近日,米爾電子發(fā)布基于瑞芯微RK3576核心開發(fā)板,RK3576作為國產(chǎn)熱門處理器,其高性能數(shù)據(jù)處理能力、領(lǐng)先的AI智能分析、強(qiáng)大的擴(kuò)展性與兼容性受到廣大
    的頭像 發(fā)表于 11-12 01:00 ?640次閱讀
    米爾<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>特惠活動!

    敬請期待 | 迅為RK3576開發(fā)板即將發(fā)布

    敬請期待 | 迅為RK3576開發(fā)板即將發(fā)布
    的頭像 發(fā)表于 11-22 15:13 ?469次閱讀
    敬請期待 | 迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>即將發(fā)布

    迅為RK3576開發(fā)板核心與底板接口硬件介紹

    迅為RK3576開發(fā)板核心與底板接口硬件介紹
    的頭像 發(fā)表于 01-14 15:15 ?1119次閱讀
    迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>核心<b class='flag-5'>板</b>與底板接口硬件介紹

    迅為RK3576開發(fā)板Android?多屏顯示

    迅為RK3576開發(fā)板Android?多屏顯示
    的頭像 發(fā)表于 01-16 16:58 ?707次閱讀
    迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>Android?多屏顯示

    RK3576開發(fā)板技術(shù)分享 | Weston 配置技巧:定制你的桌面體驗(yàn)!

    RK3576開發(fā)板技術(shù)分享 | Weston 配置技巧:定制你的桌面體驗(yàn)!
    的頭像 發(fā)表于 03-07 10:17 ?420次閱讀
    <b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>技術(shù)分享 | Weston 配置技巧:定制你的桌面體驗(yàn)!

    基于RK3576開發(fā)板的MIPI-DSI使用

    MIPI DSI接口是由MIPI聯(lián)盟下的Display工作組指定的DSI(Display Serial Interface)的接口標(biāo)準(zhǔn)。rk3576開發(fā)板使用mipi-dsi教程
    的頭像 發(fā)表于 05-06 16:11 ?164次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的MIPI-DSI使用

    基于RK3576開發(fā)板的揚(yáng)聲器和耳機(jī)使用說明

    RK3576開發(fā)板的揚(yáng)聲器和耳機(jī)使用說明
    的頭像 發(fā)表于 05-06 16:36 ?110次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的揚(yáng)聲器和耳機(jī)使用說明

    基于RK3576開發(fā)板的HDMI-OUT使用說明

    RK3576開發(fā)板的HDMI-OUT使用說明
    的頭像 發(fā)表于 05-06 16:48 ?97次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的HDMI-OUT使用說明