diff --git a/tests/Makefile.am b/tests/Makefile.am index 6f0729e..4b9af06 100644 --- a/tests/Makefile.am +++ b/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 = *~ diff --git a/tests/test-modbus-master.c b/tests/test-master-random.c index 8c8091e..719229c 100644 --- a/tests/test-modbus-master.c +++ b/tests/test-master-random.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2008 Stéphane Raimbault + * Copyright (C) 2008 Stéphane Raimbault * * Licensed under the GNU General Public License Version 2 * @@ -24,6 +24,21 @@ #include +/* 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; } - + diff --git a/tests/unit-test-master.c b/tests/unit-test-master.c new file mode 100644 index 0000000..e76ddab --- /dev/null +++ b/tests/unit-test-master.c @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2001-2008 Stéphane Raimbault + * + * 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 . + */ + +#include +#include +#include +#include + +#include + +/* 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; +} diff --git a/tests/test-modbus-slave.c b/tests/unit-test-slave.c index bc6e348..bc6e348 100644 --- a/tests/test-modbus-slave.c +++ b/tests/unit-test-slave.c diff --git a/tests/wscript b/tests/wscript index a0a7649..33718e8 100644 --- a/tests/wscript +++ b/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 diff --git a/wscript b/wscript index a54c0af..a73597e 100644 --- a/wscript +++ b/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'