some code cleanup and fixing all the warnings

master
Steffen Pohle 1 month ago
parent b021f134c1
commit 1c6fb1c3b9

@ -1,9 +1,10 @@
Version 1.0.5 Version 1.0.5
2025-11-28: 2025-11-29:
- double click on the variable list works. - double click on the variable list works.
- added bulk load of CSV files. - added bulk load of CSV files.
- set values within the saved file and thier content
Version 1.0.4 Version 1.0.4

@ -35,8 +35,8 @@ needed librarys (needs to prepared, see Makefile for some hints).
For precompiled windows binarys look at this [link](https://steffen.gulpe.de/modbus-tcpip/). For precompiled windows binarys look at this [link](https://steffen.gulpe.de/modbus-tcpip/).
# some functions - bulk load # some usefull functions
- Bulk load of csv files works. Bulk load of csv files works.
NAME,TYPE,FC,REGISTER,VALUE NAME,TYPE,FC,REGISTER,VALUE
=================================================== ===================================================
@ -45,3 +45,5 @@ For precompiled windows binarys look at this [link](https://steffen.gulpe.de/mod
TEST_FC4_4,FLOAT,4,4,2.6 TEST_FC4_4,FLOAT,4,4,2.6
TEST_FC4_6,FLOAT,4,6,15.6 TEST_FC4_6,FLOAT,4,6,15.6

@ -431,26 +431,21 @@ gboolean cb_thread_network_data_add (gpointer data) {
struct modbus_data *mbdata = (struct modbus_data *)data; struct modbus_data *mbdata = (struct modbus_data *)data;
std::string text; std::string text;
char timetext[255]; char timetext[255];
GtkTextTag *tag_datetime;
GtkTextTag *tag_data;
GtkTextTag *tag_info;
GtkTextTag *tag_modbus;
GtkTextTag *tag_error;
time_t _tm =time(NULL); time_t _tm =time(NULL);
struct tm * curtime = localtime (&_tm); struct tm * curtime = localtime (&_tm);
static int _once = 0; static int _once = 0;
if (_once == 0) { if (_once == 0) {
_once = 1; _once = 1;
tag_datetime = gtk_text_buffer_create_tag (textbuffer, "Date_Time", gtk_text_buffer_create_tag (textbuffer, "Date_Time",
"foreground", "blue", "style", PANGO_WEIGHT_BOLD, "family", "Monospace", NULL); "foreground", "blue", "style", PANGO_WEIGHT_BOLD, "family", "Monospace", NULL);
tag_data = gtk_text_buffer_create_tag (textbuffer, "Data", gtk_text_buffer_create_tag (textbuffer, "Data",
"foreground", "black", "style", PANGO_WEIGHT_NORMAL, "family", "Monospace", NULL); "foreground", "black", "style", PANGO_WEIGHT_NORMAL, "family", "Monospace", NULL);
tag_info = gtk_text_buffer_create_tag (textbuffer, "Info", gtk_text_buffer_create_tag (textbuffer, "Info",
"foreground", "green", "style", PANGO_WEIGHT_THIN, "family", "Sans", NULL); "foreground", "green", "style", PANGO_WEIGHT_THIN, "family", "Sans", NULL);
tag_error = gtk_text_buffer_create_tag (textbuffer, "Error", gtk_text_buffer_create_tag (textbuffer, "Error",
"foreground", "red", "style", PANGO_WEIGHT_BOLD, "family", "Sans", NULL); "foreground", "red", "style", PANGO_WEIGHT_BOLD, "family", "Sans", NULL);
tag_modbus = gtk_text_buffer_create_tag (textbuffer, "Modbus", gtk_text_buffer_create_tag (textbuffer, "Modbus",
"foreground", "black", "style", PANGO_WEIGHT_NORMAL, "family", "Sans", NULL); "foreground", "black", "style", PANGO_WEIGHT_NORMAL, "family", "Sans", NULL);
} }
strftime (timetext, 255, "%H:%M:%S", curtime); strftime (timetext, 255, "%H:%M:%S", curtime);
@ -459,7 +454,7 @@ gboolean cb_thread_network_data_add (gpointer data) {
// build hex dump // build hex dump
// //
text = ""; text = "";
for (int i = 0; i < mbdata->bufferlen; i++) { for (size_t i = 0; i < mbdata->bufferlen; i++) {
unsigned char c = mbdata->buffer[i]; unsigned char c = mbdata->buffer[i];
char hexnum[] = "0123456789ABCDEF"; char hexnum[] = "0123456789ABCDEF";
@ -558,9 +553,7 @@ gboolean cb_thread_network_text_add (gpointer data) {
char timetext[255]; char timetext[255];
GtkWidget *textview = GTK_WIDGET(gtk_builder_get_object (_builder_, "network_text")); GtkWidget *textview = GTK_WIDGET(gtk_builder_get_object (_builder_, "network_text"));
GtkTextBuffer *textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); GtkTextBuffer *textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
GtkTextIter start, end; GtkTextIter start;
GtkTextTag *tag_datetime;
GtkTextTag *tag_info;
char *textprm = (char*) data; char *textprm = (char*) data;
time_t _tm =time(NULL); time_t _tm =time(NULL);
struct tm * curtime = localtime (&_tm); struct tm * curtime = localtime (&_tm);
@ -568,9 +561,9 @@ gboolean cb_thread_network_text_add (gpointer data) {
if (_once == 0) { if (_once == 0) {
_once = 1; _once = 1;
tag_datetime = gtk_text_buffer_create_tag (textbuffer, "Date_Time", gtk_text_buffer_create_tag (textbuffer, "Date_Time",
"foreground", "blue", "style", PANGO_WEIGHT_BOLD, "family", "Monospace", NULL); "foreground", "blue", "style", PANGO_WEIGHT_BOLD, "family", "Monospace", NULL);
tag_info = gtk_text_buffer_create_tag (textbuffer, "Connection", gtk_text_buffer_create_tag (textbuffer, "Connection",
"foreground", "red", "style", PANGO_WEIGHT_BOLD, "family", "Sans", NULL); "foreground", "red", "style", PANGO_WEIGHT_BOLD, "family", "Sans", NULL);
} }
@ -608,10 +601,7 @@ gboolean cb_thread_status (gpointer data) {
void cb_networkdata_show (GtkWidget *widget, gpointer data) { void cb_networkdata_show (GtkWidget *widget, gpointer data) {
GtkWidget *textview = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(data), "network_text")); GtkWidget *textview = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(data), "network_text"));
GtkTextBuffer *textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
printf ("*************************** \n");
}; };
void cb_addvar_close (GtkWidget *widget, gpointer data) { void cb_addvar_close (GtkWidget *widget, gpointer data) {
@ -669,7 +659,7 @@ void cb_menu_about(GtkWidget *widget, gpointer data) {
GtkWidget *dlg = GTK_WIDGET (gtk_builder_get_object (builder, "dlgabout")); GtkWidget *dlg = GTK_WIDGET (gtk_builder_get_object (builder, "dlgabout"));
GtkWidget *label = GTK_WIDGET (gtk_builder_get_object (builder, "dlgabout_version")); GtkWidget *label = GTK_WIDGET (gtk_builder_get_object (builder, "dlgabout_version"));
gtk_label_set_text(GTK_LABEL(label), VERSION); gtk_label_set_text(GTK_LABEL(label), VERSION);
gint result = gtk_dialog_run(GTK_DIALOG(dlg)); gtk_dialog_run(GTK_DIALOG(dlg));
gtk_widget_hide(GTK_WIDGET(dlg)); gtk_widget_hide(GTK_WIDGET(dlg));
return; return;
@ -826,8 +816,6 @@ void load_file(std::string fn) {
GtkWidget *guiautovalue = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "conf_autoaddvalues")); GtkWidget *guiautovalue = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "conf_autoaddvalues"));
GtkWidget *guiport = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "port_entry")); GtkWidget *guiport = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "port_entry"));
GuiValue g; GuiValue g;
int autoadd = 0;
modbussrv.EnableAll(0); modbussrv.EnableAll(0);
MBData_EnableAll(0); MBData_EnableAll(0);
@ -867,14 +855,21 @@ void load_file(std::string fn) {
for (i = 0; json.GetObjectIdx("values", i, &value); i++) { for (i = 0; json.GetObjectIdx("values", i, &value); i++) {
uint16_t regvals[4];
int regstowrite = 1;
value.GetValue("name", &g.name); value.GetValue("name", &g.name);
value.GetValue("type", &g.type); value.GetValue("type", &g.type);
value.GetValue("sim", &g.sim); value.GetValue("sim", &g.sim);
value.GetValue("value", &g.value); value.GetValue("value", &g.value);
value.GetValue("fc", &temp); g.fc = atoi(temp.c_str()); value.GetValueInt("fc", &g.fc);
value.GetValue("reg", &temp); g.reg = atoi(temp.c_str()); value.GetValueInt("reg", &g.reg);
Value_Add(&g); Value_Add(&g);
if (Value_SetValue(g.value, g.type, g.fc, &regstowrite, regvals)) {
modbussrv.SetRegValue(g.fc, g.reg, regstowrite, (uint16_t*)regvals);
}
} }
}; };
@ -884,9 +879,7 @@ void load_bulkfile(std::string fn) {
FILE *f; FILE *f;
char buffer[FILEBUFFER]; char buffer[FILEBUFFER];
char field[LEN_FIELD];
char *pos, *next; char *pos, *next;
int i;
JSONParse json; JSONParse json;
JSONParse value; JSONParse value;
std::string temp; std::string temp;
@ -941,7 +934,7 @@ void load_bulkfile(std::string fn) {
modbussrv.SetRegValue(g.fc, g.reg, regstowrite, (uint16_t*)regvals); modbussrv.SetRegValue(g.fc, g.reg, regstowrite, (uint16_t*)regvals);
printf ("%s add %s type:%s with value %s\n", __FUNCTION__, g.name.c_str(), g.type.c_str(), g.value.c_str()); printf ("%s add %s type:%s with value %s\n", __FUNCTION__, g.name.c_str(), g.type.c_str(), g.value.c_str());
} }
else printf ("%s add %s without value\n", __FUNCTION__, g.name); else printf ("%s add %s without value\n", __FUNCTION__, g.name.c_str());
} }
fclose (f); fclose (f);
} }

@ -166,11 +166,10 @@ void MBData_ChangeRegs (int fc, int regstart, int count, ModbusRegister *r) {
GtkWidget *mbdata = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "regs_tv")); GtkWidget *mbdata = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "regs_tv"));
GtkTreeIter iter; GtkTreeIter iter;
GtkTreeModel *model; GtkTreeModel *model;
int i,j; int i;
gchar *v_fcreg = NULL; gchar *v_fcreg = NULL;
string path; string path;
char value[16] = "0000"; char value[16] = "0000";
char hex[] = "0123456789ABCDEF";
model = gtk_tree_view_get_model(GTK_TREE_VIEW(mbdata)); model = gtk_tree_view_get_model(GTK_TREE_VIEW(mbdata));

@ -397,7 +397,6 @@ std::string Value_GetValue(int fc, int reg, string type) {
/// @return /// @return
int Value_SetValue(string value, string type, int fc, int *regcnt, uint16_t *regvalues) { int Value_SetValue(string value, string type, int fc, int *regcnt, uint16_t *regvalues) {
uint8_t data[4]; uint8_t data[4];
if (fc == 1 || fc == 2) { if (fc == 1 || fc == 2) {
*regcnt = 1; *regcnt = 1;
if (value.compare("false") == 0 || value.compare("0") == 0) if (value.compare("false") == 0 || value.compare("0") == 0)
@ -426,6 +425,19 @@ int Value_SetValue(string value, string type, int fc, int *regcnt, uint16_t *reg
memcpy (regvalues, &i16, 2); memcpy (regvalues, &i16, 2);
*regcnt = 1; *regcnt = 1;
} }
else if (type.compare("BOOL") == 0) {
uint16_t i16;
int ival;
std::size_t c;
for (ival = 0, c = 0; c < value.length(); c++) {
if (value[c] == '0') ival = ival << 1;
else if (value[c] == '1') ival = (ival << 1) + 1;
}
i16 = (uint16_t) ival;
memcpy (regvalues, &i16, 2);
*regcnt = 1;
}
} }
return 1; return 1;

@ -43,7 +43,7 @@ void JSONParse::Clear() {
// read every element and keep only this in memory. // read every element and keep only this in memory.
// //
int JSONParse::Set(string json) { int JSONParse::Set(string json) {
int i; std::size_t i;
int step; int step;
int level; int level;
bool ignorenext; bool ignorenext;
@ -205,23 +205,21 @@ int JSONParse::GetValue(string varname, string *dest) {
int JSONParse::GetValueInt(string varname, int *dest) { int JSONParse::GetValueInt(string varname, int *dest) {
string s; string s;
int res = GetValue(varname, &s); int res = GetValue(varname, &s);
if (res) { if (res) *dest = atoi (s.c_str());
*dest = atoi (s.c_str());
return 1; return res;
}
return 0;
}; };
int JSONParse::GetValueInt64(string varname, int64_t *dest) { int JSONParse::GetValueInt64(string varname, int64_t *dest) {
string s; string s;
int res = GetValue(varname, &s); int res = GetValue(varname, &s);
if (res) { if (res) *dest = atol (s.c_str());
*dest = atol (s.c_str());
return 1; return res;
}
return 0;
}; };
@ -244,7 +242,8 @@ int JSONParse::GetObject(string varname, JSONParse *dest) {
#define MAXRECURSIVE 255 #define MAXRECURSIVE 255
int JSONParse::GetIdx(string src, int idx, string *dest) { int JSONParse::GetIdx(string src, int idx, string *dest) {
char recursive[MAXRECURSIVE]; char recursive[MAXRECURSIVE];
int i = 0, rcnt = 0, cnt = 0; int rcnt = 0, cnt = 0;
std::size_t i;
(*dest) = ""; (*dest) = "";
// printf("\n***************************************idx:%d\n", idx); // printf("\n***************************************idx:%d\n", idx);

@ -9,7 +9,7 @@
*/ */
#ifndef _MBSCONFIG_H_ #ifndef _MBSCONFIG_H_
#define _MBDCONFIG_H_ #define _MBSCONFIG_H_
#include "config.h" #include "config.h"
#include "modbussrv.h" #include "modbussrv.h"

@ -448,8 +448,6 @@ int ModbusSrv::WorkerAndEncodeRead(struct modbus_data *mbin, struct modbus_data
int ModbusSrv::WorkerAndEncodeWriteSingle(struct modbus_data *mbin, struct modbus_data *mbout) { int ModbusSrv::WorkerAndEncodeWriteSingle(struct modbus_data *mbin, struct modbus_data *mbout) {
uint16_t i16;
int pos = 0;
int error = 0; int error = 0;
// transaction // transaction
@ -814,8 +812,6 @@ void ModbusSrv::EnableAll(int onoff) {
void ModbusSrv::SetRegValue(int fc, int regstart, int count, uint16_t *values) { void ModbusSrv::SetRegValue(int fc, int regstart, int count, uint16_t *values) {
int reg;
if (fc <= 0 || fc > 4) { if (fc <= 0 || fc > 4) {
printf ("%s:%d fc(%d) is set out of range\n", __FILE__, __LINE__, fc); printf ("%s:%d fc(%d) is set out of range\n", __FILE__, __LINE__, fc);
return; return;

@ -45,7 +45,6 @@ int main (int argc, char **argv) {
#if defined _WIN32 || defined _WIN64 || defined __CYGWIN__ #if defined _WIN32 || defined _WIN64 || defined __CYGWIN__
#else #else
GSettings *settings; GSettings *settings;
GError *error = NULL;
// from the google KI :) // from the google KI :)
// Das Schema (Schema) für die Mauseinstellungen erstellen // Das Schema (Schema) für die Mauseinstellungen erstellen

Loading…
Cancel
Save