diff --git a/TODO b/TODO index f5b6f19..3c32eb5 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,5 @@ Features +* check the count, eg. read_holding_registers (MAX_STATUS, etc) * args in command line (master/slave) * broadcasting * slave must listen only request sent for him @@ -7,4 +8,4 @@ Cleanups * t_id in param_msqg Documentation -* README with a example to test the library +* README with an example to test the library diff --git a/modbus/modbus.c b/modbus/modbus.c index 5f5ee1d..84181a1 100644 --- a/modbus/modbus.c +++ b/modbus/modbus.c @@ -998,9 +998,10 @@ int read_holding_registers(modbus_param_t *mb_param, int slave, { int status; - if (count > MAX_READ_HOLD_REGS) { - printf("WARNING Too many holding registers requested\n"); - count = MAX_READ_HOLD_REGS; + if (count > MAX_REGISTERS) { + printf("WARNING Too many holding registers requested (%d > %d)\n", + count, MAX_REGISTERS); + count = MAX_REGISTERS; } status = read_registers(mb_param, slave, FC_READ_HOLDING_REGISTERS, @@ -1015,9 +1016,10 @@ int read_input_registers(modbus_param_t *mb_param, int slave, { int status; - if (count > MAX_READ_INPUT_REGS) { - printf("WARNING Too many input registers requested\n"); - count = MAX_READ_INPUT_REGS; + if (count > MAX_REGISTERS) { + printf("WARNING Too many input registers requested (%d > %d)\n", + count, MAX_REGISTERS); + count = MAX_REGISTERS; } status = read_registers(mb_param, slave, FC_READ_INPUT_REGISTERS, @@ -1123,9 +1125,10 @@ int force_multiple_coils(modbus_param_t *mb_param, int slave, uint8_t query[MAX_MESSAGE_LENGTH]; - if (nb_points > MAX_WRITE_COILS) { - printf("WARNING Writing to too many coils\n"); - nb_points = MAX_WRITE_COILS; + if (nb_points > MAX_STATUS) { + printf("WARNING Writing to too many coils (%d > %d)\n", + nb_points, MAX_STATUS); + nb_points = MAX_STATUS; } query_length = build_query_basis(mb_param, slave, FC_FORCE_MULTIPLE_COILS, @@ -1171,9 +1174,10 @@ int preset_multiple_registers(modbus_param_t *mb_param, int slave, uint8_t query[MAX_MESSAGE_LENGTH]; - if (nb_points > MAX_WRITE_REGS) { - printf("WARNING Trying to write to too many registers\n"); - nb_points = MAX_WRITE_REGS; + if (nb_points > MAX_REGISTERS) { + printf("WARNING Trying to write to too many registers (%d > %d)\n", + nb_points, MAX_REGISTERS); + nb_points = MAX_REGISTERS; } query_length = build_query_basis(mb_param, slave, diff --git a/modbus/modbus.h b/modbus/modbus.h index 2fedd0e..1d8ec16 100644 --- a/modbus/modbus.h +++ b/modbus/modbus.h @@ -44,11 +44,8 @@ extern "C" { #define MAX_MESSAGE_LENGTH 256 -#define MAX_READ_STATUS 800 -#define MAX_READ_HOLD_REGS 100 -#define MAX_READ_INPUT_REGS 100 -#define MAX_WRITE_COILS 800 -#define MAX_WRITE_REGS 100 +#define MAX_STATUS 800 +#define MAX_REGISTERS 100 #define REPORT_SLAVE_ID_LENGTH 75