craft-software/Legacy/Instrument_Drivers/drivers/Agilent_304_FS_AG.py
2025-07-04 15:52:40 +02:00

185 lines
6.2 KiB
Python

import serial
import time
import numpy as np
timedelta = 0.02
class AG_304_FS:
def __init__(self,adress):
#establish connection to device
try:
self.inst = serial.Serial(adress, 9600, timeout=1) # Replace with your COM port and baudrate
print(f'connected to {adress}')
except:
print(f'could not connect to {adress}')
return
time.sleep(1)
def __del__(self):
self.inst.close()
print('Disconnected')
def read_pressure(self):
'''read the pressure from the controller (Window 224, see manual)'''
hex_string = "028032323430033837" # pressure
# Convert the hex string to bytes
bytes_to_send = bytes.fromhex(hex_string)
# Send the bytes to the COM port
self.inst.write(bytes_to_send)
# Read response
data_b = self.inst.read(100) # read up to hundred bytes or timeout is reached
val_b = data_b[6:13]
try:
val = float(val_b)
except ValueError:
val = 0
return(val)
def read_temp(self):
'''read the pump temperature (Window 204)'''
hex_string = "028032303430033835" # temperature
# Convert the hex string to bytes
bytes_to_send = bytes.fromhex(hex_string)
# Send the bytes to the COM port
self.inst.write(bytes_to_send)
# Read response
data_b = self.inst.read(100) # read up to hundred bytes or timeout is reached
val_b = data_b[6:12] #get rid of additional bytes
try:
val = float(val_b)
except ValueError:
val = 0
return(val)
def read_status(self):
'''read pump status (window 205)'''
hex_string = "028032303530033834" # status
# Convert the hex string to bytes
bytes_to_send = bytes.fromhex(hex_string)
# Send the bytes to the COM port
self.inst.write(bytes_to_send)
# Read response
data_b = self.inst.read(100) # read up to hundred bytes or timeout is reached
val_b = data_b[6:12] #get rid of additional bytes
status = ['Stop', 'Waiting intlk', ' Starting', 'Autotuning', 'Braking', 'Normal', 'Fail']
try:
val = int(val_b)
except ValueError:
val = 6
return(status[val])
def read_freq(self):
'''read pump frequency [Hz] (window 203)'''
hex_string = "028032303330033832" # temperature
# Convert the hex string to bytes
bytes_to_send = bytes.fromhex(hex_string)
# Send the bytes to the COM port
self.inst.write(bytes_to_send)
# Read response
data_b = self.inst.read(100) # read up to hundred bytes or timeout is reached
val_b = data_b[6:12] #get rid of additional bytes
try:
val = int(val_b)
except ValueError:
val = 0
return(val)
def read_fan_status(self):
'''reads the status of the fan (window 144)'''
hex_string = "028031343430033832"
# Convert the hex string to bytes
bytes_to_send = bytes.fromhex(hex_string)
# Send the bytes to the COM port
self.inst.write(bytes_to_send)
# Read response
data_b = self.inst.read(100) # read up to hundred bytes or timeout is reached
val_b = data_b[5:7] #get rid of additional bytes (Response is different here compared to others)
val = int(val_b)
return(val)
def set_fan_status(self,on):
'''sets the status of the fan (window 144)'''
if on == True or on == 'On' or on == 'ON' or on == 'on' or on == 1:
hex_string = "02803134333132034236" # sets external fan activation to on
# hex_string = "02803134343130034233"
else:
hex_string = "02803134333131034235" # sets external fan activation to off
# Convert the hex string to bytes
bytes_to_send = bytes.fromhex(hex_string)
# Send the bytes to the COM port
self.inst.write(bytes_to_send)
# Read response
data_b = self.inst.read(100) # read up to hundred bytes or timeout is reached
print(data_b)
val_b = data_b[5:7] #get rid of additional bytes (Response is different here compared to others)
val = int(val_b)
return(val)
def start_pump(self):
'''start pump (Window 000)'''
hex_string = "02803030303131034233"
# Convert the hex string to bytes
bytes_to_send = bytes.fromhex(hex_string)
# Send the bytes to the COM port
self.inst.write(bytes_to_send)
# Read response
data_b = self.inst.read(100) # read up to hundred bytes or timeout is reached
# if data_b[2:3] == b'\x06':
# print('Starting Pump')
# else:
# print('Pump cannot be started.')
def stop_pump(self):
'''stop pump (Window ...)'''
hex_string = "02803030303130034232"
# Convert the hex string to bytes
bytes_to_send = bytes.fromhex(hex_string)
# Send the bytes to the COM port
self.inst.write(bytes_to_send)
# Read response
data_b = self.inst.read(100) # read up to hundred bytes or timeout is reached
# if data_b == data_b[2:3] == b'\x06':
# print('Stop Pump')
# else:
# print('Pump cannot be stopped.')
# test area
# adress = 'COM2'
# ag = AG_304_FS(adress)
# print(ag.read_pressure())
# ag.__del__()
##Open the COM port
# ser = serial.Serial('COM2', 9600, timeout=1) # Replace with your COM port and baudrate
# # Define the hex string
# hex_string = "028032303530033834" # pump status
# hex_string = "028032323430033837" # pressure
# # Convert the hex string to bytes
# bytes_to_send = bytes.fromhex(hex_string)
# # Send the bytes to the COM port
# ser.write(bytes_to_send)
# # Read response
# s = ser.read(100) # read up to ten bytes (timeout)
# print(s)
# # Close the COM port
# ser.close()