TaskConfiguration.json
Jede CODESYS 4-Applikation verfügt über eine Datei TaskConfiguration.json. Sie wird beim Erstellen eines Geräteprojekts automatisch hinzugefügt. In dieser Datei sind die Tasks beschrieben, die das Laufzeitsystem ausführt, sowie die Programme, die von den einzelnen Tasks aufgerufen werden.
Wichtig
CODESYS 4 unterstützt auch einkernige Steuerungen. Das Format der TaskConfiguration.json ist dasselbe wie bei mehrkernigen Zielen, es gelten allerdings zwei Einschränkungen:
Es ist nur eine Taskgruppe zulässig.
Für
coreConfigsind nurFixedPinnedund0zulässig.FreeFloating,SequentiallyPinnedund jeder Kernindex ab1werden beim Übersetzen abgewiesen.
JSON-Dialekt
Format
UTF-8Schreibweise der Schlüsselnamen ist camelCase
Abschließende Kommas sind nach dem letzten Element eines Objekts oder Arrays erlaubt
Zeilenkommentare mit
//und Blockkommentare mit/* ... */sind erlaubt
Top-Level
{ "taskGroups": [ … ], // required
"systemEvents": [ ], // required — must be empty
"v3Meta": { … } // optional
}Schlüssel | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
|
| Ja | Liste von Taskgruppen Array kann leer sein |
|
| Ja (muss leer sein: | Reserviert für zukünftige Unterstützung von Ereignistasks. Aktuell wird bei allen Elementen ein Fehler ausgegeben. |
|
| Nein | Migrationsmetadaten, die aus CODESYS 3-Projekten übernommen wurden. Freiform. Zeigt Meldungen in der Applikation an, verändert jedoch nicht das Verhalten der Task. Dieser Schlüssel sollte bei neuen Dateien weggelassen werden. |
Taskgruppe taskGroups
Eine Taskgruppe ordnet ein Set von Tasks einer Kernkonfiguration zu.
{
"groupName": "IEC-Tasks",
"coreConfig": "FixedPinned",
"tasks": {
"MainTask": { … },
"BackgroundTask": { … }
}
}Schlüssel | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
|
| Ja | Frei wählbarer Anzeigename der Gruppe. |
|
| Ja | Kernkonfiguration Genauere Beschreibung siehe unten in "Werte für die Kernkonfiguration" |
|
| Ja | Die Schlüssel sind die Tasknamen. Die Tasks werden in alphabetischer Reihenfolge ihres Namens abgearbeitet, unabhängig von ihrer Reihenfolge in der Datei. |
"FreeFloating": Alle IEC-Tasks der Gruppe werden vom Betriebssystem über eine Lastverteilung dynamisch auf die Prozessorkerne verteilt. Die Tasks wechseln unter Umständen häufig den Kern; der Anwender hat keinen Einfluss auf die Zuordnung.Dieser Wert wird für die meisten Applikationen empfohlen, weil das Betriebssystem die Lastverteilung automatisch übernimmt.
"SequentiallyPinned": Alle IEC-Tasks der Gruppe sind dauerhaft an unterschiedliche Prozessorkerne gebunden. Wenn weniger Kerne als Tasks vorhanden sind, beginnt die Bindung bei Kern 1, setzt sich mit Kern 2, Kern 3, … fort und springt bei einem Überlauf zurück zu Kern 1, Kern 2, … Der Anwender hat keinen Einfluss darauf, welche Task an welchen Kern gebunden wird."FixedPinned": Alle IEC-Tasks der Gruppe sind dauerhaft an einen einzelnen Prozessorkern gebunden. Das Laufzeitsystem wählt den Kern aus, in der Regel Kern 1. Wenn mehrere TaskgruppenFixedPinnedverwenden, ist jede Taskgruppe an einen anderen Kern gebunden. Die Zuordnung beginnt in der Regel bei Kern 1."0","1","2", ...: Alle IEC-Tasks der Gruppe sind dauerhaft an den angegebenen Prozessorkern gebunden. Wenn die Steuerung diesen Kern nicht besitzt, schlägt die Übersetzung mit einem Fehler fehl.Für weitere Informationen siehe: CODESYS V3: Taskgruppen
Task
Hierbei handelt es sich um eine einzelne Task. Der Schlüssel des Eintrags im umschließenden "tasks"-Objekt ist der Name der Task. Der Name muss ein gültiger IEC-Bezeichner und innerhalb der Konfiguration eindeutig sein. Aus ihm werden die taskspezifischen Symbole erzeugt.
Beispiel eines Objekts "tasks"
{
"calls": ["PLC_PRG"],
"priority": 1,
"type": "Cyclic",
"interval": 200000,
"watchdogEnable": false,
"watchdogTime": 0,
"watchdogSensitivity": 0
}Schlüssel | Typ | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|---|
|
| Ja | - | Namen der Programme, die bei jeder Ausführung der Task der Reihe nach aufgerufen werden. Darf leer sein. |
|
| Ja | - | Priorität der Task. Niedrigere Werte bedeuten eine höhere Priorität. |
|
| Ja | - |
Genauere Beschreibung siehe unten in "Tasktypen" |
|
| Nein |
| Zykluszeit in Mikrosekunden Nur für Für |
|
| Nein |
| Aktiviert den Watchdog für diese Task Hinweis: Die Watchdog-Task steht aktuell noch nicht zur Verfügung. |
|
| Nein |
| Watchdog-Timeout in Mikrosekunden Nur relevant, wenn |
|
| Nein |
| Anzahl der aufeinander folgenden Überschreitungen, die toleriert werden, bevor der Watchdog auslöst. Nur relevant, wenn |
Zulässige Werte für type
"Cyclic": Die Task läuft alle im Schlüsselintervaldefinierten Mikrosekunden"Freewheeling": Die Task läuft kontinuierlich und startet erneut, sobald der vorherige Zyklus beendet ist. Der Wert inintervalwird ignoriert.
Folgende Tasktypen werden aktuell noch nicht akzeptiert:
Event,External,ParentSynchronAlle in CODESYS 3 Tasks aufgelisteten Eigenschaften der Tasks werden aktuell nicht akzeptiert, außer denjenigen, die auf dieser Hilfeseite im Abschnitt "Tasktypen" aufgeführt sind.
Wichtig
Beim Abgleich der Schlüssel und Typen wird die Groß- und Kleinschreibung beachtet.
Standardwerte für eine neue Applikation
Wenn keine TaskConfiguration.json vorhanden ist, startet eine neue Applikation mit folgendem Äquivalent:
{
"taskGroups": [
{
"groupName": "IEC-Tasks",
"coreConfig": "FixedPinned",
"tasks": {
"DefaultTask": {
"calls": ["PLC_PRG"],
"priority": 1,
"type": "Cyclic",
"interval": 200000
}
}
}
],
"systemEvents": []
}Beispiel
Im Folgenden sehen Sie ein Beispiel für eine Datei TaskConfiguration.json mit einer Taskgruppe und mehreren Tasks:
{
"taskGroups": [
{
"groupName": "IEC-Tasks",
// "FreeFloating" | "FixedPinned" | "SequentiallyPinned"
// or a quoted core index, e.g. "0"
"coreConfig": "FixedPinned",
// Tasks run in alphabetical order of their key — not file order.
"tasks": {
"MainTask": {
"calls": ["PLC_PRG", "MyProgram"],
"priority": 1,
"type": "Cyclic",
"interval": 200000, // microseconds
"watchdogEnable": true,
"watchdogTime": 1000000, // microseconds
"watchdogSensitivity": 1
},
"BackgroundTask": {
"calls": ["Diagnostics"],
"priority": 15,
"type": "Freewheeling"
// interval is ignored for Freewheeling tasks
}
}
}
],
// Must be present, must be empty (events are not yet supported).
"systemEvents": []
}