|
|
(62 intermediate revisions by 6 users not shown) |
Line 1: |
Line 1: |
− | '''Introduction:'''
| + | {{Languages|Gantry_Issues}} |
− | | + | In some applications, gantry systems (pair of parallel axes) are implemented as master slave pairs. Where master is a part of a bigger (XYZ) group and each of the group's axis can be a master to a different slave axis. The whole issue can be extended to any group of geared axes that are moving together one physical object. |
− | | |
− | In several MANZ's applications, gantry systems (pair of parallel axes) are implemented as master slave pairs. Where master is a part of a bigger (XYZ) group and each of the group's axis can be a master to a different slave axis. The whole issue can be exteneded to any group of geared axes that are moving together one physical object. | |
− | | |
− | | |
− | '''Problems:'''
| |
| | | |
| + | =Problems= |
| | | |
| Problems occur when due to asymmetrical engagement of the system either by different stopping starting or mechanical non-symmetries. | | Problems occur when due to asymmetrical engagement of the system either by different stopping starting or mechanical non-symmetries. |
− |
| |
| | | |
| 1.) Motors are directly working against mechanic and possible mechanical breakage/damage can occur. | | 1.) Motors are directly working against mechanic and possible mechanical breakage/damage can occur. |
Line 17: |
Line 12: |
| 3.) Load is distributed not equally, therefore dynamic behavior of one axis differs from the other. | | 3.) Load is distributed not equally, therefore dynamic behavior of one axis differs from the other. |
| | | |
| + | =Prevention Features = |
| | | |
− | '''Prevention features:'''
| + | # Slave deviation: difference in position between master's and slave's feedback is monitored if it exceeds certain threshold an error is generated and the system stopped. MC-Basic: '''<nowiki><slave>.SlaveDeviation</nowiki>'''. |
− | | + | # Slave disconnect: when slave is disabled either due to explicit user command or as a result of an error its master is automatically disabled. MC-Basic: '''<nowiki><slave>.SlaveDisconnect </nowiki>'''. |
− | | + | # The master is "aware" of its slaves. Keeping slave in enabled state when master is disabled can introduce a feedback loop (mechanical linkage between slave and master) resulting is a system that is not always stable i.e. we have a runaway. This can be prevented using SlaveDisable flag, each time a master is disabled due to whatever reason all its slaves will be disabled too.''' '''MC-Basic: '''<nowiki><master>.SlaveDisable </nowiki>'''. |
− | # Slave deviation: difference in position between master's and slave's feedback is monitored if it exceeds certain threshold an error is generated and the system stopped. MC-BASIC: '''<nowiki><axis>.SlaveDeviation </nowiki>'''''(on slave axis).'' | + | # In order to keep the delay between master and slave minimal it is imporrtant to take care about the order of calling of axis RTK. Connecting slave to a master automaticaly re-orders their RTK by changing their priorities. |
− | # Slave disconnect: when slave is disabled either due to explicit user command or as a result of an error it's master is automatically disabled. MC-BASIC: '''<nowiki><axis>.SlaveDisconnect </nowiki>'''''(on slave axis).'' | |
− | # The master is "aware" of its slaves. Keeping slave in enabled state when master is disabled can introduce a feedback loop (mechanical linkage between slave and master) resulting in a system that is not always stable i.e. we have a runaway. This can be prevented using SlaveDisable flag, each time a master is disabled due to whatever reason all its slaves will be disabled too.''' '''MC-BASIC: '''<nowiki><axis>.SlaveDisable </nowiki>'''''(on master axis)'' | |
− | # In order to keep the delay between master and slave minimal it is imporrtant to take care about the order of calling of axis RTK. Connecting slave to a master automaticaly re-orders their RTK by changing their priorities.<br/> | |
− | | |
− | | |
− | '''''General Axis Deviation''''' (GAD) is defined as one of the follwing:
| |
− | | |
− | * position follwing error ('''''Pe > PeMax''''')
| |
− | * velocity overspeed (Vfb > Vospd)
| |
− | * slave deviation (SlaveDeviation > SlaveMaxDeviation)<br/>
| |
| | | |
| + | = Table of Actions= |
| + | General axis deviation GAD is defined as one of the following events: |
| | | |
| + | * Position following error ('''[[MC-Basic:element.POSITIONERROR|Pe]] > [[MC-Basic:element.POSITIONERRORMAX|PeMax]]''') |
| + | * Velocity overspeed (Vfb > Vospd) |
| + | * Excessive acceleration (over [[MC-Basic:SYSTEM.MOTIONMARGIN|Sys.MotionMargin]]*[[Category talk:MC-Basic:axis.ACCELERATIONMAX|Amax]]) |
| + | * Excessive torque (over [[MC-Basic:axis.TorqueMax|Tmax]]) |
| + | * Slave deviation (SlaveDeviation > SlaveMaxDeviation)<br/> |
| | | |
− | {| style="border-spacing:0;"
| |
− | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Action:
| |
− | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center><nowiki><slave>.SlaveDisconnect </nowiki>1 (default)</center>
| |
− |
| |
− | <center>(''or master is PEXT'')</center>
| |
− | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center><nowiki><slave>.SlaveDisconnect</nowiki> 0</center>
| |
− | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center><nowiki><master>.SlaveDisable</nowiki>0 (default)</center>
| |
− | | style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center><nowiki><master>.SlaveDisable</nowiki>1</center>
| |
| | | |
| + | {| border = 1 |
| + | |'''Action''' |
| + | || <nowiki><slave>.SlaveDisconnect </nowiki> 1 (default)<br/> (''or master is PEXT'') |
| + | || <nowiki><slave>.SlaveDisconnect</nowiki> 0 |
| + | || <nowiki><master>.SlaveDisable</nowiki> 0 (default) |
| + | || <nowiki><master>.SlaveDisable</nowiki> 1 |
| |- | | |- |
− | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Slave '''''GAD'''''
| |
− | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| '''''Disconnecting''''': sax.slave=0
| |
− |
| |
− | '''''Stopping''''' master axis
| |
− |
| |
− | '''''Stopping''''' slave axis
| |
− | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| '''''Stopping''''' the ''first'' master if it is moving,
| |
− |
| |
− | else '''''disabling''''' the master
| |
− | | colspan="2" style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Nothing affected</center>
| |
| | | |
| + | ||Slave '''GAD''' |
| + | ||'''Disconnecting''': sax.slave=0<br/>'''Stopping''''master axis<br/>'''Stopping''' slave axis |
| + | ||'''Stopping''' the ''first'' master if it is moving,<br/>else '''disabling''' the master |
| + | | colspan="2" | Nothing affected |
| |- | | |- |
− | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Slave '''''GAD'''''
| |
| | | |
| + | ||Slave '''GAD'''<br/> |
| (when slave is stopped) | | (when slave is stopped) |
− | | colspan="4" style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>can not occur as slaved axis is considered always in a moving state (ismoving ≠ 0)</center> | + | | colspan="4" | Cannot occur as slaved axis is considered always in a moving state (ismoving ≠ 0) |
− | | |
| |- | | |- |
− | | style="background-color:#e6e6e6;border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Slave '''''GAD'''''
| |
| | | |
| + | ||Slave '''GAD'''<br/> |
| (when master is stopped) | | (when master is stopped) |
− | | colspan="4" style="background-color:#e6e6e6;border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>'''Disabling''' masterIt looks like only slave is disabled! If true it is a bug.</center> | + | | colspan="4" | '''Disabling''' master.<br/>'''Disabling''' slave |
| + | |- |
| | | |
− | <center>'''Disabling''' slave</center> | + | ||Master '''GAD''' |
| + | | colspan="4" | <'''Stopping''' master axis |
| | | |
| |- | | |- |
− | | style="background-color:#cccccc;border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Master '''''GAD''''' | + | ||Master '''GAD'''<br/> |
− | | colspan="4" style="background-color:#cccccc;border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>'''''Stopping''''' master axis</center>
| + | (when master is stopped) |
− | | + | | colspan="3" | '''Disabling''' master axis |
− | |-
| + | || '''Disabling''' slave axis |
− | | style="background-color:#cccccc;border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Master '''''GAD'''''(wnen master is stopped)
| |
− | | colspan="3" style="background-color:#cccccc;border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>'''Dislabling''' master axis</center> | |
− | | style="background-color:#cccccc;border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>'''Dislabling''' slave axis</center> | |
| | | |
| |- | | |- |
− | | style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Error on slave axis | + | ||Error on slave axis |
− | | style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| '''''Disconnecting''''': sax.slave=0'''''Stopping''''' slave axis | + | || '''Disconnecting''': <nowiki>sax.slave=0</nowiki><br/> '''Stopping''' slave axis |
− | | style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| '''''Stopping''''' slave axis | + | || '''Stopping''' slave axis |
− | | colspan="2" style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Nothing affected</center> | + | |colspan=2| Nothing affected |
| | | |
| |- | | |- |
− | | style="border-top:0.0069in solid #000000;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Error on master axis | + | ||Error on master axis |
− | | colspan="4" style="border:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>'''''Stopping''''' master axis</center> | + | | colspan=4 |'''Stopping''' master axis |
| | | |
| |- | | |- |
− | | style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Disabling master: (max.en: 1→0) | + | ||Disabling master: <br/>(max.en: 1→0) |
− | | colspan="3" style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Nothing affected</center> | + | | colspan=3 |Nothing affected |
− | | style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| '''''Disablining '''''all slave axes that are directly or indirectly connected. | + | || '''Disabling''' all slave axes that are directly or indirectly connected. |
− | | |
| |- | | |- |
− | | style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| Disabling slave: (sax.en: 1→0)
| |
− | | style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| '''''Msync''''' is reset
| |
| | | |
− | No disconnection.
| + | || Disabling slave: <br/>(sax.en: 1→0) |
− | | style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:none;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| '''''Msync''''' is reset'''Disable''' all master axes connected directly or inderctly. | + | || '''Msyn''' is reset<br/>No disconnection. |
− | | colspan="2" style="border-top:none;border-bottom:0.0069in solid #000000;border-left:0.0069in solid #000000;border-right:0.0069in solid #000000;padding-top:0in;padding-bottom:0in;padding-left:0.075in;padding-right:0.075in;"| <center>Nothing affected</center> | + | || '''Msyn''' is reset<br/>'''Disable''' all master axes connected directly or indirectly. |
| + | | colspan="2" |Nothing affected |
| | | |
| |} | | |} |
− | = Implementation =
| |
− | Each Master axis must be “aware” of the slave axes connected to it. This means we need to add an pointer array to the MOT_ELEMENT object:
| |
− |
| |
− |
| |
− | MOT_ELEMENT *'''slaves'''<nowiki>[MOT_ELEMENT_NUMBER/2];</nowiki>
| |
− |
| |
− |
| |
− | it should be initialized to NULL pointer at the beginning and each time an slave axis is added/removed to this master a re-organization of the array will be executed:
| |
− |
| |
− |
| |
− | * Adding new slaves, i.e. “slave_axis.MasterSource = master_axis”:
| |
− |
| |
− | Append master_axis pointer to the end of the list.
| |
− |
| |
− |
| |
− | * Removing old slaves, i.e. “slave_axis.MasterSource = none”
| |
− |
| |
− | The old master axis has to be found and if such exist, it's slaves array should be searched for the pointer of the given slave, if it does not exist an error should be returned. The array should be re-arrange so there are no gaps:
| |
− |
| |
− |
| |
− | before
| |
− |
| |
− |
| |
− | {| style="border-spacing:0;"
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>1'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>2'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>3'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>4'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>5'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>6'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>7'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>8'''</sub></center>
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border:0.0007in solid #000000;padding:0.0382in;"|
| |
− |
| |
− | |}
| |
− | after:
| |
− |
| |
− |
| |
− |
| |
− | {| style="border-spacing:0;"
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>1'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>2'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>3'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>5'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>6'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>7'''</sub></center>
| |
− | | style="background-color:#cccccc;border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"| <center>'''sl<sub>8'''</sub></center>
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border-top:0.0007in solid #000000;border-bottom:0.0007in solid #000000;border-left:0.0007in solid #000000;border-right:none;padding:0.0382in;"|
| |
− | | style="border:0.0007in solid #000000;padding:0.0382in;"|
| |
− |
| |
− | |}
| |
− | The whole action should be guarded using the global mutex semaphore: '''''mot_Manager_Data.mtx_get_value'''''.
| |
| | | |
| | | |
| + | <!-- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
| = Re-ordering the master-slave sequence. = | | = Re-ordering the master-slave sequence. = |
− | In AMCS the sequence of calling different RTK's is assured by giving them different priorities (starting from 20), by default the first axis (the one with lowest ID) has the starting priority (20) , the next has 21 and so on. IF the group's RTK is activated, it gets the priority number of it's first axis. In this way we assure that no RTK interrupts execution of the other one. | + | In softMC the sequence of calling different RTKs is assured by giving them different priorities (starting from 20). By default the first axis (the one with lowest ID) has the starting priority (20), the next has 21, and so on. IF the group's RTK is activated, it gets the priority number of its first axis. In this way we assure that no RTK interrupts execution of the other one. |
| | | |
| | | |
| Once the new master slave pair is given, the system should check the priorities of their RTK tasks, if prio(RTK_Slave) > prio(RTK_Master) then everything is OK, if not they should be exchanged but before that we must check if the specified master is a slave to another axis, if yes then this pair should be checked also. | | Once the new master slave pair is given, the system should check the priorities of their RTK tasks, if prio(RTK_Slave) > prio(RTK_Master) then everything is OK, if not they should be exchanged but before that we must check if the specified master is a slave to another axis, if yes then this pair should be checked also. |
| | | |
− | = Slave-Disable. = | + | = Slave-Disable = |
− | | |
− | Name: <nowiki><axis>.SlaveDisable</nowiki>
| |
− | | |
− | Type: long
| |
− | | |
− | Values: 0 or 1
| |
− | | |
− | Default: 0
| |
− | | |
− | Limitations: Modal-Only, Read/Write
| |
− | | |
− | Context: Task or Terminal
| |
| | | |
| + | * Name: <nowiki><axis>.SlaveDisable</nowiki> |
| + | * Type: long |
| + | * Values: 0 or 1 |
| + | * Default: 0 |
| + | * Limitations: Modal-Only, Read/Write |
| + | * Context: Task or Terminal |
| | | |
− | Once the '''''<nowiki><axis>.SlaveD</nowiki>''isable''' is on, each time the axis is disabled (due to an error, or by direct assignment i.e., ”en=0”) all of it's slave axes will be disabled:
| + | See Also: [[MC-Basic:axis.SLAVEDISABLE |SlaveDisable]] |
| | | |
| + | Once the '''<nowiki><master>.SlaveDisable</nowiki>''' is on, each time the axis is disabled (due to an error, or by direct assignment i.e., ”en=0”) all of its slave axes will be disabled: |
| | | |
| If the user directly enters: | | If the user directly enters: |
| | | |
− | * master_axis.en = 0
| + | <pre>master_axis.en = 0</pre> |
| | | |
| * If the default error handler disables the axis | | * If the default error handler disables the axis |
− | * It the axis is disabled by an automatic disable due to a position error on a stopped axis | + | * If the axis is disabled by an automatic disable due to a position error on a stopped axis |
| * If the torque threshold is exceeded on a stopped axis. | | * If the torque threshold is exceeded on a stopped axis. |
| * If the VOSPD is exceeded on a stopped axis | | * If the VOSPD is exceeded on a stopped axis |
| * If the master is disabled because it is a part of the group that is being disabled (or some axes of it are). | | * If the master is disabled because it is a part of the group that is being disabled (or some axes of it are). |
− | * If the master is disabled because being master of another axis having '''''<nowiki><axis>.SlaveDisconnect</nowiki>''''' flag set to 0(This is when this feature is on). | + | * If the master is disabled because being master of another axis having '''<nowiki><axis>.SlaveDisconnect</nowiki>''' flag set to 0(This is when this feature is on). |
| | | |
− | If '''''<nowiki><axis>.SlaveD</nowiki>''isable''' is off, the system behaves as it did previously.
| + | = Slave - disconnect = |
| + | * Name: <nowiki><axis>.SlaveDisconnect </nowiki> |
| + | * Type: long |
| + | * Values: 0 or 1 |
| + | * Default: 1 |
| + | * Limitations: Modal-Only, Read/Write |
| + | * Context: Task or Terminal |
| + | Flag for protection against unwonted disconnection between master and slave pairs during camming/gearing. If this flag is off, the master/slave pair will be disconnected from each other only by explicit issuing: “<slaveaxis>.slave= 0” or “STOP <slaveaxis>”. |
| | | |
− | Special care must be taken to avoid loops i.e. if the master disables the slave and the slave disables the master there must be a way that explicit enabling of master-slave pair succeeds.
| + | See Also: [[MC-Basic:axis.SLAVEDISCONNECT |SlaveDisconnect]] |
| | | |
| + | {{Note|Take care to avoid loops; i.e., if the master disables the slave and the slave disables the master, there must be a way that explicit enabling of master-slave pair succeeds.}} |
| | | |
| = Manz's Bugs related to this issue: = | | = Manz's Bugs related to this issue: = |
Line 218: |
Line 139: |
| | | |
| {{Bugzilla|1003}} B/F: Master-Slave order affects PCMD synchronization | | {{Bugzilla|1003}} B/F: Master-Slave order affects PCMD synchronization |
| + | --> |