下面的程序编的是比例阀的程序:
请教如何分析这段程序?
L DBNO
T #db_Speicher //DB-Register retten
L DINO //DI-Register retten
T #di_Speicher //DB-Register retten
TAR1 #AR1_Speicher //AR1 retten
TAR2 #AR2_Speicher //AR2 retten
// -## Plausibilit鋞spr黤ung
A(
L #Typ_Ausgang
L 1
)
O
A(
L #Typ_Ausgang
L 4
>I
)
O
A(
L #Typ_Eingang
L 1
)
O
A(
L #Typ_Eingang
L 2
>I
)
= #PAFE
JCN KFEH
L 0
T #Ausgabe
JU ENDE
KFEH: NOP 0
OPN #DB_Antrieb //DB mit Positionen und geschwindigkeiten oeffnen
A #FU_Fehler
JC FU1
A #Start_1 // Ziel 1 anfahren
JC M010
A #Start_2 // Ziel 2 anfahren
JC M011
A #Start_3 // Ziel 3 anfahren
JC M012
A #Start_4 // Ziel 4 anfahren
JC M013
A #Start_5 // Ziel 5 anfahren
JC M014
A #Start_6 // Ziel 6 anfahren
JC M015
A #Start_7 // Ziel 7 anfahren
JC M016
A #Start_8 // Ziel 8 anfahren
JC M017
A #Start_9 // Ziel 9 anfahren
JC M018
A #Start_10 // Ziel 10 anfahren
JC M019
A #Start_11 // Ziel 11 anfahren
JC ST11
A #Start_12 // Ziel 12 anfahren
JC ST12
A #Start_13 // Ziel 13 anfahren
JC ST13
A #Start_14 // Ziel 14 anfahren
JC ST14
A #Start_15 // Ziel 15 anfahren
JC ST15
FU1: L DBD 138 // keine Bewegung, letzte Zielposition laden
T #Zielposition
L 0
T #Beschleunigung
T #Verzoegerung
JU M003 // weiter mit Positionsfenster berechnen
M010: L DBD 4 // Ziel 1 anfahren
T #Zielposition
L DBW 76
T #Beschleunigung
L DBW 78
T #Verzoegerung
L DBW 162
T #override
JU M003
M011: L DBD 8 // Ziel 2 anfahren
T #Zielposition
L DBW 80
T #Beschleunigung
L DBW 82
T #Verzoegerung
L DBW 164
T #override
JU M003
M012: L DBD 12 // Ziel 3 anfahren
T #Zielposition
L DBW 84
T #Beschleunigung
L DBW 86
T #Verzoegerung
L DBW 166
T #override
JU M003
M013: L DBD 16 // Ziel 4 anfahren
T #Zielposition
L DBW 88
T #Beschleunigung
L DBW 90
T #Verzoegerung
L DBW 168
T #override
JU M003
M014: L DBD 20 // Ziel 5 anfahren
T #Zielposition
L DBW 92
T #Beschleunigung
L DBW 94
T #Verzoegerung
L DBW 170
T #override
JU M003
M015: L DBD 24 // Ziel 6 anfahren
T #Zielposition
L DBW 96
T #Beschleunigung
L DBW 98
T #Verzoegerung
L DBW 172
T #override
JU M003
M016: L DBD 28 // Ziel 7 anfahren
T #Zielposition
L DBW 100
T #Beschleunigung
L DBW 102
T #Verzoegerung
L DBW 174
T #override
JU M003
M017: L DBD 32 // Ziel 8 anfahren
T #Zielposition
L DBW 104
T #Beschleunigung
L DBW 106
T #Verzoegerung
L DBW 176
T #override
JU M003
M018: L DBD 36 // Ziel 9 anfahren
T #Zielposition
L DBW 108
T #Beschleunigung
L DBW 110
T #Verzoegerung
L DBW 178
T #override
JU M003
M019: L DBD 40 // Ziel 10 anfahren
T #Zielposition
L DBW 112
T #Beschleunigung
L DBW 114
T #Verzoegerung
L DBW 180
T #override
JU M003
ST11: L DBD 44 // Ziel 11 anfahren
T #Zielposition
L DBW 116
T #Beschleunigung
L DBW 118
T #Verzoegerung
L DBW 182
T #override
JU M003
ST12: L DBD 48 // Ziel 12 anfahren
T #Zielposition
L DBW 120
T #Beschleunigung
L DBW 122
T #Verzoegerung
L DBW 184
T #override
JU M003
ST13: L DBD 52 // Ziel 13 anfahren
T #Zielposition
L DBW 124
T #Beschleunigung
L DBW 126
T #Verzoegerung
L DBW 186
T #override
JU M003
ST14: L DBD 56 // Ziel 14 anfahren
T #Zielposition
L DBW 128
T #Beschleunigung
L DBW 130
T #Verzoegerung
L DBW 188
T #override
JU M003
ST15: L DBD 60 // Ziel 15 anfahren
T #Zielposition
L DBW 132
T #Beschleunigung
L DBW 134
T #Verzoegerung
L DBW 190
T #override
JU M003
// Parameter f黵 Positionierungs-FB laden
M003: L DBW 150 // Zeitbasis f黵 Stoprampe [sec]
L DBW 136 // Stoprampe in [%]
*I
DTR
L 1.000000e+002
/R
T #Stopzeit // Stopzeit [sec]
L DBW 66
T #Regelfenster
L DBW 72
T #Min_Geschwindigkeit
L DBW 74
L #override
*I
L 100
/I
T #Max_Geschwindigkeit
L DBW 148
T #WegbasisRampen
L #Typ_Eingang
L 2
==I
JC MTS1
L #Istposition
T #Istposition_Help // Istposition als DINT
T DBD 0 // Istposition f黵 Anzeige im OP
JU AR1
MTS1: L #Istposition
T #Istposition_Help // Istposition als DINT
LAR1 P##Istposition_Help
A #Reset_Err
R #Err_MagMTS
A L [AR1,P#0.3] // Auswertung Err_Magnet
S #Err_MagMTS
L 0
T LB [AR1,P#0.0]
A L [AR1,P#1.7] // Istposition Neg.
JCN pos
L DW#16#FF
T LB [AR1,P#0.0] // PEB 黚erblenden mit 255
pos: NOP 0
L #Istposition
SLD 8
SRD 8
T #Istposition_Help // Istposition als DINT
T DBD 0 // Istposition f黵 Anzeige im OP
AR1: NOP 0
L #Zielposition
T DBD 138 // aktuelle Zielposition f黵 Anzeige auf OP
L DBW 154
T #Rest_Geschwindigkeit // aktuelle Restgeschwindigkeit
// Freigabe Positionierung
A #Einr_pos // Sperren der Positionierung nach dem Umschalten
O #Einr_neg // von Einrichten auf einen Starteingang
L S5T#2S
SF #Sperrzeit
AN #Sperrzeit
AN #Selbsth_pos // Vor in Selbsthaltung
AN #Selbsth_neg // Zur. in Selbsthaltung
AN #FU_Fehler
A(
O #Start_1
O #Start_2
O #Start_3
O #Start_4
O #Start_5
O #Start_6
O #Start_7
O #Start_8
O #Start_9
O #Start_10
O #Start_11
O #Start_12
O #Start_13
O #Start_14
O #Start_15
)
= #Freigabe // Freigabe, wenn mindest. 1 Startbefehl, kein Einr., keine Selbsth.
// Preset Encoder
OPN #DB_Antrieb
L #Typ_Eingang
L 2
==I
JC MTS2
L DBD 144 // Encoder Wert wenn kein Preset
T #Encoder
AN #Preset
JC M004
L DBD 144 // Presetwert Encoder
L DW#16#80000005 // Preset Encoder auf Presetwert
OD
T #Encoder
JU M004
MTS2: L 0 // Encoder Wert wenn kein Preset
T #Encoder
AN #Preset
JC M004
L DBD 144 // Presetwert Encoder
CAW
SLD 8 // f黵 MTS aufbereiten STATUS/HIGH/MEDIUM/LOW Byte
L DW#16#12000000 // Preset Encoder auf Presetwert
OD
T #Encoder
M004: NOP 0
// Positionsfenster Zielposition 1 berechnen
L DBD 4 // Zielposition 1
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z1
L DBD 4 // Zielposition 1
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z1
// Positionsfenster Zielposition 2 berechnen
L DBD 8 // Zielposition 2
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z2
L DBD 8 // Zielposition 2
L DBW 64 // Positionsfenster
+D
// Positionsfenster Zielposition 3 berechnen
T #PosFensterEnde_Z2
L DBD 12 // Zielposition 3
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z3
L DBD 12 // Zielposition 3
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z3
// Positionsfenster Zielposition 4 berechnen
L DBD 16 // Zielposition 4
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z4
L DBD 16 // Zielposition 4
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z4
// Positionsfenster Zielposition 5 berechnen
L DBD 20 // Zielposition 5
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z5
L DBD 20 // Zielposition 5
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z5
// Positionsfenster Zielposition 6 berechnen
L DBD 24 // Zielposition 6
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z6
L DBD 24 // Zielposition 6
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z6
// Positionsfenster Zielposition 7 berechnen
L DBD 28 // Zielposition 7
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z7
L DBD 28 // Zielposition 7
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z7
// Positionsfenster Zielposition 8 berechnen
L DBD 32 // Zielposition 8
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z8
L DBD 32 // Zielposition 8
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z8
// Positionsfenster Zielposition 9 berechnen
L DBD 36 // Zielposition 9
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z9
L DBD 36 // Zielposition 9
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z9
// Positionsfenster Zielposition 10 berechnen
L DBD 40 // Zielposition 10
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z10
L DBD 40 // Zielposition 10
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z10
// Positionsfenster Zielposition 11 berechnen
L DBD 44 // Zielposition 11
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z11
L DBD 44 // Zielposition 11
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z11
// Positionsfenster Zielposition 12 berechnen
L DBD 48 // Zielposition 12
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z12
L DBD 48 // Zielposition 12
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z12
// Positionsfenster Zielposition 13 berechnen
L DBD 52 // Zielposition 13
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z13
L DBD 52 // Zielposition 13
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z13
// Positionsfenster Zielposition 14 berechnen
L DBD 56 // Zielposition 14
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z14
L DBD 56 // Zielposition 14
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z14
// Positionsfenster Zielposition 15 berechnen
L DBD 60 // Zielposition 15
L DBW 64 // Positionsfenster
-D
T #PosfensterAnfang_Z15
L DBD 60 // Zielposition 15
L DBW 64 // Positionsfenster
+D
T #PosFensterEnde_Z15
R #InZiel_1 // Reset Ziel erreicht
R #InZiel_2
R #InZiel_3
R #InZiel_4
R #InZiel_5
R #InZiel_6 // Reset Ziel erreicht
R #InZiel_7
R #InZiel_8
R #InZiel_9
R #InZiel_10
R #InZiel_11
R #InZiel_12
R #InZiel_13
R #InZiel_14
R #InZiel_15
L #Istposition_Help // Zielposition 1 erreicht
L #PosfensterAnfang_Z1
JC M005
L #Istposition_Help
L #PosFensterEnde_Z1
>D
JC M005
= #InZiel_1
M005: L #Istposition_Help // Zielposition 2 erreicht
L #PosfensterAnfang_Z2
JC M006
L #Istposition_Help
L #PosFensterEnde_Z2
>D
JC M006
= #InZiel_2
M006: L #Istposition_Help // Zielposition 3 erreicht
L #PosfensterAnfang_Z3
JC M007
L #Istposition_Help
L #PosFensterEnde_Z3
>D
JC M007
= #InZiel_3
M007: L #Istposition_Help // Zielposition 4 erreicht
L #PosfensterAnfang_Z4
JC M008
L #Istposition_Help
L #PosFensterEnde_Z4
>D
JC M008
= #InZiel_4
M008: L #Istposition_Help // Zielposition 5 erreicht
L #PosfensterAnfang_Z5
JC M009
L #Istposition_Help
L #PosFensterEnde_Z5
>D
JC M009
= #InZiel_5
M009: L #Istposition_Help // Zielposition 6 erreicht
L #PosfensterAnfang_Z6
JC M021
L #Istposition_Help
L #PosFensterEnde_Z6
>D
JC M021
= #InZiel_6
M021: L #Istposition_Help // Zielposition 7 erreicht
L #PosfensterAnfang_Z7
JC M022
L #Istposition_Help
L #PosFensterEnde_Z7
>D
JC M022
= #InZiel_7
M022: L #Istposition_Help // Zielposition 8 erreicht
L #PosfensterAnfang_Z8
JC M023
L #Istposition_Help
L #PosFensterEnde_Z8
>D
JC M023
= #InZiel_8
M023: L #Istposition_Help // Zielposition 9 erreicht
L #PosfensterAnfang_Z9
JC M024
L #Istposition_Help
L #PosFensterEnde_Z9
>D
JC M024
= #InZiel_9
M024: L #Istposition_Help // Zielposition 10 erreicht
L #PosfensterAnfang_Z10
JC Z11
L #Istposition_Help
L #PosFensterEnde_Z10
>D
JC Z11
= #InZiel_10
Z11: L #Istposition_Help // Zielposition 11 erreicht
L #PosfensterAnfang_Z11
JC Z12
L #Istposition_Help
L #PosFensterEnde_Z11
>D
JC Z12
= #InZiel_11
Z12: L #Istposition_Help // Zielposition 12 erreicht
L #PosfensterAnfang_Z12
JC Z13
L #Istposition_Help
L #PosFensterEnde_Z12
>D
JC Z13
= #InZiel_12
Z13: L #Istposition_Help // Zielposition 13 erreicht
L #PosfensterAnfang_Z13
JC Z14
L #Istposition_Help
L #PosFensterEnde_Z13
>D
JC Z14
= #InZiel_13
Z14: L #Istposition_Help // Zielposition 14 erreicht
L #PosfensterAnfang_Z14
JC Z15
L #Istposition_Help
L #PosFensterEnde_Z14
>D
JC Z15
= #InZiel_14
Z15: L #Istposition_Help // Zielposition 15 erreicht
L #PosfensterAnfang_Z15
JC FB35
L #Istposition_Help
L #PosFensterEnde_Z15
>D
JC FB35
= #InZiel_15
FB35: CALL "FB30 PPV-DG" , #DB_FB_POS
Zielposition :=#Zielposition
Istposition :=#Istposition_Help
Beschleunigung :=#Beschleunigung
Verzoegerung :=#Verzoegerung
ZeitStoprampe :=#Stopzeit
Min_Geschwindigkeit :=#Min_Geschwindigkeit
Max_Geschwindigkeit :=#Max_Geschwindigkeit
Rest_Geschwindigkeit:=#Rest_Geschwindigkeit
Regelfenster :=#Regelfenster
WegbasisRampe :=#WegbasisRampen
Vmax_Wegbasis :=100
Freigabe :=#Freigabe
Regelposition :=#InRegelf
Sollgeschw_Prozent :=#V_aktuell
OPN #DB_Antrieb // DB mit Positionen und Geschwindigkeiten aufrufen
A #Einr_pos // Im Einrichtbetrieb positive Ausgangsspannung
O #Selbsth_pos // In Selbsthaltung positive Ausgangsspannung
JC M001
A #Einr_neg // Im Einrichtbetrieb negative Ausgangsspannung
O #Selbsth_neg // In Selbsthaltung negative Ausgangsspannung
JC M002
JU M026
M001: L DBW 68 // Im Einrichtbetrieb positive Ausgangsspannung
DTR
T #V_aktuell
OPN #DB_FB_POS
SET
R DBX 56.2 // Stopp Flanke l鰏chen
R DBX 56.5 // Stopp aktiv negativ
R DBX 56.6 // Stopp aktiv positiv
OPN #DB_Antrieb
JU M026
M002: L DBW 70 // Im Einrichtbetrieb negative Ausgangsspannung
NEGD
DTR
T #V_aktuell
OPN #DB_FB_POS
SET
R DBX 56.2 // Stopp Flanke l鰏chen
R DBX 56.5 // Stopp aktiv negativ
R DBX 56.6 // Stopp aktiv positiv
OPN #DB_Antrieb
M026: L #V_aktuell
AN #Richtungsumkehr //Zylinderhub in pos. oder neg. Wegrichtung
JC M027
L -1.000000e+000
*R
T #V_aktuell
M027: L 0.000000e+000
>=R
= #Geschw_Pos //Positive oder negative Geschwindigkeit
AN #Geschw_Pos //negative Geschwindigkeit
JC M020
L #Typ_Ausgang
L 2
==I
JC _IP // Ausgabe Strom
TAK
L 3
==I
JC _NPS // Ausgabe Drehzahl Betrieb Micromaster MM4xx
TAK
L 4 // Ausgabe Drehzahl Betrieb Lenzeumrichter 82xx
==I
JC _NPL
// -## Ausgabe Spannung positiv
L #V_aktuell
L 2.764800e+004 //100% <-> 27648 <-> +10V
*R
L 1.000000e+002
/R
RND
T #Ausgabe //Ausgabe Geschwindigkeit Analogausgabe 0 - +10V
JU ENDE
// -## Ausgabe Strom positiv
_IP: L #V_aktuell //100% <-> 27648 <-> +20mA
L 1.382400e+004 //0% <-> 13834 <-> 12mA
*R
L 1.000000e+002
/R
L 1.382400e+004
+R
RND
T #Ausgabe //Ausgabe Geschwindigkeit Analogausgabe 4-20mA
L 1728
/I
L 4
+I
T DBW 142 //Anzeige OP 4-20mA
JU ENDE
// -## Ausgabe Drehzahl Betrieb mit Lenzeumrichter 82xx positiv
_NPL: L #V_aktuell
ITD
DTR
L #Max_n_Motor // maximale Drehzahl vom Motor
*R
L 2.764800e+004
/R
RND
T #Ausgabe
JU ENDE
// -## Ausgabe Drehzahl Betrieb mit Micromaster MM4xx positiv
_NPS: L #V_aktuell
L 1.638400e+004 // 100% -> 16384 = 4000Hex = 50Hz
*R
L 1.000000e+002
/R
RND
T #Ausgabe //Ausgabe Drehzahl Motor (0 - 16384 => 0 - 100%)
JU M028
M020: L #Typ_Ausgang
L 2
==I
JC _IN
TAK
L 3
==I
JC _NNS
TAK
L 4
==I
JC _NNL
// -## Ausgabe Spannung negativ
L #V_aktuell //-100% <-> -27648 <-> -10V
L 2.764800e+004
*R
L 1.000000e+002
/R
RND
T #Ausgabe //Ausgabe Geschwindigkeit Analogausgabe 0 - -10V
JU ENDE
// -## Ausgabe Strom negativ
_IN: L #V_aktuell //-100% <-> 0 <-> +4mA
L -1.382400e+004 //0% <-> 13834 <-> 12mA (Vaktuell ist negativ)
*R
L 1.000000e+002
/R
L 1.382400e+004
TAK
-R
RND
T #Ausgabe //Ausgabe Geschwindigkeit Analogausgabe 4-20mA
L 1728
/I
L 4
+I
T DBW 142 //Anzeige OP 4-20mA
JU ENDE
// -## Ausgabe Drehzahl Betrieb mit Lenzeumrichter 82xx negativ
_NNL: L #V_aktuell
ITD
DTR
L #Max_n_Motor // maximale Drehzahl vom Motor
*R
L 2.764800e+004
/R
RND
T #Ausgabe
JU ENDE
// -## Ausgabe Drehzahl Betrieb mit Micromaster MM4xx negativ
_NNS: L #V_aktuell
L 1.638400e+004 // 100% -> 16384 = 4000Hex = 50Hz
*R
L 1.000000e+002
/R
RND
T #Ausgabe //Ausgabe Drehzahl Motor (0 - -16384 => 0 - -100%)
M028: NOP 0
L #f_50_87Hz
ABS
T #f_50_87Hz
L 5.000000e+001
JCN M029
T #f_50_87Hz
M029: TAK
L 8.700000e+001
>R
JCN M030
T #f_50_87Hz
M030: NOP 0
L #Ausgabe
ITD
DTR
L #f_50_87Hz
*R
L 5.000000e+001
/R
RND
T #Ausgabe
ENDE: L #V_aktuell // -100% <-> +100%
RND
T DBW 152 // Anzeige OP -100% <-> +100%
OPN DB [#db_Speicher] //DB-Register wiederherstellen
OPN DI [#di_Speicher] //DI-Register wiederherstellen
LAR1 #AR1_Speicher //AR1 wiederherstellen
LAR2 #AR2_Speicher //AR2 wiederherstellen