modbus调试工具 linux,linux libmodbus的移植
1.前言
Modbus是一個(gè)工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計(jì)算機(jī)通過(guò)公用線路或局部專用線路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過(guò)程監(jiān)控。
2.移植步驟
第一,進(jìn)入libmodbus目錄下,在交叉編譯器是最好加上–prefix參數(shù),叫相關(guān)的庫(kù)直接集中起來(lái),方便拷貝到開發(fā)板相應(yīng)的目錄中去;
嵌入式開發(fā)板: #./configure --build=i686 --host=arm-none-linux-gnueabi --enable-static --prefix=/root/libmodbus-3.1.1/install/ && make install
x86機(jī)器 : #./configure && make install
第二,進(jìn)入libmodbus/test目錄,修改unit-test-client.c (modbus主機(jī)測(cè)試) 中的”/dev/ttyUSB1”,改成你測(cè)試的串口設(shè)備號(hào) ctx = modbus_new_rtu("/dev/ttyUSB1", 115200, 'N', 8, 1);
同樣地,修改unit-test-server.c (modbus從機(jī)測(cè)試) 中的”/dev/ttyUSB0”,改成你測(cè)試的串口設(shè)備號(hào) ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);
改好后重先進(jìn)行編譯 #make clean
#make all
編譯完后就生成了unit-test-client,unit-test-server兩個(gè)可執(zhí)行文件,
第三,運(yùn)行兩個(gè)程序 #./unit-test-client
#./unit-test-server
3.測(cè)試
總體測(cè)試圖
主機(jī)測(cè)試信息
從機(jī)測(cè)試信息
注:在test目錄下的類似unit-test-server這個(gè)不是可執(zhí)行文件,而是一個(gè)腳本,他會(huì)調(diào)用test目錄下的.lib/下的unit-test-server可執(zhí)行文件。在PC中需要執(zhí)行對(duì)應(yīng)的腳本文件,而在嵌入式平臺(tái)上卻是執(zhí)行可執(zhí)行文件;
4.自定義代碼測(cè)試主機(jī)
4.1 測(cè)試對(duì)象
modbus主機(jī) -> linux -> unit-test-client
modbus從機(jī) -> 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 重新編譯運(yùn)行
#make clean
#make all
#./unit-test-client
4.4 測(cè)試對(duì)比分析
打開windows下的modbus slave,設(shè)置好相關(guān)參數(shù),如下圖
那么linux端的modbus主機(jī)打印信息
結(jié)論:數(shù)據(jù)吻合,測(cè)試正常
總結(jié)
以上是生活随笔為你收集整理的modbus调试工具 linux,linux libmodbus的移植的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux 编译工具链,Linux工具链
- 下一篇: linux怎么看是否安装kde桌面,ub