From 0f80f7d4e66c8a516a0d76a06bbd09f6ce0f54fe Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Tue, 25 Jul 2023 21:51:57 -0400 Subject: [PATCH] transducer work --- benchtopdevices/sheets/parsers/__init__.py | 2 +- benchtopdevices/sheets/parsers/transducer.py | 48 ++++++++++++++++++-- notes.txt | 2 +- requirements.txt | 2 +- transducer_verify.txt | 1 + 5 files changed, 47 insertions(+), 8 deletions(-) diff --git a/benchtopdevices/sheets/parsers/__init__.py b/benchtopdevices/sheets/parsers/__init__.py index f6b2660..6690db8 100644 --- a/benchtopdevices/sheets/parsers/__init__.py +++ b/benchtopdevices/sheets/parsers/__init__.py @@ -1,2 +1,2 @@ from .hardware import parse_hardware_calibration -from .transducer import parse_transducer \ No newline at end of file +from .transducer import parse_transducer diff --git a/benchtopdevices/sheets/parsers/transducer.py b/benchtopdevices/sheets/parsers/transducer.py index 1464b9d..8eb5d66 100644 --- a/benchtopdevices/sheets/parsers/transducer.py +++ b/benchtopdevices/sheets/parsers/transducer.py @@ -3,8 +3,16 @@ from decimal import * import re -def parse_transducer(content): - getcontext().prec = 3 +def in_range(index, value, master_values): + return ( + master_values[index]["Low Limit"] <= value <= master_values[index]["High Limit"] + ) + + +def parse_transducer(content, accuracy): + getcontext().prec = 6 + + accuracy = Decimal(f"{accuracy/100.0}") # Comes in as Percent transducer_data = [] # Split the content into sections based on the blank line @@ -37,11 +45,12 @@ def parse_transducer(content): # Create a dictionary to store the data for each transducer transducer_info = { + "Accuracy": accuracy, "Part Number": part_number, "Value": value, "Transducer Name": transducer_name, "Transducer Type": transducer_type, - "Setpoint Pressure": [], + # "Setpoint Pressure": [], "Instrument Pressure": [], "Master Value": [], "Instrument Flow": [], @@ -63,15 +72,44 @@ def parse_transducer(content): v = Decimal(value.split(" ")[0]) key = re.match(r"(.*)\W(\d)", key)[1] if key in transducer_info: - transducer_info[key].append(Decimal(value.split()[0])) + value = Decimal(value.split()[0]) + # special case Master to get the limits + if "Master" in key: + hi = Decimal(Decimal(1.0) + accuracy) + lo = Decimal(Decimal(1.0) - accuracy) + transducer_info[key].append( + { + "Low Limit": lo, + "Value": value, + "High Limit": value * hi, + } + ) + else: + transducer_info[key].append(value) + + transducer_info[f"Instrument {transducer_type}"] = [ + { + "Value": v, + "In Range": in_range(idx, v, transducer_info["Master Value"]), + } + for idx, v in enumerate(transducer_info[f"Instrument {transducer_type}"]) + ] + + if transducer_type == "Flow": + del transducer_info["Instrument Pressure"] + elif transducer_type == "Pressure": + del transducer_info["Instrument Flow"] transducer_data.append(transducer_info) return transducer_data if __name__ == "__main__": + from pprint import pprint + file_path = "./transducer_verify.txt" with open(file_path, "r") as file: content = file.read() - parsed_data = parse_transducer(file_path) + parsed_data = parse_transducer(content, 0.5) + pprint(parsed_data) diff --git a/notes.txt b/notes.txt index 865ae6f..8db07a9 100644 --- a/notes.txt +++ b/notes.txt @@ -29,7 +29,7 @@ Auto Data Calculations: etc - High Limit/ Low Limit eg: (SPAN*1.0005 + column) (SPAN*0.9995 - column) -- Delta = abs(gauge reading) - abs(asleft|asfound) +- Delta = abs(gauge reading) - abs(asleft|asfound) - PSIA - PRESSURE - SCCM - FLOW - TRANSDUCER1 Will ALWAYS be pressure diff --git a/requirements.txt b/requirements.txt index d6d7fa6..be7c6df 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ django -psycopg2 +psycopg2-binary django-debug-toolbar \ No newline at end of file diff --git a/transducer_verify.txt b/transducer_verify.txt index 596e282..91ab060 100644 --- a/transducer_verify.txt +++ b/transducer_verify.txt @@ -83,3 +83,4 @@ Master Value 10 225.000 sccm Master Value 11 250.000 sccm Verify Date 07/15/21 Verify Time 14:55:10 +