diff --git a/client.cc b/client.cc index 078d176..333bccc 100644 --- a/client.cc +++ b/client.cc @@ -100,6 +100,7 @@ gboolean mbcli_thread_cb_net(gpointer data) { GtkWidget *textview = GTK_WIDGET (gtk_builder_get_object (_builder_, "cli_RawResult")); GtkTextBuffer *textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); GtkTextIter start, end; + char *tmpdata = (char *) res->data; std::string text; float f1, f2; @@ -110,14 +111,40 @@ gboolean mbcli_thread_cb_net(gpointer data) { gtk_text_buffer_get_end_iter(textbuffer, &end); gtk_text_buffer_delete(textbuffer, &start, &end); - if (res->fc == 1 | res->fc == 2) { - text = "binary data"; + if (res->fc == 1 || res->fc == 2) { + // + // binary data + // gtk_text_buffer_get_end_iter(textbuffer, &end); - gtk_text_buffer_insert_with_tags_by_name(textbuffer, &end, text.c_str(), -1, "Addr", NULL); + gtk_text_buffer_insert_with_tags_by_name(textbuffer, &end, " Addr [HEX] Registers\n", -1, "Head", NULL); + + for (int i = 0; i < res->cnt; i++) { + if ((i % 32) == 0) { + if (i > 0) { + text += "\n"; + gtk_text_buffer_get_end_iter(textbuffer, &end); + gtk_text_buffer_insert_with_tags_by_name(textbuffer, &end, text.c_str(), -1, "Data", NULL); + } + text = "| "; + snprintf (tmp, 255, "%5d [%s] ", res->reg + i, to_hex16(res->reg+i).c_str()); + gtk_text_buffer_get_end_iter(textbuffer, &end); + gtk_text_buffer_insert_with_tags_by_name(textbuffer, &end, tmp, -1, "Addr", NULL); + } + else if ((i % 16) == 0) text += " : "; + else if ((i % 8) == 0) text += " "; + + if (tmpdata[i/8] & (1<cnt; i++) { // add addr to textbuffer @@ -134,7 +161,7 @@ gboolean mbcli_thread_cb_net(gpointer data) { memcpy (((char*)&f2) + 2, &res->data[i], 2); memcpy (((char*)&f2) + 0, &res->data[i+1], 2); - snprintf (tmp, 255, " | %6d | %9.3g | %9.5g", res->data[i], f1, f2); + snprintf (tmp, 255, " | %6d | %9.3g | %9.3g", res->data[i], f1, f2); text = text + tmp; } else { @@ -176,7 +203,6 @@ gboolean mbcli_thread_cb_error(gpointer data) { }; - void displayerror (std::string error) { GtkWidget *dialog; GtkWidget *window = GTK_WIDGET (gtk_builder_get_object (_builder_, "testmodbus-client")); @@ -228,6 +254,7 @@ void mbcli_cb_connect (GtkWidget *widget, gpointer data) { netthread.Connect(gtk_entry_get_text(GTK_ENTRY(txthost)), gtk_entry_get_text(GTK_ENTRY(txtport))); }; + void mbcli_cb_disconnect (GtkWidget *widget, gpointer data) { netthread.Disconnect(); }; @@ -260,6 +287,7 @@ int mbcli_get_refreshtime() { return atoi(gtk_entry_get_text(GTK_ENTRY(rd_refresh))); } + /* * returns the register */ @@ -286,8 +314,9 @@ int mbcli_get_unitid() { return atoi(gtk_entry_get_text(GTK_ENTRY(rd_refresh))); } + /* - * returns status of the update button + * returns status of the update checkbox */ int mbcli_get_update () { GtkWidget *tb_update = GTK_WIDGET (gtk_builder_get_object (_builder_, "cli_Update")); @@ -297,7 +326,17 @@ int mbcli_get_update () { /* - * sets the active button + * returns status of the reconnect checkbox + */ +int mbcli_get_autoconnect () { + GtkWidget *tb_update = GTK_WIDGET (gtk_builder_get_object (_builder_, "cli_Reconnect")); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tb_update))) return 1; + return 0; +} + + +/* + * sets the update checkbox */ void mbcli_set_update (int active) { GtkWidget *tb_update = GTK_WIDGET (gtk_builder_get_object (_builder_, "cli_Update")); @@ -362,6 +401,7 @@ gboolean mbcli_refreshtimeout(gpointer data) { } else { gtk_label_set_label(GTK_LABEL(rate), "- / -"); + if (mbcli_get_autoconnect()) mbcli_cb_connect(NULL, NULL); // reconnect if needed } diff --git a/nwthread.cc b/nwthread.cc index c567668..08927d2 100644 --- a/nwthread.cc +++ b/nwthread.cc @@ -160,7 +160,10 @@ void NetworkThread::GuiSendResult(char *buffer, int len, modbustcp_rq_header *mb res->reg = mbh_rq->offset; if (res->fc == 1 || res->fc == 2) { - + for (cnt = 0, i = 9; i < len && cnt < 0x100 && cnt < mbh_rq->number; cnt++) { + memcpy (&res->data[cnt], buffer+i, 2); + i += 2; + } } else { for (cnt = 0, i = 9; i < len && cnt < 0x100 && cnt < mbh_rq->number; cnt++) { diff --git a/testmodbus-client.ui b/testmodbus-client.ui index cc84261..b456f24 100644 --- a/testmodbus-client.ui +++ b/testmodbus-client.ui @@ -170,12 +170,11 @@ 4 vertical - + Auto Reconnect True True False - True True @@ -185,19 +184,7 @@ - - Read Only - True - True - False - True - True - - - False - True - 1 - + @@ -536,20 +523,6 @@ Errors / Requests: 0 - - - Dont Use FC15/16 -(will only request one value) - True - True - False - True - - - 6 - 0 - - True @@ -596,6 +569,9 @@ Errors / Requests: + + + False