Datenübertragung über I/O zwischen 2 S5 Steuerungen

G

Gast

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo bin auf der Suche nach einem guten Dekanstoß, zur Datenübertragung über I/O´s (möglichst wenige ist doch klar). Es geht um eine Anlage mit 2 CPU´s an denen ich die Fertigungstückzahl und eine Auftragsnummer übergeben will, es sind ca. 6 Datenwörter.

Bin für jeden Vorschlag dankbar.

Mfg M. Meier
 
Da gibt es viele Ansätze.
Zu erstmal eine paar Fragen:
-Muss es eine Bidirektionale Kommunikation sein?
-Können die 6 Datenwörter immer auf einen schlag übertragen werden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal was aus "Alten" Zeiten:

Code:
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

Aufruf Masterzelle:

Code:
 UN A  113.7
 L KT 015.1
 SE T  126
 U T  126
 S A  113.7
 SPA FB 199
NAME: DATEN   
M/S : KC MA
ENAB: A 113.7
STRI: KF +20
STRO: KF +20
LEN : KF +3
ZBYI: EB 120
DBYI: EB 121
ZBYO: AB 120
DBYO: AB 121
DTN : DB 199
ZYKL: KF +1

Aufruf Slavezelle:

Code:
 SPA FB 199
NAME: DATEN   
M/S : KC SV
ENAB: E 81.7
STRI: KF +20
STRO: KF +20
LEN : KF +3
ZBYI: EB 88
DBYI: EB 89
ZBYO: AB 88
DBYO: AB 89
DTN : DB 199
ZYKL: KF +3

DB199:

Code:
0: KF +0 ;letztes bearbeites ZBYI
1: KF +0 ;1 Zyklus Verzug 0=nein; 1=ja
2: KF +0 ;Reserve

Es ging darum über 2 Byte Eingänge und 2 Byte Ausgänge Daten auszutauschen. Die Daten sollten wieder auf Eingänge gehen und von Ausgängen kommen. Statt dessen könnte man auch Daten eines DB austauschen. Es gibt jeweils ein Zählbyte und ein Datenbyte.
Das Ganze hat damals problemlos funktioniert, gibt sicherlich noch Bessere Ansätze, aber als Denkanstoß sollte es ausreichen.
 
zotos schrieb:
Da gibt es viele Ansätze.
Zu erstmal eine paar Fragen:
-Muss es eine Bidirektionale Kommunikation sein?
-Können die 6 Datenwörter immer auf einen schlag übertragen werden?


Die Daten müssen nur von der ersten CPU zur Zweiten übertragenwerden, die Erste bekommt die Daten vom PC.

Gruß
M. Meier
 
Zurück
Oben