diff options
Diffstat (limited to 'verteco.c')
-rw-r--r-- | verteco.c | 60 |
1 files changed, 47 insertions, 13 deletions
@@ -1,33 +1,67 @@ +/ gcc verteco.c -o verteco `pkg-config --libs --cflags libmodbus libconfig` + #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> +#include <libconfig.h> #include <modbus.h> -#define SLAVE_ID 1 -#define START_ADDRESS 0 -#define NUMBER_REGISTERS 14 - -#define DEBUG_MODE 0 +#define SLAVE_ID 1 +#define START_ADDRESS 0 +#define NUMBER_REGISTERS 14 +#define DEBUG 1 int main(int argc, char *argv[]) { -if ( argc != 2 ){ +const char *CONFIG_FILE = "verteco.cfg"; + + config_t cfg; + //config_setting_t *setting; + + const char *modbus_device_address; + int modbus_baud_rate; + int modbus_data_bits; + const char *modbus_parity; + int modbus_stop_bits; + + config_init(&cfg); + + + if(!config_read_file(&cfg, CONFIG_FILE)) + { + fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg), + config_error_line(&cfg), config_error_text(&cfg)); + config_destroy(&cfg); + fprintf(stderr, "Unable to find CONFIG_FILE.\n"); return -1; + } + + modbus_t *ctx; + uint16_t tab_reg[64]; + int rc; + int i; + + if(!(config_lookup_string(&cfg, "modbus.device", &modbus_device_address) + && config_lookup_int(&cfg, "modbus.baud", &modbus_baud_rate) + && config_lookup_int(&cfg, "modbus.data_bits", &modbus_data_bits) + && config_lookup_string(&cfg, "modbus.parity", &modbus_parity) + && config_lookup_int(&cfg, "modbus.stop_bits", &modbus_stop_bits)) +){ + fprintf(stderr, "Check modbus configuration in configuration file.\n"); + return -1; } + if(DEBUG){ + printf("%s %d %c %d %d\n",modbus_device_address, modbus_baud_rate, modbus_parity[0], modbus_data_bits, modbus_stop_bits); + } -modbus_t *ctx; -uint16_t tab_reg[64]; -int rc; -int i; +ctx = modbus_new_rtu(modbus_device_address, modbus_baud_rate, modbus_parity[0], modbus_data_bits, modbus_stop_bits); -ctx = modbus_new_rtu(argv[1], 19200, 'E', 8, 1); modbus_set_slave(ctx, SLAVE_ID); - -modbus_set_debug(ctx, DEBUG_MODE); +modbus_set_debug(ctx, DEBUG); if (ctx == NULL) { fprintf(stderr, "Unable to create the libmodbus context\n"); |