parent
f6d0ece8a6
commit
b1577fbdab
@ -0,0 +1,107 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// main.cc is part of TestModbus-Server.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "mbsconfig.h"
|
||||
#include "gui.h"
|
||||
#include "modbus.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// global variables
|
||||
//
|
||||
|
||||
Config config;
|
||||
ModbusSrv modbussrv;
|
||||
GtkBuilder *_builder_ = NULL; // work around for the thread situation
|
||||
uint16_t modbusdata[4][0x10000]; // needed for work with the gui will by synced by the modbus call back functions
|
||||
|
||||
gboolean modbus_callback(gpointer data);
|
||||
|
||||
int main (int argc, char **argv) {
|
||||
GtkBuilder *builder;
|
||||
GObject *window;
|
||||
|
||||
#ifdef BUILD_WINDOWS
|
||||
char buffer[16];
|
||||
setvbuf (stdout, buffer, _IONBF, 16);
|
||||
#endif
|
||||
|
||||
printf ("TestModbus-Server - %s\n", VERSION);
|
||||
printf (" https://steffen.gulpe.de/modbus-tcpip\n");
|
||||
printf (" written by Steffen Pohle <steffen@gulpe.de>\n");
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
_builder_ = builder = gtk_builder_new ();
|
||||
gtk_builder_add_from_file (builder, BUILDER_FILE, NULL);
|
||||
gtk_builder_connect_signals(builder, builder);
|
||||
|
||||
//
|
||||
// #if defined _WIN32 || defined _WIN64 || defined __CYGWIN__
|
||||
// #else
|
||||
// #endif
|
||||
//
|
||||
|
||||
modbussrv.SetCallback(&modbus_callback);
|
||||
window = gtk_builder_get_object (builder, "testmodbus-server");
|
||||
gtk_widget_show_all (GTK_WIDGET(window));
|
||||
|
||||
if (argc == 2) {
|
||||
printf ("Load File:%s\n", argv[1]);
|
||||
config.SetFilename(argv[1]);
|
||||
load_file(config.GetFilename());
|
||||
}
|
||||
else {
|
||||
printf ("Load File:default.modbus\n");
|
||||
config.SetFilename("default.modbus");
|
||||
load_file(config.GetFilename());
|
||||
}
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
string to_hex16 (int v) {
|
||||
char HEX[] = "0123456789ABCDEF";
|
||||
int i = v;
|
||||
int n;
|
||||
string txt = "";
|
||||
|
||||
for (n = 0; n < 4; n++) {
|
||||
txt = HEX[i%16]+ txt;
|
||||
i = i / 16;
|
||||
}
|
||||
|
||||
return txt;
|
||||
}
|
||||
|
||||
|
||||
gboolean modbus_callback(gpointer data) {
|
||||
struct modbus_callback_data *mdata = (struct modbus_callback_data *) data;
|
||||
|
||||
MBData_ChangeRegs(mdata->fc, mdata->regstart, mdata->count, mdata->r);
|
||||
Values_ChangeRegs(mdata->fc, mdata->regstart, mdata->count, mdata->r);
|
||||
|
||||
if (mdata->r) free (mdata->r);
|
||||
free (mdata);
|
||||
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
|
||||
float get_cycletime(struct timeval *t) {
|
||||
struct timeval t1;
|
||||
float f = 0.0;
|
||||
|
||||
t1 = *t;
|
||||
gettimeofday(t, NULL);
|
||||
f = (float)(t->tv_sec - t1.tv_sec) + ((t->tv_usec - t1.tv_usec) / 1000000.0);
|
||||
|
||||
return f;
|
||||
}
|
Loading…
Reference in new issue