meine Frage: Gibt es eine Möglichkeit, außer im Aufrufbaum zu Fuß, nach doppelten Programmaufrufen zu suchen? Auch die Querverweisliste hilft mir nicht weiter, es sind einfach zu viele Bausteine als das ich sowas mit der Hand machen könnte. Vielleicht eine CMD Zeile? Irgendwas in der Art, mit der ich mir ein Macro zusammenstricken könnte. Aus dem ENI bekomme ich ja schon die Bausteinliste aller im Projekt enthaltener Bausteine.
Besten Dank.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Das ist zwar auch nicht automatisiert, aber meiner Meinung nach recht schnell:
Global suchen -> Name des aufgerufenen Programms eingeben -> auf den Button Meldungsfenster klicken.
Im Meldungsfenster (falls nicht vorhanden/aktiv mit Shift+Esc anzeigen) sind die Ergebnisse sortiert nach Bausteinen, in denen der gesuchte Begriff enthalten ist. Da erkennt man dann eigentlich recht schnell, wenn in einem Baustein dein Programm mehrmals aufgerufen wird.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Die Variante kenn ich bereits, trotzdem danke. Mein Projekt umfasst bummelig 2000 Bausteine, da hast Du keine Chance sowas zufuss zu finden.
@Erik:
Klar gibt es absichtliche doppelte Aufrufe, das ist auch gut so. Aber mein Programm läuft im 10ms Takt und es werden aus einem Masterbaustein (PLC_PRG) mehrere Control Bausteine aufgerufen, die die verschiedenen Bereiche des Projekts abarbeiten. Das zu vertiefen würde den Rahmen hier sprengen. Es wird auch für ungefähre Trendabschätzungen die Tasklaufzeit zur Berechnung der Trends herangezogen. Wird ein solches Programm doppelt aufgerufen, sind natürlich die ermittelten Zeiten auch halb so lang.
Hoffe das war verständlich...
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Wenn du nur doppelte Aufrufe verhindern willst und nicht den eigentlichen Fehler suchst, könnte das durch einen einfachen Task-Zyklus-Zähler gemacht werden.
Den Zähler an das Unterprogramm übergeben und auf Änderung abfragen.
Keine Änderung gegenüber dem ketzten Aufruf -> RETURN;
Gruß
Erik
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Im Unterprogramm diesen Wert merken und beim nächsten Aufruf auf Änderung prüfen.
if diCycleCountOld := diCycleCount then ( Keine Änderung -> Fehler )
( Hier Fehlerbehandlung )
return;
else
diCycleCount = diCycleCountOld;
end_if
Die Wahrscheinlichkeit, dass der Baustein nicht im gleichen Zyklus aufgerufen wurde, aber der Zählerstand trotzdem gleich ist, liegt bei 1: 4294967295...
Gruß
Erik
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ok das hab ich verstanden, danke. Das "geht" natürlich auch, ist aber ähnlich mühsam wie von Hand zählen. Ich dachte es gibt sowas wie "Such mir mal alle mehrfachen PRG-Aufrufe und gib mir die zugehörigen Bausteinnamen in einer Liste ins Meldefenster..." aber das wär ja auch n büschen viel verlangt...
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Moin zusammen,
meine Frage: Gibt es eine Möglichkeit, außer im Aufrufbaum zu Fuß, nach doppelten Programmaufrufen zu suchen? Auch die Querverweisliste hilft mir nicht weiter, es sind einfach zu viele Bausteine als das ich sowas mit der Hand machen könnte. Vielleicht eine CMD Zeile? Irgendwas in der Art, mit der ich mir ein Macro zusammenstricken könnte. Aus dem ENI bekomme ich ja schon die Bausteinliste aller im Projekt enthaltener Bausteine.
Besten Dank.
mal nach oben schieben...
Mahlzeit
Ich mach mir in solchen Fällen eine InputVariable in den Baustein und gebe bei jedem Aufruf eine eindeutige CallerId mit.
Dann kannst du im Baustein jederzeit sehen von wo er aufgerufen wurde.
Musst natürlich mit Breakpoints arbeiten.
Also z.B.:
Program(iCallerId := 1);
Program(iCallerId := 2);
Program(iCallerId := 3);
Eine Methode das zu automatisieren kenne ich nicht. Doppelte Programmaufrufe sind ja generell erlaubt (meistens auch erwünscht).
Ich hoffe ich hab deine Problematik richtig erkannt...
Gruß
Erik
Das ist zwar auch nicht automatisiert, aber meiner Meinung nach recht schnell:
Global suchen -> Name des aufgerufenen Programms eingeben -> auf den Button Meldungsfenster klicken.
Im Meldungsfenster (falls nicht vorhanden/aktiv mit Shift+Esc anzeigen) sind die Ergebnisse sortiert nach Bausteinen, in denen der gesuchte Begriff enthalten ist. Da erkennt man dann eigentlich recht schnell, wenn in einem Baustein dein Programm mehrmals aufgerufen wird.
@SPSstudent:
Die Variante kenn ich bereits, trotzdem danke. Mein Projekt umfasst bummelig 2000 Bausteine, da hast Du keine Chance sowas zufuss zu finden.
@Erik:
Klar gibt es absichtliche doppelte Aufrufe, das ist auch gut so. Aber mein Programm läuft im 10ms Takt und es werden aus einem Masterbaustein (PLC_PRG) mehrere Control Bausteine aufgerufen, die die verschiedenen Bereiche des Projekts abarbeiten. Das zu vertiefen würde den Rahmen hier sprengen. Es wird auch für ungefähre Trendabschätzungen die Tasklaufzeit zur Berechnung der Trends herangezogen. Wird ein solches Programm doppelt aufgerufen, sind natürlich die ermittelten Zeiten auch halb so lang.
Hoffe das war verständlich...
Mahlzeit
Wenn du nur doppelte Aufrufe verhindern willst und nicht den eigentlichen Fehler suchst, könnte das durch einen einfachen Task-Zyklus-Zähler gemacht werden.
Den Zähler an das Unterprogramm übergeben und auf Änderung abfragen.
Keine Änderung gegenüber dem ketzten Aufruf -> RETURN;
Gruß
Erik
Hallo Erik,
das hab ich nicht so ganz gerallt. Magst mir das mal mit einem Beispiel erklären, bitte?
Moin Moin
z.B. im PLC_PRG einen Zykluszähler erstellen.
Also diCycleCount := diCycleCount + 1;
Diesen Wert an das Unterprogramm übergeben.
Im Unterprogramm diesen Wert merken und beim nächsten Aufruf auf Änderung prüfen.
if diCycleCountOld := diCycleCount then ( Keine Änderung -> Fehler )
( Hier Fehlerbehandlung )
return;
else
diCycleCount = diCycleCountOld;
end_if
Die Wahrscheinlichkeit, dass der Baustein nicht im gleichen Zyklus aufgerufen wurde, aber der Zählerstand trotzdem gleich ist, liegt bei 1: 4294967295...
Gruß
Erik
Ok das hab ich verstanden, danke. Das "geht" natürlich auch, ist aber ähnlich mühsam wie von Hand zählen. Ich dachte es gibt sowas wie "Such mir mal alle mehrfachen PRG-Aufrufe und gib mir die zugehörigen Bausteinnamen in einer Liste ins Meldefenster..." aber das wär ja auch n büschen viel verlangt...