1"""! @example async.py """
2import sys
3import struct
4import asyncio
5from PySide6.QtWidgets import QApplication
6from SquidstatPyLibrary import AisDeviceTracker
7from SquidstatPyLibrary import AisCompRange
8from SquidstatPyLibrary import AisDCData
9from SquidstatPyLibrary import AisACData
10from SquidstatPyLibrary import AisExperimentNode
11from SquidstatPyLibrary import AisErrorCode
12from SquidstatPyLibrary import AisExperiment
13from SquidstatPyLibrary import AisInstrumentHandler
14from SquidstatPyLibrary import AisConstantPotElement
15from SquidstatPyLibrary import AisEISPotentiostaticElement
16from SquidstatPyLibrary import AisConstantCurrentElement
17
18
19app = QApplication([])
20
21
22async def delayed_quit():
23 await asyncio.sleep(5)
24 app.quit()
25
26
27def experiment_complete_handler(channel, reason):
28 print(f"Experiment Completed on channel {channel} , {reason}")
29 asyncio.run(delayed_quit())
30
31
32
33async def main():
34
36
37
38 tracker.newDeviceConnected.connect(lambda deviceName: print(f"Connected Device: {deviceName}"))
39
40 error = tracker.connectToDeviceOnComPort("COM4")
41 if error.value() != AisErrorCode.Success:
42 print(error.message())
43 app.quit()
44
45
46 await asyncio.sleep(5)
47
48
49 handler = tracker.getInstrumentHandler("Cycler1518")
50
51
52 handler.activeDCDataReady.connect(lambda channel, data: print("timestamp:", "{:.9f}".format(data.timestamp), "workingElectrodeVoltage: ", "{:.9f}".format(data.workingElectrodeVoltage)))
53
54
55 handler.activeACDataReady.connect(lambda channel, data: print("frequency:", "{:.9f}".format(data.frequency), "absoluteImpedance: ", "{:.9f}".format(data.absoluteImpedance), "phaseAngle: ", "{:.9f}".format(data.phaseAngle)))
56
57 handler.experimentNewElementStarting.connect(lambda channel, data: print("New Node beginning:", data.stepName, "step number: ", data.stepNumber, " step sub : ", data.substepNumber))
58
59 handler.experimentStopped.connect(experiment_complete_handler)
60
61
63
65
67
68 success = True
69
70
72
73
74 success &= subExperiment.appendElement(ccElement, 1)
75
76
77 success &= subExperiment.appendElement(cvElement, 2)
78
79
80
81 success &= experiment.appendElement(ccElement, 2)
82
83
84 success &= experiment.appendElement(cvElement, 1)
85
86
87
88 success &= experiment.appendSubExperiment(subExperiment, 2)
89
90 if not success:
91 print("Error building experiment")
92 app.quit()
93
94
95 error = handler.uploadExperimentToChannel(0, experiment)
96 if error.value() != AisErrorCode.Success:
97 print(error.message())
98 app.quit()
99
100
101 error = handler.startUploadedExperiment(0)
102 if error.value() != AisErrorCode.Success:
103 print(error.message())
104 app.quit()
105
106
107 await asyncio.sleep(5)
108
109
110startFunc = main()
111asyncio.run(startFunc)
112
113
114sys.exit(app.exec())
115
an experiment that simulates a constant current flow with more advance options for stopping the exper...
Definition AisConstantCurrentElement.h:18
an experiment that simulates a constant applied voltage.
Definition AisConstantPotElement.h:18
static AisDeviceTracker * Instance()
get the instance of the device tracker.
this class is used to create custom experiments. A custom experiment contains one or more elements....
Definition AisExperiment.h:22