繼前面開發環境設置和libmodbus庫的移植后,本文主要介紹通過米爾-全志T113-i開發板實現與modbus設備的連接和操作。
一、設備簡介
剛好手頭有個modbus溫度傳感設備。
各種參數也挺好,就直接拿來用了。
二、程序設計
目標功能就是讀取溫度傳感設備的溫度,libmodbus庫提供了相關API,跟網絡編程的socket一樣好用。
涉及的主要API包括:modbus_new_rtu、modbus_set_slave、modbus_read_registers和modbus_close 以及 modbus_free等接口。顧名思義,各種API的功能都很清晰。
具體程序功能包括周期性讀取連接到米爾-全志T113-i開發板上的溫度傳感器,源碼如下:
#include #include #include #include #include #include int main(int argc, char *argv[]) { uint16_t tab_reg[2]; modbus_t *ctx; int i; int rc; uint32_t *ireal; ctx = modbus_new_rtu("/dev/ttyAS4", 115200, 'N', 8, 1); if (ctx == NULL) { fprintf(stderr, "Unable to allocate libmodbus contextn"); return -1; } modbus_set_debug(ctx, TRUE); modbus_set_slave(ctx, 1); if (modbus_connect(ctx) == -1) { fprintf(stderr, "Connection failed: %sn", modbus_strerror(errno)); modbus_free(ctx); return -1; } while(1) { printf("--------------------n"); rc = modbus_read_registers(ctx, 0x0000, 1, tab_reg); if(rc == -1) { fprintf(stderr,"%sn",modbus_strerror(errno)); return -1; } for(i=0; i2; i++) { printf("reg[%d] = %d(0x%x)n",i,tab_reg[i],tab_reg[i]); } ireal = (uint32_t *)tab_reg; printf("Resd data %f n", (*ireal)/10.0); usleep(1000000); } modbus_close(ctx); modbus_free(ctx); return 0; }
其它Modbus的協議在此不再接受,網絡上到處都是。
三、功能執行
首先根據線序連接好溫度傳感器和米爾-全志T113-i開發板。
編譯好源碼。
root@EliteDesk800:~/libmodbus-3.1.10/tests$ make make all-am make[1]: Entering directory '/home/libmodbus-3.1.10/tests' CC mod-client.o CCLD mod-client make[1]: Leaving directory '/home/libmodbus-3.1.10/tests' root@EliteDesk800:~
再將編譯后的可執行程序SCP至米爾-全志T113-i開發板上,chmod + x后再執行。
其中的debug信息是modbus_set_debug函數設置的結果打印log。
根據執行結果,讀出的溫度OK。
四、結論
1、米爾-全志T113-i開發板提供了豐富的接口和穩定的操作系統環境,很適合工業控制軟件程序開發;
2、依托libmodbus這個modbus協議庫,對于linux應用下的modbus通信開發,簡直就是一款神器,能夠極大的方便工業控制程序的開發。
審核編輯 黃宇
-
MODBUS
+關注
關注
28文章
1765瀏覽量
76849 -
開發板
+關注
關注
25文章
4959瀏覽量
97214
發布評論請先 登錄
相關推薦
評論