获取分段错误的modbus_report_slave_id功能libmodbus在C

问题描述 投票:0回答:1

我试图让使用report_slave_ID API Modbus从站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);

O / P:

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
c openwrt modbus
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.