大家帮忙分析此程序内有没有给快速输入置位的功能:
A DB8.DBX 45.0 //Grundstellungsmerker
JC RELO //Ref loeschen
OPN DB 1
OPN DI 5
L #Ref
T LW 0
L DIW 22 //MaxChan
L #ChanNo
JC CErr
L B#16#0
>I
JC COK
CErr: AN #Start
JC AEND
L B#16#2
JU fehl
COK: AN #Start //Start = 0
AN #Refaccept //schon gestartet ?
JC AEND //nein
L #ChanNo
DEC 1
T #Chan
L DIW 80 //len_an_asup
*I
L DIW 82 //sig_an_asup
+I
SLD 3
LAR1
AN #Start
JC ASLO
L #ChanNo
DEC 1
L DIW 84 //len_von_kan
*I
L DIW 60 //beg_asup_out
+I
SLD 3
LAR2
L #Chan
L DIW 28 //len_kanal_puffer_db6
*I
L DIW 30 //beg_asup_int_ausgef_db6
+I
SLD 3
T #AsupEndPoi
L B#16#0
L #IntNo
>=I
L B#16#3
JC fehl
TAK
L B#16#18 //24
>I
L B#16#3
JC fehl
L #IntNo
DEC 1 //Bit-Pointer auf akt. Int-Nr.
+AR2
L #AsupEndPoi
+D
T #AsupEndPoi
OPN DI 6
A #Refaccept
JC WAIT
L DBB [AR1,P#2.0] //Interruptnummer
L B#16#0
<>I //NCK-In Schnittstelle belegt
JC AEND
A DIX [#AsupEndPoi] //ASUP beendet, falls Signal schon
R DIX [#AsupEndPoi] //vor Start gesetzt war (fastI/O -> Int)
JC AEND
L #IntNo
T DBB [AR1,P#2.0]
S DBX [AR1,P#0.7] //Programm starten
S #Refaccept
JU AEND
WAIT: A DBX [AR2,P#0.0] //Int erkannt
S #Referkannt
A DBX [AR2,P#4.0] //ASUP laeuft
= #RefActiv
S #Reflaeuft
A DBX [AR2,P#8.0] //Interruptnummer nicht vergeben
S #RefStartErr
A DBX [AR2,P#12.0] //Int.-ausfuehrung nicht moeglich
S #RefError
A DIX [#AsupEndPoi] //ASUP beendet
S #RefDone
R DIX [#AsupEndPoi] //ASUP beendet
O #Referkannt //Int von NCK bearbeitet?
O #Reflaeuft
O #RefStartErr
O #RefError
O #RefDone
JCN AEND //nein
ASLO: L #IntNo
L DBB [AR1,P#2.0] //Int-Nr.
<>I
JC ASL1
L B#16#0
T DBB [AR1,P#2.0] //Interruptnummer
SET
R DBX [AR1,P#0.7] //ASUP starten
ASL1: A #Start
JC AEND
RELO: L B#16#0
T LW 0
AEND: L LW 0
T #Ref
A #RefActiv
= #Activ
A #RefDone
= #Done
A #RefStartErr
= #StartErr
A #RefError
= #Error
BE
fehl: T #dek56
CALL FC 20
Dekade12:=40 //40 = FC, 41 = FB, 80 = Graph
Dekade34:=9 //Baustein Nummer des Aufrufers
Dekade56:=#dek56 //Parameternummer
Zusatz :=0 //fuer ZustandsGraph
kommend :=TRUE
CALL SFC 46 //STS, Stop der PLC-CPU