gpt4 book ai didi

c - 在 c 中的 libmodbus 中获取 modbus_report_slave_id 函数的段错误

转载 作者:行者123 更新时间:2023-11-30 16:22:22 25 4
gpt4 key购买 nike

我正在尝试使用modbus中的report_slave_ID API获取从站ID信息。我也遇到了同样的段错误。预期响应为 38 字节。

(modbus命令:[28][11][DF][BC])

我可以通过 termios 使用相同的命令并获得所需的输出,但使用 libmodbus API 会出现此命令的段错误: modbus_report_slave_id(modbus_t *ctx, uint8_t *dest)

modbus_t *ctx;
int32_t i32_read_ret = 0;
int32_t i32_Index = 0;
uint8_t gui16_PonselInputRegVal[40];

//根据 Modbus 要求分配奇偶校验

// Creating Modbus rtu 
ctx = modbus_new_rtu("/dev/ttyS1",9600, 0,8,2);

if(ctx == NULL)
{
// DBG_FPRINTF(stderr,"Unable to create the libmodbus context for RTU: %s\n", modbus_strerror(errno));
DBG_PRINTF("Unable to create the libmodbus context for RTU\n");
DBG_PROCEDURE_LOG("Exiting Read_Meter function\n");
return FAILURE;
}
else
{
printf("Modbus context for RTU created\n");
}

// Setting Slave ID
if(modbus_set_slave(ctx,40) == -1)
{
//DBG_FPRINTF(stderr, "Unable to set the slave ID in context for RTU: %s\n", modbus_strerror(errno));
DBG_PRINTF("Unable to set the slave ID in context for RTU\n");
modbus_free(ctx);
DBG_PROCEDURE_LOG("Exiting Read_Meter function\n");
return FAILURE;
}
else
{
printf("Slave ID set successful\n");
}

//TRUE: Debug message enable, FALSE: Debug message disable
modbus_set_debug(ctx,TRUE);

if(modbus_connect(ctx) == -1)
{
// DBG_FPRINTF(stderr, "modbus connection failed: %s\n", modbus_strerror(errno));
DBG_PRINTF("modbus connection failed\n");
modbus_free(ctx);
DBG_PROCEDURE_LOG("\nExiting Read_Meter function\n");
return FAILURE;
}

//modbus_report_slave_id(modbus_t *ctx, uint8_t *dest)

i32_read_ret=modbus_report_slave_id(ctx,gui16_PonselInputRegVal);
printf("i32_read_ret : %d\n",i32_read_ret);


//Closing Modbus
modbus_close(ctx);
modbus_free(ctx);

输出:

Modbus context for RTU created
Slave ID set successful
Opening /dev/ttyS1 at 9600 bauds (N, 8, 2)
[28][11][DF][BC]
Waiting for a confirmation...
<28><11><21><4E><65><70><68><65><6C><6F><2F><54><55><2F><54><65><6D><70><65><72><61><74><75><72><65><20><50><4F><4E><53><45><4C><20><20><20><FF><17><57>
Segmentation fault

最佳答案

使用库版本3.1.2后问题已解决

关于c - 在 c 中的 libmodbus 中获取 modbus_report_slave_id 函数的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54473016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com