IEC Timer- Messung in B&R Automation Runtime

MPH

Level-1
Beiträge
75
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute,

mir wurde hier schon erheblich weitergeholfen in bei den Systemen Step7 und CoDeSys. Leider muss ich mit 3 Systemen arbeiten. Was nun in CoDeSys und Step 7 V11 funzt, klappt im Automation Studio von B&R überhaupt nicht.

Ich habe hier nochmal den Code der in den anderen Systemen funktioniert:



#TON(IN:=#Start, PT:=t#100s);




IF #Start=TRUE THEN
#U:=230;

#Zeit1:=#TON.ET;

FOR #i:=0 TO 30000 BY 1 DO
#wert:=#wert+1;
#x:=#x+1;
#RR:=#RR+1;
#P:=(#U*#U) /#RR;
#y:=SQRT(#x);
#z:=SIN(#y);
#e:=EXP(#x);
#m:=ATAN(#e);
END_FOR;

#TON(IN:=#Start,
PT:=t#100s);
#Zeit2:=#TON.ET;

#Start:=False;

END_IF;



#Dauer:=#Zeit2-#Zeit1;
#Dauer1:=#Zeit22-#Zeit11;

Ich muss die Zeit messen mit nem IEC Timern, weil es auf allen 3 Systemen laufen soll.
Der Code berechnet mir so in Step7 und CoDeSys eine Dauer bis die Schleife bearbeitet ist von ca. 20 ms.
Bei B&R ist es nun so, dass die Zeiten Zeit1 und Zeit 2 immer gleich sind. Ausserdem seh ich ET in B&R nur in sec. nicht in ms.
Es kommt mir so vor, das Automation Runtime des überhaupt nicht zyklisch nacheinander abarbeitet sondern einfach, die Startbedingung "Start" nimmt und beide Timer gleichzeitig loslaufen.
Arbeitet das System nicht zyklisch nacheinander? Ich arbeite mit der ARsim!! Hat es was mit Aufruf zu tun in "Programm CYCLIC" usw. oder??
Die Zeit müsste doch unterschiedlich sein oder????

Hoffe ihr könnt mir Helfen

Vielen Dank schonmal

Gruß
 
Hallo MPH,

Es ist schon etwas länger mit B&R her aber meiner Meinung nach muss folgendes nur einmal im Programm vorhanden sein:
#TON(IN:=#Start, PT:=t#100s);

Du weißt deinem Ton eine Anfangszeit zu, dann wird drei Zuweisungen Später der aktuelle Zeitwert an Zeit1 übergeben. Nach deiner Schleife machst du genau das gleiche.

Versuch mal, wenn du diese Zeile vor deiner Zeit2 auskommentierst. Eventuell gibt es auch eine Möglichkeit, dass du die eine Realzeit speichern kannst...

Damit die Zeit von ET in ms angezeigt wird solltest du eventuel mal die Hilfe zu einem TON-Baustein zurate ziehen.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo MPH,

Es ist schon etwas länger mit B&R her aber meiner Meinung nach muss folgendes nur einmal im Programm vorhanden sein:


Du weißt deinem Ton eine Anfangszeit zu, dann wird drei Zuweisungen Später der aktuelle Zeitwert an Zeit1 übergeben. Nach deiner Schleife machst du genau das gleiche.

Versuch mal, wenn du diese Zeile vor deiner Zeit2 auskommentierst. Eventuell gibt es auch eine Möglichkeit, dass du die eine Realzeit speichern kannst...

Damit die Zeit von ET in ms angezeigt wird solltest du eventuel mal die Hilfe zu einem TON-Baustein zurate ziehen.

Gruß

Hi und Danke für die schnelle Antwort.

Leider ist das nicht das Problem. Durch den 2. Aufruf starte ich den Timer nochmal um überhaupt eine Zeitdifferenz zu bekommen.
Wie gesagt funktioniert das in den anderen beiden Systemen wunderbar. Nur hier nicht.
Allgemein alle Werte ändern sich nur im Sekundentakt.
Ich habeden Task auf 10 ms eingestellt. Trotzdem werden selbst die Berechnungswerte immer nur im Sekundentakt geändert. In Step 7 und CoDeSys läuft das irgendwie kontinuierlicher.

Woran kann das liegen?

Vielen Dank

Gruß
 
Hallo MPH,
Zum einen hatten wir früher auch unsere Programme simuliert, da war festzustelle, dass die Simulation auf dem PC sehr schlecht war. Buttons, die mit einer Flanke abgerufen wurden musste man zumal häufiger betätigen, um das gewünschte ergebnis zu bekommen,...
Dies ist eventuell der Grund, warum deine Programme nicht wie gewünscht in der eingestellten Zeit ablaufen...

Ansonsten kann ich dir aktuell auch nicht weiterhelfen...
Gruß
 
Ich kenne mich eher mit der KW aus.
Eine Frage: Ist das die gleiche Instanz von TON?
Mehrfache Aufrufe einer Instanz können zu witzigen Effekten führen.
Vorschlag (falls das die gleiche Instanz ist):
TON ohne Input-Parameter aufrufen: TON(); und dann immer nur eine Zuweisung aktiv haben. Oder gleich zwei Timer nehmen.

Viele Grüße,
Baschankun
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo MPH,

1. Der Timer läuft auf einer Zeitbasis von 10ms (-->AS Hilfe). Damit eine Zeit innerhalb einer Schleife zu messen halte ich für sehr gewagt.
2. Die ARsim ist ausgerechnet die einzige Umgebung von B&R, die nicht echtzeitfähig ist und damit ein Zeitverhalten liefert,
das für allgemeine Test sehr gut ist, aber sicherlich nicht zur Messung von Zeit.
3. Wie der Vorgänger bereits angemerkt hat, können Mehrfachaufrufe zur Effekten führen, die man nicht bewerten kann.
4. Bist Du sicher, dass der Code auf den anderen Systemen die richtigen Ergebnisse liefert? Sind die Ergebnisse plausibel?
5. Es gibt die Bibliothek SYS_lib und darin Zeitfunktionen. Vielleicht kannst Du damit eine Messung durchführen?
6. Ist der Schleifenendwert fix? Dann kann man auch eine Variable setzen/rücksetzen und mit dem Trace ausmessen.
7. Wenn sonst nichts in der Task passiert, kann man auch den Profiler fragen.
7. Wie genau muß das Ergebnis werden?

Grüße
 
Hallo MPH,
Zum einen hatten wir früher auch unsere Programme simuliert, da war festzustelle, dass die Simulation auf dem PC sehr schlecht war. Buttons, die mit einer Flanke abgerufen wurden musste man zumal häufiger betätigen, um das gewünschte ergebnis zu bekommen,...
Dies ist eventuell der Grund, warum deine Programme nicht wie gewünscht in der eingestellten Zeit ablaufen...

Ansonsten kann ich dir aktuell auch nicht weiterhelfen...
Gruß

Alles klar. Ich hatte mir auch schon gedacht, dass es eventuell an der ARsim liegen könnte.
Trotzdem Vielen Dank für deine Hilfe

Ich kenne mich eher mit der KW aus.
Eine Frage: Ist das die gleiche Instanz von TON?
Mehrfache Aufrufe einer Instanz können zu witzigen Effekten führen.
Vorschlag (falls das die gleiche Instanz ist):
TON ohne Input-Parameter aufrufen: TON(); und dann immer nur eine Zuweisung aktiv haben. Oder gleich zwei Timer nehmen.

Viele Grüße,
Baschankun

Ja das ist der gleiche TON.
Das kann schon sein, dass die Effekte dadurch auftreten. Ist halt komisch, da es bei den anderen Systemen funktioniert.
Den Aufruf mit TON() hatte ich schon probiert. Problem ist hier aber, dass dieser Befehl in Step7 nicht geht!!!!

Vielen Dank

Hallo MPH,

1. Der Timer läuft auf einer Zeitbasis von 10ms (-->AS Hilfe). Damit eine Zeit innerhalb einer Schleife zu messen halte ich für sehr gewagt.
2. Die ARsim ist ausgerechnet die einzige Umgebung von B&R, die nicht echtzeitfähig ist und damit ein Zeitverhalten liefert,
das für allgemeine Test sehr gut ist, aber sicherlich nicht zur Messung von Zeit.
3. Wie der Vorgänger bereits angemerkt hat, können Mehrfachaufrufe zur Effekten führen, die man nicht bewerten kann.
4. Bist Du sicher, dass der Code auf den anderen Systemen die richtigen Ergebnisse liefert? Sind die Ergebnisse plausibel?
5. Es gibt die Bibliothek SYS_lib und darin Zeitfunktionen. Vielleicht kannst Du damit eine Messung durchführen?
6. Ist der Schleifenendwert fix? Dann kann man auch eine Variable setzen/rücksetzen und mit dem Trace ausmessen.
7. Wenn sonst nichts in der Task passiert, kann man auch den Profiler fragen.
7. Wie genau muß das Ergebnis werden?

Grüße

Hi auch dir Danke für deine Antwort

zu1. : Ich weiss das es gewagt ist. Ich muss halt aber irgendwie mit IEC Timern versuchen ABlaufzeiten von Programmabschnitten zu messen.
zu2. : Ich arbeite bei Step 7 mit der Soft SPS WIN AC. Ich dachte die ARsim ist auch eine Soft SPS. Oder ist es nur ausschliesslich ein Simulationsprogramm??
zu3. : Ok kann gut sein.
zu4. : Also wenn man die Zykluszeit und die Ausführungszeiten verschiedener Operationen z. im Handbuch der WIN AC vergleicht, sind die Werte eigentlich ganz ok und plausibel.
zu5. : Das weiss ich. Es gibt in den jeweiligen Systemen wesentlich elegantere Lösungen zur Messung. Problem ist aber wie oben gesagt, dass sie alle unterschiedlich sind der Code aber auf allen drei Systemen laufen soll!!
zu6. : Hier weiss ich nicht ganz genau was du meinst. Die Schleife dient nur als Versuch und hat keine weitere Bedeutung. Was meinst du mit fix?
zu7. : Das Ergebniss sollte so genau wie möglich sein. Aber mehr wie ms geht ja eh nicht wenn ich mich nicht irre oder?!


Vielen Dank an euch für eure Hilfe

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute ich bins nochmal sorry,

ich glaub ich weiss woran es liegt.

In B&R mache ich den erneuten Timeraufruf wie oben beschrieben.

#TON(IN:=#Start,
PT:=t#100s);
#Zeit2:=#TON.ET;

In TwinCat und Step 7 mach ich es aber so:

#TON(IN:=#Start,
PT:=t#100s,
ET=>Zeit2)
;

Problem ist das B&R genau das nicht macht:

ET=>Zeit2;

Ich bekomme dann immer die Fehlermeldung, dass vor oder nach dem = ein : stehen muss.
Wie kann ich das in B&R umsetzen????

Hoffe ihr könnt mir nochmal helfen.

Vielen Dank

Gruß
 
Hi Leute ich bins nochmal sorry,

ich glaub ich weiss woran es liegt.

In B&R mache ich den erneuten Timeraufruf wie oben beschrieben.

#TON(IN:=#Start,
PT:=t#100s);
#Zeit2:=#TON.ET;

In TwinCat und Step 7 mach ich es aber so:

#TON(IN:=#Start,
PT:=t#100s,
ET=>Zeit2)
;

Problem ist das B&R genau das nicht macht:

ET=>Zeit2;

Ich bekomme dann immer die Fehlermeldung, dass vor oder nach dem = ein : stehen muss.
Wie kann ich das in B&R umsetzen????

Hoffe ihr könnt mir nochmal helfen.

Vielen Dank

Gruß

Sorry
Ich muss zurückrudern.
Es geht jeweils in TwinCat und Step7 auch so:

#TON(IN:=#Start,
PT:=t#100s);
#Zeit2:=#TON.ET;

Es liegt einfach daran, dass ARsim so langsam ist.
Ich weiss immernoch nicht warum sich die Werte nur im Sekundentakt ändern währen der Simulation. Kann ich da irgendwo was umstellen oder schneller machen.
Ich bekomme die Variablen, die in "TIME" deklariert sind nicht in ms angezeigt sondern nur Sekunden. Woran liegt das denn??????
Datentyp "TIME" bedeutet doch ..m..s..ms oder bin ich jetzt total behämmert?!

Würde mich sehr freuen, wenn ihr mir nochmal helfen könntet.

Vielen Dank

Gruß
 
Dein Programm oder Task oder wie immer man das nun auch nennen mag, läuft in einer Taskklasse.
Davon gibt es per Default acht. Diese werden unterschiedlich häufig abgearbeitet.
Entweder verschiebst Du Dein Programm in eine schnellere Taskklasse oder Du änderst die Zykluszeit.
Per Default sind in der ARsim in der Tat Zykluszeiten von etlichen Sekunden eingestellt.
Das ist vermutlich das, was Dich verwirrt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dein Programm oder Task oder wie immer man das nun auch nennen mag, läuft in einer Taskklasse.
Davon gibt es per Default acht. Diese werden unterschiedlich häufig abgearbeitet.
Entweder verschiebst Du Dein Programm in eine schnellere Taskklasse oder Du änderst die Zykluszeit.
Per Default sind in der ARsim in der Tat Zykluszeiten von etlichen Sekunden eingestellt.
Das ist vermutlich das, was Dich verwirrt.

Hi Bitmanipulator.
Danke für die Antwort.
Ich habe bei der PLC Einstellung eigentlich die Standartklasse auf Cyklic 1 umgestellt. Das heisst es müsste jetzt eigentlich im 10ms Takt ablaufen. Es hat sich aber nach der Umstellung überhaupt nichts geändert. Die Werte verändern sich weiterhin im 1 sec Takt.
Wie kann ich den die Zykluszeit ändern??? Diese verändert sich doch nur je nach länge des Programmes oder den zu abarbeiteten Schritten oder??? Da kann ich doch nichts umstellen oder????

Vielen Dank

Gruß
 
Unter der Voraussetzung, dass nach dem Ändern der Zykluszeit oder dem Verschieben des Programms in eine neue Taskklasse ein Build und Übertragen stattgefunden hat, sollte das Programm wirklich schneller abgearbeitet werden. Aufgrund fehlender Echtzeit nicht harte 10ms aber irgendwas in der Richtung.
Die Zykluszeit wird über die Eigenschaften einer Taskklasse verändert (Rechtsklick auf Klasse/Properties/Duration)
 
Unter der Voraussetzung, dass nach dem Ändern der Zykluszeit oder dem Verschieben des Programms in eine neue Taskklasse ein Build und Übertragen stattgefunden hat, sollte das Programm wirklich schneller abgearbeitet werden. Aufgrund fehlender Echtzeit nicht harte 10ms aber irgendwas in der Richtung.
Die Zykluszeit wird über die Eigenschaften einer Taskklasse verändert (Rechtsklick auf Klasse/Properties/Duration)

Ja es läuft schneller. Ich hatte es an der falschen Stelle geändert.
Problem ist aber weiterhin, dass ich keinen Zeitunterschied messen kann zwischen den 2 Timeraufrufen. Selbst wenn ich einen 2. Timer aufrufe nach der Schleife und die beiden .StartTime Variablen vergleiche habe ich keine Differenz. Das kann doch nicht sein oder?
Bei allen Systemen habe ich eine Differenz von ca 17ms. Nur bei B/R nicht.
Und jetzt nachdem ich die Taskzeit auf 10ms gesetzt habe scmiert alles ab. Bekomme keine Rückmeldung vom Programm und das System ist voll überlastet.
Also ich muss sagen ich kapier des bei B&R nicht!!
Was ist da anders als bei BTwinCat oder STep 7, dass ich keine Zeitdifferenz messen kann selbst bei 2 Timern nicht?????

Vielen Dank

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Bitmanipulator,

nach Auskunft von B&R ist die Soft SPS ARsim Echtzeitfähig.
Jetzt kann ich mir noch viel weniger vorstellen warum es nicht geht und bei allen anderen schon!

Gruß
 
Nur mal als zwischenfrage:

"Die Werte ändern sich nur jede Sekunde"
<<-- Wie beobachtest du diese? Im Monitor-Modus werden diese nicht sonderlich schnell aktualisiert. Wenn dann Tracen...
 
Hi Leute,

so langsam verzweifle ich mit dem B&R Automation Studio.
Ich habe jetzt mal versucht die Systemzeit auszulesen um überhaupt mal eine Differenz zu haben.


IF Start= TRUE THEN

Stamp1:=AsIOStamp();

FOR i:=0 TO 300000 BY 1 DO

wert:=wert+1;
x:=x+1;
RR:=RR+1;
P:=(U*U)/RR;
y:=SQRT(x);
z:=SIN(y);
e:=EXP(x);
m:=ATAN(e);

End_FOR;

Stamp2:=ASIOTimeStamp();

END_IF;

Aber selbst hier sind die Werte von Stamp1 und Stamp2 genau identisch. Ich raff des net. Es ist doch normal so, dass die Programme eines SPS Systems zyklisch in einer gewissen Zykluszeit abgearbeitet werden. Eine Schleife wird doch nor,alwerweise in einem Zyklus hochgezählt. Bei Siemens und TwinCat verändert sich die Zykluszeit logischerweise je länger das Programm oder die Schleife wird.
Ist das bei Automation Runtime nicht so??????????????????????
Ich kapier des net mit diesen verdammten Tasks. CoDeSys hat auch Tasks doch da funktiniert es.
Kann ich bei Automation Runtime durch die Task zuordnung eines Programms nur selbst eine Zykluszeit vorgeben??????
Der Wert nach einer Schleife die 300000 mal hochgezählt wird in einem Zyklus muss doch unterschiedlich sein und nicht identisch gleich so wie bei mir???????
Ist es so, dass wenn ich ein Programm im CYCLIC#1 also 10ms laufen lassen will, es aber viel länger braucht,dass es dann nicht funktioniert????

Bitte helft mir. Ich fange langsam an zu verrecken vor diesem Sch..... B&R Automation Runtime.

Vielen Dank schonmal an alle

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nur mal als zwischenfrage:

"Die Werte ändern sich nur jede Sekunde"
<<-- Wie beobachtest du diese? Im Monitor-Modus werden diese nicht sonderlich schnell aktualisiert. Wenn dann Tracen...

ja ich beobachte sie im Monitor modus. Aber es ist mir im Endeffekt egal, wie schnell sie sich hier ändern. Wichtig wäre nur das ich eine Zeitdifferenz messen kann. Dies funktioniert wie gesagt auf 3 Systemen nur hier bei B&R nicht. Ich versteh es einfach nicht.

Danke dir

Gruß
 
Kein Grund zur Verzweiflung. In der Hilfe steht übrigens "Das ARsim ist ein auf Windows-32 basierendes Automation Runtime, welches als Demo SPS keine Echtzeitfähigkeit besitzt und im wesentlichen der Funktionalität aller anderen Zielsysteme entspricht . "
Habe Dein Beispiel mal auf der ARsim laufen lassen und in der Tat, es funktioniert nicht.
Nimmt man aber wie weiter empfohlen eine richtige Steuerung zeigen beide Timestamps unterschiedliche Werte an.
Machst Du diese Übung auf den anderen Systemen auch in deren Simulation?
 
Kein Grund zur Verzweiflung. In der Hilfe steht übrigens "Das ARsim ist ein auf Windows-32 basierendes Automation Runtime, welches als Demo SPS keine Echtzeitfähigkeit besitzt und im wesentlichen der Funktionalität aller anderen Zielsysteme entspricht . "
Habe Dein Beispiel mal auf der ARsim laufen lassen und in der Tat, es funktioniert nicht.
Nimmt man aber wie weiter empfohlen eine richtige Steuerung zeigen beide Timestamps unterschiedliche Werte an.
Machst Du diese Übung auf den anderen Systemen auch in deren Simulation?

Hi Bitmanipulator

Danke für deine Antwort. Leichter gesagt als gatan mit dem Verzweifeln ;)

Also bei Siemens weiss ich, ist es keine Simulation. Hier verwende ich die WIN AC RTX. Bei CoDeSys und TwinCat benutze ich eigentlich auch die Simulation. Das heisst keine Ahnung. Bei CoDesys und TwinCat benutze ich die Soft SPS die in deren Systemen angeboten werden. Bei CoDeSys ist es die WInSysTray und bei TwinCat die TwinCat PLC.

Ich hatte extra mit B&R telefoniert. Und die sagten:

Zitat: "Bei B&R gibt es im Prinzip nur eine einzige Runtime die sogenannte "Automation Runtime". Diese unter gliedert sich in drei Dinge: "ARemb" für ARembedded und "ARwin" für ARwindows und "ARsim" für ARsimulation. Alle drei sind quasi das gleiche nur ist das die ARemb für den Betrieb ohne Windows und die ARwin für den Betrieb mit Windows gedacht ist. Die ARsim hingegen ist eine AR die auf all unseren Systemen laufen kann und für die Entwicklung mit Matlab Simulink gedacht ist."

Ich kann doch bei der Konfiguration die ARwin garnicht anwählen oder doch?
Ich fragte extra ob die SoftSPSen echtzeitfähig sind. Er beantwortete es mit ja. Wahrscheinlich hat er die anderen gemeint ausser ARsim.

Ich versuchs mal mit einer anderen Steuerung.

Vielen Dank nochmal an dich.

Gruß
 
Zurück
Oben