-> Hier kostenlos registrieren
Moin,
bin neu bei der Programmierung des Wago 841ers und mache mir so meine Gedanken zum Arbeiten mit mehreren Tasks.
Komme eigentlich mehr aus der Computer-Ecke, habe aber das SPS-Konzept des never-ending-loops und der Programmierung mit nicht blockierenden Schleifen, etc. verstanden.
Wie ist die Unterbrechung/Wechsel von einem Task zum nächsten bei Codesys/Wago geregelt ?
Kann der Task-Wechsel an beliebiger Stelle passieren oder nur an Struktur-Grenzen, wie Funktionsaufrufen, Befehlen, etc. Wenn, nein welche Befehle sind atomar und können nicht unterbrochen werden? Konkret geht es um die Frage, welche Programmteile müssen über Semaphoren abgesichert werden?
Wenn ich eine Variable (z. B. ein DWord) in beiden Tasks verwende, muss ich dann damit rechnen, dass ein Zugriff nach einem Byte/Word unterbrochen wird und dann der andere Tasks darauf zugreift und zu einem falschen Ergebnis kommt?
Wann werden Prozessabbild und Variablen gesetzt?
Ich gehe mal davon aus, dass für jeden Task ein eigenes Prozessabbild generiert wird. Wann ändern Variablen ihren Wert? Was passiert mit gemeinsamen Variablen zweier Prozesse?
Praktische Frage: Was ist beim Speichern im Filesystem zu beachten?
Ich möchte Messdaten speichern. Diese werden in einem schnellen hoch priorisierten Prozess erzeugt und in einen Buffer geschrieben. Anschließend werden sie durch einen nieder prioren Task in eine Datei im Filesystem geschrieben.
Irgendwie muss ich berücksichtgen, dass in der Zeit, in der der Buffer ins Filesystem geschrieben wird, keine neuen Daten in den Buffer gefüllt werden können. Muss ich mit 2 Buffern arbeiten, die ich immer abwechselnd fülle.
Ich würde mich freuen, wenn der eine oder andere seine Erfahrungen zum Handlen mehrerer Tasks zum Besten gibt.
bin neu bei der Programmierung des Wago 841ers und mache mir so meine Gedanken zum Arbeiten mit mehreren Tasks.
Komme eigentlich mehr aus der Computer-Ecke, habe aber das SPS-Konzept des never-ending-loops und der Programmierung mit nicht blockierenden Schleifen, etc. verstanden.
Wie ist die Unterbrechung/Wechsel von einem Task zum nächsten bei Codesys/Wago geregelt ?
Kann der Task-Wechsel an beliebiger Stelle passieren oder nur an Struktur-Grenzen, wie Funktionsaufrufen, Befehlen, etc. Wenn, nein welche Befehle sind atomar und können nicht unterbrochen werden? Konkret geht es um die Frage, welche Programmteile müssen über Semaphoren abgesichert werden?
Wenn ich eine Variable (z. B. ein DWord) in beiden Tasks verwende, muss ich dann damit rechnen, dass ein Zugriff nach einem Byte/Word unterbrochen wird und dann der andere Tasks darauf zugreift und zu einem falschen Ergebnis kommt?
Wann werden Prozessabbild und Variablen gesetzt?
Ich gehe mal davon aus, dass für jeden Task ein eigenes Prozessabbild generiert wird. Wann ändern Variablen ihren Wert? Was passiert mit gemeinsamen Variablen zweier Prozesse?
Praktische Frage: Was ist beim Speichern im Filesystem zu beachten?
Ich möchte Messdaten speichern. Diese werden in einem schnellen hoch priorisierten Prozess erzeugt und in einen Buffer geschrieben. Anschließend werden sie durch einen nieder prioren Task in eine Datei im Filesystem geschrieben.
Irgendwie muss ich berücksichtgen, dass in der Zeit, in der der Buffer ins Filesystem geschrieben wird, keine neuen Daten in den Buffer gefüllt werden können. Muss ich mit 2 Buffern arbeiten, die ich immer abwechselnd fülle.
Ich würde mich freuen, wenn der eine oder andere seine Erfahrungen zum Handlen mehrerer Tasks zum Besten gibt.