/* Copyright (C) 2001-2007 Stéphane Raimbault This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. These library of functions are designed to enable a program send and receive data from a device that communicates using the Modbus protocol. */ #include #include #include #include #include #define LOOP 1 #define SLAVE 0x11 #define ADDR_MIN 0 #define ADDR_MAX 499 #define FIELDS 500 int main(void) { int ok, fail; int loop_nb; int addr; int field_nb; 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, "169.254.7.104"); modbus_set_debug(&mb_param, TRUE); modbus_connect(&mb_param); tab_rq = (int *) malloc(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); free(tab_rp); free(tab_rq); free(tab_rq_bits); modbus_close(&mb_param); return 0; loop_nb = ok = fail = 0; while (loop_nb++ < LOOP) { for (addr=ADDR_MIN; addr <= ADDR_MAX; addr++) { for (field_nb=1; field_nb<=FIELDS; field_nb++) { int i; /* Random numbers (short) */ for (i=0; i