Draco Malfoy
Level-1
- Beiträge
- 1.168
- Reaktionspunkte
- 82
-> 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.
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: