plc_prg, ini.prg, Taskkonf was gilt? (750-881)

tomrey

Level-1
Beiträge
362
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi all,
mal eine Frage zum Systemstart:

var_global: xSystemstart=true
Aufruf plc_prg->ini.prg funktioniert natürlich aber ich will das mit der Taskkonfig lösen:

In der Taskkonfig habe ich:
1. plc_prg zyklisch mit 100ms und Prio 2
2. ini.prg ereignisgesteuert bei xSystemstart=true, Prio 0, setzt xSystemstart=false

plc_prg wird vor ini.prg abgearbeitet, erst ab den 2. Zyklus ist xSystemstart=false
Wo ist mein Denkfehler, ich dachte das regelt die Prio?
Muß wohl an zyklisch vs. ereignisgesteuert liegen aber wie?

Alternativ gibt es in der Taskkonfig die Systemereignisse.
Welche Reihenfolge gilt, wenn ich dort start anhake und meine ini.prg angebe?
Zusatzfrage: Kann ich dort mehrere prg's angeben, die bei einem Systemereignis abgearbeitet werden sollen oder müsste ich das mit einer "Zwischen-prg" machen?
Dank+Gruß
 
oder start benutzen
oder inner halb plc_prg erst fragen b der ini schn getan ist, wenn nicht dan die ini.prg starten.
wenn etwas geandert in tasks dan muss plc_prg antask gehangen werden.
 
in der taskconfig gibt es start, das heisst wenn der PLC started kan man das ereigniss benutzen um startpou (ini) zu fahren, und dan die plc_prg
wenn etwas geandert wird mit task dan muss man den PLC_PRG selbst auch angeben in einer task.
da die automatic nicht mehr geht.

Ich mache mein eigenes taskconfig in den PLC_PRG, dan bin ich sicher nichts zu ubersehen, und ich kan es jemand viel schneller erklaren.
Im plc_prg stehen alle programme die ich mochte, im program steht dan ob die auch wirklich gedreht werden mussen, sonst gebe ich gleich zuruck.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo tomrey,

die definierte Abarbeitung von angelegten Tasks, zyklisch oder ereignisgesteuert, ist direkt beim Starten der Applikation von einer Vielzahl vom Faktoren abhängig und somit nur bedingt zu beeinflussen.
Wir empfehlen daher die Abarbeitung von verhaltenskritischen Programmteilen durch eine Variable (xInitReady) zu blockieren. Dabei ist es unabhängig ob die Initialisierungsroutine über ein „Systemereignis“ oder eine Task abgearbeitet wird. Es muss nur beachtet werden, dass erst nach der Abarbeitung der Initialisierungsroutine die Variable (xInitReady) auf „TRUE“ wechselt und den verhaltenskritischen Programmteil freigibt.

Bezüglich der „Systemereignisse“ muss beachtet werden, dass das darüber aufgerufene Programm nur einmalig abgearbeitet wird. In diesem Zusammenhang ist der Aufruf eines Programmes über das „Systemereignis“, in dem alle weiteren Programme einmalig ausgeführt werden, zu empfehlen.
 
Hallo Wago,
mein Anwendungsfall ist der mit dem Systemereignis "start" und ich werde die plc_prg mit der empfohlenen xInitReady blockieren.
Allerderings bekomme ich bei dieser Lösung aus meiner ini.prg die Übersetzungswarnung "2501: Eine Callbackfunktion darf keine lokalen Variablen enthalten."
(Ich rufe aus der ini.prg einen function block für eine Meldung auf, die Instanzierung ist wohl die lokale Variable.)
Wird die ini.prg aus plc_prg aufgerufen, gibt es keine Warnung.
Mein nächster Anwendungsfall wird ein Datenaustausch mit einem Linux-Server per http put/get.
Gibt es dazu einen aktuelleren Anwendungshinweis als den alten englischen aus 2005?
Dank+Gruß
 
Hallo tomrey,

die Warnung besagt, dass das Systemereignis bzw. eine „Callbackfunktion“ nicht auf eine lokale Variable referenzieren soll.
Bitte definiere die Variable „xInitReady“ als eine Globale Variable, dann ist die Warnung beseitigt.
Den seitens WAGO zur Verfügung stehende Anwendungshinweis findest Du unter folgenden Link. Er ist in Englisch, jedoch von 2011.

http://www.wago.de/suche/index.jsp?...dium=forum&utm_content=sps-forum&utm_term=APN
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort!
Mißverständnis:
die Warnung besagt, dass das Systemereignis bzw. eine „Callbackfunktion“ nicht auf eine lokale Variable referenzieren soll.
Bitte definiere die Variable „xInitReady“ als eine Globale Variable, dann ist die Warnung beseitigt.
Ich meinte nicht diese Variable sondern:
"einen function block für eine Meldung auf, die Instanzierung ist wohl die lokale Variable"
Soll ich tatsächlich den Namen der FB-Instanz global deklarieren?
Gruß
 
Hallo tomrey,

wenn Du ein Programm über ein Systemereignis bzw. eine „Callbackfunktion“ einmalig aufruft, müssen alle Variablen in diesem Programm als Globale Variablen definiert werden.
 
Hallo Wago,
ich muß nochmal auf das Thema Übersetzungswarnung "2501: Eine Callbackfunktion darf keine lokalen Variablen enthalten." zurückkommen.
Obwohl ich alle lokalen Variablen als global umdeklariert habe, kommt die Warnung nach wie vor.
Was tun?
Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo tomrey,

ich habe meine bisherigen Erläuterungen in Bezug auf den Aufruf eines Funktionsblockes über ein Systemereignis noch einmal geprüft. Über das Systemereignis “start“ rufe ich einmalig das von mir zusätzlich angelegte INI_PRG auf. Im INI_PRG wird eine Variable beschrieben und exemplarisch der FB CTU (count up) verwendet. Sowohl die im INI_PRG verwendete Variabel als auch der FB ist in den Globale_Variablen deklariert bzw. instanziiert. Das Programm kann ohne Warnung übersetzt werden. Deklariere bzw. instanziiere ich eine dieser Variablen direkt im INI_PRG, erscheint die Warnung beim Übersetzen. Ich vermute, dass in Deinem Projekt noch ein lokaler Bezug besteht. Wenn weiterhin diese Warnung beim Übersetzen auftritt kannst Du Dich selbstverständlich direkt an unseren Support zu wenden.
 
Zurück
Oben