Commit d39fc1f8c4564854c963fc913b7837f4f8c046e9
1 parent
946fb25c
Define and public export of MODBUS_MAX_PDU_LENGTH (closes #167)
Showing
2 changed files
with
14 additions
and
5 deletions
doc/modbus_report_slave_id.txt
| @@ -44,17 +44,14 @@ EXAMPLE | @@ -44,17 +44,14 @@ EXAMPLE | ||
| 44 | ------- | 44 | ------- |
| 45 | [source,c] | 45 | [source,c] |
| 46 | ------------------- | 46 | ------------------- |
| 47 | -uint8_t nb = 128; | ||
| 48 | -uint8_t *tab_bytes; | 47 | +uint8_t tab_bytes[MODBUS_MAX_PDU_LENGTH]; |
| 49 | 48 | ||
| 50 | ... | 49 | ... |
| 51 | 50 | ||
| 52 | -tab_bytes = (uint8_t *) malloc(nb * sizeof(uint8_t)); | ||
| 53 | -rc = modbus_report_slave_id(ctx, nb, tab_bytes); | 51 | +rc = modbus_report_slave_id(ctx, MODBUS_MAX_PDU_LENGTH, tab_bytes); |
| 54 | if (rc > 1) { | 52 | if (rc > 1) { |
| 55 | printf("Run Status Indicator: %s\n", tab_bytes[1] ? "ON" : "OFF"); | 53 | printf("Run Status Indicator: %s\n", tab_bytes[1] ? "ON" : "OFF"); |
| 56 | } | 54 | } |
| 57 | -free(tab_bytes); | ||
| 58 | ------------------- | 55 | ------------------- |
| 59 | 56 | ||
| 60 | 57 |
src/modbus.h
| @@ -105,6 +105,18 @@ MODBUS_BEGIN_DECLS | @@ -105,6 +105,18 @@ MODBUS_BEGIN_DECLS | ||
| 105 | #define MODBUS_MAX_WR_WRITE_REGISTERS 121 | 105 | #define MODBUS_MAX_WR_WRITE_REGISTERS 121 |
| 106 | #define MODBUS_MAX_WR_READ_REGISTERS 125 | 106 | #define MODBUS_MAX_WR_READ_REGISTERS 125 |
| 107 | 107 | ||
| 108 | +/* The size of the MODBUS PDU is limited by the size constraint inherited from | ||
| 109 | + * the first MODBUS implementation on Serial Line network (max. RS485 ADU = 256 | ||
| 110 | + * bytes). Therefore, MODBUS PDU for serial line communication = 256 - Server | ||
| 111 | + * address (1 byte) - CRC (2 bytes) = 253 bytes. | ||
| 112 | + * | ||
| 113 | + * Consequently: | ||
| 114 | + * - RS232 / RS485 ADU = 253 bytes + Server address (1 byte) + CRC (2 bytes) = | ||
| 115 | + * 256 bytes. | ||
| 116 | + * - TCP MODBUS ADU = 253 bytes + MBAP (7 bytes) = 260 bytes. | ||
| 117 | + */ | ||
| 118 | +#define MODBUS_MAX_PDU_LENGTH 253 | ||
| 119 | + | ||
| 108 | /* Random number to avoid errno conflicts */ | 120 | /* Random number to avoid errno conflicts */ |
| 109 | #define MODBUS_ENOBASE 112345678 | 121 | #define MODBUS_ENOBASE 112345678 |
| 110 | 122 |