|
4 | 4 | "cell_type": "markdown", |
5 | 5 | "metadata": {}, |
6 | 6 | "source": [ |
7 | | - "# FRA measurements with 3rd party devices\n", |
| 7 | + "# FRA-X measurements with 3rd party devices\n", |
8 | 8 | "\n", |
9 | 9 | "If sources or sinks have analog interfaces for control, it is possible to use them for impedance measurement with Thales and the [FRA probe](https://www.zahner.de/products-details/probes/fra-probe).\n", |
10 | 10 | "\n", |
|
13 | 13 | }, |
14 | 14 | { |
15 | 15 | "cell_type": "code", |
16 | | - "execution_count": 6, |
| 16 | + "execution_count": 84, |
17 | 17 | "metadata": {}, |
18 | 18 | "outputs": [], |
19 | 19 | "source": [ |
20 | | - "import sys\n", |
21 | 20 | "from thales_remote.connection import ThalesRemoteConnection\n", |
22 | | - "from thales_remote.script_wrapper import PotentiostatMode,ThalesRemoteScriptWrapper\n", |
| 21 | + "from thales_remote.script_wrapper import PotentiostatMode, ThalesRemoteScriptWrapper\n", |
23 | 22 | "import time" |
24 | 23 | ] |
25 | 24 | }, |
|
32 | 31 | }, |
33 | 32 | { |
34 | 33 | "cell_type": "code", |
35 | | - "execution_count": null, |
| 34 | + "execution_count": 85, |
36 | 35 | "metadata": {}, |
37 | | - "outputs": [], |
| 36 | + "outputs": [ |
| 37 | + { |
| 38 | + "name": "stdout", |
| 39 | + "output_type": "stream", |
| 40 | + "text": [ |
| 41 | + "devel version\n" |
| 42 | + ] |
| 43 | + }, |
| 44 | + { |
| 45 | + "data": { |
| 46 | + "text/plain": [ |
| 47 | + "'128,ScriptRemote,5,6,0,0'" |
| 48 | + ] |
| 49 | + }, |
| 50 | + "execution_count": 85, |
| 51 | + "metadata": {}, |
| 52 | + "output_type": "execute_result" |
| 53 | + } |
| 54 | + ], |
38 | 55 | "source": [ |
| 56 | + "zenniumConnection = ThalesRemoteConnection()\n", |
| 57 | + "zenniumConnection.connectToTerm(\"192.168.2.47\", \"ScriptRemote\")\n", |
39 | 58 | "\n", |
40 | | - "if __name__ == \"__main__\":\n", |
41 | | - " zenniumConnection = ThalesRemoteConnection()\n", |
42 | | - " zenniumConnection.connectToTerm(\"localhost\", \"ScriptRemote\")\n", |
43 | | - " \n", |
44 | | - " zahnerZennium = ThalesRemoteScriptWrapper(zenniumConnection)\n", |
45 | | - " zahnerZennium.forceThalesIntoRemoteScript()" |
| 59 | + "zahnerZennium = ThalesRemoteScriptWrapper(zenniumConnection)\n", |
| 60 | + "zahnerZennium.forceThalesIntoRemoteScript()" |
46 | 61 | ] |
47 | 62 | }, |
48 | 63 | { |
|
64 | 79 | "\n", |
65 | 80 | "This results in the settings of the gains in the following lines of code. It may be, as in this example, that some gains must have a negative sign. This must be tested with the respective device.\n", |
66 | 81 | "\n", |
67 | | - "The FRA probe has a maximum +-10 V target signal and one input each for +-10 V current and voltage signal.\n", |
68 | | - "\n", |
69 | 82 | "The source must be controlled separately so that the analog interface is used, the source is switched on and off or for potentiostatic and galvanostatic. The Thales software only provides the analog signals, everything else must be done via the device interface.\n", |
70 | 83 | "\n" |
71 | 84 | ] |
72 | 85 | }, |
73 | 86 | { |
74 | 87 | "cell_type": "code", |
75 | | - "execution_count": null, |
| 88 | + "execution_count": 86, |
76 | 89 | "metadata": {}, |
77 | | - "outputs": [], |
| 90 | + "outputs": [ |
| 91 | + { |
| 92 | + "data": { |
| 93 | + "text/plain": [ |
| 94 | + "'OK\\r'" |
| 95 | + ] |
| 96 | + }, |
| 97 | + "execution_count": 86, |
| 98 | + "metadata": {}, |
| 99 | + "output_type": "execute_result" |
| 100 | + } |
| 101 | + ], |
78 | 102 | "source": [ |
79 | | - " zahnerZennium.disableFraMode()\n", |
80 | | - " \n", |
81 | | - " zahnerZennium.setFraVoltageMinimum(0)\n", |
82 | | - " zahnerZennium.setFraVoltageMaximum(18)\n", |
83 | | - " zahnerZennium.setFraCurrentMinimum(0)\n", |
84 | | - " zahnerZennium.setFraCurrentMaximum(220)\n", |
85 | | - " \n", |
86 | | - " zahnerZennium.setFraVoltageInputGain(18.0/5.0)\n", |
87 | | - " zahnerZennium.setFraVoltageOutputGain(18.0/5.0)\n", |
88 | | - " zahnerZennium.setFraCurrentInputGain(-220.0/5.0)\n", |
89 | | - " zahnerZennium.setFraCurrentOutputGain(-220.0/5.0)\n", |
90 | | - " \n", |
91 | | - " zahnerZennium.setFraPotentiostatMode(PotentiostatMode.POTMODE_GALVANOSTATIC)" |
| 103 | + "zahnerZennium.enableFraMode()" |
92 | 104 | ] |
93 | 105 | }, |
94 | 106 | { |
95 | | - "cell_type": "markdown", |
| 107 | + "cell_type": "code", |
| 108 | + "execution_count": 87, |
96 | 109 | "metadata": {}, |
| 110 | + "outputs": [ |
| 111 | + { |
| 112 | + "data": { |
| 113 | + "text/plain": [ |
| 114 | + "'OK\\r'" |
| 115 | + ] |
| 116 | + }, |
| 117 | + "execution_count": 87, |
| 118 | + "metadata": {}, |
| 119 | + "output_type": "execute_result" |
| 120 | + } |
| 121 | + ], |
97 | 122 | "source": [ |
98 | | - "After parameterization the FRA mode can be switched on." |
| 123 | + "zahnerZennium.setFraVoltageMinimum(0)\n", |
| 124 | + "zahnerZennium.setFraVoltageMaximum(18)\n", |
| 125 | + "zahnerZennium.setFraCurrentMinimum(0)\n", |
| 126 | + "zahnerZennium.setFraCurrentMaximum(220)\n", |
| 127 | + "\n", |
| 128 | + "zahnerZennium.setFraVoltageInputGain(5 * (4 / 5)) # gain * (4 / 5)\n", |
| 129 | + "zahnerZennium.setFraVoltageInputOffset(-25e-3)\n", |
| 130 | + "\n", |
| 131 | + "zahnerZennium.setFraVoltageOutputGain(18.0/5.0)\n", |
| 132 | + "zahnerZennium.setFraVoltageOutputOffset(-0.3)\n", |
| 133 | + "\n", |
| 134 | + "zahnerZennium.setFraCurrentInputGain(-242)\n", |
| 135 | + "zahnerZennium.setFraCurrentInputOffset(-15.03)\n", |
| 136 | + "\n", |
| 137 | + "zahnerZennium.setFraCurrentOutputGain(-220.0/5.0)\n", |
| 138 | + "zahnerZennium.setFraCurrentOutputOffset(-3)\n", |
| 139 | + "\n", |
| 140 | + "zahnerZennium.setFraPotentiostatMode(PotentiostatMode.POTMODE_GALVANOSTATIC)\n", |
| 141 | + "zahnerZennium.setCurrent(0)" |
99 | 142 | ] |
100 | 143 | }, |
101 | 144 | { |
102 | | - "cell_type": "code", |
103 | | - "execution_count": null, |
| 145 | + "cell_type": "markdown", |
104 | 146 | "metadata": {}, |
105 | | - "outputs": [], |
106 | 147 | "source": [ |
107 | | - " zahnerZennium.enableFraMode()\n", |
108 | | - " zahnerZennium.setCurrent(0)" |
| 148 | + "After parameterization the FRA mode can be switched on." |
109 | 149 | ] |
110 | 150 | }, |
111 | 151 | { |
|
121 | 161 | }, |
122 | 162 | { |
123 | 163 | "cell_type": "code", |
124 | | - "execution_count": 10, |
| 164 | + "execution_count": 88, |
125 | 165 | "metadata": {}, |
126 | 166 | "outputs": [ |
127 | 167 | { |
128 | 168 | "name": "stdout", |
129 | 169 | "output_type": "stream", |
130 | 170 | "text": [ |
131 | | - "Potential:\t0.004607167\tV\n", |
132 | | - "Potential:\t1.913566\tV\n", |
133 | | - "Potential:\t3.952542\tV\n", |
134 | | - "Potential:\t6.068166\tV\n", |
135 | | - "Potential:\t8.130561\tV\n" |
| 171 | + "Potential:\t0.0005221556\tV\n", |
| 172 | + "Current:\t0.04569409\tA\n", |
| 173 | + "Potential:\t0.01014815\tV\n", |
| 174 | + "Current:\t1.006116\tA\n", |
| 175 | + "Potential:\t0.01979393\tV\n", |
| 176 | + "Current:\t2.000953\tA\n", |
| 177 | + "Potential:\t0.02997681\tV\n", |
| 178 | + "Current:\t3.007906\tA\n", |
| 179 | + "Potential:\t0.04010656\tV\n", |
| 180 | + "Current:\t3.994758\tA\n", |
| 181 | + "Potential:\t0.05025365\tV\n", |
| 182 | + "Current:\t5.002351\tA\n", |
| 183 | + "Potential:\t0.05973741\tV\n", |
| 184 | + "Current:\t6.009117\tA\n", |
| 185 | + "Potential:\t0.06979417\tV\n", |
| 186 | + "Current:\t7.020814\tA\n", |
| 187 | + "Potential:\t0.07994695\tV\n", |
| 188 | + "Current:\t8.008658\tA\n", |
| 189 | + "Potential:\t0.09013592\tV\n", |
| 190 | + "Current:\t9.006383\tA\n" |
136 | 191 | ] |
137 | 192 | } |
138 | 193 | ], |
139 | 194 | "source": [ |
140 | | - " for i in range(5):\n", |
141 | | - " zahnerZennium.setCurrent(i)\n", |
142 | | - " time.sleep(1)\n", |
143 | | - " print(f\"Potential:\\t{zahnerZennium.getPotential()}\\tV\")" |
| 195 | + "for i in range(10):\n", |
| 196 | + " zahnerZennium.setCurrent(i)\n", |
| 197 | + " time.sleep(0.5)\n", |
| 198 | + " print(f\"Potential:\\t{zahnerZennium.getPotential()}\\tV\")\n", |
| 199 | + " print(f\"Current:\\t{zahnerZennium.getCurrent()}\\tA\")" |
144 | 200 | ] |
145 | 201 | }, |
146 | 202 | { |
|
153 | 209 | }, |
154 | 210 | { |
155 | 211 | "cell_type": "code", |
156 | | - "execution_count": 11, |
| 212 | + "execution_count": 89, |
157 | 213 | "metadata": {}, |
158 | 214 | "outputs": [ |
159 | 215 | { |
|
165 | 221 | } |
166 | 222 | ], |
167 | 223 | "source": [ |
168 | | - " zahnerZennium.setEISOutputPath(r\"C:\\THALES\\temp\\test1\")\n", |
169 | | - " zahnerZennium.setEISNaming(\"counter\")\n", |
170 | | - " zahnerZennium.setEISCounter(13)\n", |
171 | | - " zahnerZennium.setEISOutputFileName(\"spectra\")\n", |
172 | | - "\n", |
173 | | - " zahnerZennium.setAmplitude(0.5)\n", |
174 | | - " zahnerZennium.setCurrent(5)\n", |
175 | | - " zahnerZennium.setLowerFrequencyLimit(0.1)\n", |
176 | | - " zahnerZennium.setStartFrequency(10)\n", |
177 | | - " zahnerZennium.setUpperFrequencyLimit(100)\n", |
178 | | - " zahnerZennium.setLowerNumberOfPeriods(3)\n", |
179 | | - " zahnerZennium.setLowerStepsPerDecade(2)\n", |
180 | | - " zahnerZennium.setUpperNumberOfPeriods(20)\n", |
181 | | - " zahnerZennium.setUpperStepsPerDecade(3)\n", |
182 | | - " zahnerZennium.setScanDirection(\"startToMax\")\n", |
183 | | - " zahnerZennium.setScanStrategy(\"single\")\n", |
184 | | - " \n", |
185 | | - " zahnerZennium.measureEIS()\n", |
186 | | - " \n", |
187 | | - " zahnerZennium.disableFraMode()\n", |
188 | | - "\n", |
189 | | - " zenniumConnection.disconnectFromTerm()\n", |
190 | | - " print(\"finish\")" |
| 224 | + "zahnerZennium.setEISOutputPath(r\"C:\\THALES\\temp\\test1\")\n", |
| 225 | + "zahnerZennium.setEISNaming(\"counter\")\n", |
| 226 | + "zahnerZennium.setEISCounter(13)\n", |
| 227 | + "zahnerZennium.setEISOutputFileName(\"spectra\")\n", |
| 228 | + "\n", |
| 229 | + "zahnerZennium.setCurrent(10)\n", |
| 230 | + "zahnerZennium.setAmplitude(2)\n", |
| 231 | + "zahnerZennium.setLowerFrequencyLimit(1)\n", |
| 232 | + "zahnerZennium.setStartFrequency(1000)\n", |
| 233 | + "zahnerZennium.setUpperFrequencyLimit(10e3)\n", |
| 234 | + "zahnerZennium.setLowerNumberOfPeriods(3)\n", |
| 235 | + "zahnerZennium.setLowerStepsPerDecade(2)\n", |
| 236 | + "zahnerZennium.setUpperNumberOfPeriods(20)\n", |
| 237 | + "zahnerZennium.setUpperStepsPerDecade(3)\n", |
| 238 | + "zahnerZennium.setScanDirection(\"startToMax\")\n", |
| 239 | + "zahnerZennium.setScanStrategy(\"single\")\n", |
| 240 | + "\n", |
| 241 | + "zahnerZennium.measureEIS()\n", |
| 242 | + "\n", |
| 243 | + "zenniumConnection.disconnectFromTerm()\n", |
| 244 | + "print(\"finish\")" |
191 | 245 | ] |
192 | 246 | } |
193 | 247 | ], |
|
207 | 261 | "name": "python", |
208 | 262 | "nbconvert_exporter": "python", |
209 | 263 | "pygments_lexer": "ipython3", |
210 | | - "version": "3.11.1 (tags/v3.11.1:a7a450f, Dec 6 2022, 19:58:39) [MSC v.1934 64 bit (AMD64)]" |
| 264 | + "version": "3.12.2" |
211 | 265 | }, |
212 | 266 | "orig_nbformat": 4, |
213 | 267 | "vscode": { |
|
0 commit comments