ソースを参照

Replace MODBUS_MAX_* by MODBUS_MAX_[READ|WRITE]_*

Hannu Vuolasaho 14 年 前
コミット
a2e16a16b0

+ 14 - 14
src/modbus.c

@@ -1186,11 +1186,11 @@ int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *data_dest)
 {
     int rc;
 
-    if (nb > MODBUS_MAX_BITS) {
+    if (nb > MODBUS_MAX_READ_BITS) {
         if (ctx->debug) {
             fprintf(stderr,
                     "ERROR Too many bits requested (%d > %d)\n",
-                    nb, MODBUS_MAX_BITS);
+                    nb, MODBUS_MAX_READ_BITS);
         }
         errno = EMBMDATA;
         return -1;
@@ -1210,11 +1210,11 @@ int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *data_dest)
 {
     int rc;
 
-    if (nb > MODBUS_MAX_BITS) {
+    if (nb > MODBUS_MAX_READ_BITS) {
         if (ctx->debug) {
             fprintf(stderr,
                     "ERROR Too many discrete inputs requested (%d > %d)\n",
-                    nb, MODBUS_MAX_BITS);
+                    nb, MODBUS_MAX_READ_BITS);
         }
         errno = EMBMDATA;
         return -1;
@@ -1237,11 +1237,11 @@ static int read_registers(modbus_t *ctx, int function, int addr, int nb,
     uint8_t req[MIN_REQ_LENGTH];
     uint8_t rsp[MAX_MESSAGE_LENGTH];
 
-    if (nb > MODBUS_MAX_REGISTERS) {
+    if (nb > MODBUS_MAX_READ_REGISTERS) {
         if (ctx->debug) {
             fprintf(stderr,
                     "ERROR Too many registers requested (%d > %d)\n",
-                    nb, MODBUS_MAX_REGISTERS);
+                    nb, MODBUS_MAX_READ_REGISTERS);
         }
         errno = EMBMDATA;
         return -1;
@@ -1275,11 +1275,11 @@ int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *data_dest)
 {
     int status;
 
-    if (nb > MODBUS_MAX_REGISTERS) {
+    if (nb > MODBUS_MAX_READ_REGISTERS) {
         if (ctx->debug) {
             fprintf(stderr,
                     "ERROR Too many registers requested (%d > %d)\n",
-                    nb, MODBUS_MAX_REGISTERS);
+                    nb, MODBUS_MAX_READ_REGISTERS);
         }
         errno = EMBMDATA;
         return -1;
@@ -1296,10 +1296,10 @@ int modbus_read_input_registers(modbus_t *ctx, int addr, int nb,
 {
     int status;
 
-    if (nb > MODBUS_MAX_REGISTERS) {
+    if (nb > MODBUS_MAX_READ_REGISTERS) {
         fprintf(stderr,
                 "ERROR Too many input registers requested (%d > %d)\n",
-                nb, MODBUS_MAX_REGISTERS);
+                nb, MODBUS_MAX_READ_REGISTERS);
         errno = EMBMDATA;
         return -1;
     }
@@ -1365,10 +1365,10 @@ int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data_src)
 
     uint8_t req[MAX_MESSAGE_LENGTH];
 
-    if (nb > MODBUS_MAX_BITS) {
+    if (nb > MODBUS_MAX_WRITE_BITS) {
         if (ctx->debug) {
             fprintf(stderr, "ERROR Writing too many bits (%d > %d)\n",
-                    nb, MODBUS_MAX_BITS);
+                    nb, MODBUS_MAX_WRITE_BITS);
         }
         errno = EMBMDATA;
         return -1;
@@ -1416,11 +1416,11 @@ int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data
 
     uint8_t req[MAX_MESSAGE_LENGTH];
 
-    if (nb > MODBUS_MAX_REGISTERS) {
+    if (nb > MODBUS_MAX_WRITE_REGISTERS) {
         if (ctx->debug) {
             fprintf(stderr,
                     "ERROR Trying to write to too many registers (%d > %d)\n",
-                    nb, MODBUS_MAX_REGISTERS);
+                    nb, MODBUS_MAX_WRITE_REGISTERS);
         }
         errno = EMBMDATA;
         return -1;

+ 13 - 4
src/modbus.h

@@ -78,14 +78,23 @@ MODBUS_BEGIN_DECLS
 #define MODBUS_MAX_ADU_LENGTH_TCP  260
 
 /* Modbus_Application_Protocol_V1_1b.pdf (chapter 6 section 1 page 12)
- * Quantity of Coils (2 bytes): 1 to 2000 (0x7D0)
+ * Quantity of Coils to read (2 bytes): 1 to 2000 (0x7D0)
+ * (chapter 6 section 11 page 29)
+ * Quantity of Coils to write (2 bytes): 1 to 1968 (0x7B0)
  */
-#define MODBUS_MAX_BITS              2000
+#define MODBUS_MAX_READ_BITS              2000
+#define MODBUS_MAX_WRITE_BITS             1968
 
 /* Modbus_Application_Protocol_V1_1b.pdf (chapter 6 section 3 page 15)
- * Quantity of Registers (2 bytes): 1 to 125 (0x7D)
+ * Quantity of Registers to read (2 bytes): 1 to 125 (0x7D)
+ * (chapter 6 section 12 page 31)
+ * Quantity of Registers to write (2 bytes) 1 to 123 (0x7B)
+ * (chapter 6 section 17 page 38)
+ * Quantity of Registers to write in R/W registers (2 bytes) 1 to 121 (0x79)
  */
-#define MODBUS_MAX_REGISTERS          125
+#define MODBUS_MAX_READ_REGISTERS          125
+#define MODBUS_MAX_WRITE_REGISTERS         123
+#define MODBUS_MAX_RW_WRITE_REGISTERS      121
 
 /* Random number to avoid errno conflicts */
 #define MODBUS_ENOBASE 112345678

+ 6 - 6
tests/bandwidth-client.c

@@ -62,16 +62,16 @@ int main(void)
     }
 
     /* Allocate and initialize the memory to store the status */
-    tab_bit = (uint8_t *) malloc(MODBUS_MAX_BITS * sizeof(uint8_t));
-    memset(tab_bit, 0, MODBUS_MAX_BITS * sizeof(uint8_t));
+    tab_bit = (uint8_t *) malloc(MODBUS_MAX_READ_BITS * sizeof(uint8_t));
+    memset(tab_bit, 0, MODBUS_MAX_READ_BITS * sizeof(uint8_t));
 
     /* Allocate and initialize the memory to store the registers */
-    tab_reg = (uint16_t *) malloc(MODBUS_MAX_REGISTERS * sizeof(uint16_t));
-    memset(tab_reg, 0, MODBUS_MAX_REGISTERS * sizeof(uint16_t));
+    tab_reg = (uint16_t *) malloc(MODBUS_MAX_READ_REGISTERS * sizeof(uint16_t));
+    memset(tab_reg, 0, MODBUS_MAX_READ_REGISTERS * sizeof(uint16_t));
 
     printf("READ BITS\n\n");
 
-    nb_points = MODBUS_MAX_BITS;
+    nb_points = MODBUS_MAX_READ_BITS;
     start = gettime_ms();
     for (i=0; i<NB_LOOPS; i++) {
         rc = modbus_read_bits(ctx, 0, nb_points, tab_bit);
@@ -108,7 +108,7 @@ int main(void)
 
     printf("READ REGISTERS\n\n");
 
-    nb_points = MODBUS_MAX_REGISTERS;
+    nb_points = MODBUS_MAX_READ_REGISTERS;
     start = gettime_ms();
     for (i=0; i<NB_LOOPS; i++) {
         rc = modbus_read_registers(ctx, 0, nb_points, tab_reg);

+ 2 - 2
tests/bandwidth-server-many-up.c

@@ -51,8 +51,8 @@ int main(void)
 
     ctx = modbus_new_tcp("127.0.0.1", 1502);
 
-    mb_mapping = modbus_mapping_new(MODBUS_MAX_BITS, 0,
-                                    MODBUS_MAX_REGISTERS, 0);
+    mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0,
+                                    MODBUS_MAX_READ_REGISTERS, 0);
     if (mb_mapping == NULL) {
         fprintf(stderr, "Failed to allocate the mapping: %s\n",
                 modbus_strerror(errno));

+ 2 - 2
tests/bandwidth-server-one.c

@@ -32,8 +32,8 @@ int main(void)
 
     ctx = modbus_new_tcp("127.0.0.1", 1502);
 
-    mb_mapping = modbus_mapping_new(MODBUS_MAX_BITS, 0,
-                                    MODBUS_MAX_REGISTERS, 0);
+    mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0,
+                                    MODBUS_MAX_READ_REGISTERS, 0);
     if (mb_mapping == NULL) {
         fprintf(stderr, "Failed to allocate the mapping: %s\n",
                 modbus_strerror(errno));

+ 6 - 6
tests/unit-test-client.c

@@ -372,7 +372,7 @@ int main(void)
     /** TOO MANY DATA **/
     printf("\nTEST TOO MANY DATA ERROR:\n");
 
-    rc = modbus_read_bits(ctx, UT_BITS_ADDRESS, MODBUS_MAX_BITS + 1,
+    rc = modbus_read_bits(ctx, UT_BITS_ADDRESS, MODBUS_MAX_READ_BITS + 1,
                           tab_rp_bits);
     printf("* modbus_read_bits: ");
     if (rc == -1 && errno == EMBMDATA) {
@@ -383,7 +383,7 @@ int main(void)
     }
 
     rc = modbus_read_input_bits(ctx, UT_INPUT_BITS_ADDRESS,
-                                MODBUS_MAX_BITS + 1,
+                                MODBUS_MAX_READ_BITS + 1,
                                 tab_rp_bits);
     printf("* modbus_read_input_bits: ");
     if (rc == -1 && errno == EMBMDATA) {
@@ -394,7 +394,7 @@ int main(void)
     }
 
     rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS,
-                               MODBUS_MAX_REGISTERS + 1,
+                               MODBUS_MAX_READ_REGISTERS + 1,
                                tab_rp_registers);
     printf("* modbus_read_registers: ");
     if (rc == -1 && errno == EMBMDATA) {
@@ -405,7 +405,7 @@ int main(void)
     }
 
     rc = modbus_read_input_registers(ctx, UT_INPUT_REGISTERS_ADDRESS,
-                                     MODBUS_MAX_REGISTERS + 1,
+                                     MODBUS_MAX_READ_REGISTERS + 1,
                                      tab_rp_registers);
     printf("* modbus_read_input_registers: ");
     if (rc == -1 && errno == EMBMDATA) {
@@ -416,7 +416,7 @@ int main(void)
     }
 
     rc = modbus_write_bits(ctx, UT_BITS_ADDRESS,
-                           MODBUS_MAX_BITS + 1,
+                           MODBUS_MAX_WRITE_BITS + 1,
                            tab_rp_bits);
     printf("* modbus_write_bits: ");
     if (rc == -1 && errno == EMBMDATA) {
@@ -427,7 +427,7 @@ int main(void)
     }
 
     rc = modbus_write_registers(ctx, UT_REGISTERS_ADDRESS,
-                                MODBUS_MAX_REGISTERS + 1,
+                                MODBUS_MAX_WRITE_REGISTERS + 1,
                                 tab_rp_registers);
     printf("* modbus_write_registers: ");
     if (rc == -1 && errno == EMBMDATA) {