CODESYS - das IEC 61131-3 Programmiersystem

Willkommen im offiziellen CODESYS - Forum von 3S-Smart Software Solutions | A member of the CODESYS Group
Deutsche Version English version russian version 
Aktuelle Zeit: Do Jul 18, 2019 9:37 pm

Alle Zeiten sind UTC




Ein neues Thema erstellen  Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Sep 23, 2013 12:10 pm 
Offline

Registriert: Do Apr 04, 2013 6:12 am
Beiträge: 4
CoDeSys erlaubt die Benutzung von mehreren Tasks, wobei höher priorisierte Tasks andere unterbrechen können. Ich frage mich daher, wie der Zugriff auf gemeinsame Daten geschützt werden kann und welche Datentypen garantiert von Codesys atomar gelesen und geschrieben werden können.
Gibt es dazu irgendwelche Dokumentationen?
Vielen Dank für Informationen!


Nach oben
   
BeitragVerfasst: Di Sep 24, 2013 3:24 pm 
Offline
Häufiger Nutzer
Häufiger Nutzer
Benutzeravatar

Registriert: Do Apr 07, 2005 1:22 pm
Beiträge: 193
Wohnort: Bei Ulm
Moin

Lies mal diesen Artikel:

http://de.wikipedia.org/wiki/Mutex#Semaphor_oder_Monitor

Speziell den Abschnitt über Semaphore.

Auch wenn das tadellos funktioniert wenn mann's richtig macht, würde ich doch versuchen diesen Fall ganz zu vermeiden.

Gruß Erik

_________________
Wer Rechtschreibfehler findet darf sie behalten...


Nach oben
   
BeitragVerfasst: Di Okt 01, 2013 8:07 am 
Offline

Registriert: Do Apr 04, 2013 6:12 am
Beiträge: 4
Hallo Erik

Ich bin mit Mutexen und Monitoren bestens Vertraut - ich komme eher von der Java/C# Programmierung, wo solche Konzepte ja z.T. direkt in die Sprache integriert sind.

Ich wollte eigenltich wissen, wie das in Codesys umgesetzt wird. Ein Sprachkonstrukt habe ich nicht gefunden. Auch in Bibliotheken wurden ich nur spärlich fündig. Ich dachte mir eigentlich, dass die Sprachdesigner von Codesys ja eigentlich so einen Konstrukt vorgesehen haben müssten, wenn sie mehrere Tasks zulassen.

Das ganz zu Vermeiden ist natürlich eine Lösung, man verschenkt dann aber den Nutzen von verschiedenen priorisierten Tasks.

Gruss
Stefan


Nach oben
   
BeitragVerfasst: Di Okt 01, 2013 9:49 am 
Offline
Häufiger Nutzer
Häufiger Nutzer
Benutzeravatar

Registriert: Do Apr 07, 2005 1:22 pm
Beiträge: 193
Wohnort: Bei Ulm
Moin

Spezielle Konstrukte in CoDeSys kenne ich nicht. Das muss 'von Hand' gemacht werden.
Da reicht ja aber im Normalfall ein Semaphore Flag.

Zitat:
man verschenkt dann aber den Nutzen von verschiedenen priorisierten Tasks

Nur weil man seine Daten nicht Task übergreifend benutzt heisst das ja nicht dass nicht mehrere Tasks benutzt werden,
bzw. nicht mehr sinnvoll sind.
Wir benutzen generell verschiedene Tasks mit verschiedenen Prioritäten und Zykluszeiten, versuchen aber eben nicht gleichzeitig,
bzw. überhaupt nicht, aus verschiedenen Tasks auf die selben Daten zuzugreifen.

Gruß Erik

_________________
Wer Rechtschreibfehler findet darf sie behalten...


Nach oben
   
BeitragVerfasst: Do Okt 03, 2013 2:53 pm 
Offline

Registriert: Do Apr 04, 2013 6:12 am
Beiträge: 4
Hallo Eric

Ich sehe schon, wir reden von verschiedenen Standpunkten aus :shock: , ich versuch mal das Problem an einem (konkreten) Beispiel zu erläutern. Das mit Semaphore-Flag ist leider nicht in jedem Fall ausreichend, weil man keine Task damit unterbrechen kann.

Ausgangspunkt:
- Task H: Hohe Priorität, kleiner Aufrufintervall z.B. 5ms
- Task L: Kleine Priorität, kleiner Aufrufintervall z.B. 100ms

Task H ist zuständig um IO-spezifische Sachen zu erledigen, Task L für Nebenaufgaben, z.B. Kommunikation.

Problem:
Task H protokolliert IO-Signal, schreibt diese in eine Queue/Fifo, von wo sie dann in der Task L Blockweise auf Anfrage gesendet werden sollen - ähnlich einen Producer/Consumer-Muster also. Da die Queue eine geteilte Resource ist, muss der Zugriff darauf synckronisiert werden. Mit einem Sempahore-Flag kann ich nur prüfen, ob schon jemand die Queue belegt hat, aber man kann nicht warten bis diese Frei wird, dass ist aber für die Task H notwendig, da sie sonst ihre Signale nicht schreiben kann und diese damit verloren gehen.
Toll wäre es, wenn die Task H z.B. in solch einen Fall schlafengelegt werden kann, bis Task L fertig ist (typischer Mutex/Semaphore/Critical Sectioin...).
Damit keine Priority-Inversion auftreten kann, wäre es noch schön - aber nicht zwingend notwendig - wenn der gerade belegte Task automatisch höher priorisiert wird.

Natürlich ist es notwendig, dass der Code-Teil, der die Resource exklusiv belegt möglichst kurz ist, da sonst der Jitter bei der Task H zu gross werden kann.

Naja, ich habe auf jeden Fall schon keine Hoffnung mehr, das so etwas mit Codesys überhaupt geht.


Nach oben
   
BeitragVerfasst: Fr Okt 04, 2013 6:13 am 
Offline
Häufiger Nutzer
Häufiger Nutzer
Benutzeravatar

Registriert: Do Apr 07, 2005 1:22 pm
Beiträge: 193
Wohnort: Bei Ulm
Moin

Doku der SysLibTasks im Anhang.
Damit kannst du Tasks zur Laufzeit stoppen/starten/pausieren/priorisieren usw...

Gruß Erik


Dateianhänge:
SysLibTasks.pdf [145.08 KiB]
128-mal heruntergeladen

_________________
Wer Rechtschreibfehler findet darf sie behalten...
Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de