8 BCD .

: 2016-06-18

: komatic

: SCL



optimization





BCD , INT BTI , OB121 STOP, ).
BCD , BCD .



Standard Library -> IEC Function Blocks -> FC8 (DT_TOD), DATE_AND_TIME TIME_OF_DAY, Siemens.





- BCD , 9



- 8 , .





L B [AR1,P#0.0];
SRW 4;
L 9;
>I ;
JC fehl;
L B [AR1,P#0.0];
SLW 4;
SRW 4;
L 9;
>I ;
JC fehl;
L B [AR1,P#1.0];
SRW 4;
L 9;
>I ;
JC fehl;
L B [AR1,P#1.0];
SLW 4;
SRW 4;
L 9;
>I ;
JC fehl;
L B [AR1,P#2.0];
SRW 4;
L 9;
>I ;
JC fehl;
L B [AR1,P#2.0];
SLW 4;
SRW 4;
L 9;
>I ;
JC fehl;
L B [AR1,P#3.0];
SRW 4;
L 9;
>I ;
JC fehl;
L B [AR1,P#3.0];
SLW 4;
SRW 4;
L 9;
>I ;
JC fehl;
 
fehl: NOP 0; // ERROR



Siemens , (3 ) - 2 / 1 9 .



.





L D [AR1,P#3.0];
T #l_z_sp;
AD DW#16#66666666; // sind die Bits 1 oder 2 der Tetrade gesetzt?
PUSH ;
JZ next; // wenn Bit 1 und 2 nicht gesetzt dann kein Fehler mglich
SLD 1; // es kann als Ergebnis des Bit 1 und/oder 2 gesetzt sein
L #l_z_sp;
AD ; // Ergebnismaske links schieben um herauszufinden ob das Bit
AD DW#16#88888888; // zustzlich gesetzt ist
JN fehl; // wenn ja, dann Fehler
TAK ; // Maske aus Verundung 66666666 zurckholen
AD DW#16#44444444;
SLD 1; // Ergebnismaske schieben um herauszufinden ob Bit 3 gesetzt ist
L #l_z_sp;
AD ; // ist das Bit 3 auch gesetzt
JN fehl; // wenn ja, dann Fehler
next: NOP 0; // letztes Nibble prfen
fehl: NOP 0;



opt

- .



SCL, )





 
FUNCTION FC400 : VOID
 
VAR_TEMP
BCDs : DWORD;
Error : BOOL;
END_VAR
 
IF (BCDs AND SHL(IN:=BCDs,N:=1) AND DW#16#88888888) <> 0 THEN
Error:=true;
ELSIF (BCDs AND SHL(IN:=BCDs,N:=2) AND DW#16#88888888) <> 0 THEN
Error:=true;
END_IF;
 
END_FUNCTION







L #BCDs;
SLD 1;
L #BCDs;
AD ;
L DW#16#88888888;
AD ;
L DW#16#0;
<>D ;
JCN A7d0;
SET ;
= #Error;
JU A7d2;
A7d0: L #BCDs;
SLD 2;
L #BCDs;
AD ;
L DW#16#88888888;
AD ;
L DW#16#0;
<>D ;
JCN A7d2;
SET ;
= #Error;
A7d2: CLR ;









: 1732

.

:

(4000 max):

: