русский
Germany.ruForen → Архив Досок→ Programmierung

программы для SPS

30.04.12 15:10
Re: программы для SPS
 
  S.Heusser посетитель
in Antwort new_book 28.04.12 16:49, Zuletzt geändert 30.04.12 20:35 (S.Heusser)
В ответ на:
ищу готовые программы для SPS

А зачем тебе? ... Ну на посмотри, это я сегодня с утра наваял....
Netzwerk1: DB Öffnen, Parametrieren
L #IN_DB_Nr
T #DBNR_T
AUF DB [#DBNR_T]
//-----
L 0 // Paramerer ab DW 0 in FADA DB
SLW 3
LAR1
L DBW [AR1,P#0.0]
T #ANF_ADR_DB // Adresse erste Fach
L DBW [AR1,P#2.0]
T #END_ADR_DB // Adresse letzter Fach
L DBW [AR1,P#4.0]
T #BLOCK_Gr // Structgrosse des Faches Byte
L #IN_POS_FENSTER
ITD
T #POSI_FENSTR_SD
UN #POSI_S
S #SUCHLAUF_P1
Netzwerk2:P1 ERKENNUNG:ZEIGER VORBELEGEN AUF FACH 1
U #SUCHLAUF_P1
SPBN s000
L #ARD_ZEIGER1_S
L #END_ADR_DB
>=I
O(
L #ARD_ZEIGER1_S
L #ANF_ADR_DB
<I
)
SPBN s000
L #ANF_ADR_DB
// L #BLOCK_Gr
// +I
T #ARD_ZEIGER1_S // QTW ADR Überspringen
T #ADR_ZW_SP_S
SLW 3
LAR1
L DBW [AR1,P#0.0]
T #POS_NR_ZW1 // PosNr Vorbelegen
L DBD [AR1,P#4.0]
L #IN_S_IST
-R
T #S_DIFF_ZW1_SD // S diff vorbelegen
L 0
<D
SPBN s000
L #S_DIFF_ZW1_SD
NEGD
T #S_DIFF_ZW1_SD
s000: NOP 0
Netzwerk3:P1 POSITION ERKENNUNG:KLEINSTE S_DIFF ZYKLISCHE SUCHLAUF
U #SUCHLAUF_P1
SPBN s003
L #ARD_ZEIGER1_S
L #BLOCK_Gr
+I
T #ARD_ZEIGER1_S
SLW 3
LAR1
L DBD [AR1,P#4.0]
T #S_DIFF_T
L 0
<D
SPB s003
L #S_DIFF_T
L #IN_S_IST
-D
T #S_DIFF_T
L 0
<D
SPBN s001
L #S_DIFF_T
NEGD
T #S_DIFF_T
s001: NOP 0
L #S_DIFF_T
L #S_DIFF_ZW1_SD
<D
SPBN s003
L #S_DIFF_T
T #S_DIFF_ZW1_SD
L DBW [AR1,P#0.0]
T #POS_NR_ZW1
L #ARD_ZEIGER1_S
T #ADR_ZW_SP_S
s003: NOP 0
Netzwerk4:FACH1 ENDE DURCHLAUF - WERTE AKTUALISIEREN
L #END_ADR_DB
L #ARD_ZEIGER1_S
==D
SPBN s004
S #P1_EINTRAG
L #POS_NR_ZW1
T #Pos1_Nr_S
L #ADR_ZW_SP_S
T #ADR_FT_S
T #ADR_FACH_P1_S
s004: NOP 0
Netzwerk5:FACH1 RICHTUNG
U #POSI_S
U #P1_EINTRAG
SPBN rich
L #ADR_FT_S
SLW 3
LAR1
L DBB [AR1,P#2.0]
T #RICHTUNG_T
L 'L'
==I
S #FT1_LINKS
R #FT1_RECHTS
L #RICHTUNG_T
L 'R'
==I
R #FT1_LINKS
S #FT1_RECHTS
rich: NOP 0
ON #POSI_S
SPBN lori
R #FT1_LINKS
R #FT1_RECHTS
lori: NOP 0
Netzwerk6:WERTE FACH1 EINTRAGEN
U #POSI_S
U #P1_EINTRAG
SPBN w002
U #FT1_LINKS
SPBN w001
L #Pos1_Nr_S
T #PosNr_LINKS_S
L #ADR_FACH_P1_S
T #ADR_FT_LINKS_S
w001: NOP 0
U #FT1_RECHTS
SPBN w002
L #Pos1_Nr_S
T #PosNr_RECHTS_S
L #ADR_FACH_P1_S
T #ADR_FT_RECHTS_S
w002: NOP 0
Netzwerk7:NACH FACH2 SUCHEN
U #POSI_S
U #SUCHLAUF_P1
U #P1_EINTRAG
R #SUCHLAUF_P1
R #P1_EINTRAG
S #SUCHLAUF_P2
Netzwerk8:FACH2 SUCHEN ZYKLISCHE DURCHLAUF
U #POSI_S
U #SUCHLAUF_P2
SPBN w003
L #ARD_ZEIGER2_S
L #END_ADR_DB
>=I
O(
L #ARD_ZEIGER2_S
L #ANF_ADR_DB
<I
)
SPBN z001
R #P2_EINTRAG
S #SUCHLAUF_P1
L #ANF_ADR_DB
T #ARD_ZEIGER2_S
z001: NOP 0
L #ARD_ZEIGER2_S
L #BLOCK_Gr
+I
T #ARD_ZEIGER2_S
SLW 3
LAR1
L DBD [AR1,P#4.0]
L #IN_S_IST
-D
T #S_DIFF_T
L 0
<D
SPBN w004
L #S_DIFF_T
NEGD
T #S_DIFF_T
w004: NOP 0
L #S_DIFF_T
L #POSI_FENSTR_SD
<=D
U(
L #ADR_FACH_P1_S
L #ARD_ZEIGER2_S
<>I
)
S #P2_EINTRAG
w003: NOP 0
Netzwerk9:ZWEITEN FACH EINTRAGEN
U #P2_EINTRAG
U #POSI_S
SPBN w005
R #P2_EINTRAG
S #SUCHLAUF_P1
L DBB [AR1,P#2.0]
T #RICHTUNG_T
L 'L'
==I
S #FT2_LINKS
R #FT2_RECHTS
L #RICHTUNG_T
L 'R'
==I
S #FT2_RECHTS
R #FT2_LINKS
U #FT2_LINKS
SPBN w006
L #ARD_ZEIGER2_S
T #ADR_FT_LINKS_S
SLW 3
LAR1
L DBW [AR1,P#0.0]
T #PosNr_LINKS_S
w006: NOP 0
U #FT2_RECHTS
SPBN w005
L #ARD_ZEIGER2_S
T #ADR_FT_RECHTS_S
SLW 3
LAR1
L DBW [AR1,P#0.0]
T #PosNr_RECHTS_S
w005: NOP 0
Netzwerk10:RESET
UN #POSI_S
SPBN rest
R #FT2_LINKS
R #FT2_RECHTS
S #FT1_LINKS
R #FT1_RECHTS
R #OUT_FT_LINKS
R #OUT_FT_RECHTS
L 0
T #PosNr_LINKS_S
T #PosNr_RECHTS_S
T #OUT_POS_Nr_Links
T #OUT_POS_Nr_Rechts
rest: NOP 0
Netzwerk11:OUTPUT
U #POSI_S
SPBN w007
L #PosNr_RECHTS_S
T #OUT_POS_Nr_Rechts
L #PosNr_LINKS_S
T #OUT_POS_Nr_Links
O #FT1_LINKS
O #FT2_LINKS
U #POSI_S
= #OUT_FT_LINKS
O #FT1_RECHTS
O #FT2_RECHTS
U #POSI_S
= #OUT_FT_RECHTS
w007: NOP 0
Netzwerk12:Hilfsmerker löschen
UN #POSI_S
SPBN q010
S #SUCHLAUF_P1
R #P1_EINTRAG
R #OUT_FT_LINKS
R #OUT_FT_RECHTS
L 0
T #OUT_POS_Nr_Rechts
T #OUT_POS_Nr_Links
T #PosNr_RECHTS_S
T #PosNr_LINKS_S
q010: NOP 0
Netzwerk13:S DIFF IMMER POSITIV
L #ADR_FACH_P1_S
SLW 3
LAR1
L DBD [AR1,P#4.0]
L #IN_S_IST
-D
T #S_DIFF_T
T #OUT_S_DIFF_HAND
L 0
>=D
SPB a005
L #S_DIFF_T
NEGD
T #S_DIFF_T
a005: NOP 0
Netzwerk14:POSITIONS FENSTER
L #S_DIFF_T
L #POSI_FENSTR_SD
<D
= #POSI_S
= #OUT_QTW_IN_POS
Netzwerk15:KOMMUNIKATION QTW <-->FT
U #POSI_S
SPBN a777
L #IN_DB_Nr
T #DBNR_T
AUF DB [#DBNR_T]
L #ANF_ADR_DB
SLW 3
LAR1
L DBW [AR1,P#8.0]
T #QTW_SEND_NACH_LINKS
L DBW [AR1,P#12.0]
T #QTW_SEND_NACH_RECHTS
//-----FT Links
U #OUT_FT_LINKS
SPBN l999
L #ADR_FT_LINKS_S
SLW 3
LAR1
L #QTW_SEND_NACH_LINKS
T DBW [AR1,P#10.0]
L DBW [AR1,P#8.0]
T #QTW_EMPF_VON_LINKS
L #ANF_ADR_DB
SLW 3
LAR1
L #QTW_EMPF_VON_LINKS
T DBW [AR1,P#10.0]
l999: NOP 0
//-----FT Rechts
U #OUT_FT_RECHTS
SPBN a777
L #ADR_FT_RECHTS_S
SLW 3
LAR1
L #QTW_SEND_NACH_RECHTS
T DBW [AR1,P#10.0]
L DBW [AR1,P#8.0]
T #QTW_EMPF_VON_RECHTS
L #ANF_ADR_DB
SLW 3
LAR1
L #QTW_EMPF_VON_RECHTS
T DBW [AR1,P#14.0]
a777: NOP 0
Netzwerk16:LOESCHEN WENN NICHT IN POSITION
UN #POSI_S
FP #HM_LOESCH_S
SPBN zeig
L #ANF_ADR_DB
T #ZEIGER_LOESCH
SLW 3
LAR1
L 0
T DBW [AR1,P#14.0] //QTW empfang rechts
zeig: UN #POSI_S
SPBN los4
L #ZEIGER_LOESCH
L #END_ADR_DB
>I
SPBN los5
L #ANF_ADR_DB
T #ZEIGER_LOESCH
los5: L #IN_DB_Nr
T #DBNR_T
AUF DB [#DBNR_T]
L #ZEIGER_LOESCH
SLW 3
LAR1
L 0
T DBW [AR1,P#10.0]
L #ZEIGER_LOESCH
L #BLOCK_Gr
+I
T #ZEIGER_LOESCH
los4: NOP 0
 

Sprung zu