aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vorobiov <mvorobiov@wm.edu>2024-11-05 14:21:02 -0500
committerMichael Vorobiov <mvorobiov@wm.edu>2024-11-05 14:21:02 -0500
commit083e8546d5d479800ea2c99ccea5d9430843a81e (patch)
tree0c89a59e8d4586f8e87f0136eb096b1666a19258
parent3d320e680842fed9b45eb5d7353945755f8f50ee (diff)
downloadqolab-083e8546d5d479800ea2c99ccea5d9430843a81e.tar.gz
qolab-083e8546d5d479800ea2c99ccea5d9430843a81e.zip
MKS390 vacuum gauge driver. Currently gets pressure readings but IG ON/OFF and many other functions have not been implemented.
-rw-r--r--qolab/hardware/vacuum_gauge/mks390.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/qolab/hardware/vacuum_gauge/mks390.py b/qolab/hardware/vacuum_gauge/mks390.py
new file mode 100644
index 0000000..8556001
--- /dev/null
+++ b/qolab/hardware/vacuum_gauge/mks390.py
@@ -0,0 +1,110 @@
+"""
+Module: MKS Granville-Phillips 390 Micro-Ion Gauge Control
+Description: This module provides a class to interface with the
+ MKS Granville-Phillips 390 Micro-Ion Gauge
+ using pyvisa.
+
+Author: Mykhailo Vorobiov
+Email: mvorobiov@wm.edu
+Date Created: 2024-10-22
+Date Updated: 2024-11-05
+"""
+
+from qolab.hardware.basic import BasicInstrument
+from qolab.hardware.scpi import SCPIinstr
+import pyvisa
+import numpy as np
+import logging
+import time
+
+
+class MKS390(SCPIinstr):
+ """
+ A class for interfacing with the MKS Granville-Phillips 390 Micro-Ion Gauge
+ for vacuum measurements between 1e-11 and 1e+3 Torr.
+ """
+
+ def __init__(self, resource, gauge_id = '#02', *args, **kwds):
+ """
+ Initialize the vacuum gaguge class
+ """
+ super().__init__(resource, *args, **kwds)
+ self.resource = resource
+ self.resource.baud_rate = 19200
+ self.resource.timeout = 5000
+ self.resource.read_termination = '\r'
+ self.resource.write_termination = '\r'
+
+ self.write = self.resource.write
+ self.read = self.resource.read
+ self.read_raw = self.resource.read_raw
+
+ self.ignition_status = False
+ self.id = gauge_id
+
+ self._read_ignition_status()
+
+ def enable_ignition(self, ig_status=False):
+ self._read_ignition_status()
+ if not(self.ignition_status == ig_status):
+ try:
+ # Sending a command
+ command = self.id + 'IG 0'
+ self.write(command)
+ self.ignition_status = ig_status
+ print(f"[INFO] Vacuum gauge ignition status changed to: {self.ignition_status}")
+ except pyvisa.VisaIOError as e:
+ print(f'[ERROR!] Failed to change vacuum gauge ignition status.\n\t{e}')
+ else:
+ print(f'[WARNING] No change to vacuum gauge ignition status: {self.ignition_status}')
+
+ def get_ignition_status(self):
+ self._read_ignition_status()
+ return self.ignition_status
+
+ def _read_ignition_status(self):
+ try:
+ # Sending a command
+ command = self.id + 'IGS'
+ self.write(command)
+ time.sleep(0.01)
+ self.ignition_status = bool(self.read_raw(8).strip().split()[1])
+ return self.ignition_status
+ except pyvisa.VisaIOError as e:
+ print(f'[ERROR!] Failed to read vacuum gauge ignition status.\n\t{e}')
+
+ def get_pressure(self):
+ try:
+ # Sending a command
+ command = self.id + 'RD'
+ self.write(command)
+ # Waiting and reading the response
+ time.sleep(0.01)
+ response = float(self.read_raw(14).strip().split()[1])
+ return response
+ except pyvisa.VisaIOError as e:
+ print(f'[ERROR!] Failed to get vacuum gauge reading.\n\t{e}')
+ return 0.0
+
+'''
+ def close(self):
+ """
+ Close the connection to the vacuum gauge.
+ """
+ if self.gauge:
+ try:
+ self.gauge.close()
+ self.logger.info("Connection to the vacuum gaguge closed.")
+ except pyvisa.VisaIOError as e:
+ self.logger.error(f"Error closing connection to the vacuum gauge: {e}")
+'''
+# Example usage
+if __name__ == '__main__':
+ import pyvisa
+
+ rm = pyvisa.ResourceManager()
+
+ gauge = MKS390(rm, 'visa://192.168.194.15/ASRL13::INSTR', gauge_id='#02')
+ pressure = gauge.get_reading()
+ gauge.close()
+ print(pressure) \ No newline at end of file