Add-On Instruction

Post date: Jul 02, 2011 4:46:10 PM

Have posted a more advanced version, EST.zip, that utilizes the same Control structure that you use with a FIFO Load / Unload pair.  This will allow you to delete an element in the middle of an array, but keep the Control.POS value set to the correct location.  This one I titled EST for Extract Stack.  Latter I will add a LST for Load Stack so that an element can be loaded anywhere in the array structure.

=================================================================

This Add-On was created in V19.  It will allow you to select an element within an array, that element will be copied to a destination and then the elements below it will be moved up to fill in.  The last element in the array will then be written to 0.  The add-on is attached below as ArrayShift.zip.

The main logic resembles:

/*If routine has completed previously then exit routine*/

IF DN THEN

TND();

END_IF;

/* Retrieve the size of the incomming array */

SIZE(ArrayIn,0,ArraySize);

/*Validate requested position to remove*/

IF (Position >= 0) AND (Position <= ArraySize-1) AND (ArraySize>1) THEN

ER:=0;

/*Set destination data to extract array element*/

Destination:=ArrayIn[Position];

/*Calculate the array positions to operate on*/

CopyStart:=Position+1;

CopyLength:=ArraySize-(Position+1);

ClearStart:=10;

/*Validate there is something to copy*/

IF CopyLength >0 THEN

CPS(ArrayIn[CopyStart], ArrayIn[Position], CopyLength);

ArrayIn[ArraySize-1]:=0;

ELSIF CopyLength = 0 THEN

ArrayIn[ArraySize-1]:=0;

END_IF;

DN:=1;

ELSE

ER:=1;

END_IF;