Я пытаюсь опросить Schneider Energymeter на наличие четности как нулевой и стоп-бит как 2 с использованием преобразователя RS485 в USB.Я получаю сообщение об ошибке тайм-аута.Но когда я пытаюсь опросить тот же счетчик с четностью, равной none, и стоп-битом, равным 1, я могу получить данные.
Фрагмент кода, который я использую для опроса счетчика, выглядит следующим образом
ctx = modbus_new_rtu("/dev/ttyUSB0",9600, 'N', 8, 2);
modbus_set_debug(ctx, TRUE);
if (modbus_connect(ctx) == -1) {
printf("Modbus Connection failed: %s", modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
modbus_set_slave(ctx,2);
memset(tab_rp_registers, 0, 2 * sizeof(uint16_t));
rc = modbus_read_registers(ctx,3109,2,tab_rp_registers);
modbus_close(ctx);
modbus_free(ctx);
if (rc != -1) {
// actions performed
}
else {
free(tab_rp_registers);
printf("Error str is %s\n",modbus_strerror(errno));
}
Всегда получаю rc как -1 и ошибка тайм-аута соединения при преобразовании errno.
Я что-то пропустил?