Sfoglia il codice sorgente

- Rename test files
- Separate unit-test-master and test-master-random

Stéphane Raimbault 17 anni fa
parent
commit
35c5a23087
6 ha cambiato i file con 124 aggiunte e 30 eliminazioni
  1. 10 6
      tests/Makefile.am
  2. 30 19
      tests/test-master-random.c
  3. 72 0
      tests/unit-test-master.c
  4. 0 0
      tests/unit-test-slave.c
  5. 11 4
      tests/wscript
  6. 1 1
      wscript

+ 10 - 6
tests/Makefile.am

@@ -1,15 +1,19 @@
 noinst_PROGRAMS = \
-	test-modbus-master \
-	test-modbus-slave
+	unit-test-master \
+	unit-test-slave \
+	test-master-random
 
 common_ldflags = \
 	$(top_builddir)/modbus/libmodbus.la
 
-test_modbus_master_SOURCES = test-modbus-master.c
-test_modbus_master_LDADD = $(common_ldflags)
+unit_test_master_SOURCES = unit-test-master.c
+unit_test_master_LDADD = $(common_ldflags)
 
-test_modbus_slave_SOURCES = test-modbus-slave.c
-test_modbus_slave_LDADD = $(common_ldflags)
+unit_test_slave_SOURCES = unit-test-slave.c
+unit_test_slave_LDADD = $(common_ldflags)
+
+test_master_random_SOURCES = test-master-random.c
+test_master_random_LDADD = $(common_ldflags)
 
 INCLUDES = -I$(top_srcdir)
 CLEANFILES = *~

+ 30 - 19
tests/test-modbus-master.c → tests/test-master-random.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001-2008 Stéphane Raimbault <stephane.raimbault@gmail.com>
+ * Copyright (C) 2008 Stéphane Raimbault <stephane.raimbault@gmail.com>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -24,6 +24,21 @@
 
 #include <modbus/modbus.h>
 
+/* The goal of this program is to check all major functions of
+   libmodbus:
+   - force_single_coil
+   - read_coil_status
+   - force_multiple_coils
+   - preset_single_register
+   - read_holding_registers
+   - preset_multiple_registers
+   - read_holding_registers
+
+   All these functions are called with random values on a address
+   range defined by following defines.
+
+   This program is also really useful to test your remote target unit.
+*/
 #define LOOP       1
 #define SLAVE   0x11
 #define ADDR_MIN   0
@@ -42,30 +57,23 @@ int main(void)
         modbus_param_t mb_param;
 
         /* RTU parity : none, even, odd */
-/*      modbus_init_rtu(&mb_param, "/dev/ttyS0", 19200, "none", 8, 1); */
+        /* modbus_init_rtu(&mb_param, "/dev/ttyS0", 19200, "none", 8, 1); */
 
         /* TCP */
-        modbus_init_tcp(&mb_param, "127.0.0.1", 1502);
+        modbus_init_tcp(&mb_param, "192.168.0.100", MODBUS_TCP_DEFAULT_PORT);
         modbus_set_debug(&mb_param, TRUE);
-      
-        modbus_connect(&mb_param);
 
+        modbus_connect(&mb_param);./configu
+
+        /* Allocate and initialize the different memory spaces */
         tab_rq = (int *) malloc(FIELDS * sizeof(int));
+        memset(tab_rq, 0, FIELDS * sizeof(int));
+
         tab_rq_bits = (int *) malloc(FIELDS * sizeof(int));
-        tab_rp = (int *) malloc(FIELDS * sizeof(int));
-        
-        read_coil_status(&mb_param, SLAVE, 0x13, 0x25, tab_rp);
-        read_input_status(&mb_param, SLAVE, 0xC4, 0x16, tab_rp);
-        read_holding_registers(&mb_param, SLAVE, 0x6B, 3, tab_rp);
-        read_input_registers(&mb_param, SLAVE, 0x8, 1, tab_rp);
-        force_single_coil(&mb_param, SLAVE, 0xAC, ON);
+        memset(tab_rq_bits, 0, FIELDS * sizeof(int));
 
-        free(tab_rp);                                           
-        free(tab_rq);
-        free(tab_rq_bits);
-        modbus_close(&mb_param);
-        
-        return 0;
+        tab_rp = (int *) malloc(FIELDS * sizeof(int));
+        memset(tab_rp, 0, FIELDS * sizeof(int));
 
         loop_nb = ok = fail = 0;
         while (loop_nb++ < LOOP) { 
@@ -189,11 +197,14 @@ int main(void)
                 }
         }
 
+        /* Free the memory */
         free(tab_rp);                                           
         free(tab_rq);
         free(tab_rq_bits);
+
+        /* Close the connection */
         modbus_close(&mb_param);
         
         return 0;
 }
-        
+

+ 72 - 0
tests/unit-test-master.c

@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2001-2008 Stéphane Raimbault <stephane.raimbault@gmail.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <modbus/modbus.h>
+
+/* Tests based on PI-MBUS-300 documentation */
+#define SLAVE    0x11
+#define FIELDS   500
+
+int main(void)
+{
+        int *tab_rq;
+        int *tab_rq_bits;
+        int *tab_rp;
+        modbus_param_t mb_param;
+
+        /* RTU parity : none, even, odd */
+/*      modbus_init_rtu(&mb_param, "/dev/ttyS0", 19200, "none", 8, 1); */
+
+        /* TCP */
+        modbus_init_tcp(&mb_param, "127.0.0.1", 1502);
+        modbus_set_debug(&mb_param, TRUE);
+      
+        modbus_connect(&mb_param);
+
+        /* Allocate and initialize the different memory spaces */
+        tab_rq = (int *) malloc(FIELDS * sizeof(int));
+        memset(tab_rq, 0, FIELDS * sizeof(int));
+
+        tab_rq_bits = (int *) malloc(FIELDS * sizeof(int));
+        memset(tab_rq_bits, 0, FIELDS * sizeof(int));
+
+        tab_rp = (int *) malloc(FIELDS * sizeof(int));
+        memset(tab_rp, 0, FIELDS * sizeof(int));
+        
+        read_coil_status(&mb_param, SLAVE, 0x13, 0x25, tab_rp);
+        read_input_status(&mb_param, SLAVE, 0xC4, 0x16, tab_rp);
+        read_holding_registers(&mb_param, SLAVE, 0x6B, 3, tab_rp);
+        read_input_registers(&mb_param, SLAVE, 0x8, 1, tab_rp);
+        force_single_coil(&mb_param, SLAVE, 0xAC, ON);
+
+        /* Free the memory */
+        free(tab_rp);                                           
+        free(tab_rq);
+        free(tab_rq_bits);
+
+        /* Close the connection */
+        modbus_close(&mb_param);
+        
+        return 0;
+}

+ 0 - 0
tests/test-modbus-slave.c → tests/unit-test-slave.c


+ 11 - 4
tests/wscript

@@ -1,14 +1,21 @@
 def build(bld):
     obj = bld.create_obj('cc', 'program')
-    obj.source = 'test-modbus-master.c'
+    obj.source = 'unit-test-master.c'
     obj.includes = '. ..'
     obj.uselib_local = 'modbus'
-    obj.target = 'test-modbus-master'
+    obj.target = 'unit-test-master'
     obj.inst_var = 0
 
     obj = bld.create_obj('cc', 'program')
-    obj.source = 'test-modbus-slave.c'
+    obj.source = 'unit-test-slave.c'
     obj.includes = '. ..'
     obj.uselib_local = 'modbus'
-    obj.target = 'test-modbus-slave'
+    obj.target = 'unit-test-slave'
+    obj.inst_var = 0
+
+    obj = bld.create_obj('cc', 'program')
+    obj.source = 'test-master-random.c'
+    obj.includes = '. ..'
+    obj.uselib_local = 'modbus'
+    obj.target = 'test-master-random'
     obj.inst_var = 0

+ 1 - 1
wscript

@@ -16,7 +16,7 @@ def configure(conf):
      conf.check_tool('compiler_cc')
      conf.check_tool('misc')
 
-     headers = 'stdio.h string.h stdlib.h termios.h sys/time.h \
+     headers = 'termios.h sys/time.h \
                 unistd.h errno.h limits.h fcntl.h \
                 sys/types.h sys/socket.h sys/ioctl.h \
                 netinet/in.h netinet/ip.h netinet/tcp.h arpa/inet.h'