Recalculate the Queuing Amount.
Version history
0.2.0
 
Rioual
Changes
Changed:
- Replace
posTableMode
byallowQueuing
- Replace
nQAmax
byQA_MAX
as a constant
show full history
0.1.0-beta
 
Rioual
Changes
Added:
- 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 | |
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 (ActionID > 0) in process | |
in_out | index | INT | PosTable index for current motion |
Details
allowQueuing
BOOL
Allow 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
BOOL
Must be True
when calculating the first motion of the PosTable.
False
otherwise.
stopAfterLastEntry
BOOL
Continue to the start of PosTable when searching for the next Index and LoadIndex if False
.
posTable
McePosTableData
Trajectory to be processed by PosTable.
QA
INT
The Queueing Amount is the number of motions allowed to be queued.
Queueing motion in advance is necessary for smooth motion.
lastEntry
BOOL
True
if the last valid entry of the PosTable is in process.
stopEntry
BOOL
True
if the current entry of the PosTable ends in a standstill.
This means that an ActionID will be performed at the end of motion.
index
INT
The PosTable index is updated by this function.
Source code
Declarations
(*Recalculate the Queuing Amount*)
FUNCTION McePosTableRecalcQA
(*
* -----------------------------------------------------------------------------
* Name : McePosTableRecalcQA
* Version : 0.2.0
* Date : 2024-02-29
* Author : Rioual
* Family : YaskawaMce
* Organisation : github.com/YaskawaEurope/mlx-examples
*
* -----------------------------------------------------------------------------
* Recalculate the Queuing Amount
* -----------------------------------------------------------------------------
*)
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*)
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 (ActionID > 0) in process*)
index : INT; (*PosTable index for current motion*)
END_VAR
VAR
nPosTableSize : INT; (*number of entries*)
nEntriesRemaining : INT; (*number of entries remaining*)
END_VAR
VAR CONSTANT
QA_MAX : INT := LIMIT(1, GVL.NR_OF_INSTANCES - 1, 20); (*max Queueing Amount; max number of motions which can be queued*)
END_VAR
Logic
nPosTableSize := UINT_TO_INT(SIZEOF(posTable) / SIZEOF(posTable.stEntry[0]));
// -----------------------------------------------------------------------------
// calculate remaining entries until standstill
// -----------------------------------------------------------------------------
nEntriesRemaining := McePosTableRemainingEntries( index := index,
posTableSize := nPosTableSize,
rollOver := NOT stopAfterLastEntry,
posTable := posTable);
// -----------------------------------------------------------------------------
// bitstatus last entry / stop entry
// -----------------------------------------------------------------------------
lastEntry := FALSE;
stopEntry := FALSE;
IF (nEntriesRemaining <= 0) THEN
IF (posTable.stEntry[index].nActionID > 0) THEN
stopEntry := TRUE;
// special case: the stopEntry is also the lastEntry
lastEntry := (McePosTableFindEntry(index, 1, nPosTableSize, FALSE, posTable) = - 1 );
ELSE
lastEntry := TRUE;
END_IF;
END_IF;
// -----------------------------------------------------------------------------
// calculate Queueing Amount (allowed number of motions to be queued)
// -----------------------------------------------------------------------------
// scenario 1; reduce QA till zero now
IF NOT allowQueuing THEN
QA := QA - 1;
ELSE
// scenario 2; reduce QA till zero by synchronizing to nEntriesRemaining
IF (nEntriesRemaining < QA_MAX) THEN
QA := nEntriesRemaining;
// scenario 3; use max QA
ELSE
QA := QA_MAX;
END_IF;
END_IF;
IF firstMove OR (QA < 0) THEN
QA := 0;
END_IF;
Implementation
Snippet of the function call:
McePosTableRecalcQA(
allowQueuing := ,
firstMove := ,
stopAfterLastEntry := ,
posTable := ,
QA := ,
lastEntry := ,
stopEntry := ,
index := );