PCS7: Matrix operations (part 1)

: 2020-04-13

: komatic

: SCL



flow



Two sources of blocks (addition and subtraction matrix) from PCS 7 AP Library V90sp2,

used in Kalman filter:
MxAdd FC466 Adds two matrices (used internally)
MxSub FC471 Subtracts two matrices (used internally)





Name: FC466
Symbolic Name: MxAdd
Symbol Comment: MxAdd
Family: System
Version: 5.0
Author: AdvLib90
Last modified: 10/10/2016
Use: UDT44,UDT47
Size in work memory: 790 bytes
Signature: generiert vom SCL Übersetzer Version: SCLCOMP K05.03.08.03_04.01.00.01 release





Name: FC471
Symbolic Name: MxSub
Symbol Comment: MxSub
Family: System
Version: 5.0
Author: AdvLib90
Last modified: 10/10/2016
Use: UDT44,UDT47
Size in work memory: 790 bytes
Signature: generiert vom SCL Übersetzer Version: SCLCOMP K05.03.08.03_04.01.00.01 release





{
Scl_ResetOptions ;
Scl_OverwriteBlocks:= 'y' ;
Scl_GenerateReferenceData := 'y' ;
Scl_S7ServerActive:= 'n' ;
Scl_CreateObjectCode:= 'y' ;
Scl_OptimizeObjectCode:= 'y' ;
Scl_MonitorArrayLimits:= 'n' ;
Scl_CreateDebugInfo := 'n' ;
Scl_SetOKFlag:= 'n' ;
Scl_SetMaximumStringLength:= '254'
}
 
//==========================================================================
 
TYPE "Matrix15"
// Description:
// UDT for matrix operations
// max. dimension of all Matrix-Functions Mx... is defined here, default 15x15
//
 
 
STRUCT
zeilenzahl : INT ;
spaltenzahl : INT ;
elemente : ARRAY [1 .. 15, 1 .. 15 ] OF REAL ;
END_STRUCT ;
END_TYPE
 
//==========================================================================
 
TYPE "StcMatrix15"
// Description:
// UDT for matrix operations
// max. dimension of all Matrix-Functions Mx... is defined here, default 15x15
//
 
 
STRUCT
zeilenzahl : INT ;
spaltenzahl : INT ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem11 : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem12 : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem13 : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem14 : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem15 : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem16 : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem17 : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem18 : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem19 : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem1A : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem1B : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem1C : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem1D : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem1E : REAL ; //elemente: ARRAY[1..15,1..15] OF REAL;
elem1F : REAL ;
elem21 : REAL ;
elem22 : REAL ;
elem23 : REAL ;
elem24 : REAL ;
elem25 : REAL ;
elem26 : REAL ;
elem27 : REAL ;
elem28 : REAL ;
elem29 : REAL ;
elem2A : REAL ;
elem2B : REAL ;
elem2C : REAL ;
elem2D : REAL ;
elem2E : REAL ;
elem2F : REAL ;
elem31 : REAL ;
elem32 : REAL ;
elem33 : REAL ;
elem34 : REAL ;
elem35 : REAL ;
elem36 : REAL ;
elem37 : REAL ;
elem38 : REAL ;
elem39 : REAL ;
elem3A : REAL ;
elem3B : REAL ;
elem3C : REAL ;
elem3D : REAL ;
elem3E : REAL ;
elem3F : REAL ;
elem41 : REAL ;
elem42 : REAL ;
elem43 : REAL ;
elem44 : REAL ;
elem45 : REAL ;
elem46 : REAL ;
elem47 : REAL ;
elem48 : REAL ;
elem49 : REAL ;
elem4A : REAL ;
elem4B : REAL ;
elem4C : REAL ;
elem4D : REAL ;
elem4E : REAL ;
elem4F : REAL ;
elem51 : REAL ;
elem52 : REAL ;
elem53 : REAL ;
elem54 : REAL ;
elem55 : REAL ;
elem56 : REAL ;
elem57 : REAL ;
elem58 : REAL ;
elem59 : REAL ;
elem5A : REAL ;
elem5B : REAL ;
elem5C : REAL ;
elem5D : REAL ;
elem5E : REAL ;
elem5F : REAL ;
elem61 : REAL ;
elem62 : REAL ;
elem63 : REAL ;
elem64 : REAL ;
elem65 : REAL ;
elem66 : REAL ;
elem67 : REAL ;
elem68 : REAL ;
elem69 : REAL ;
elem6A : REAL ;
elem6B : REAL ;
elem6C : REAL ;
elem6D : REAL ;
elem6E : REAL ;
elem6F : REAL ;
elem71 : REAL ;
elem72 : REAL ;
elem73 : REAL ;
elem74 : REAL ;
elem75 : REAL ;
elem76 : REAL ;
elem77 : REAL ;
elem78 : REAL ;
elem79 : REAL ;
elem7A : REAL ;
elem7B : REAL ;
elem7C : REAL ;
elem7D : REAL ;
elem7E : REAL ;
elem7F : REAL ;
elem81 : REAL ;
elem82 : REAL ;
elem83 : REAL ;
elem84 : REAL ;
elem85 : REAL ;
elem86 : REAL ;
elem87 : REAL ;
elem88 : REAL ;
elem89 : REAL ;
elem8A : REAL ;
elem8B : REAL ;
elem8C : REAL ;
elem8D : REAL ;
elem8E : REAL ;
elem8F : REAL ;
elem91 : REAL ;
elem92 : REAL ;
elem93 : REAL ;
elem94 : REAL ;
elem95 : REAL ;
elem96 : REAL ;
elem97 : REAL ;
elem98 : REAL ;
elem99 : REAL ;
elem9A : REAL ;
elem9B : REAL ;
elem9C : REAL ;
elem9D : REAL ;
elem9E : REAL ;
elem9F : REAL ;
elemA1 : REAL ;
elemA2 : REAL ;
elemA3 : REAL ;
elemA4 : REAL ;
elemA5 : REAL ;
elemA6 : REAL ;
elemA7 : REAL ;
elemA8 : REAL ;
elemA9 : REAL ;
elemAA : REAL ;
elemAB : REAL ;
elemAC : REAL ;
elemAD : REAL ;
elemAE : REAL ;
elemAF : REAL ;
elemB1 : REAL ;
elemB2 : REAL ;
elemB3 : REAL ;
elemB4 : REAL ;
elemB5 : REAL ;
elemB6 : REAL ;
elemB7 : REAL ;
elemB8 : REAL ;
elemB9 : REAL ;
elemBA : REAL ;
elemBB : REAL ;
elemBC : REAL ;
elemBD : REAL ;
elemBE : REAL ;
elemBF : REAL ;
elemC1 : REAL ;
elemC2 : REAL ;
elemC3 : REAL ;
elemC4 : REAL ;
elemC5 : REAL ;
elemC6 : REAL ;
elemC7 : REAL ;
elemC8 : REAL ;
elemC9 : REAL ;
elemCA : REAL ;
elemCB : REAL ;
elemCC : REAL ;
elemCD : REAL ;
elemCE : REAL ;
elemCF : REAL ;
elemD1 : REAL ;
elemD2 : REAL ;
elemD3 : REAL ;
elemD4 : REAL ;
elemD5 : REAL ;
elemD6 : REAL ;
elemD7 : REAL ;
elemD8 : REAL ;
elemD9 : REAL ;
elemDA : REAL ;
elemDB : REAL ;
elemDC : REAL ;
elemDD : REAL ;
elemDE : REAL ;
elemDF : REAL ;
elemE1 : REAL ;
elemE2 : REAL ;
elemE3 : REAL ;
elemE4 : REAL ;
elemE5 : REAL ;
elemE6 : REAL ;
elemE7 : REAL ;
elemE8 : REAL ;
elemE9 : REAL ;
elemEA : REAL ;
elemEB : REAL ;
elemEC : REAL ;
elemED : REAL ;
elemEE : REAL ;
elemEF : REAL ;
elemF1 : REAL ;
elemF2 : REAL ;
elemF3 : REAL ;
elemF4 : REAL ;
elemF5 : REAL ;
elemF6 : REAL ;
elemF7 : REAL ;
elemF8 : REAL ;
elemF9 : REAL ;
elemFA : REAL ;
elemFB : REAL ;
elemFC : REAL ;
elemFD : REAL ;
elemFE : REAL ;
elemFF : REAL ;
END_STRUCT ;
END_TYPE
 
//==========================================================================
 
FUNCTION FC1466 : VOID // "MxAdd" : VOID
TITLE =''
AUTHOR : AdvLib90
FAMILY : System
NAME : MxAdd
VERSION : '5.0'
 
 
VAR_INPUT
StcMxA : "StcMatrix15";
StcMxA_aux AT StcMxA : "Matrix15";
StcMxB : "StcMatrix15";
StcMxB_aux AT StcMxB : "Matrix15";
END_VAR
VAR_OUTPUT
StcMxC : "StcMatrix15";
StcMxC_aux AT StcMxC : "Matrix15";
END_VAR
VAR_TEMP
zeileA : INT ; //Laufindizes
spalteA : INT ; //Laufindizes
END_VAR
 
BEGIN
 
IF (StcMxA.zeilenzahl = StcMxB.zeilenzahl) AND (StcMxA.spaltenzahl = StcMxB.spaltenzahl) THEN
StcMxC.zeilenzahl:=StcMxA.zeilenzahl;
StcMxC.spaltenzahl:=StcMxA.spaltenzahl;
FOR zeileA:=1 TO StcMxA_aux.zeilenzahl BY 1 DO
FOR spalteA:=1 TO StcMxA_aux.spaltenzahl BY 1 DO
StcMxC_aux.elemente[zeileA,spalteA]:=StcMxA_aux.elemente[zeileA,spalteA]+StcMxB_aux.elemente[zeileA,spalteA];
END_FOR;
END_FOR;
ELSE
StcMxC.zeilenzahl:=0;
StcMxC.spaltenzahl:=0;
END_IF;
 
END_FUNCTION
 
//==========================================================================
 
FUNCTION FC1471 : VOID // "MxSub" : VOID
TITLE =''
AUTHOR : AdvLib90
FAMILY : System
NAME : MxSub
VERSION : '5.0'
 
 
VAR_INPUT
StcMxA : "StcMatrix15";
StcMxA_aux AT StcMxA : "Matrix15";
StcMxB : "StcMatrix15";
StcMxB_aux AT StcMxB : "Matrix15";
END_VAR
VAR_OUTPUT
StcMxC : "StcMatrix15";
StcMxC_aux AT StcMxC : "Matrix15";
END_VAR
VAR_TEMP
zeileA : INT ; //Laufindizes
spalteA : INT ; //Laufindizes
END_VAR
BEGIN
 
IF (StcMxA.zeilenzahl = StcMxB.zeilenzahl) AND (StcMxA.spaltenzahl = StcMxB.spaltenzahl) THEN
StcMxC.zeilenzahl:=StcMxA.zeilenzahl;
StcMxC.spaltenzahl:=StcMxA.spaltenzahl;
FOR zeileA:=1 TO StcMxA_aux.zeilenzahl BY 1 DO
FOR spalteA:=1 TO StcMxA_aux.spaltenzahl BY 1 DO
StcMxC_aux.elemente[zeileA,spalteA]:=StcMxA_aux.elemente[zeileA,spalteA]-StcMxB_aux.elemente[zeileA,spalteA];
END_FOR;
END_FOR;
ELSE
StcMxC.zeilenzahl:=0;
StcMxC.spaltenzahl:=0;
END_IF;
 
END_FUNCTION
 



flow

Block checksum equals.





flow

Block checksum equals.



Original library PCS7 APL (V9.0sp2) (zip, 4.6Mb)

Documentation (pdf, 22Mb)







: 415

.

:

(4000 max):

: