ModbusRTU err:connection timeout解決辦法文章來源:http://www.zghlxwxcb.cn/news/detail-562563.html
一般遇到問題不要慌 檢查以下幾條幫你輕松解決:
1、確保鏈路暢通(也就是串口收發(fā)數(shù)據(jù)是否正常)
2、排查是否硬件有問題
3、程序是否有問題
如若出現(xiàn)下面問題,請查看超時(shí)時(shí)間是否設(shè)置正確
這種問題出現(xiàn)的原因:
其一是因?yàn)榇跀嚅_;
其二:超時(shí)時(shí)間設(shè)置異常; 請務(wù)必注意這一點(diǎn) 本人在這個(gè)上面犯錯(cuò)
解決辦法來了
里面的響應(yīng)延時(shí)必須是1ms 這個(gè)是基于本人用的libmodbus開源庫的緣由,庫里面的機(jī)制是這樣的如果超過1ms還沒有響應(yīng),那么就判定為連接不上。
發(fā)現(xiàn)錯(cuò)誤原因:本人執(zhí)行程序 然后查看modbus salve主機(jī)接受的碼字來進(jìn)行判斷是否為超時(shí)時(shí)間的問題
到這里該錯(cuò)誤就搞定了
順便附上demo文章來源地址http://www.zghlxwxcb.cn/news/detail-562563.html
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include "modbus.h" //modbus動(dòng)態(tài)庫文件
int main(int argc, char *argv[])
{
uint16_t tab_reg[64] = {0}; //定義存放數(shù)據(jù)的數(shù)組
modbus_t *ctx = NULL;
int rc;
int i;
//以串口的方式創(chuàng)建libmobus實(shí)例,并設(shè)置參數(shù)
ctx = modbus_new_rtu("/dev/ttyWCHUSB3", 115200, 'N', 8, 1);
if (ctx == NULL) //使用UART1,對應(yīng)的設(shè)備描述符為ttyS1
{
fprintf(stderr, "Unable to allocate libmodbus contex\n");
return -1;
}
modbus_set_debug(ctx, 1); //設(shè)置1可看到調(diào)試信息
modbus_set_slave(ctx, 1); //設(shè)置slave ID
if (modbus_connect(ctx) == -1) //等待連接設(shè)備
{
fprintf(stderr, "Connection failed:%s\n", modbus_strerror(errno));
return -1;
}
while (1)
{
printf("\n----------------\n");
rc = modbus_read_registers(ctx, 0, 30, tab_reg);
if (rc == -1) //讀取保持寄存器的值,可讀取多個(gè)連續(xù)輸入保持寄存器
{
fprintf(stderr,"%s\n", modbus_strerror(errno));
return -1;
}
for (i=0; i<10; i++)
{
printf("reg[%d] = %d(0x%x)\n", i, tab_reg[i], tab_reg[i]);
}
/*printf("=====================reg[48]=%d(0x%x)\n",tab_reg[0],tab_reg[0]);
printf("=====================reg[49]=%d(0x%x)\n",tab_reg[1],tab_reg[1]);
printf("=====================reg[50]=%d(0x%x)\n",tab_reg[2],tab_reg[2]);
printf("=====================reg[51]=%d(0x%x)\n",tab_reg[3],tab_reg[3]);*/
usleep(1000000);
}
modbus_close(ctx); //關(guān)閉modbus連接
modbus_free(ctx); //釋放modbus資源,使用完libmodbus需要釋放掉
return 0;
}
到了這里,關(guān)于ModbusRTU err:connection timeout解決辦法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!