|
| 1 | +=================== |
| 2 | + FaulhaberMCS |
| 3 | +=================== |
| 4 | + |
| 5 | +=============== ======================================================================================================== |
| 6 | +**Summary**: :pluginsummary:`FaulhaberMCS` |
| 7 | +**Type**: :plugintype:`FaulhaberMCS` |
| 8 | +**License**: :pluginlicense:`FaulhaberMCS` |
| 9 | +**Platforms**: Windows, Linux |
| 10 | +**Devices**: Faulhaber MCS 3242 BX4 ET |
| 11 | +**Author**: :pluginauthor:`FaulhaberMCS` |
| 12 | +=============== ======================================================================================================== |
| 13 | + |
| 14 | +Overview |
| 15 | +======== |
| 16 | + |
| 17 | +.. pluginsummaryextended:: |
| 18 | + :plugin: FaulhaberMCS |
| 19 | + |
| 20 | +Initialization |
| 21 | +============== |
| 22 | + |
| 23 | +The following parameters are mandatory or optional for initializing an instance of this plugin: |
| 24 | + |
| 25 | + .. plugininitparams:: |
| 26 | + :plugin: FaulhaberMCS |
| 27 | + |
| 28 | + |
| 29 | +Parameters |
| 30 | +========== |
| 31 | + |
| 32 | +These parameters are available and can be used to configure the ``FaulhaberMCS`` instance. |
| 33 | +Many of them are directly initialized by the parameters of the constructor. |
| 34 | +During the runtime of an instance, the value of these parameters is obtained by |
| 35 | +the method *getParam*, writeable parameters can be changed using *setParam*. |
| 36 | + |
| 37 | +**acceleration**: int |
| 38 | + Acceleration in 1/s². Register '0x6083.00'. |
| 39 | + |
| 40 | + *Value range: [1, 30000], Default: 4250* |
| 41 | +**async**: int, read-only |
| 42 | + Asynchronous move (1), synchronous (0) [default]. Only synchronous operation is |
| 43 | + implemented. |
| 44 | + |
| 45 | + *Value range: [0, 1], Default: 0* |
| 46 | +**current**: int, read-only |
| 47 | + Actual value of the current in relative scaling. Register '0x6078.00'. |
| 48 | + |
| 49 | + *Value range: [-32768, 32767], Default: 10* |
| 50 | +**deceleration**: int |
| 51 | + Deceleration in 1/s². Register '0x6084.00'. |
| 52 | + |
| 53 | + *Value range: [1, 30000], Default: 1280* |
| 54 | +**deviceID**: int |
| 55 | + Explicit device ID. Register '0x2400.08' |
| 56 | + |
| 57 | + *Value range: [0, 65535], Default: 0* |
| 58 | +**deviceName**: str, read-only |
| 59 | + Name of device. Register '0x1008.00'. |
| 60 | + |
| 61 | + *Match: "", Default: "MCS 3242 BX4 ET"* |
| 62 | +**fault**: int, read-only |
| 63 | + 1: Error present, 0: No error present (Bit 3). |
| 64 | + |
| 65 | + *Value range: [0, 1], Default: 0* |
| 66 | +**firmware**: str, read-only |
| 67 | + Firmware version. Register '0x100A.00' |
| 68 | + |
| 69 | + *Match: "", Default: "0111.02N"* |
| 70 | +**fluxGainControl**: int |
| 71 | + Flux control gain parameter [mOm]. Register '0x2342.01'. |
| 72 | + |
| 73 | + *Value range: [-1, 0], Default: 1835* |
| 74 | +**fluxIntegralTimeControl**: int |
| 75 | + Flux control integral time control parameter [µs]. Register '0x2342.01'. |
| 76 | + |
| 77 | + *Value range: [150, 2600], Default: 150* |
| 78 | +**followingError**: int, read-only |
| 79 | + 1: Permissible range for the following error exceeded, 0: The actual position follows |
| 80 | + the instructions without a following error (Bit 13). |
| 81 | + |
| 82 | + *Value range: [0, 1], Default: 0* |
| 83 | +**homed**: int, read-only |
| 84 | + homed (1) or not homed (0). |
| 85 | + |
| 86 | + *Value range: [0, 1], Default: 0* |
| 87 | +**internalLimitActive**: int, read-only |
| 88 | + 1: Internal range limit (e.g. limit switch reached), 0: Internal range limit not reached |
| 89 | + (Bit 11). |
| 90 | + |
| 91 | + *Value range: [0, 1], Default: 0* |
| 92 | +**maxMotorSpeed**: int |
| 93 | + Max motor speed in 1/min. Register '0x6080.00'. |
| 94 | + |
| 95 | + *Value range: [1, 32767], Default: 32767* |
| 96 | +**maxTorqueLimit**: int, read-only |
| 97 | + Maximum torque limit in relative scaling. 1000 = motor rated torque. Register |
| 98 | + '0x6072.00'. |
| 99 | + |
| 100 | + *Value range: [1, 30000], Default: 2000* |
| 101 | +**moveTimeout**: int |
| 102 | + Timeout for movement in ms. |
| 103 | + |
| 104 | + *Value range: [0, inf], Default: 60000* |
| 105 | +**name**: str, read-only |
| 106 | + FaulhaberMCS |
| 107 | +**netMode**: int |
| 108 | + RS232 net mode. Register '0x2400.05'. |
| 109 | + |
| 110 | + *Value range: [0, 1], Default: 0* |
| 111 | +**nodeID**: int |
| 112 | + Node number. Register '0x2400.03'. |
| 113 | + |
| 114 | + *Value range: [0, 255], Default: 1* |
| 115 | +**operation**: int |
| 116 | + Enable (1) or Disable (0) operation. |
| 117 | + |
| 118 | + *Value range: [0, 1], Default: 1* |
| 119 | +**operationEnabled**: int, read-only |
| 120 | + 1: Operation enabled, 0: Operation disabled (Bit 2). |
| 121 | + |
| 122 | + *Value range: [0, 1], Default: 1* |
| 123 | +**operationMode**: int, read-only |
| 124 | + Operation Mode. -4: ATC, -3: AVC, -2: APC, -1: Voltage mode, 0: Controller not |
| 125 | + activated, 1: PP (default), 3: PV, 6: Homing, 8: CSP, 9: CSV, 10: CST. Register |
| 126 | + '0x6060.00'. |
| 127 | + |
| 128 | + *Value range: [-4, 10], Default: 1* |
| 129 | +**positionLimits**: Sequence[int] |
| 130 | + Lower/ upper limit of the position range in userdefined uints. Register lower limit |
| 131 | + '0x607D.01', upper limit '0x607D.02'. |
| 132 | + |
| 133 | + *Allowed number of values: 0 - 18446744073709551615, All values allowed, Default: [-inf, |
| 134 | + inf]* |
| 135 | +**power**: int |
| 136 | + Enable (1) or Disable (0) device power. |
| 137 | + |
| 138 | + *Value range: [0, 1], Default: 1* |
| 139 | +**productCode**: str, read-only |
| 140 | + Product code number. Register '0x1018.02'. |
| 141 | + |
| 142 | + *Match: "", Default: "11601"* |
| 143 | +**profileVelocity**: int |
| 144 | + Profile velocity in 1/min. Register '0x6081.00'. |
| 145 | + |
| 146 | + *Value range: [1, 32767], Default: 4000* |
| 147 | +**quickStop**: int, read-only |
| 148 | + 1: Quick stop enabled, Quick stop disabled (Bit 5). |
| 149 | + |
| 150 | + *Value range: [0, 1], Default: 1* |
| 151 | +**quickStopDeceleration**: int |
| 152 | + Quickstop deceleration in 1/s². Register '0x6085.00'. |
| 153 | + |
| 154 | + *Value range: [1, 32750], Default: 30000* |
| 155 | +**readyToSwitchOn**: int, read-only |
| 156 | + 1: Ready to switch ON, 0: Not ready to switch ON (Bit 0). |
| 157 | + |
| 158 | + *Value range: [0, 1], Default: 1* |
| 159 | +**revisionNumber**: str, read-only |
| 160 | + Revision number. Register '0x1018.03' |
| 161 | + |
| 162 | + *Match: "", Default: "14"* |
| 163 | +**serialNumber**: str, read-only |
| 164 | + Serial number of device. Register '0x2400.03'. |
| 165 | + |
| 166 | + *Match: "", Default: "492300001"* |
| 167 | +**setPointAcknowledged**: int, read-only |
| 168 | + 1: New set-point has been loaded, 0: Previous set-point being changed or already reached |
| 169 | + (Bit 12). |
| 170 | + |
| 171 | + *Value range: [0, 1], Default: 0* |
| 172 | +**switchOnDisabled**: int, read-only |
| 173 | + 1: Switch on disabled, 0: Switch on enabled (Bit 6). |
| 174 | + |
| 175 | + *Value range: [0, 1], Default: 0* |
| 176 | +**switchedOn**: int, read-only |
| 177 | + 1: Drive is in the 'Switched ON' state, 0: No voltage present (Bit 1). |
| 178 | + |
| 179 | + *Value range: [0, 1], Default: 1* |
| 180 | +**targetReached**: int, read-only |
| 181 | + 1: Target has reached, 0: is moving (Bit 10). |
| 182 | + |
| 183 | + *Value range: [0, 1], Default: 1* |
| 184 | +**targetTorque**: int |
| 185 | + Set target value of the torque in relative scaling. Register '0x6071.00'. |
| 186 | + |
| 187 | + *Value range: [-32768, 32767], Default: 0* |
| 188 | +**temperatureCPU**: int, read-only |
| 189 | + CPU temperature in [°C]. Register '0x2326.01'. |
| 190 | + |
| 191 | + *Value range: [0, 32767], Default: 44* |
| 192 | +**temperaturePowerStage**: int, read-only |
| 193 | + Power stage temperature in [°C]. Register '0x2326.02'. |
| 194 | + |
| 195 | + *Value range: [0, 32767], Default: 30* |
| 196 | +**temperatureWinding**: int, read-only |
| 197 | + Winding temperature in [°C]. Register '0x2326.03'. |
| 198 | + |
| 199 | + *Value range: [0, 32767], Default: 29* |
| 200 | +**torque**: int, read-only |
| 201 | + Actual value of the torque in relative scaling. Register '0x6077.00'. |
| 202 | + |
| 203 | + *Value range: [-32768, 32767], Default: 0* |
| 204 | +**torqueGainControl**: int |
| 205 | + Torque control gain parameter [mOm]. Register '0x2342.01'. |
| 206 | + |
| 207 | + *Value range: [-1, 0], Default: 1835* |
| 208 | +**torqueIntegralTimeControl**: int |
| 209 | + Torque control integral time control parameter [µs]. Register '0x2342.01'. |
| 210 | + |
| 211 | + *Value range: [150, 2600], Default: 150* |
| 212 | +**torqueLimits**: Sequence[int] |
| 213 | + Negative/ positive torque limit values in relative scaling. 1000 = motor rated torque. |
| 214 | + Register negative limit '0x60E1.00', positive limit '0x60E0.00'. |
| 215 | + |
| 216 | + *Allowed number of values: 0 - 18446744073709551615, Value range: [0, 6000], Default: |
| 217 | + [6000, 6000]* |
| 218 | +**velocityDeviationThresholdControl**: int |
| 219 | + Velocity deviation threshold control parameter. Register '0x2344.03'. |
| 220 | + |
| 221 | + *Value range: [0, 65535], Default: 65535* |
| 222 | +**velocityDeviationTimeControl**: int |
| 223 | + Velocity deviation time control parameter. Register '0x2344.04'. |
| 224 | + |
| 225 | + *Value range: [0, 65535], Default: 100* |
| 226 | +**velocityGainControl**: int |
| 227 | + Velocity gain control parameter [As 1e-6]. Register '0x2342.01'. |
| 228 | + |
| 229 | + *Value range: [-1, 0], Default: 1835* |
| 230 | +**velocityIntegralPartOption**: int |
| 231 | + Velocity integral part option. Configuration of the speed control loop. '0': integral |
| 232 | + component active, '1': stopped integral component in the position windoed (in PP mode), |
| 233 | + '2': integral component deactivated. Register '0x2344.06'. |
| 234 | + |
| 235 | + *Value range: [0, 2], Default: 0* |
| 236 | +**velocityIntegralTimeControl**: int |
| 237 | + Velocity integral time control parameter [µs]. Register '0x2344.02'. |
| 238 | + |
| 239 | + *Value range: [0, 65535], Default: 23* |
| 240 | +**velocityWarningThresholdControl**: int |
| 241 | + Velocity warning threshold control parameter. Register '0x2344.05'. |
| 242 | + |
| 243 | + *Value range: [0, 65535], Default: 30000* |
| 244 | +**vendorID**: str, read-only |
| 245 | + Vendor ID of device. Register '0x1018.01'. |
| 246 | + |
| 247 | + *Match: "", Default: "327"* |
| 248 | +**voltageEnabled**: int, read-only |
| 249 | + 1: Power supply enabled, 0: Power supply disabled (Bit 4). |
| 250 | + |
| 251 | + *Value range: [0, 1], Default: 0* |
| 252 | +**warning**: int, read-only |
| 253 | + 1: One of the monitored temperatures has exceeded at least the warning threshold, 0: No |
| 254 | + raised temperatures (Bit 7). |
| 255 | + |
| 256 | + *Value range: [0, 1], Default: 0* |
| 257 | + |
| 258 | + |
| 259 | +Additional functions (exec functions) |
| 260 | +===================================== |
| 261 | + |
| 262 | +By using the following execFunctions you execute homing according the homing methods. |
| 263 | + |
| 264 | +.. py:function:: instance.exec('homing', method [,offset, switchSeekVelocity, homingSpeed, acceleration, limitCheckDelayTime, torqueLimits]) |
| 265 | +
|
| 266 | + In most of the cases before position control is to be used, the drive must perform a reference run to align the position used by the drive to the mechanic setup. |
| 267 | + |
| 268 | + :param method: Homing method. Methods 1…34: A limit switch or an additional reference switch is used as reference. Method 37: The position is set to 0 without reference run. Methods –1…–4: A mechanical limit stop is set as reference. Register '0x6098.00'. |
| 269 | + :type method: int |
| 270 | + :param offset: Offset of the zero position relative to the position of the reference switch in userdefined units. Register '0x607C.00'. |
| 271 | + :type offset: int - optional |
| 272 | + :param switchSeekVelocity: Speed during search for switch. Register '0x6099.01'. |
| 273 | + :type switchSeekVelocity: int - optional |
| 274 | + :param homingSpeed: Speed during search for zero. Register '0x6099.02'. |
| 275 | + :type homingSpeed: int - optional |
| 276 | + :param acceleration: Speed during search for zero. Register '0x609A.00'. |
| 277 | + :type acceleration: int - optional |
| 278 | + :param limitCheckDelayTime: Delay time until blockage detection [ms]. Register '0x2324.02'. |
| 279 | + :type limitCheckDelayTime: int - optional |
| 280 | + :param torqueLimits: Upper/ lower limit values for the reference run in 1/1000 of the rated motor torque. Register negative limit '0x2350.00', positive limit '0x2351.00'. |
| 281 | + :type torqueLimits: Sequence[int] - optional |
| 282 | + |
| 283 | +Exemplary usage from Python |
| 284 | +=========================== |
| 285 | + |
| 286 | +In the following examples, it is shown how to use this Plugin. |
| 287 | +First an instance must be initialized using the ``SerialIO`` Plugin. |
| 288 | + |
| 289 | +.. code-block:: python |
| 290 | +
|
| 291 | + from itom import actuator, dataIO |
| 292 | +
|
| 293 | + com = dataIO("SerialIO", 6, 115200, "\n") # adapt COM port number |
| 294 | + mot = actuator("FaulhaberMCS", com, 1) |
| 295 | +
|
| 296 | +The current position can be set to zero by using the ``setOrigin`` method of the plugin: |
| 297 | + |
| 298 | +.. code-block:: python |
| 299 | +
|
| 300 | + mot.setOrigin(0) |
| 301 | +
|
| 302 | +The relative position can be set to a specific value by using the ``setPosRel`` method of the plugin: |
| 303 | + |
| 304 | +.. code-block:: python |
| 305 | +
|
| 306 | + mot.setPosRel(0, 4096) |
| 307 | +
|
| 308 | +The absolute position can be set to a specific value by using the ``setPosAbs`` method of the plugin: |
| 309 | + |
| 310 | +.. code-block:: python |
| 311 | +
|
| 312 | + mot.setPosAbs(0, 4096) |
| 313 | +
|
| 314 | +Additional homing methods can be executed by using the ``exec`` method of the plugin: |
| 315 | + |
| 316 | +.. code-block:: python |
| 317 | +
|
| 318 | + mot.exec("homing", -3, torqueLimits=[300, 300]) # mechanical limit stop is set as reference |
| 319 | +
|
| 320 | +Parameters can be read by using the ``getParam`` method of the plugin: |
| 321 | + |
| 322 | +.. code-block:: python |
| 323 | +
|
| 324 | + print(mot.getParam("positionLimits")) |
| 325 | +
|
| 326 | +Parameters can be set by using the ``setParam`` method of the plugin: |
| 327 | + |
| 328 | +.. code-block:: python |
| 329 | +
|
| 330 | + mot.setParam("profileVelocity", 2000) |
| 331 | +
|
| 332 | +Motor can be turned off setting parameter ``operation``: |
| 333 | + |
| 334 | +.. code-block:: python |
| 335 | +
|
| 336 | + mot.setParam("operation", 0) # turn off motor |
| 337 | + mot.setParam("operation", 1) # turn on motor |
| 338 | +
|
| 339 | +The motor voltage is turned off setting parameter ``power``: |
| 340 | + |
| 341 | +.. code-block:: python |
| 342 | +
|
| 343 | + mot.setParam("power", 0) # turn off motor voltage |
| 344 | +
|
| 345 | + # To turn it on again, first it must be shut down |
| 346 | + mot.setParam("operation", 0) |
| 347 | + mot.setParam("operation", 1) # turn on motor |
| 348 | +
|
| 349 | +For long movement operations, the timeout can be set: |
| 350 | + |
| 351 | +.. code-block:: python |
| 352 | +
|
| 353 | + mot.setParam("moveTimeout", 60000) # set timeout to 60s |
| 354 | +
|
| 355 | +The torque control parameter are changed by the plugin parameter: |
| 356 | + |
| 357 | +.. code-block:: python |
| 358 | +
|
| 359 | + mot.setParam("torqueGainControl", 1835) |
| 360 | + mot.setParam("torqueIntegralTimeControl", 150) |
| 361 | +
|
| 362 | +The flux control parameter are changed by the plugin parameter: |
| 363 | + |
| 364 | +.. code-block:: python |
| 365 | +
|
| 366 | + mot.setParam("fluxGainControl", 1835) |
| 367 | + mot.setParam("fluxIntegralTimeControl", 150) |
| 368 | +
|
| 369 | +The velocity control parameter are changed by the plugin parameter: |
| 370 | + |
| 371 | +.. code-block:: python |
| 372 | +
|
| 373 | + mot.setParam("velocityGainControl", 1835) |
| 374 | + mot.setParam("velocityIntegralTimeControl", 23) |
| 375 | + mot.setParam("velocityDeviationThresholdControl", 65535) |
| 376 | + mot.setParam("velocityDeviationTimeControl", 100) |
| 377 | + mot.setParam("velocityWarningThresholdControl", 30000) |
| 378 | + mot.setParam("velocityIntegralPartOption", 0) |
| 379 | +
|
| 380 | +Changelog |
| 381 | +========== |
| 382 | + |
| 383 | +* itom setup 4.3.0 - v1.0.0: Initial version |
0 commit comments