From f7e9b79feaf5be18ee6bf2ccff73b62de355c467 Mon Sep 17 00:00:00 2001 From: Thiago Alves Date: Fri, 6 Mar 2020 09:52:08 -0500 Subject: [PATCH] Fix monitoring issues - Improved located variables parsing to avoid parsing commented lines in code - Fixed server 502 error when modbus service is not running or running on a port different than 502 --- webserver/monitoring.py | 6 +-- webserver/webserver.py | 91 ++++++++++++++++++++++++++++++----------- 2 files changed, 70 insertions(+), 27 deletions(-) diff --git a/webserver/monitoring.py b/webserver/monitoring.py index b6ad9ac..18b6184 100644 --- a/webserver/monitoring.py +++ b/webserver/monitoring.py @@ -20,7 +20,7 @@ def parse_st(st_file): st_program = open(filepath, 'r') for line in st_program.readlines(): - if line.find(' AT ') > 0: + if line.find(' AT ') > 0 and line.find('%') > 0 and line.find('(*') < 0 and line.find('*)') < 0: debug_data = debug_var() tmp = line.strip().split(' ') debug_data.name = tmp[0] @@ -123,13 +123,13 @@ def modbus_monitor(): if (monitor_active == True): threading.Timer(0.5, modbus_monitor).start() -def start_monitor(): +def start_monitor(modbus_port_cfg): global monitor_active global mb_client if (monitor_active != True): monitor_active = True - mb_client = ModbusTcpClient('127.0.0.1') + mb_client = ModbusTcpClient('127.0.0.1', port=modbus_port_cfg) modbus_monitor() diff --git a/webserver/webserver.py b/webserver/webserver.py index cf51f26..f51cd98 100644 --- a/webserver/webserver.py +++ b/webserver/webserver.py @@ -1413,31 +1413,74 @@ def monitoring(): """ if (openplc_runtime.status() == "Running"): - monitor.start_monitor() - data_index = 0 - for debug_data in monitor.debug_vars: - return_str += '' - return_str += '' + debug_data.name + '' + debug_data.type + '' + debug_data.location + '' + debug_data.forced + '' - if (debug_data.type == 'BOOL'): - if (debug_data.value == 0): - return_str += 'bool_falseFALSE' + #Check Modbus Server status + modbus_enabled = False + modbus_port_cfg = 502 + database = "openplc.db" + conn = create_connection(database) + if (conn != None): + try: + print("Openning database") + cur = conn.cursor() + cur.execute("SELECT * FROM Settings") + rows = cur.fetchall() + cur.close() + conn.close() + + for row in rows: + if (row[0] == "Modbus_port"): + if (row[1] != "disabled"): + modbus_enabled = True + modbus_port_cfg = int(row[1]) + else: + modbus_enabled = False + + except Error as e: + return "error connecting to the database" + str(e) + else: + return "Error opening DB" + + if modbus_enabled == True: + monitor.start_monitor(modbus_port_cfg) + data_index = 0 + for debug_data in monitor.debug_vars: + return_str += '' + return_str += '' + debug_data.name + '' + debug_data.type + '' + debug_data.location + '' + debug_data.forced + '' + if (debug_data.type == 'BOOL'): + if (debug_data.value == 0): + return_str += 'bool_falseFALSE' + else: + return_str += 'bool_trueTRUE' + elif (debug_data.type == 'UINT'): + percentage = (debug_data.value*100)/65535 + return_str += '

' + str(debug_data.value) + '

' + elif (debug_data.type == 'INT'): + percentage = ((debug_data.value + 32768)*100)/65535 + debug_data.value = ctypes.c_short(debug_data.value).value + return_str += '

' + str(debug_data.value) + '

' + elif (debug_data.type == 'REAL') or (debug_data.type == 'LREAL'): + return_str += "{:10.4f}".format(debug_data.value) else: - return_str += 'bool_trueTRUE' - elif (debug_data.type == 'UINT'): - percentage = (debug_data.value*100)/65535 - return_str += '

' + str(debug_data.value) + '

' - elif (debug_data.type == 'INT'): - percentage = ((debug_data.value + 32768)*100)/65535 - debug_data.value = ctypes.c_short(debug_data.value).value - return_str += '

' + str(debug_data.value) + '

' - elif (debug_data.type == 'REAL') or (debug_data.type == 'LREAL'): - return_str += "{:10.4f}".format(debug_data.value) - else: - return_str += str(debug_data.value) - return_str += '' - data_index += 1 - return_str += pages.monitoring_tail - + return_str += str(debug_data.value) + return_str += '' + data_index += 1 + return_str += pages.monitoring_tail + + #Modbus Server is not enabled + else: + return_str += """ + +
+
+

You must enable Modbus Server on Settings to be able to monitor your program!

+ + + + + +""" + + #Runtime is not running else: return_str += """