Skip to main content

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 coreConfig sind nur FixedPinned und 0 zulässig. FreeFloating, SequentiallyPinned und jeder Kernindex ab 1 werden beim Übersetzen abgewiesen.

JSON-Dialekt

  • Format UTF-8

  • Schreibweise 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

taskGroups

array of Task Group

Ja

Liste von Taskgruppen

Array kann leer sein

systemEvents

array

Ja (muss leer sein: [])

Reserviert für zukünftige Unterstützung von Ereignistasks. Aktuell wird bei allen Elementen ein Fehler ausgegeben.

v3Meta

object

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

groupName

string

Ja

Frei wählbarer Anzeigename der Gruppe.

coreConfig

string

Ja

Kernkonfiguration

Genauere Beschreibung siehe unten in "Werte für die Kernkonfiguration"

tasks

object map (task name → Task)

Ja

Die Schlüssel sind die Tasknamen. Die Tasks werden in alphabetischer Reihenfolge ihres Namens abgearbeitet, unabhängig von ihrer Reihenfolge in der Datei.

. Werte für die Kernkonfiguration
  • "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 Taskgruppen FixedPinned verwenden, 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

calls

array of string

Ja

-

Namen der Programme, die bei jeder Ausführung der Task der Reihe nach aufgerufen werden. Darf leer sein.

priority

int

Ja

-

Priorität der Task. Niedrigere Werte bedeuten eine höhere Priorität.

type

string enum

Ja

-

Cyclic oder Freewheeling

Genauere Beschreibung siehe unten in "Tasktypen"

interval

int

Nein

0

Zykluszeit in Mikrosekunden

Nur für Cyclic-Tasks relevant.

Für Freewheeling-Tasks wird der Wert auf 0 gesetzt.

watchdogEnable

bool

Nein

false

Aktiviert den Watchdog für diese Task

Hinweis: Die Watchdog-Task steht aktuell noch nicht zur Verfügung.

watchdogTime

int

Nein

0

Watchdog-Timeout in Mikrosekunden

Nur relevant, wenn watchdogEnable den Wert true hat.

watchdogSensitivity

int

Nein

0

Anzahl der aufeinander folgenden Überschreitungen, die toleriert werden, bevor der Watchdog auslöst. Nur relevant, wenn watchdogEnable den Wert true hat.

. Tasktypen

Zulässige Werte für type

  • "Cyclic": Die Task läuft alle im Schlüssel interval definierten Mikrosekunden

  • "Freewheeling": Die Task läuft kontinuierlich und startet erneut, sobald der vorherige Zyklus beendet ist. Der Wert in interval wird ignoriert.

. Aktuell nicht akzeptierte Tasktypen
  • Folgende Tasktypen werden aktuell noch nicht akzeptiert: Event, External, ParentSynchron

  • Alle 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": []
}