色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

關聯接口函數與libmodbus移植

瑞薩MCU小百科 ? 來源: 瑞薩嵌入式小百科 ? 2024-12-30 15:20 ? 次閱讀

11.3.7 RTU/TCP關聯接口函數

在文件modbus.h的最后位置,有如下語句

#include "modbus-tcp.h"
#include "modbus-rtu.h"

可以發現,除了modbus.h包含的接口函數之外,modbus-rtu.h和modbus-tcp.h也包含了必要的接口函數。

1. RTU模式關聯函數

MODBUS_API modbus_t * modbus_new_rtu(const char * device,int baud,char parity,int data_bit,int stop_bit):

此函數的功能是創建一個RTU類型的modbus_t結構體。參數constchar * device代表串口字符串,在Windows操作系統下形態如“COMx”,有一點需要注意的是,對于串口1串口9來說,傳遞“COM1”“COM9”可以成功,但是如果操作對象為COM10及以上端口,則會出現錯誤。

產生這種奇怪現象的原因是:微軟預定義的標準設備中 含有“COM1”~“COM9”。所以,“COM1”~“COM9”作為文件名傳遞給函數時操作系統會自動地將之解析為相應的設備。但對于COM10及以上的串口,“COM10”之類的文件名系統只視之為 一般意義上的文件,而非串行設備。為了增加對COM10及以上串行端口的支持,微軟規定,如果要訪問這樣的設備,應使用這樣的文件名(以COM10 為例):\. COM10。

所以,使用時在代碼中可以如此定義:

const char * device = “\\.\COM10”;

Linux操作系統下可以使用“/dev/ttySo”或“/dev/ttyUSB0”等形式的字符串來表示。而參數int baud表示串口波特率的設置值,例如:9600、19200、57600、115200等。

參數char parity表示奇偶校驗位,取值范圍:

①‘N’:無奇偶校驗;

②‘E’:偶校驗;

③‘O’:奇校驗。

參數int data_bit表示數據位的長度,取值范圍為5、6、7和8。

參數int stop_bit表示停止位長度,取值范圍為1或2。

用法舉例:

左右滑動查看完整內容

modbus t *ctx;
ctx=modbus_new_rtu("\\.\COM10",115200,'N',8,1);
if (ctx ==NULL)
{
 fprintf(stderr,"Unable to create the libmodbus context
");
 return -1;
 }
modbus_set_slave(ctx,SLAVE_DEVICE_ID);
if (modbus connect(ctx)==-1)
{
 fprintf(stderr,"Connection failed:%s
",modbus_strerror(errno));
 modbus_free(ctx);
 return -1;
}

MODBUS_API int modbus_rtu_set_serial_mode (modbus_t * ctx,int mode):

該函數用于設置串口為MODBUS RTU RS232或MODBUSRTU_RS485模式,此函數只適用于Linux操作系統下。

左右滑動查看完整內容

MODBUS_API int modbus_rtu_set_rts (modbus_t * ctx, int mode)。
MODBUS_API int modbus_rtu_set_custom_rts (modbus_t * ctx, void ( * set_rts) (modbus_t * ctx, int on))。
MODBUS_API int modbus_rtu_set_rts_delay (modbus_t * ctx, int us)。

以上函數只適用于Linux操作系統下,RTS即Request ToSend的縮寫,具體的意義可通過網絡搜索,一般情況下,此類函數可忽略。

2. TCP模式關聯函數

左右滑動查看完整內容

MODBUS_API modbus_t * modbus_new_tcp (const char *ip_address, int port)。

此函數的功能是創建一個TCP/IPv4類型的modbus_t結構體。

參數const char * ip_address為IP地址,port表示遠端設備的端口號。

左右滑動查看完整內容

MODBUS_API int modbus_tcp_listen (modbus_t * ctx, int nb_connection)。

此函數創建并監聽一個TCP/IPv4上的套接字。

參數int nb_connection代表最大的監聽數量,在調用此函數之前,必須首先調用modbus_new_tcp()創建 modbus_t結構體。

MODBUS_API int modbus_tcp_accept(modbus_t * ctx,int * s)。

此函數接收一個TCP/IPv4類型的連接請求,如果成功將進入數據接收狀態。

11.4 libmodbus移植

本節源碼位于如下目錄:

4919789a-c664-11ef-9310-92fbcf53809c.png

11.4.1 編譯安裝

libmodbus原生就支持Linux,所以不存在移植難度。

如下操作即可編譯libmodbus:

左右滑動查看完整內容

$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux
$ tar xzf libmodbus-3.1.10.tar.gz
$ cd libmodbus-3.1.10/
$ ./autogen.sh
$ ./configure --prefix=$PWD/tmp --host=aarch64-poky-linux CFLAGS="-mtune=cortex-a55 
-fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-se
curity -Werror=format-security --sysroot=/opt/remi-sdk/sysroots/aa
rch64-poky-linux"
$ make
$ make install
$ ls tmp/
include lib share


// 復制到工具鏈里
$ sudo cp -rf tmp/include/* /opt/remi-sdk/sysroots/aarch64-poky-linux/usr/include/
$ sudo cp -rfd tmp/lib/* /opt/remi-sdk/sysroots/aarch64-poky-linux/usr/lib64/
$ ls tests/.libs/
bandwidth-client bandwidth-server-one random-test-server unit-test-server
bandwidth-server-many-up random-test-client unit-test-client version

在“tmp/include”目錄下生成了有文件,在“tmp/lib”目錄下生成了庫文件。在“tests/.libs/”目錄下生成了測試程序“unit-test-server”、“unit-test-client”。

把庫復制到開發板上,在Ubuntu上執行如下命令:

左右滑動查看完整內容

$ scp tmp/lib/*so* root@192.168.5.9:/usr/lib64/

11.4.2 上機測試

把測試程序和庫復制到開發板上,在Ubuntu上執行如下命令:

左右滑動查看完整內容

$ scp tests/.libs/unit-test-server root@192.168.5.9:/home/root
$ scp tests/.libs/unit-test-client root@192.168.5.9:/home/root

在開發板上執行如下命令,通過Modbus TCP協議進行測試:

左右滑動查看完整內容

root@myir-remi-1g:~# cd /home/root/
root@myir-remi-1g:~# ./unit-test-server tcp 127.0.0.1 &
root@myir-remi-1g:~# ./unit-test-client tcp 127.0.0.1
Connecting to 127.0.0.1:1502
Client connection accepted from 127.0.0.1.
Waiting for an indication...
** UNIT TESTING **
1/1 No response timeout modification on connect: OK
TEST WRITE/READ:
[00][01][00][00][00][06][FF][05][01][30][FF][00]
<00><01><00><00><00><06><05><01><30><00>
[00][01][00][00][00][06][FF][05][01][30][FF][00]
Waiting for an indication...
Waiting for a confirmation...
<00><01><00><00><00><06><05><01><30><00>
1/2 modbus_write_bit: OK

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

    關注

    33

    文章

    8612

    瀏覽量

    151273
  • 操作系統
    +關注

    關注

    37

    文章

    6836

    瀏覽量

    123360
  • 函數
    +關注

    關注

    3

    文章

    4332

    瀏覽量

    62675
  • LibModbus
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7258

原文標題:關聯接口函數與libmodbus移植 - RZ MPU工業控制教程連載(42)

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

收藏 人收藏

    評論

    相關推薦

    第6章_libmodbus使用

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

    MAC板labview 互聯接口

    MAC板的labview沒有互聯接口應該怎么辦呢,沒有辦法直接調用鍵盤?
    發表于 08-10 20:11

    libmodbus使用ubuntu系統

    libmodbus使用ubuntu系統使用libmodbusarm-linux使用libmodbus解壓安裝移植編譯modbus從機模擬ubuntu系統使用libmodbusubuntu系統可以直接
    發表于 11-04 07:57

    基于select操作的libmodbus

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

    libmodbus與freemodbus相比有何不同

    背景modbus有主機、從機之分libmodbus與freemodbus相比,是主從機一體的,freemodbus,官方的為從機。libmodbus感覺更適合rt-thread,因為,有了內存的管理
    發表于 02-22 07:00

    libmodbus寄存器個數的疑問

    ,malloc的大小,也是宏定義定義的大小,以狀態寄存器來說,就是125個。很多設備的狀態寄存器都是遠遠大于125個的。對于從機的狀態寄存器的個數與libmodbus關聯,是不是要另外自己寫代碼進行處理,重新自己寫一個modbus_reply
    發表于 06-30 15:39

    淺析基于serialX串口驅動移植libmodbus

    關于 serialX上一篇我們基于 serialX 驅動,移植 freemodbus 并填了幾個坑。今天換 libmodbus 看看會遇到什么。測試環境開發板: NK-980IOT V1.0
    發表于 02-15 11:07

    【飛凌i.MX9352開發板試用】 + libmodbus移植 測試 485接口

    ,還用了金升陽的芯片專門進行了隔離,很贊,我們這里通過移植libmodbus庫到板子上,硬件上把兩個485接口連起來,一主一從進行模擬實際工業上兩個設備通過RS485走Modbus RTU協議進行通訊
    發表于 06-14 12:36

    嵌入式linux libmodbus移植

    地址:https://libmodbus.org/版本是3.1.6虛擬機上配置編譯./configure --build=i686 --host=arm-fsl-linux-gnueabi --enable-static --prefix=/nfs_root/tools/libm
    發表于 11-01 16:57 ?9次下載
    嵌入式linux <b class='flag-5'>libmodbus</b>的<b class='flag-5'>移植</b>

    libmodbus之嵌入式Linux使用及測試

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

    TI CCS庫函數開發最快的DSP工程移植方法

    最近在使用CCS的時候,需要移植TI提供的官方例程,但是發現官方例程所使用的芯片與項目選用的DSP型號并不相同,但是目前的TI DSP均使用DSP庫函數開發,基于這一點,就想嘗試能否用最快的方法實現
    發表于 12-05 17:36 ?7次下載
    TI CCS庫<b class='flag-5'>函數</b>開發最快的DSP工程<b class='flag-5'>移植</b>方法

    RT-Thread libmodbus RS485 RTU主機調試 - STM32F107VCT6

    背景modbus有主機、從機之分 libmodbus與freemodbus相比,是主從機一體的,freemodbus,官方的為從機。 libmodbus感覺更適合rt-thread,因為,有了內存
    發表于 12-28 19:46 ?15次下載
    RT-Thread <b class='flag-5'>libmodbus</b> RS485 RTU主機調試 - STM32F107VCT6

    基于serialX串口驅動移植libmodbus的步驟

    之前,筆者介紹 serialX 的時候,曾詳細的講解過 struct rt_uart_ops 接口中的每一個函數的功能。完全按照每一個函數功能定義去做,后面的事情就是水到渠成的。
    發表于 08-10 15:25 ?705次閱讀

    移植libmodbus庫到米爾-全志T113-i開發板

    測試開發板在工業領域的應用,modbus作為工業領域的一個重要協議,那好就移植libmodbus庫。
    的頭像 發表于 03-05 22:37 ?2525次閱讀
    <b class='flag-5'>移植</b><b class='flag-5'>libmodbus</b>庫到米爾-全志T113-i開發板

    libmodbus源碼框架分析

    libmodbus作為一個優秀且免費開源的跨平臺支持RTU 和 TCP模式的Modbus開發庫,非常值得大家借鑒和學習。本章對libmodbus源代碼進行閱讀和分析。
    的頭像 發表于 11-21 13:47 ?391次閱讀
    <b class='flag-5'>libmodbus</b>源碼框架分析
    主站蜘蛛池模板: 成人在线视频国产| 国产麻豆精品人妻无码A片| 精品一区二区免费视频蜜桃网| 亚洲国产在线精品第二剧情不卡| 精品国产在天天线在线麻豆| 战狼4在线观看完免费完整版| 毛片在线不卡| 丰满人妻妇伦又伦精品APP国产| 亚洲AV精品无码成人| 巨黄的肉辣文np| 福利片午夜| 在线观看国产亚洲| 日本高清免费在线| 极品网红液液酱粉嫩福利照子凌酱| 2021乱码精品公司| 玩50岁四川熟女大白屁股直播| 精品亚洲永久免费精品| jlzz中国jizz日本老师水多| 亚洲第一伊人| 欧美亚洲韩日午夜| 狠狠色狠狠色综合| 啊…嗯啊好深男男高h文总受| 亚洲高清国产拍精品动图| 男人都懂www深夜免费网站| 国产精品视频免费视频| 99国产在线精品视频| 羞羞漫画在线播放| 欧美日韩在线成人看片a| 狠狠插综合| 动漫美女禁区图| 2018年免费三级av观看| 小妇人电影免费完整观看2021| 嫩小xxxxbbbb| 精品无码久久久久久国产百度| 成人伦理影院| 中国明星16xxxxhd| 亚洲国产成人精品无码区5566 | 精品99久久久久成人网站| xxnx18日本| 最新亚洲人成网站在线影院| 亚洲a免费|