S7 Daten asynchron senden/empfangen über Profibus DP - welche Bausteine ?

Draco Malfoy

Level-1
Beiträge
1.168
Reaktionspunkte
82
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend allesamt.

Und wieder habe ich ein nichttriviales Problem mit Profibus DP und S7.

Sachlagenbeschreibung: eine Steuerung mit HMI kommuniziert mit Antrieben. Dabei wird ein zyklischer Prozessdatenkanal genutzt, und ein azyklischer (Parameterkanal).
Antriebe sind abgebaut / deaktiviert. An derer Stelle ist jetzt ein fremder Antriebsverbung vom anderen Hersteller getreten. In der CPU gibt es jetzt also ein Programmteil vom dem Originalprogramm, geschrieben durch den Maschinenhersteller (logischerweise kommentarlos und undurchschaubar) ich nenne das mal "O" und mein Umrechnungs-und-Transferprogramm ich nenne das "M".

"M" greift nun auf den E/A Adressbereich im Prozessabbild mittels BLKMOVE zu, extrahiert daraus die Daten, welche "O" für die Antriebe ins Prozessabbild schreibt, und legt sie in die dafür vorgesehene, kommentierte und von mir angelegte Splitting-Bausteine ab. Dann greift M auf diese Bausteine, rechnet die Daten um, und schreibt die mittels FB283 (SINA_FB) an den neuen Antriebsverbund weiter. Bzw. in die umgekehrte Richtung läuft das genau so. Funktioniert auch prima, solange es sich um die relativ easy zu verstehenden zyklischen Steuer/Statusworte und Ist/sollwerte handelt, die ja ständig übertragen werden.

Jetzt hat der Hersteller der Maschine (Sprüche zu seinem Seelenheil und Zustand der Familienangehörigen verkneife ich mir mal an dieser Stelle) was ganz besonders fieses einfallen lassen: Teile des Programms greifen auf die Antriebe auch azyklisch zu, etwa von der HMI wenn die Achsenlage geeicht werden muss (so scheint es mir, denn zyklisch findet es offenbar nicht statt). Der Zugriff erfolgt dann mittels Index / Subindex und der Antrieb antwortet dann mit der angeforderten Information. Meine Fragen in diesem Zusammenhang:

- Wie kann ich an der Stelle des Antriebes im Programmcode etwas emulieren, was mir die Index/Subindex-Nummern mitteilt, auf die zugegriffen wird, und, sagen wir mal, eine vorgefertigte Schablone stattdessen zurückschickt ?
- Kann ich eventuell im "O"-Programmcode die Bausteine identifizieren, die solche azyklische Kommunikation führen, und diese Stellen entsprechend backegineeren was mir die Arbeit mit der Emulation erparen würde ?
- Was kann man hier sonst noch so machen, um die übergeordneten Steuerungsabläufe ruhigzustellen und ihr mit bestimmten Rückmeldungen einen Normzustand vorzugauckeln ?

Ich müsste halt dafür rausfinden, auf welche Indexes zugegriffen wird und entsprechend dieser Info eine "Rückmeldung des Antriebs" zusammenstellen und zurückgeben.
Weiß jetzt aber nicht spontan, mit welchen Bausteinen das gehen würde. Gibt es vielleicht ne Möglichkeit, eine Art Variablentabelle zu erstellen die den variablenverlauf trace-d und speichert ?

Danke schon mal im Voraus, vielleicht hat hier der eine oder andere ne schlaue Idee.
 
Zuletzt bearbeitet:
Der Zugriff kann entweder über PAB/PAW/PAD, oder auch über die SFC 14/15 um mehr als 4 Byte konsistente Daten zu schreiben, erfolgen.

Ohne in die Bausteine hineinzuschauen, könntest du feststellen was geschrieben wird wenn der Adressbereich im Prozessabbild liegt, und du nach dem Bausteinaufruf die AB/AW/AD lädst. Denn bei schreibenden Zugriffen direkt auf PA wird das Prozessabbild nachgezogen.

Aber warum guckst du nicht einfach im Baustein nach was dort gemacht wird? Das ist auch mit einem AG-Abzug einfacher als das rauszufinden indem man gucks was der Baustein auf die Ausgangsdaten schreibt, denn dort siehst du wahrscheinlich nur einen Teil der möglichen Funktionen. Der Parameterkanal ist jetzt nichts exotisches, wie das funktioniert sollte im Handbuch des Teilnehmers beschrieben sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine Antwort.
Ja, habe schon angefangen, die Software inhaltlich zu entschlüsseln. Merke, daß ich da wohl nicht drum herum komme, die Schiebereit mit hunderten von Datenbausteinen ist eher aufwenig und speicherraubend.
Wenn der Code sowieso schon hin ist, dann könnte man auch direkt aus den jeweiligen Funktionen auf die Daten zugreifen ohne Umweg über P#A... P#E...

Der Adressbereich liegt im Prozessabbild.
 
Ich gehe jetzt einfach über die Referenztabelle und gucke nach, wo welcher Programmbaustein was reinschreibt. Scheint recht aufschlussreich zu sein, diese Vorgehensweise. So ermittelt man zumindest die beteiligten Bausteine, die mit dem Antrieb parametrisch kommunizieren.
 
Zurück
Oben