Wie werden Analogwerte über Sinec L1 übertragen ?

sk1rie

Level-1
Beiträge
108
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Gemeinde !

Ich bin derzeit dabei, in einem Verbund von 4 S5-CPUs einen Slave gegen eine S7 auszutauschen. Alle vier S5-CPUs sind mittels L1-Bus miteinander verbunden und besonders schlecht dokumentiert.
Nachdem ich das S5-Programm nun eigentlich fast komplett analysiert habe, habe ich auch herausgefunden, was an welcher Stelle im DB stehen muss, um es an die richtige Station zu senden, bzw. was an welcher Stelle im Empfangs-DB liegt.
Jedoch sind zwei Fragen offen geblieben:

1. Laut diesem S5-Programm werden ausschließlich Zustände der einzelnen Aggregate in Form von HEX-Zahlen sowie Steuerbits und Sollwerte übertragen. Was gänzlich fehlt sind Analogwerte. Diese sind jedoch definitiv in allen Anlagenteilen vorhanden, wo sie relevant sind. Deshalb nun die Frage: Wie war es denn früher üblich, Analogwerte per Bus zu übertragen ?
Ich habe für den Master und meinen Slave fast das komplette Programm zur Verfügung. Nur eine OBs fehlen mir jeweils.
Im Großen und Ganzen läuft es so ab, dass alle Daten in 2 verschiedenen DBs im Slave gesammelt werden und zyklisch an den Master gesendet werden - außer Analogwerte. Die sind offensichtlich einfach so im Master vorhanden und lassen sich in keinster Weise zurückverfolgen. Auch im Slave gibts keinerlei Hinweise auf die Analogwerte.

2. Die Daten, die vom Slave zum Master gesendet werden, sind insgesamt so viel, dass man diese in mehreren Zyklen senden muss. Ich wollte diese Daten nun genau so senden. Ein Zähler zählt bei jedem Senden um eins höher und zeigt so auf das erste zu sendende Wort im DB. Die Länge ist fest vorgegeben (28 Byte) und gesendet wird 13 mal, bis alle Daten dort sind. Wie kann jedoch nun sicher stellen, dass auch die Master-CPU im korrekten Sendezyklus ist und die Daten an der richtigen Stelle im Empfangsfach ablegt ? Ich denke da so an eine Art Syncronisation, die jedoch aus beiden Programmen nicht hervorgeht. Es ist mir dabei nicht möglich, das Programm der Master-CPU zu verändern, jedoch muss es ja schon irgendwie gegangen sein. Wie war das nun also üblich ?

Zur Hardware:
- Master und Slave je CPU928B
- Kommunikationsprozessor ist jeweils CP530

Vielen Dank für Eure Unterstützung.
 
Sinec L1

Hallo sk1rie

ISt schon lange her das mit dem L1 aber normal ist im Master CP530
eine Umlaufliste hinterlegt wer wann senden darf.

Zu den HEX Zahlen das ist nur eine Darstellungsform wenn du
KF eingibst wird die Zahl halt als Festounkt dargestellt oder KT als Timerwert (ob sinnvoll oder nicht)

zum Transfer es werden Sende und Empfangsfächer generiert und innerhalb diesser Fächer wird alles gesendet was halt drinn steht
das heisst auch wenn ich im DB Dokumentiert habe DW1 = Sollwert sowiso
und ich vor dem jeweiligen Transfer einen Istwert ins DW1 geschoben habe wird halt der Istwert transferiert.
Also meiner Meinung muss irgendwo im Programm diese Analogwerte ins Sendefach transferiert werden (kann auch mit Blocktransfer sein was nicht einfach zu finden ist)
Also mal MASTER CP530 Programm anschauen und dann halt nochmals zb einen Slave analysieren.
gruss chris
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zum Sync. nochmal:

es gibt einen Sende-DB 55, der Inhalt wird immer gesendet. Zusätzlich gibt es 2 Datenspeicher (DB 180 + 181) für den Send.
Die ersten 28 Byte aus dem DB180 werden nach DB55 transferiert und gesendet - kein Problem.
Danach die zweiten 28 Byte aus dem 180 in den DB55, senden - kein Problem.
Das ganze insgesamt 13 mal. Soweit ist mir dieser Punkt klar. Ich habe mich auch schon recht intensiv damit beschäftigt.
Mein Problem ist jetzt folgendes:
Angenommen, beide Anlagen (Master + Slave) arbeiten wunderbar und syncron zusammen, und ich halte den Slave an um ihn dann zu einem absolut undefinierbaren Zeitpunkt wieder auf RUN zu stellen - wie bekomm ich jetzt beide CPUs so synchronisiert, dass der Master auch weiß, dass er als nächstes die ersten 28 Byte ausm DB 180 bekommt und nicht die fünften oder sechsten ? Denn da der Slave angehalten und von mir aus auch urgelöscht wurde, fängt dieser definitiv wieder beim ersten Zyklus an und nicht beim fünften oder sechsten.
Es ist so ohne weiteres eine derartige Abfrage nicht zu erkennen.

Mir ist natürlich klar, dass man sowas auf 1000 Wegen programmieren kann, aber vielleicht gibts dazu ne gängige Methode, nach der ich gezielt suchen kann ?
 
hallo sk1rie

Meines wissen kann sich der L1 so nicht synchronisieren
auch kannst du die cpu's nicht so starten das sie "synchron" laufen
also muss innerhalb der transfeierten daten eine Kennung mitgesendet werden die angibt um welches Paket es sich handelt

Hast du dir die Wörte mal mit Status Var beim senden angeschaut?
villeicht findest du so irgend einen Zähler der Hochzählt
oder eine gleichheit die sich nach allen Paketen wiederholt.

gruss chris
 
Hallo Chris !

Ich hab jetzt herausgefunden, wie die Analogwerte übertragen werden. War wirklich nicht leicht zu finden, da eine Schleife einen Zähler hochzählt und der Zahlenwert an einen OB übergeben wird, der mir nun ausgerechnet nicht zur Verfügung steht, da ja das Programm eben nur FAST vollständig ist. Der OB ließt dann offensichtlich die Eingänge ein und liefert dann Werte zurück, die in der gleichen Schleife in einen DB verschoben werden.

Danke also für Deinen Hinweis. Auch wenn das nun nicht unbedingt Blocktransfer ist, er hat mir wirklich sehr weitergeholfen.

Für den Sync. hab ich schon ne Idee, das muss ich dann aber bei der IBN ausprobieren.

Gruß, Sebastian
 
Zurück
Oben