aboutsummaryrefslogtreecommitdiffstats
path: root/modbuslog.c
diff options
context:
space:
mode:
Diffstat (limited to 'modbuslog.c')
-rw-r--r--modbuslog.c294
1 files changed, 149 insertions, 145 deletions
diff --git a/modbuslog.c b/modbuslog.c
index e46c9a7..6a29b9d 100644
--- a/modbuslog.c
+++ b/modbuslog.c
@@ -19,7 +19,6 @@
// gcc modbuslog.c -o modbuslog `pkg-config --libs --cflags libmodbus libconfig`
-
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
@@ -43,168 +42,173 @@
#define NUMBER_REGISTERS 14
#define DEBUG 1
-void minute_check(int signum){
- alarm(60);
+void minute_check(int signum) {
+ alarm(60);
}
-void getmac(unsigned char* mac_address){
- int s;
- struct ifreq ifr;
-
- s = socket(PF_INET, SOCK_DGRAM, 0);
- memset(&ifr, 0x00, sizeof(ifr));
- strcpy(ifr.ifr_name, "eth0");
- ioctl(s, SIOCGIFHWADDR, &ifr);
- close(s);
-
- unsigned char mac_address_internal[6];
- sprintf(mac_address_internal,"%.2X%.2X%.2X%.2X%.2X%.2X", (unsigned char) ifr.ifr_hwaddr.sa_data[0], (unsigned char) ifr.ifr_hwaddr.sa_data[1], (unsigned char) ifr.ifr_hwaddr.sa_data[2], (unsigned char) ifr.ifr_hwaddr.sa_data[3], (unsigned char) ifr.ifr_hwaddr.sa_data[4], (unsigned char) ifr.ifr_hwaddr.sa_data[5]);
-
- strcpy(mac_address,mac_address_internal);
+void getmac(unsigned char* mac_address) {
+ int s;
+ struct ifreq ifr;
+
+ s = socket(PF_INET, SOCK_DGRAM, 0);
+ memset(&ifr, 0x00, sizeof(ifr));
+ strcpy(ifr.ifr_name, "eth0");
+ ioctl(s, SIOCGIFHWADDR, &ifr);
+ close(s);
+
+ unsigned char mac_address_internal[6];
+ sprintf(mac_address_internal, "%.2X%.2X%.2X%.2X%.2X%.2X",
+ (unsigned char) ifr.ifr_hwaddr.sa_data[0],
+ (unsigned char) ifr.ifr_hwaddr.sa_data[1],
+ (unsigned char) ifr.ifr_hwaddr.sa_data[2],
+ (unsigned char) ifr.ifr_hwaddr.sa_data[3],
+ (unsigned char) ifr.ifr_hwaddr.sa_data[4],
+ (unsigned char) ifr.ifr_hwaddr.sa_data[5]);
+
+ strcpy(mac_address, mac_address_internal);
}
-
-
-int main(int argc, char *argv[])
-{
-
- const char *CONFIG_FILE = "modbuslog.cfg";
-
- config_t cfg;
- //config_setting_t *setting;
-
- //unsigned char* mac_address;
- unsigned char mac_address[6];
-
- const char *modbus_device_address;
- int modbus_baud_rate;
- int modbus_data_bits;
- const char *modbus_parity;
- int modbus_stop_bits;
-
- config_init(&cfg);
-
- getmac(mac_address);
- if(DEBUG){
-printf("%s\n",mac_address);
+int main(int argc, char *argv[]) {
+
+ const char *CONFIG_FILE = "modbuslog.cfg";
+
+ config_t cfg;
+ //config_setting_t *setting;
+
+ //unsigned char* mac_address;
+ unsigned char mac_address[6];
+
+ const char *modbus_device_address;
+ int modbus_baud_rate;
+ int modbus_data_bits;
+ const char *modbus_parity;
+ int modbus_stop_bits;
+
+ config_init(&cfg);
+
+ getmac(mac_address);
+
+ if (DEBUG) {
+ printf("%s\n", mac_address);
+ }
+
+ 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;
+ }
+
+ 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,
+ "Incomplete modbus configuration. Check 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;
+
+ signal(SIGALRM, minute_check);
+ alarm(60);
+
+ for (;;) {
+ select(0, NULL, NULL, NULL, NULL);
+
+ time_t t = time(NULL);
+ int unixtime_min = (((int) t) / 60 * 60);
+ //int unixtime = (int) t;
+ //printf("%d\n", unixtime);
+
+ config_setting_t *registers;
+
+ registers = config_lookup(&cfg, "register");
+
+ unsigned int num_registers = config_setting_length(registers);
+
+ int i;
+ for (i = 0; i < num_registers; ++i) {
+ config_setting_t *register_element = config_setting_get_elem(
+ registers, i);
+ int slaveid;
+ config_setting_lookup_int(register_element, "slaveid", &slaveid);
+ int intervalvalue;
+ config_setting_lookup_int(register_element, "intervalvalue",
+ &intervalvalue);
+ printf("%d", intervalvalue);
+
+ const char *intervalunit;
+ config_setting_lookup_string(register_element, "intervalunit",
+ &intervalunit);
+
+ printf("%c", intervalunit[0]);
+
+ int intervalduration;
+
+ if (intervalunit[0] == 'H')
+ intervalduration = intervalvalue * 3600;
+ else
+ intervalduration = intervalvalue * 60;
+
+ if (unixtime_min % intervalduration == 0) {
+ printf("specified minute. %d %d\n", unixtime_min,
+ intervalduration);
+ }
+
+ printf("%d ", slaveid);
+ }
+ printf("%d\n", unixtime_min);
+ }
}
- 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;
- }
-
- 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, "Incomplete modbus configuration. Check 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;
-
-
- signal(SIGALRM, minute_check);
- alarm(60);
-
- for (;;){
- select(0, NULL, NULL, NULL, NULL);
-
- time_t t = time(NULL);
- int unixtime_min = (((int) t)/60*60);
- //int unixtime = (int) t;
- //printf("%d\n", unixtime);
-
- config_setting_t *registers;
-
- registers = config_lookup(&cfg, "register");
-
- unsigned int num_registers = config_setting_length(registers);
-
- int i;
- for(i = 0; i < num_registers; ++i){
- config_setting_t *register_element = config_setting_get_elem(registers, i);
- int slaveid;
- config_setting_lookup_int(register_element, "slaveid", &slaveid);
- int intervalvalue;
- config_setting_lookup_int(register_element, "intervalvalue", &intervalvalue);
- printf("%d", intervalvalue);
-
- const char *intervalunit;
- config_setting_lookup_string(register_element, "intervalunit", &intervalunit);
-
- printf("%c", intervalunit[0]);
-
- int intervalduration;
-
- if(intervalunit[0]=='H')
- intervalduration=intervalvalue*3600;
- else
- intervalduration=intervalvalue*60;
-
- if(unixtime_min%intervalduration==0){
- printf("specified minute. %d %d\n", unixtime_min, intervalduration);
- }
-
- printf("%d ", slaveid);
- }
- printf("%d\n",unixtime_min);
- }
-}
-
-
/*
-ctx = modbus_new_rtu(modbus_device_address, modbus_baud_rate, modbus_parity[0], modbus_data_bits, modbus_stop_bits);
+ ctx = modbus_new_rtu(modbus_device_address, modbus_baud_rate, modbus_parity[0], modbus_data_bits, modbus_stop_bits);
-modbus_set_slave(ctx, SLAVE_ID);
-modbus_set_debug(ctx, DEBUG);
+ modbus_set_slave(ctx, SLAVE_ID);
+ modbus_set_debug(ctx, DEBUG);
-if (ctx == NULL) {
- fprintf(stderr, "Unable to create libmodbus object.\n");
- return -1;
-}
+ if (ctx == NULL) {
+ fprintf(stderr, "Unable to create libmodbus object.\n");
+ return -1;
+ }
-if (modbus_connect(ctx) == -1) {
- fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
- modbus_free(ctx);
- return -1;
-}
+ if (modbus_connect(ctx) == -1) {
+ fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
+ modbus_free(ctx);
+ return -1;
+ }
-rc = modbus_read_input_registers(ctx, START_ADDRESS, NUMBER_REGISTERS, tab_reg);
+ rc = modbus_read_input_registers(ctx, START_ADDRESS, NUMBER_REGISTERS, tab_reg);
-if (rc == -1) {
- fprintf(stderr, "ERROR: %s\n", modbus_strerror(errno));
- return -1;
-}
+ if (rc == -1) {
+ fprintf(stderr, "ERROR: %s\n", modbus_strerror(errno));
+ return -1;
+ }
-for (i=0; i < rc; i=i+2) {
- printf("reg[%d]=%d\n", i, tab_reg[i]+tab_reg[i+1]);
-}
+ for (i=0; i < rc; i=i+2) {
+ printf("reg[%d]=%d\n", i, tab_reg[i]+tab_reg[i+1]);
+ }
-modbus_close(ctx);
-modbus_free(ctx);
+ modbus_close(ctx);
+ modbus_free(ctx);
- return 0;
-}
+ return 0;
+ }
-*/
+ */