Skip to content

Commit

Permalink
[pre-commit.ci] auto fixes from pre-commit.com hooks
Browse files Browse the repository at this point in the history
for more information, see https://pre-commit.ci
  • Loading branch information
pre-commit-ci[bot] committed Mar 12, 2024
1 parent a784cb7 commit 111e314
Showing 1 changed file with 52 additions and 52 deletions.
104 changes: 52 additions & 52 deletions socs/agents/tank_level_monitor/agent.py
Original file line number Diff line number Diff line change
@@ -1,106 +1,108 @@
import argparse
import time
import os
import struct
import serial
import time

import serial
import txaio
from ocs import ocs_agent, site_config
from ocs.ocs_twisted import Pacemaker, TimeoutLock
from pyModbusTCP.client import ModbusClient


class TankLevelMonitor:

"""Initialize serial communication with tank sensors & creates dicts to store data depending on tanks numbers."""

def __init__(self):

self.client = serial.Serial("/dev/ttyUSB1", 9600, timeout=0.5)

self.tank_data = {} #Define dictionary for Tank data, 7 fields
self.tank_data = {} # Define dictionary for Tank data, 7 fields
self.tank1_data = {}
self.tank2_data = {}
self.tank1_data_fields = ['Tank1_vol','Net1_vol','emp1_vol','prod1_h','water1_h','avg1_temp','water1_vol']
self.tank2_data_fields = ['Tank2_vol','Net2_vol','emp2_vol','prod2_h','water2_h','avg2_temp','water2_vol']
self.tank1_data_fields = ['Tank1_vol', 'Net1_vol', 'emp1_vol', 'prod1_h', 'water1_h', 'avg1_temp', 'water1_vol']
self.tank2_data_fields = ['Tank2_vol', 'Net2_vol', 'emp2_vol', 'prod2_h', 'water2_h', 'avg2_temp', 'water2_vol']

self.tank_data_ok = False
self.tank_length_to_read = 89
self.verbose = True

self.client.flushOutput()

def tank_data_checker(self, tank_num):
self.tank_data_ok = False

if len(self.full_data) == 89:
if self.full_data[18:19] != b'':
if self.full_data[18:19] != b'':
if self.verbose:
print("IN DATA CHECKER 1: ", self.full_data[0:2])
if self.full_data[0:2] == b'\x01i':
if self.verbose:
print("IN DATA CHECKER 2:", self.full_data[88:89])
if self.full_data [88:89] == b'\x03':
if self.full_data[88:89] == b'\x03':
if self.verbose:
print("IN DATA CHECKER 3:", self.full_data[18:19])
if int(self.full_data[18:19]) == int(tank_num):
if self.verbose:
print ("DATA IS OK")
print("DATA IS OK")
self.tank_data_ok = True
def tank_data_verbosity(self, tank_num, msg = ""):
if self.verbose == True:

def tank_data_verbosity(self, tank_num, msg=""):

if self.verbose:
print("Tank Number: ", tank_num)
print(msg, self.full_data)


"""Recieves tank number (default tank1) and returns non decoded data."""
def tank_data_reader(self, tank_num = 1):

def tank_data_reader(self, tank_num=1):

self.client.flushOutput()
self.client.flushInput()
self.client.write(b'01i201' + tank_num) #Inquiry <SOH>i201TT = 01 i201tank_num

self.client.write(b'01i201' + tank_num) # Inquiry <SOH>i201TT = 01 i201tank_num
self.full_data = {}
self.full_data = self.client.read(self.tank_length_to_read)

self.tank_data_checker(tank_num)

while True:
self.tank_data_verbosity (tank_num, "Entering while loop in tank_data_reader")
self.tank_data_verbosity(tank_num, "Entering while loop in tank_data_reader")
self.tank_data_checker(tank_num)
if self.tank_data_ok == True:
if self.tank_data_ok:
break
else:
self.client.flushOutput()
self.client.write(b'01i201' + tank_num)
self.full_data = {}
self.full_data = {}
self.full_data = self.client.read(self.tank_length_to_read)
self.tank_data_verbosity (tank_num, "After tank_data_ok got False, full data: ")
self.tank_data_verbosity(tank_num, "After tank_data_ok got False, full data: ")
self.client.flushOutput()
self.client.flushInput()
time.sleep (10)
time.sleep(10)

if self.verbose:
print (tank_num, self.full_data)
print(tank_num, self.full_data)

"""Recieves undecoded hex data and returns a dictionary with decoded & corrected data."""

def tank_decode_data(self, tank_num):

multfactor = [3.785,3.785,3.785,2.54/100,2.54/100,5/9,3.785] #correction factor
addfactor = [0,0,0,0,0,-32,0]
multfactor = [3.785, 3.785, 3.785, 2.54 / 100, 2.54 / 100, 5 / 9, 3.785] # correction factor
addfactor = [0, 0, 0, 0, 0, -32, 0]

data = {}
data = self.full_data[26:26+8*7]
for i in range (7):
data_field = data[i*8:(i+1)*8] #moving through all data
decoded_data = struct.unpack('!f',bytes.fromhex(data_field.decode('ascii')))[0] # decode hex to ieee float
data = self.full_data[26:26 + 8 * 7]

for i in range(7):
data_field = data[i * 8:(i + 1) * 8] # moving through all data
decoded_data = struct.unpack('!f', bytes.fromhex(data_field.decode('ascii')))[0] # decode hex to ieee float

if tank_num == b'01':
self.tank1_data [self.tank1_data_fields[i]] = (decoded_data + addfactor[i])*multfactor[i]
self.tank1_data[self.tank1_data_fields[i]] = (decoded_data + addfactor[i]) * multfactor[i]
elif tank_num == b'02':
self.tank2_data [self.tank2_data_fields[i]] = (decoded_data + addfactor[i])*multfactor[i]
self.tank2_data[self.tank2_data_fields[i]] = (decoded_data + addfactor[i]) * multfactor[i]

def read_cycle(self):

Expand All @@ -109,7 +111,7 @@ def read_cycle(self):

self.tank_data_reader(b'02')
self.tank_decode_data(b'02')

self.tank_data = self.tank1_data
self.tank_data.update(self.tank2_data)

Expand All @@ -119,15 +121,14 @@ def read_cycle(self):
try:
this_cycle_data = {}
for key in self.tank_data:
this_cycle_data[key] = {'value':self.tank_data[key]}
this_cycle_data[key] = {'value': self.tank_data[key]}
if self.verbose:
print(this_cycle_data)
return this_cycle_data
except:
except BaseException:
pass



class TankLevelMonitorAgent:
"""Monitor the External fuel Tank level via Serial COM.
Expand All @@ -150,13 +151,12 @@ class TankLevelMonitorAgent:
"""

def __init__(self, agent, unit=1, sample_interval=15.):

self.unit = unit
self.agent: ocs_agent.OCSAgent = agent
self.log = agent.log
self.lock = TimeoutLock()


self.pacemaker_freq = 1. / sample_interval

self.initialized = False
Expand Down Expand Up @@ -250,7 +250,7 @@ def acq(self, session, params=None):
'connected': True}})

regdata = self.TankLevelMonitor.read_cycle()

if regdata:
for reg in regdata:
data['data'][reg] = regdata[reg]["value"]
Expand Down Expand Up @@ -285,7 +285,7 @@ def _stop_acq(self, session, params=None):
Stops acq process.
"""
if self.TankLevelMonitor.verbose:
print ("DEBUG: stops acq process: ", self.take_data)
print("DEBUG: stops acq process: ", self.take_data)
if self.take_data:
self.take_data = False
return True, 'requested to stop taking data.'
Expand Down Expand Up @@ -324,12 +324,12 @@ def main(args=None):
init_params = {'auto_acquire': False}
elif args.mode == 'acq':
init_params = {'auto_acquire': True}
#print('init_params', init_params)
# print('init_params', init_params)
agent, runner = ocs_agent.init_site_agent(args)

p = TankLevelMonitorAgent(agent,
unit=int(args.unit),
sample_interval=args.sample_interval)
unit=int(args.unit),
sample_interval=args.sample_interval)

agent.register_task('init_TankLevelMonitor', p.init_TankLevelMonitor,
startup=init_params)
Expand Down

0 comments on commit 111e314

Please sign in to comment.