From 70559f9e84e012046d4834d120aac25c0d194342 Mon Sep 17 00:00:00 2001 From: Patrick McDonagh Date: Tue, 3 Jul 2018 13:33:15 -0500 Subject: [PATCH] syntax fixes for channel, read pond calibration data --- POCloud/python-driver/Channel.py | 78 ++++++++++++------------ POCloud/python-driver/Channel.pyc | Bin 8572 -> 0 bytes POCloud/python-driver/driverConfig.json | 3 +- POCloud/python-driver/multisensor.py | 11 ++-- POCloud/python-driver/test.py | 26 -------- 5 files changed, 47 insertions(+), 71 deletions(-) delete mode 100644 POCloud/python-driver/Channel.pyc delete mode 100644 POCloud/python-driver/test.py diff --git a/POCloud/python-driver/Channel.py b/POCloud/python-driver/Channel.py index 4e131bc..633b044 100644 --- a/POCloud/python-driver/Channel.py +++ b/POCloud/python-driver/Channel.py @@ -1,7 +1,7 @@ """Define Meshify channel class.""" +import time from pycomm.ab_comm.clx import Driver as ClxDriver from pycomm.cip.cip_base import CommError, DataError -import time TAG_DATAERROR_SLEEPTIME = 5 @@ -16,71 +16,70 @@ def binarray(intval): def read_tag(addr, tag, plc_type="CLX"): """Read a tag from the PLC.""" direct = plc_type == "Micro800" - c = ClxDriver() + clx = ClxDriver() try: - if c.open(addr, direct_connection=direct): + if clx.open(addr, direct_connection=direct): try: - v = c.read_tag(tag) - return v - except DataError as e: - c.close() + val = clx.read_tag(tag) + return val + except DataError as err: + clx.close() time.sleep(TAG_DATAERROR_SLEEPTIME) - print("Data Error during readTag({}, {}): {}".format(addr, tag, e)) + print("Data Error during readTag({}, {}): {}".format(addr, tag, err)) except CommError: # err = c.get_status() - c.close() + clx.close() print("Could not connect during readTag({}, {})".format(addr, tag)) # print err - except AttributeError as e: - c.close() - print("AttributeError during readTag({}, {}): \n{}".format(addr, tag, e)) - c.close() + except AttributeError as err: + clx.close() + print("AttributeError during readTag({}, {}): \n{}".format(addr, tag, err)) + clx.close() return False def read_array(addr, tag, start, end, plc_type="CLX"): """Read an array from the PLC.""" direct = plc_type == "Micro800" - c = ClxDriver() - if c.open(addr, direct_connection=direct): + clx = ClxDriver() + if clx.open(addr, direct_connection=direct): arr_vals = [] try: for i in range(start, end): tag_w_index = tag + "[{}]".format(i) - v = c.read_tag(tag_w_index) + val = clx.read_tag(tag_w_index) # print('{} - {}'.format(tag_w_index, v)) - arr_vals.append(round(v[0], 4)) + arr_vals.append(round(val[0], 4)) # print(v) - if len(arr_vals) > 0: + if arr_vals: return arr_vals else: print("No length for {}".format(addr)) return False except Exception: print("Error during readArray({}, {}, {}, {})".format(addr, tag, start, end)) - err = c.get_status() - c.close() - print err - pass - c.close() + err = clx.get_status() + clx.close() + print(err) + clx.close() def write_tag(addr, tag, val, plc_type="CLX"): """Write a tag value to the PLC.""" direct = plc_type == "Micro800" - c = ClxDriver() - if c.open(addr, direct_connection=direct): + clx = ClxDriver() + if clx.open(addr, direct_connection=direct): try: - cv = c.read_tag(tag) - print(cv) - wt = c.write_tag(tag, val, cv[1]) - return wt + initial_val = clx.read_tag(tag) + print(initial_val) + write_status = clx.write_tag(tag, val, initial_val[1]) + return write_status except Exception: print("Error during writeTag({}, {}, {})".format(addr, tag, val)) - err = c.get_status() - c.close() + err = clx.get_status() + clx.close() print err - c.close() + clx.close() class Channel(object): @@ -113,7 +112,7 @@ class Channel(object): elif self.value is None: send_needed = True send_reason = "no value" - elif not (self.value == new_value): + elif self.value != new_value: if self.map_: if not self.value == self.map_[new_value]: send_needed = True @@ -170,7 +169,7 @@ def identity(sent): class ModbusChannel(Channel): """Modbus channel object.""" - def __init__(self, mesh_name, register_number, data_type, chg_threshold, guarantee_sec, channel_size=1, map_=False, write_enabled=False, transformFn=identity): + def __init__(self, mesh_name, register_number, data_type, chg_threshold, guarantee_sec, channel_size=1, map_=False, write_enabled=False, transform_fn=identity): """Initialize the channel.""" super(ModbusChannel, self).__init__(mesh_name, data_type, chg_threshold, guarantee_sec, map_, write_enabled) self.mesh_name = mesh_name @@ -184,11 +183,11 @@ class ModbusChannel(Channel): self.guarantee_sec = guarantee_sec self.map_ = map_ self.write_enabled = write_enabled - self.transformFn = transformFn + self.transform_fn = transform_fn def read(self, mbsvalue): """Return the transformed read value.""" - return self.transformFn(mbsvalue) + return self.transform_fn(mbsvalue) class PLCChannel(Channel): @@ -226,6 +225,7 @@ class BoolArrayChannels(Channel): def __init__(self, ip, mesh_name, plc_tag, data_type, chg_threshold, guarantee_sec, map_=False, write_enabled=False): """Initialize the channel.""" + super(BoolArrayChannels, self).__init__(mesh_name, data_type, chg_threshold, guarantee_sec, map_, write_enabled) self.plc_ip = ip self.mesh_name = mesh_name self.plc_tag = plc_tag @@ -255,9 +255,9 @@ class BoolArrayChannels(Channel): send_needed = False send_reason = "" if self.plc_tag: - v = read_tag(self.plc_ip, self.plc_tag) - if v: - bool_arr = binarray(v[0]) + val = read_tag(self.plc_ip, self.plc_tag) + if val: + bool_arr = binarray(val[0]) new_val = {} for idx in self.map_: try: diff --git a/POCloud/python-driver/Channel.pyc b/POCloud/python-driver/Channel.pyc deleted file mode 100644 index c41f58d8a09a0d1c331caa7a5f637397431d6e1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8572 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 diff --git a/POCloud/python-driver/driverConfig.json b/POCloud/python-driver/driverConfig.json index b509425..1890a1e 100644 --- a/POCloud/python-driver/driverConfig.json +++ b/POCloud/python-driver/driverConfig.json @@ -4,7 +4,8 @@ "driverId": "0000", "additionalDriverFiles": [ "utilities.py", - "Channel.py" + "channel.py", + "logger.py" ], "version": 1, "s3BucketName": "multisensor" diff --git a/POCloud/python-driver/multisensor.py b/POCloud/python-driver/multisensor.py index 16046ab..858f4db 100644 --- a/POCloud/python-driver/multisensor.py +++ b/POCloud/python-driver/multisensor.py @@ -6,7 +6,7 @@ import time from random import randint from device_base import deviceBase -from Channel import PLCChannel, read_tag, write_tag +from channel import PLCChannel, read_tag, write_tag from utilities import get_public_ip_address from logger import filelogger @@ -127,9 +127,9 @@ class start(threading.Thread, deviceBase): last_read_height = -1.0 cal_values = [] cal_index = 1 - while last_read_height != 0 and cal_index <=10: - cal_tag_height = "pond{}CalibrationHeight[{}]".format(input_number, cal_index) - cal_tag_volume = "pond{}CalibrationVolume[{}]".format(input_number, cal_index) + while last_read_height != 0 and cal_index <= 10: + cal_tag_height = "input{}.calibrationLevel[{}]".format(input_number, cal_index) + cal_tag_volume = "input{}.calibrationVolume[{}]".format(input_number, cal_index) read_height = read_tag(PLC_IP_ADDRESS, cal_tag_height, plc_type="Micro800") time.sleep(2) read_volume = read_tag(PLC_IP_ADDRESS, cal_tag_volume, plc_type="Micro800") @@ -143,7 +143,7 @@ class start(threading.Thread, deviceBase): if cal_values != CALIBRATION_TABLES[input_number] or self.force_send: calibration_channel = "pond{}calibration".format(input_number) calibration_string = json.dumps(cal_values).replace('"', "'") - self.sendtodbDev(1, calibration_channel, calibration_string, 0, 'plcpond') + self.sendtodbDev(1, calibration_channel, calibration_string, 0, 'multisensor') CALIBRATION_TABLES[input_number] = cal_values def _check_watchdog(self): @@ -179,6 +179,7 @@ class start(threading.Thread, deviceBase): def multisensor_sync(self, name, value): """Sync all data from the driver.""" self.force_send = True + print("got sync({}, {})".format(name, value)) self.sendtodb("log", "synced", 0) return True diff --git a/POCloud/python-driver/test.py b/POCloud/python-driver/test.py deleted file mode 100644 index 935f17a..0000000 --- a/POCloud/python-driver/test.py +++ /dev/null @@ -1,26 +0,0 @@ -import json -import time -from Channel import read_tag, write_tag - -PLC_IP_ADDRESS = "192.168.1.12" - -def read_pond_calibration(pond_number): - """Read all calibration values for a specific pond.""" - last_read_height = -1.0 - cal_values = [] - cal_index = 1 - while last_read_height != 0 and cal_index <=10: - cal_tag_height = "pond{}CalibrationHeight[{}]".format(pond_number, cal_index) - cal_tag_volume = "pond{}CalibrationVolume[{}]".format(pond_number, cal_index) - print(cal_tag_height, cal_tag_volume) - read_height = read_tag(PLC_IP_ADDRESS, cal_tag_height, plc_type="Micro800") - time.sleep(2) - read_volume = read_tag(PLC_IP_ADDRESS, cal_tag_volume, plc_type="Micro800") - time.sleep(2) - print(read_height, read_volume) - if read_height and read_volume: - if read_height[0] > 0.0: - cal_values.append({"height": read_height[0], "volume": read_volume[0]}) - last_read_height = read_height[0] - cal_index += 1 - return cal_values