Temperaturregelung instanziieren und initiieren

Für bestimmte Applikationen soll aus dem Umfang der TwinCAT 3 Plastic Application nur die Temperaturregelung verwendet werden. In diesem, aber auch im normalen Anwendungsfall muss hierfür der Temperaturregler einzeln instanziiert und initiiert werden können. Im folgenden Beispiel wird dieser Prozess Schritt für Schritt durchlaufen.

1. Legen Sie eine neue Task mit einer Zykluszeit von 25 ms an. Dies ist nicht zwingend notwendig, wird aber - basierend auf Erfahrungswerten - empfohlen.
Temperaturregelung instanziieren und initiieren 1:
2. Erzeugen Sie eine Instanz des FB_Temperature und des FB_TemperatureHmi und ordnen Sie das Mapping der neu angelegten Task zu.
{attribute “qualified_only”}
VAR_GLOBAL
    {attribute “TcHmiSymbol.Hide”}
    {attribute “TcContextName”:=”TempTask”}
    fbTemperature:            FB_Temperature;

    fbTemperatureHmi:         FB_ TemperatureHmi;
END_VAR
3. Initialisieren Sie die Temperature-Klassen. Hierfür stehend folgende Möglichkeiten zur Verfügung:
VAR_GLOBAL
    fbRuntime:            FB_BaseRuntime;
END_VAR



// Program with its task call referenced to PlcTask
PROGRAM PlcMain
// Build list of classes that should be called cyclically by the runtime
_Build();             
// Standard call of Cyclic
fbRuntime.Cyclic();   



// Program with its task call referenced to TempTask
PROGRAM TempMain
// Slow call for Temperature
fbRuntime.TemperatureCyclic()



// Method to define the runtime objects
METHOD _Build
VAR_INST
    bBuild:    BOOL;    // Latch the Build only gets executed once
END_VAR


IF NOT bBuild THEN
bBuild := TRUE;

    // Append temperature classes to be initialized and called by the runtime
    fbRuntime.Append(fbTemperature, fbTemperatureHmi);
    // Further objects to append
    fbRuntime.Append(fbOtherObject, fbOtherObjectHmi);

END_IF
VAR
    bInit:        BOOL;
    bInitFailed:  BOOL;
    bParamInit:   BOOL;
    hr:           HRESULT;
END_VAR



IF NOT bInit AND NOT bInitFailed THEN
    hr := fbTempCtrl.SetHMI(fbTempCtrlHmi);
    hr := fbTempCtrl.Init();
    IF SUCCEEDED(hr) THEN
        bInit := TRUE;
    ELSE
        bInitFailed := TRUE;
    END_IF
ELSIF bInit THEN
    IF NOT bParamInit THEN
        hr := fbTempCtrl.ParamInit();
        IF SUCCEEDED(hr) THEN
            bParamInit := TRUE;
        END_IF
    END_IF
    
    fbTempCtrl.Cyclic();
END_IF