Commit c3742e733a3971c34840d91b79235fee4195aa07
1 parent
75543b21
Add new function modbus_get_slave()
Showing
6 changed files
with
61 additions
and
1 deletions
doc/Makefile.am
| @@ -12,6 +12,7 @@ TXT3 = \ | @@ -12,6 +12,7 @@ TXT3 = \ | ||
| 12 | modbus_get_float_dcba.txt \ | 12 | modbus_get_float_dcba.txt \ |
| 13 | modbus_get_header_length.txt \ | 13 | modbus_get_header_length.txt \ |
| 14 | modbus_get_response_timeout.txt \ | 14 | modbus_get_response_timeout.txt \ |
| 15 | + modbus_get_slave.txt \ | ||
| 15 | modbus_get_socket.txt \ | 16 | modbus_get_socket.txt \ |
| 16 | modbus_mapping_free.txt \ | 17 | modbus_mapping_free.txt \ |
| 17 | modbus_mapping_new.txt \ | 18 | modbus_mapping_new.txt \ |
doc/modbus_get_slave.txt
0 → 100644
| 1 | +modbus_get_slave(3) | ||
| 2 | +=================== | ||
| 3 | + | ||
| 4 | + | ||
| 5 | +NAME | ||
| 6 | +---- | ||
| 7 | +modbus_get_slave - get slave number in the context | ||
| 8 | + | ||
| 9 | + | ||
| 10 | +SYNOPSIS | ||
| 11 | +-------- | ||
| 12 | +*int modbus_get_slave(modbus_t *'ctx');* | ||
| 13 | + | ||
| 14 | + | ||
| 15 | +DESCRIPTION | ||
| 16 | +----------- | ||
| 17 | +The *modbus_get_slave()* function shall get the slave number in the libmodbus | ||
| 18 | +context. | ||
| 19 | + | ||
| 20 | + | ||
| 21 | +RETURN VALUE | ||
| 22 | +------------ | ||
| 23 | +The function shall return the slave number if successful. Otherwise it shall return -1 | ||
| 24 | +and set errno to one of the values defined below. | ||
| 25 | + | ||
| 26 | + | ||
| 27 | +ERRORS | ||
| 28 | +------ | ||
| 29 | +*EINVAL*:: | ||
| 30 | +The libmodbus context is undefined. | ||
| 31 | + | ||
| 32 | + | ||
| 33 | +SEE ALSO | ||
| 34 | +-------- | ||
| 35 | +linkmb:modbus_set_slave[3] | ||
| 36 | + | ||
| 37 | + | ||
| 38 | +AUTHORS | ||
| 39 | +------- | ||
| 40 | +The libmodbus documentation was written by Stéphane Raimbault | ||
| 41 | +<stephane.raimbault@gmail.com> |
doc/modbus_set_slave.txt
| @@ -74,6 +74,10 @@ if (modbus_connect(ctx) == -1) { | @@ -74,6 +74,10 @@ if (modbus_connect(ctx) == -1) { | ||
| 74 | } | 74 | } |
| 75 | ------------------- | 75 | ------------------- |
| 76 | 76 | ||
| 77 | +SEE ALSO | ||
| 78 | +-------- | ||
| 79 | +linkmb:modbus_get_slave[3] | ||
| 80 | + | ||
| 77 | AUTHORS | 81 | AUTHORS |
| 78 | ------- | 82 | ------- |
| 79 | The libmodbus documentation was written by Stéphane Raimbault | 83 | The libmodbus documentation was written by Stéphane Raimbault |
src/modbus.c
| @@ -1577,6 +1577,16 @@ int modbus_set_slave(modbus_t *ctx, int slave) | @@ -1577,6 +1577,16 @@ int modbus_set_slave(modbus_t *ctx, int slave) | ||
| 1577 | return ctx->backend->set_slave(ctx, slave); | 1577 | return ctx->backend->set_slave(ctx, slave); |
| 1578 | } | 1578 | } |
| 1579 | 1579 | ||
| 1580 | +int modbus_get_slave(modbus_t *ctx) | ||
| 1581 | +{ | ||
| 1582 | + if (ctx == NULL) { | ||
| 1583 | + errno = EINVAL; | ||
| 1584 | + return -1; | ||
| 1585 | + } | ||
| 1586 | + | ||
| 1587 | + return ctx->slave; | ||
| 1588 | +} | ||
| 1589 | + | ||
| 1580 | int modbus_set_error_recovery(modbus_t *ctx, | 1590 | int modbus_set_error_recovery(modbus_t *ctx, |
| 1581 | modbus_error_recovery_mode error_recovery) | 1591 | modbus_error_recovery_mode error_recovery) |
| 1582 | { | 1592 | { |
src/modbus.h
| @@ -177,6 +177,7 @@ typedef enum | @@ -177,6 +177,7 @@ typedef enum | ||
| 177 | } modbus_error_recovery_mode; | 177 | } modbus_error_recovery_mode; |
| 178 | 178 | ||
| 179 | MODBUS_API int modbus_set_slave(modbus_t* ctx, int slave); | 179 | MODBUS_API int modbus_set_slave(modbus_t* ctx, int slave); |
| 180 | +MODBUS_API int modbus_get_slave(modbus_t* ctx); | ||
| 180 | MODBUS_API int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery); | 181 | MODBUS_API int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery); |
| 181 | MODBUS_API int modbus_set_socket(modbus_t *ctx, int s); | 182 | MODBUS_API int modbus_set_socket(modbus_t *ctx, int s); |
| 182 | MODBUS_API int modbus_get_socket(modbus_t *ctx); | 183 | MODBUS_API int modbus_get_socket(modbus_t *ctx); |
tests/unit-test-client.c
| @@ -64,6 +64,7 @@ int main(int argc, char *argv[]) | @@ -64,6 +64,7 @@ int main(int argc, char *argv[]) | ||
| 64 | uint32_t old_byte_to_usec; | 64 | uint32_t old_byte_to_usec; |
| 65 | int use_backend; | 65 | int use_backend; |
| 66 | int success = FALSE; | 66 | int success = FALSE; |
| 67 | + int old_slave; | ||
| 67 | 68 | ||
| 68 | if (argc > 1) { | 69 | if (argc > 1) { |
| 69 | if (strcmp(argv[1], "tcp") == 0) { | 70 | if (strcmp(argv[1], "tcp") == 0) { |
| @@ -445,6 +446,8 @@ int main(int argc, char *argv[]) | @@ -445,6 +446,8 @@ int main(int argc, char *argv[]) | ||
| 445 | ASSERT_TRUE(rc == -1 && errno == EMBMDATA, ""); | 446 | ASSERT_TRUE(rc == -1 && errno == EMBMDATA, ""); |
| 446 | 447 | ||
| 447 | /** SLAVE REPLY **/ | 448 | /** SLAVE REPLY **/ |
| 449 | + old_slave = modbus_get_slave(ctx); | ||
| 450 | + | ||
| 448 | printf("\nTEST SLAVE REPLY:\n"); | 451 | printf("\nTEST SLAVE REPLY:\n"); |
| 449 | modbus_set_slave(ctx, INVALID_SERVER_ID); | 452 | modbus_set_slave(ctx, INVALID_SERVER_ID); |
| 450 | rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | 453 | rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, |
| @@ -500,7 +503,7 @@ int main(int argc, char *argv[]) | @@ -500,7 +503,7 @@ int main(int argc, char *argv[]) | ||
| 500 | ASSERT_TRUE(rc == -1 && errno == ETIMEDOUT, ""); | 503 | ASSERT_TRUE(rc == -1 && errno == ETIMEDOUT, ""); |
| 501 | 504 | ||
| 502 | /* Restore slave */ | 505 | /* Restore slave */ |
| 503 | - modbus_set_slave(ctx, use_backend == RTU ? SERVER_ID : MODBUS_TCP_SLAVE); | 506 | + modbus_set_slave(ctx, old_slave); |
| 504 | 507 | ||
| 505 | printf("3/3 Response with an invalid TID or slave: "); | 508 | printf("3/3 Response with an invalid TID or slave: "); |
| 506 | rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS_INVALID_TID_OR_SLAVE, | 509 | rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS_INVALID_TID_OR_SLAVE, |