Update the PosTable Index.
This function must be called after finishing the current motion.
It also must be called before the first motion.
In that case the FirstMove parameter must be True.
Version history
0.3.0
Changes
conditionsinput
QAis not updated if the conditions are not satisfied for the next entry
show full history
0.2.0
Changes
- Replace
posTableModebyallowQueuing
- Input
stopRequest
0.1.0-beta
Changes
- initial version
Overview
| kind | name | type | default | comment |
|---|---|---|---|---|
| input | allowQueuing | BOOL | allow queuing the next motions | |
| input | firstMove | BOOL | calc first move after system was reset | |
| input | stopAfterLastEntry | BOOL | continue to the start of PosTable when searching for the next Index and LoadIndex | |
| input | conditions | ARRAY [0..GVL.CONDITIONS_UBOUND] OF BOOL | bits used as start conditions for a PosTable entry | |
| input | loadIndex | INT | index for loading next motion(s) | |
| in_out | posTable | McePosTableData | trajectory to be processed by PosTable | |
| in_out | QA | INT | allowed Queueing Amount; number of motions to queue (for smooth motion) | |
| in_out | lastEntry | BOOL | last entry in process | |
| in_out | stopEntry | BOOL | entry with robot standstill (Action > 0) in process | |
| in_out | waitBeforeNextEntry | BOOL | next valid entry has start conditions | |
| in_out | index | INT | PosTable index for current motion |
Details
allowQueuing
BOOLAllow queuing the next motions.
| value | explanation |
|---|---|
| 0 | QA is decreased at the end of each motion until 0 |
| 1 | QA is updated depending on the number of remaining entries until standstill |
firstMove
BOOLMust be True when calculating the first motion of the PosTable.
False otherwise.
stopAfterLastEntry
BOOLContinue to the start of PosTable when searching for the next Index and LoadIndex if False.
conditions
ARRAY [0..GVL.CONDITIONS_UBOUND] OF BOOLBits used as start conditions for a PosTable entry.
If a PosTable entry has one or more bits in startConditions set to TRUE
then the motion for that entry will not be started until the start conditions
are satisfied.
- Conditions are only checked for the
TRUEstate - If you need a condition to be checked for the
FALSEstate, you need to invert the connected signal outside of PosTable
loadIndex
INTIndex of the last loaded motion.
posTable
McePosTableDataTrajectory to be processed by PosTable.
QA
INTThe Queueing Amount is the number of motions allowed to be queued.
Queueing motion in advance is necessary for smooth motion.
lastEntry
BOOLTrue if the last valid entry of the PosTable is in process.
stopEntry
BOOLTrue if the current entry of the PosTable ends in a standstill.
This means that an ActionID will be performed at the end of motion.
waitBeforeNextEntry
BOOLTrue if the next valid entry of the PosTable has start conditions.
index
INTThe PosTable index is updated by this function.
Source code
Declarations
(*Update the PosTable Index*)
FUNCTION McePosTableUpdateIndex
(*
* -----------------------------------------------------------------------------
* Name : McePosTableUpdateIndex
* Version : 0.3.0
* Date : 2024-05-15
* Author : Rioual
* Family : YaskawaMce
* Organisation : github.com/YaskawaEurope/mlx-examples
*
* -----------------------------------------------------------------------------
* Update the PosTable Index
* -----------------------------------------------------------------------------
*)
VAR_INPUT
allowQueuing : BOOL; (*allow queuing the next motions*)
firstMove : BOOL; (*calc first move after system was reset*)
stopAfterLastEntry : BOOL; (*continue to the start of PosTable when searching for the next Index and LoadIndex*)
conditions : ARRAY [0..GVL.CONDITIONS_UBOUND] OF BOOL; (*bits used as start conditions for a PosTable entry*)
loadIndex : INT; (*index for loading next motion(s)*)
END_VAR
VAR_IN_OUT
posTable : McePosTableData; (*trajectory to be processed by PosTable*)
QA : INT; (*allowed Queueing Amount; number of motions to queue (for smooth motion)*)
lastEntry : BOOL; (*last entry in process*)
stopEntry : BOOL; (*entry with robot standstill (Action > 0) in process*)
waitBeforeNextEntry : BOOL; (*next valid entry has start conditions*)
index : INT; (*PosTable index for current motion*)
END_VAR
VAR
nPosTableSize : INT; (*number of entries*)
nEntriesRemaining : INT; (*number of entries remaining*)
END_VAR
Logic
nPosTableSize := UINT_TO_INT(SIZEOF(posTable) / SIZEOF(posTable.stEntry[0]));
// -----------------------------------------------------------------------------
// update index
// -----------------------------------------------------------------------------
// update index to the next valid PosTableEntry
IF firstMove THEN
// just validate the current index on the first move
index := McePosTableFindEntry(index, 0, nPosTableSize, TRUE, posTable);
ELSE
// increase the index
index := McePosTableFindEntry(index, 1, nPosTableSize, TRUE, posTable);
END_IF;
// -----------------------------------------------------------------------------
// calculate Queueing Amount (allowed number of motions to be queued)
// -----------------------------------------------------------------------------
IF (NOT waitBeforeNextEntry OR firstMove) AND (index >= 0) THEN
McePosTableRecalcQA(allowQueuing := allowQueuing,
firstMove := firstMove,
stopAfterLastEntry := stopAfterLastEntry,
loadIndex := loadIndex,
conditions := conditions,
posTable := posTable,
QA := QA,
lastEntry := lastEntry,
stopEntry := stopEntry,
waitBeforeNextEntry := waitBeforeNextEntry,
index := index
);
END_IF;
Implementation
McePosTableUpdateIndex(
allowQueuing := ,
firstMove := ,
stopAfterLastEntry := ,
conditions := ,
loadIndex := ,
posTable := ,
QA := ,
lastEntry := ,
stopEntry := ,
waitBeforeNextEntry := ,
index := );