Loading...
Searching...
No Matches
manualExperiment.py
1"""! @example manualExperiment.py """
2import sys
3from PySide6.QtWidgets import QApplication
4from PySide6.QtCore import QTimer
5from SquidstatPyLibrary import AisDeviceTracker
6from SquidstatPyLibrary import AisInstrumentHandler
7from SquidstatPyLibrary import AisErrorCode
8
9
10# Define relavant device information, for easy access
11COMPORT = "COM1"
12CHANNEL = 0
13
14app = QApplication()
15
17
18def handleStopExperiment(handler, reason):
19 print(reason)
20 print("Experiment has ended. Closing application.")
21 app.quit()
22
23
24def connectSignal(handler):
25 handler.activeDCDataReady.connect(lambda channel, data: print(f"Timestamp: {data.timestamp} Current: {data.current} Voltage: {data.workingElectrodeVoltage} CE Voltage : {data.counterElectrodeVoltage}"))
26 handler.deviceError.connect(lambda channel, error: print(f"Device Error: {error}"))
27 handler.experimentStopped.connect(handleStopExperiment)
28
29def startExperiment(deviceName):
30 handler = tracker.getInstrumentHandler(deviceName)
31
32 connectSignal(handler)
33
34
35
36 # The default starting mode is always Open Circut Potential.
37
38 print("Starting manual mode at open circuit potential")
39 error = handler.startManualExperiment(CHANNEL)
40 if error.value() != AisErrorCode.Success:
41 print(error.message())
42 app.quit()
43
44
45
46
47 # In this section we create wrapper functions for the manual mode changing functions.
48 # These wrappers are called asynchronously when singleshot QTimers expire.
49
50 # This function changes the instrument to Constant Current at .1A
51 def setConstantCurrent(channel):
52 print("Switching to constant current at .1A")
53 error = handler.setManualModeConstantCurrent(channel, .1)
54 if error.value() != AisErrorCode.Success:
55 print(error.message())
56 # It is called 5 seconds after the experiment starts
57 QTimer.singleShot(5000, lambda:setConstantCurrent(CHANNEL))
58
59 # This function changes the instrument to Constant Voltage at 1V
60 def setConstantVoltage(channel):
61 print("Switching to constant voltage at 1V")
62 error = handler.setManualModeConstantVoltage(channel, 1)
63 if error.value() != AisErrorCode.Success:
64 print(error.message())
65 # It is called 15 seconds after the experiment starts
66 QTimer.singleShot(15000, lambda:setConstantVoltage(CHANNEL))
67
68 # This function changes the instrument to Open Circuit Potential
69 def setOpenCircuit(channel):
70 print("Switching to open circuit potential")
71 error = handler.setManualModeOCP(channel)
72 if error.value() != AisErrorCode.Success:
73 print(error.message())
74 # It is called 25 seconds after the experiment starts
75 QTimer.singleShot(25000, lambda:setOpenCircuit(CHANNEL))
76
77
78
79
80
81 # Stop experiment after 30 seconds
82 def stopExperiment(channel):
83 print("Stopping experiment.")
84 error = handler.stopExperiment(channel)
85 if error.value() != AisErrorCode.Success:
86 print(error.message())
87 QTimer.singleShot(30000, lambda:stopExperiment(CHANNEL))
88
89
90
91tracker.newDeviceConnected.connect(startExperiment)
92tracker.deviceDisconnected.connect(lambda deviceName: print(f"Device Disconnected: {deviceName}"))
93
94error = tracker.connectToDeviceOnComPort(COMPORT)
95if error.value() != AisErrorCode.Success:
96 print(error.message())
97 sys.exit()
98# Calling sys.exit(app.exec()) will keep the program running until the application is exited
99sys.exit(app.exec())
static AisDeviceTracker * Instance()
get the instance of the device tracker.