Symbol-Initialisierung und Retain-Variablen

Symbol-Initialisierung und *Retain-Variablen sind zwei verschiedene Mechanismen zur persistenten Datenhaltung in TwinCAT-PLC-Projekten. Über das Automation Interface lassen sich beide per ProduceXml auf der PLC-Instanz auslesen. Initialisierungswerte können zusätzlich per ConsumeXml gesetzt werden.

Voraussetzungen

Symbol-Initialisierung

Variablen können im PLC-Code mit dem Pragma {attribute 'TcInitSymbol'} markiert werden. TwinCAT stellt daraufhin über das Automation Interface einen XML-Zugriff auf die Initialisierungswerte bereit. Dieses Feature steht ab TwinCAT Build 4024.17 zur Verfügung.

PLC-Deklaration

VAR
    {attribute 'TcInitSymbol'}
    nCount : INT;
END_VAR

Initialisierungswerte lesen (C#)

// Look up PLC instance (under TIPC^<ProjectName>^<InstanceName>)
ITcSmTreeItem plcInstance = sysManager.LookupTreeItem(@"TIPC^PLC1^PLC1 Instance");

// Read symbol initialization values
string initXml = plcInstance.ProduceXml();
// The XML contains <InitSymbolValues> for all variables marked with {attribute 'TcInitSymbol'}

Beispiel-XML (ProduceXml-Ausgabe)

<TreeItem>
    <TcModuleInstance>
        <Module>
            <InitSymbolValues>
                <Value>
                    <Name>MAIN.nRem1</Name>
                    <Value>0</Value>
                </Value>
            </InitSymbolValues>
        </Module>
    </TcModuleInstance>
</TreeItem>

Initialisierungswert setzen (ConsumeXml, C#)

string setInitXml = @"<TreeItem>
  <Instance>
    <SymbolInit>
      <Symbol>
        <Name>MAIN.nInitValue</Name>
        <Value>42</Value>
      </Symbol>
    </SymbolInit>
  </Instance>
</TreeItem>";
plcInstance.ConsumeXml(setInitXml);

Retain-Variablen

Symbol-Initialisierung und Retain-Variablen 1:

Der Zugriff auf Retain-Variablen über das Automation Interface ist rein lesend. VAR RETAIN ist ein TwinCAT-PLC-Konzept. Das Automation Interface erlaubt nur das Auslesen der Konfiguration per ProduceXml.

Retain-Variablen werden im PLC-Code über den VAR RETAIN-Abschnitt deklariert und behalten ihren Wert über einen Neustart der SPS hinweg.

PLC-Deklaration

PROGRAM MAIN
VAR
END_VAR
VAR RETAIN
    nRem1 : INT;
END_VAR

Beispiel-XML (ProduceXml-Ausgabe der PLC-Instanz)

<TreeItem>
    <TcModuleInstance>
        <Module>
            <DataAreas>
                <DataArea>
                    <AreaNo AreaType="RetainSrc" CreateSymbols="true">4</AreaNo>
                    <Name>PlcTask Retains</Name>
                    <ContextId>0</ContextId>
                    <ByteSize>11534336</ByteSize>
                    <Symbol>
                        <Name>MAIN.nRem1</Name>
                        <Comment><![CDATA[{attribute 'TcInitSymbol'}]]></Comment>
                        <BitSize>16</BitSize>
                        <BaseType GUID="{18071995-0000-0000-0000-000000000006}">INT</BaseType>
                        <BitOffs>3096576</BitOffs>
                    </Symbol>
                    <Symbol>
                        <Name>myProg.nRemain</Name>
                        <BitSize>16</BitSize>
                        <BaseType GUID="{18071995-0000-0000-0000-000000000006}">INT</BaseType>
                        <BitOffs>3137088</BitOffs>
                    </Symbol>
                </DataArea>
            </DataAreas>
        </Module>
    </TcModuleInstance>
</TreeItem>
<TreeItem>
    <TcModuleInstance>
        <Module>
            <RetainDataMappings>
                <RetainDataMapping AreaNo="4" OTCID="#x03020001"/>
            </RetainDataMappings>
        </Module>
    </TcModuleInstance>
</TreeItem>