FB199
;Datenuebertragung
NAME: DATEN
BEZ : M/S DKC
BEZ : ENAB EBI ;Aktivieren
BEZ : STRI DKF ;Startadresse Input
BEZ : STRO DKF ;Staradresse Output
BEZ : LEN DKF ;Anzahl zu übertragender Byte
BEZ : ZBYI EBY ;Zählbyte Input
BEZ : DBYI EBY ;Datenbyte Input
BEZ : ZBYO ABY ;Zählbyte Output
BEZ : DBYO ABY ;Datenbyte Output
BEZ : DTN B ;Datenbaustein für Zähler
BEZ : ZYKL DKF ;Verzugszyklen, bis Daten eingelesen werden
L KF +0
T MW 200
T MW 202
T MW 204
T MW 206
T MW 208
T MW 220 ;alle Zwischenmerker auf Null
B =DTN
LW =M/S ;pruefen, ob
L KC MA ;Masterzelle
!=F ;ja,
= M 220.0 ;dies ist die Masterzelle
UN =ENAB ;wenn Enable aus, dann alles
SPB =NULL ;NULL
L =ZBYI ;Eingang Nummer
T MW 206 ;zwischenmerken
L KF +0
>F ;groesser Null
SPB =DAT1 ;Datenuebertragung laeuft
;ZBYI ist Null
L DW 0 ;gemerktes letzes ZBYI
L KF +1 ;+ 1
+F
U =ENAB ;wenn Start
U M 220.0 ;an Masterzelle
SPB =STRT ;dann 1. Byte uebertragen
SPA =END1
;***************************
;das naechste Zaehlbyte darf
;immer nur 1 groesser sein
;***************************
DAT1: L DW 0 ;letztes bearbeitetes ZBYI
L KF +1 ;1 erhoehen
+F
T MW 208 ;zwischenmerken
LW =LEN ;Laenge
L MW 208
>=F ;nicht ueberschritten,
SPB =NEXT ;dann normal weiter
;wenn Ueberlauf, dann weiter
L KF +1 ;mit 1
NEXT:
L MW 206 ;zwischengemerktes ZBYI
><F ;nicht gleich,
;dann fehlerhaftes ZBYI,
;oder kein neues ZBYI
SPB =ENDE ;-->Sprung ans Ende
;sonst normal weiter
L MB 206 ;ZBYI zwischengemerkt
LW =LEN ;Anzahl
>F ;ueberschritten ?
SPB =ENDE
;Uebernehmen Eingangsdaten
;-------------------------
L DW 1 ;Xx Zyklus Verzug schon erledigt
LW =ZYKL ;Anzahl Verzugszyklen erreicht ?
<F ;nein,
SPB =SET1 ;dann 1 weiterer Zyklus Verzug
;Daten werden eingelesen
WEIT: ;-----------------------
L MW 206 ;ZBYI zwischengemerkt
LW =STRI ;Beginn Eingangsbereich
+F
L KF +1 ;- 1, da Eingang Nummer
-F ;1 = 0.EW
T MW 200 ;Parameter zwischenmerken
L =DBYI ;Eingang Daten
B MW 200 ;Parameter= ZBYI+EING
T EB 0 ;nach Eingang uebertragen
;Daten wurde uebergeben
L MW 206 ;ZBY zwischengemerkt
T DW 0 ;merken in DW0
L KF +0 ;0 in
T DW 1 ;Zykusverzug eintragen
;Uebergeben Ausgangsdaten
;------------------------
L KF +0 ;wenn Slave, nicht erhoehen = 0
UN M 220.0 ;Slavezelle
SPB =SLAV ;dann nicht Ausgang um 1
;erhoehen
L KF +1 ;wenn Master, erhoehen = 1
SLAV: L MW 206 ;ZBYI zwischengemerkt
+F ;0(Slave) oder 1(Master) addieren
STRT: T MW 202 ;Zwischenmerken
LW =LEN ;Max. Anzahl ueberschritten ?
<=F ;nein,
SPB =OK ;dann normal weitermachen
L KF +1 ;sonst mit erstem Byte
T MW 202 ;weitermachen
OK : L MW 202 ;neue Eingang Nummer uebergeben
T =ZBYO ;an Ausgang Nummer
LW =STRO ;Beginn Ausgangsbereich
L MW 202 ;Ausgang Nummer
+F
L KF +1 ;-1, da Ausgang Nummer
-F ;1 = O.AW
T MW 204 ;Parameter zwischenmerken
B MW 204 ;Parameter= ZBYO + AUSG - 1
L AB 0 ;von Ausgang uebernehmen
T =DBYO ;nach Ausgang Daten uebertragen
;Zeit zuruecksetzen
;fuer naechstes Byte
END1: SPA =ENDE
NULL: ;loeschen der Ausgangsdaten
L KF +0 ;--------------------------
T =ZBYO
T =DBYO
T DW 0
T DW 1
;loeschen aller Eingangsdaten
;----------------------------
L KF +1 ;mit 1 gehts los
T MW 202 ;Zwischenmerken
LOOP: L MW 202
LW =STRI ;Beginn Eingangsbereich
+F
L KF +1 ;- 1, da Eingang Nummer
-F ;1 = 0.EW
T MW 200 ;Parameter zwischenmerken
L KF +0 ;Eingang Daten = Null
B MW 200 ;Parameter= ZBYI + EING - 1
T EB 0 ;nach Eingang uebertragen
L MW 202 ;naechstes Byte loeschen
L KF +1
+F
T MW 202 ;Zwischenmerken
LW =LEN ;Anzahl Bytes
>F ;erreicht ?
SPB =ENDE
SPA =LOOP
SET1:
L DW 1 ;Zaehler Verzugszyklen
L KF +1 ;um 1
+F ;erhoehen
T DW 1 ;wird ausgefuehrt
ENDE:
BE