日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

modbus调试工具 linux,linux libmodbus的移植

發布時間:2023/12/4 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 modbus调试工具 linux,linux libmodbus的移植 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.前言

Modbus是一個工業通信系統,由帶智能終端的可編程序控制器和計算機通過公用線路或局部專用線路連接而成。其系統結構既包括硬件、亦包括軟件。它可應用于各種數據采集和過程監控。

2.移植步驟

第一,進入libmodbus目錄下,在交叉編譯器是最好加上–prefix參數,叫相關的庫直接集中起來,方便拷貝到開發板相應的目錄中去;

嵌入式開發板: #./configure --build=i686 --host=arm-none-linux-gnueabi --enable-static --prefix=/root/libmodbus-3.1.1/install/ && make install

x86機器 : #./configure && make install

第二,進入libmodbus/test目錄,修改unit-test-client.c (modbus主機測試) 中的”/dev/ttyUSB1”,改成你測試的串口設備號 ctx = modbus_new_rtu("/dev/ttyUSB1", 115200, 'N', 8, 1);

同樣地,修改unit-test-server.c (modbus從機測試) 中的”/dev/ttyUSB0”,改成你測試的串口設備號 ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);

改好后重先進行編譯 #make clean

#make all

編譯完后就生成了unit-test-client,unit-test-server兩個可執行文件,

第三,運行兩個程序 #./unit-test-client

#./unit-test-server

3.測試

總體測試圖

主機測試信息

從機測試信息

注:在test目錄下的類似unit-test-server這個不是可執行文件,而是一個腳本,他會調用test目錄下的.lib/下的unit-test-server可執行文件。在PC中需要執行對應的腳本文件,而在嵌入式平臺上卻是執行可執行文件;

4.自定義代碼測試主機

4.1 測試對象

modbus主機 -> linux -> unit-test-client

modbus從機 -> windows -> modbus slave

4.2 代碼修改

修改unit-test-client.c程序

int main(int argc, char *argv[])

{

uint8_t *tab_rp_bits;

uint16_t *tab_rp_registers;

uint16_t *tab_rp_registers_bad;

uint16_t tab_reg[64];

modbus_t *ctx;

int i;

uint8_t value;

int nb_points;

int rc;

float real;

uint32_t ireal;

struct timeval old_response_timeout;

struct timeval response_timeout;

int use_backend;

ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'E', 8, 1);

if (ctx == NULL) {

fprintf(stderr, "Unable to allocate libmodbus context\n");

return -1;

}

modbus_set_debug(ctx, TRUE);

modbus_set_slave(ctx, 1);

if (modbus_connect(ctx) == -1) {

fprintf(stderr, "Connection failed: %s\n",

modbus_strerror(errno));

modbus_free(ctx);

return -1;

}

while(1)

{

printf("--------------------\n");

rc = modbus_read_registers(ctx,0,10,tab_reg);

if(rc == -1)

{ fprintf(stderr,"%s\n",modbus_strerror(errno));

return -1;

}

for(i=0; i<10; i++)

{

printf("reg[%d] = %d(0x%x)\n",14,tab_reg[i],tab_reg[i]);

}

usleep(1000000);

}

modbus_close(ctx);

modbus_free(ctx);

return 0;

}

4.3 重新編譯運行

#make clean

#make all

#./unit-test-client

4.4 測試對比分析

打開windows下的modbus slave,設置好相關參數,如下圖

那么linux端的modbus主機打印信息

結論:數據吻合,測試正常

總結

以上是生活随笔為你收集整理的modbus调试工具 linux,linux libmodbus的移植的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。