SPS Typdaten

SPS Typdaten bietet eine Schnittstelle zwischen Viper.NET und einer SPS um Typdaten - sprich ‚Typabhängige Produktionsdatensätze‘ - in Viper.NET zu verwalten. Als Schnittstelle wird ein gemeinsamer lese/schreibe Datenblock definiert.

Die SPS kann mit den Befehlen ‚Load‘, ‚Save‘, ‚Next‘ und ‚Previous‘ in Verbindung mit einem Typnamen:

  • Produktionsdatensätze eines Typen mit ‚Load‘ anfordern und vom Datenblock lesen.

  • Änderungen von aktuellen Typen in Viper.NET speichern, indem sie Daten im gemeinsamen Datenblock aktualisiert und ‚Save‘ ausführt.

  • Den nächsten Typen mit ‚Next‘ abruft und vom Datenblock liest.

  • Den vorherigen Typen mit ‚Previous‘ abruft und vom Datenblock liest.

Warnung

Zeitgleiches Konfigurieren der Typdaten über die SPS und die Viper.NET-GUI kann beim Speichern zu inkonsistenten Daten führen. Hintergrund: Die Änderungen von Datensätzen (Datenblock) kann sowohl durch die SPS als auch in Viper.NET geschehen.

Typdaten - Verwaltung mit der SPS

Die Typdaten-Station verwendet den Standard-Handshake, siehe auch :Stationshandshake. Gültige Werte für das Kommando ‚In_Cmd‘ sind Load (1), Save (2), Next (3) und Previous (4). Zum jeweiligen Befehl ist der Typname ‚InTypeName‘ zwingend anzugeben. Bei erfolgreicher Ausführung wird der Befehl ‚InCmd‘ nach ‚OutCmd‘ gespiegelt und der altuelle TypeName an ‚OutTypeName‘ geschrieben. OutStateInfo übermittelt zusätzlich den PC-Status an die SPS (Fehlerfall).

InCmd.IN<MyTypeData>Cmd

[UINT16]

Befehl von der PLC 1:Load; 2:Save ;3:Next;4:Previous

InCmd.IN<MyTypeData>TypeName

[string(30)]

Bei Load und Save: PLC setzt den Typ, auf den sich der Befehl beziehen soll.

TypeData<MyTypeData>

[Datenblock]

Bei ‚Save‘ schreibt PLC TypDaten.

Der :Stationshandshake löst den Befehl aus.

TypeData<MyTypeData>

[Datenblock]

Bei ‚Load‘, ‚Next‘, ‚Previous‘ schreibt Viper.NET die TypDaten.

OutCmd.OUT<MyTypeData>Cmd

[UINT16]

Befehls-Echo. Viper.NET bestätigt die erfolgreiche Ausführung.

OutCmd.OUT<MyTypeData>typeName

[string(30)]

Viper.NET setzt die aktuellen Typdaten-Namen.

OutCmd.OUT<MyTypeData>StatusInfo

[string(80)]

Status & Fehlermeldungen von Viper.NET an die PLC.

TypeData<MyTypeData>

[Datenblock]

Enthält die aktuelle Typdaten.

Typdaten - Verwaltung in Viper.NET

Die Typdaten-Verwaltung in Viper.NET ist über den Sidebar (hier „PLC-Params“) erreichbar. In der folgenden Abbildung sind beispielsweise zwei Typdaten konfiguriert.

../_images/sps-type-overview.png
  1. Aktueller Typname

  2. Aktuelle Typdaten (Anzeige)

  3. Vorauswahl Aktueller Typ

  4. Set setzt den ausgewählten Typ (3) auf aktiv. Die Parameter für den ausgewählten Typ werden in die Steuerung geschrieben.

  5. Set All Setzt den ausgewählten Typ (3) für alle Typdatenmanager auf aktiv. Die Parameter für den ausgewählten Typ werden in die Steuerung(en) geschrieben. Dieser Taster ist nur im Multi-Modus sichtbar.

  6. Öffnet den Dialog zum Einstellen der Typdatenparameter bzw. der Typdatenkonfiguration.

../_images/sps-type-edit-values.png
  1. Typname (Auswahl)

  2. Neuen Typ anlegen.

  3. Löschen des ausgewählten Typs.

  4. Umbenennen des ausgewählten Typs.

  5. Speichern der Typdaten des ausgewählten Typs auf dem Dateisystem. Falls ein Archivordner konfiguriert ist, wird die Typdatei zusätzlich archiviert.

  6. Werte Eingabe-Spalte.

  7. Öffnet einen Dialog zur erweiterten Werte-Eingabe. Bei Unsigned-Integer-Format können Werte in Hex UInt32 (0x00000000) oder Hex UInt16 (0x0000) eingegeben werden.

  8. Zeitstempel der letzte Änderungsdatum des Typdatensatzes.

  9. Editieren der Typdatenkonfiguration.

../_images/sps-type-configuration.png
  1. Read only: Reiner Anzeigemodus für die SPS Typdaten. Die Daten könne am PC nicht editiert werden.

../_images/sps-type-readonly.png
  1. Type directory Gibt das Verzeichnis relativ zum Viper.NET-Data-Verzeichnis an, in dem die Typdaten persistent gespeichert werden.

  2. Remember last type Beim Neustart von Viper.NET werden die letzten Typdaten geladen, ansosten keine.

  3. Save Speichert die Typdatenkonfiguration auf dem Dateisystem.

  4. Cycletime countercheck params [ms] Gibt an in welchen Zeitabständen in [ms] die Typdaten gegengelesen werden sollen.

  5. Add to statemenue Der Status der Typdaten wird im Viper.NET-Statusmenu angezeigt.

  6. Auto resend params on not equal [ms]. Falls nach dem gegenlesen der Parameter die Istwerte von den Sollwerten abweichen, werden diese erneut in die Steuerung geschrieben.

  7. Add Fügt eine neue Typ-Parameter-Liste ein (Neues Register). Zur Übersichtlichkeit können Daten kategorisiert werden.

../_images/TypDataAddParamTable.png
  1. Remove Entfernt die ausgewählte Typ-Parameter-Liste.

  2. Left Verschiebt die ausgewählte Typ-Parameter-Liste (Register) nach links

  3. Right Verschiebt die ausgewählte Typ-Parameter-Liste (Register) nach rechts

  4. Edit Name Ändert den Namen der Typ-Parameter-Liste

  5. Copy from Hier können alle Typdatenparameter eines Typdatenmanagers für diesen Typdatenmanager übernommen werden. Dabei muss ein Offset für die GInOut-Daten-IDs der Typdaten angegeben werden.

  6. Add Hinzufügen eines Parameters.

  7. Remove Entfernen eines Parameters.

  8. Selected Row up Verschiebt den ausgewählten Parameter nach oben

  9. Selected Row down Verschiebt den ausgewählten Parameter nach unten

  10. Edit GInOutVariable Editieren des ausgewählten Parmeters mittels ‚Edit GInOut Variable‘-Form (siehe GInOut )

../_images/sps-type-EditGInOutVariable.png

Hinweis

Die Typdaten können in Typ-Parameter-Listen (Registern) unterteilt werden, was der Übersichtlichkeit dient. Wird eine Type-Parameter-Liste geändert und ist diese nicht mehr zu bestehenden Datensätzen konsistent, so wird dem Benutzer über spezielle Dialog die Möglichkeit gegeben die Konflikte manuell zu bereinigen.

Konfiguration: Nicht zugewiesene Parameter

Im Fall, dass bei einem Typ Parameterlisten umbenannt, hinzugefügt, entfernt oder Parameter umbenannt, hinzugefügt oder entfernt werden müssen die Parameter/Werte neu zum Datenbereich referenziert werden. Änderungen der Konfiguration werden in ‚gioTypeDataManager_MyStation1.xml‘ permanent gespeichert (GIO). Jeder MyTyp.xml referenziert über den Variablennamen zu den ‚gioTypeDataManager‘. Folglich ist bei jedem Typwechsel eine manuelle Zuweisung nötig.

Bsp.: Typ A und Typ B existieren. Parameterliste wird umbenannt. Von Params zu Params1.

Form - ‚Not Assigned type data parameter lists‘ erscheint. Der User hat die Möglichheit der Zuweisung oder Löschung bestehender Typ-Parameter.

../_images/TypData-NotAssignedParams01.png

Bei Typ A: Parameterliste Params wird zu Params1 umbenammt.

../_images/TypData-NotAssignedParamsRenameParamsList.png
  1. Dafault Auswahl der Standardzuweisung.

  2. Explizite Auswahl der gelisteten Parametern zur Übernahme.

  3. Ok Übernahme der Auswahl. Im Falle, ein Element wurde hinzugefügt.

  4. Delete Löschen der Auswahl. Im Falle wenn ein Element entfernt worden ist.

Wechsel zum Typ B:

Mit dem Wechsel zu einem bestehenden Typen ist die Zuweisung zu machen. Siehe: Form - ‚Not Assigned type data parameter lists‘

../_images/TypData-NotAssignedParamsRenameParamsList2.png
  1. Ok Bewirkt die Übernahme des neuen Parameters in den ausgewählten Typen.

  2. Delete Würde die Werte nicht in den gewechselten Typen übernehmen.

Bsp.: Bei Typ A werden Parameter umbenammt:

../_images/TypData-NotAssignedParamsRenameParams.png
  1. Not assigned parameters clicken.

../_images/TypData-NotAssignedParamsRenameParams2.png
  1. Auswahl des alten Parameters.

  2. Auswahl neuen/umbenannten Parameter.

  3. Zuweisung der beiden Parameter (1) (2). Nach erfolgreicher Zuweisung werden diese aus der Liste entfernt.

  4. Delete Löschen eines alten Parameterwertes.

  5. Set default Setzt den Standardwert der GInOut-Variable.

  6. Ok Änderungen übernehmen.

  7. Cancel Änderungen verwerfen.

Wechsel zu Typ B:

Mit dem Wechsel zu einem bestehenden Typen ist die Zuweisung wiederholt zu machen.

Hinweis

Beheben von Fehler. Sind Fehler in der Konfiguration gemacht worden, werden diese in einer zusätzlich Tabelle angezeigt. Der User kann mit den Hinweisen die Konfiguration bereinigen.

../_images/TypData-NotAssignedParamsRenameParams3.png
  1. Ausrufezeichen geben Hinweise, dass die Konfiguration diese Typen aktualisiert werden muss.

  2. Die Fehlertabelle gibt Hinweise zur Behebung.

  3. Über die Konfiguration lassen sich die Parameter wie gehabt zuweisen.

Typdaten Aktivierung im Viper.NET Projekt

userTabs.xml

<userTabs>
   <tab name="PLC-Params" type="ControlLayoutExtApps">
      <param name="operation" value="MainForm.Tabs.PLCParams"/>
      <param name="sortId" value="15" />
      <param name="width" value="1" />
      <param name="height" value="2" />
      <param name="extAppLayoutChildXml" value="Configuration\\extAppLayoutChilds.xml" />
   </tab>
</userTabs>

extAppLayoutChilds.xml

<extAppLayoutChilds rolesOrder="Admin,Service,Operator,Technican">
   <child type="CtlGioTypeDataManager" >
     <childLayout placeHolderId="-1" ptX="0" ptY="0" width="1" height="1" visible="True" user="" role="service|admin|operator|technican"/>
     <caption visible="True" height="24" text="PLC Data MyStation" backColor="" foreColor="" border="True" />
     <param name="backColor" value="LightSteelBlue"/>
     <param name="borderStyle" value="FixedSingle"/>
     <param name="gioTypeDataManagerName" value="MyStation"/>
   </child>
</extAppLayoutChilds>

.makproj

Option Single-Modus:

Im Singelmodus wird genau ein Typdatenmanager verwendet.

<dataStore>
<param name="gioTypeDataManagersXml" value=""/>
<param name="gioTypeDataManagerXml" value="gioTypeDataManager_MyStation1.xml" />

Option Multi-Modus:

Im Multi-Modus können mehrere Typdatenmanager für unterschiedliche Stationen konfiguriert werden. Jeder Typdatenmanager muss einen eindeutigen Namen erhalten.

<dataStore>
<param name="gioTypeDataManagersXml" value="gioTypeDataManagers.xml" />
<param name="gioTypeDataManagerXml" value="" />

.\Data\gioTypeDataManagers.xml

<?xml version="1.0" encoding="utf-8"?>
<gioTypeDataManagers>
    <gioTypeDataManager name="MyTypDataStation1" file="gioTypeDataManager_MyStation1.xml"/>
    <gioTypeDataManager name="MyTypDataStation2" file="gioTypeDataManager_MyStation2.xml"/>
</gioTypeDataManagers>

Hinweis

Wird bei einem Typdatenmanager masterinstance=“true“ gesetzt, so wird dieser bei jedem Kommando verwendet, wenn kein Typdatenmanager-Name angegeben wird.

gioTypeDataManager_MyStation1.xml

In dieser Datei sind alle Parameter aus der Form ‚Edit Type Configuration‘ gespeichert. Darüber hinaus können noch weitere Atribute, die nicht über die Form konfiguriert werdene können, gesetzt werden.

<gioTypeDataManager typeDirectory="GioTypesRiveting" archiveDirectory="Archive" zeroDataValue="*">
  • typeDirectory Ordner der Type-Data MyStation.

  • archiveDirectory Archiv-Ordner im typeDirectory. Darin werden Sicherungskopien vom MyType.xml kopiert und mit den aktuellen Zeitstempel versehen.

TypeDirectory

Dieser Ordner enthält:

  • ein archiveDirectory

  • die verschiednen MyType.xml einer Station. Pro Typ existiert eine MyType.xml, sowie die zugehörige

  • xmlHistory.txt die Parameteränderungen durch den Viper.NET-User protokolliert.

MyType.xml

Ein angelegtesRegister entsricht einer ParameterList. Hier ist die Variablenname-Werte-Zuweisnung.

<typeData lastChange="24.05.2021 17:20:09">
    <parameterList name="MyParam">
        <param name="Descr" value="Description Typ MyType" />
        <param name="Param1" value="1" />
    </parameterList>
    <parameterList name="MyParamInNewTab">
        <param name="Descr" value="Description Typ MyType ComponentX" />
        <param name="Param2" value="2" />
    </parameterList>
</typeData>

MyType.xmlhistory.txt

Enthält das Logbuch von Benutzeränderungen.

archiveDirectory

Archiviert wird der Typ mittels kopieren in den Archivordner und Dateinamenserweiterung mit Zeitstempel ‚MyType~yyyy-MM-dd.hh-mm-ss.xml‘. Das Wiederherstellen archivierter Typdaten geschieht manuell im Filesystem.

Hardware Explorer

Für die Schnittstelle zur SPS werden im HW-Explorer drei Datenblöcke verwendet.

../_images/HWData-TypData.png
  1. Datenblock ‚TypeData‘ -read/writeable.

  2. IN_Commandoblock ‚InCmd‘ -readable

  3. OUT_Commandoblock ‚OutCmd‘ -writeable

In den Commandoblocks sind ebenso die Bits für den Handshake mit der SPS definiert.

Viper.xio

<datas callHandleChangedSync="False">
   <data id="5" name="TypData_CmdIn" hwId="1" datablockId="1" offs="0" len="128" alignment="1" dir="in" neverPoll="False" counterCheckOutData="False" writeSetDataCyleTime="-1" dataChangedLogger="">
   </data>
   <data id="6" name="TypData_CmdOut" hwId="1" datablockId="1" offs="128" len="128" alignment="1" dir="out" neverPoll="False" counterCheckOutData="False" writeSetDataCyleTime="-1" dataChangedLogger="">
   </data>
   <data id="7" name="TypData" hwId="1" datablockId="1" offs="256" len="256" alignment="1" dir="inOut" neverPoll="False" counterCheckOutData="False" writeSetDataCyleTime="-1" dataChangedLogger="">
   </data>
</datas>
<inputBits>
   <bit id="9010001" name="TRIG_9010" dataId="5" byteIdx="0" bitIdx="0" invert="False" lowCol="grey" hiCol="green" />
</inputBits>
<outputBits>
   <bit id="9010001" name="READY_9010" dataId="6" byteIdx="0" bitIdx="0" />
   <bit id="9010002" name="BUSY_9010" dataId="6" byteIdx="0" bitIdx="1"  />
   <bit id="9010003" name="ERROR_9010" dataId="6" byteIdx="0" bitIdx="2" />
   <bit id="9010004" name="IO_9010" dataId="6" byteIdx="0" bitIdx="3"    />
   <bit id="9010005" name="NIO_9010" dataId="6" byteIdx="0" bitIdx="4"   />
</outputBits>
<varLists>
   <varList name="Vars_TypeData">
      <var typeId="GInOutVariable" name="InMyTypeDataCmd" description="Command from PLC" dataId="5">
         <in>
            <converter type="Gefasoft.MAK.Converter.ByteArrayToInt16Converter,Gefasoft.MAK" />
         </in>
      </var>
      <var typeId="GInOutVariable" name="OutMyTypeDataCmd" description="Command echot to PLC" dataId="6">
         <in>
            <converter type="Gefasoft.MAK.Converter.ByteArrayToInt16Converter,Gefasoft.MAK"/>
         </in>
      </var>
      <var typeId="GInOutVariable" name="InMyTypeDataTypeName" dataId="5" dataLength="31">
         <in>
            <converter type="Gefasoft.MAK.Converter.ByteArrayToStringConverter,Gefasoft.MAK" />
         </in>
      </var>
      <var typeId="GInOutVariable" name="OutMyTypeDataTypeName" description="PLC Response in order to confirm typechange" dataId="6" dataLength="31">
         <in>
            <converter type="Gefasoft.MAK.Converter.ByteArrayToStringConverter,Gefasoft.MAK"/>
         </in>
      </var>
      <var typeId="GInOutVariable" name="OutMyTypeDataStateinfo" dataId="6" dataLength="81">
         <in>
            <converter type="Gefasoft.MAK.Converter.ByteArrayToStringConverter,Gefasoft.MAK" />
         </in>
      </var>
   </varList>
</varLists>

station.xml Konfiguration

<stationConfig>
    <station id="9010" name="TypeData_MyType" type="GioTypeDataStation">
        <param name="setBusyWithData" value="false" />
        <param name="managerName" value="Riveting"/>
        <param name="loadOnTypeChange" value="false"/>
        <handshake>
        <param name="wait4NegEdgeTrigger" value="true" />
        <param name="wait4NegEdgeTriggerTO" value="-1" />
        <param name="bitToASCII" value="false" />
        <in>
            <bit bitRef="9010001" id="trigger" />
        </in>
        <out>
            <bit bitRef="9010001" id="ready" />
            <bit bitRef="9010002" id="busy" />
            <bit bitRef="9010003" id="error" />
            <bit bitRef="9010004" id="io" />
            <bit bitRef="9010005" id="nio" />
        </out>
        </handshake>
        <commandInterface>
        <param name="wait4NegEdgeTrigger" value="True" />
        <param name="wait4NegEdgeTriggerTO" value="1000" />
        <in>
            <data varRef="Vars_TypeData.IN_MyType_Cmd" id="cmd" />
            <data varRef="Vars_TypeData.IN_MyType_TypeName" id="typeName" />
            <data dataRef="1011" offset="0" length="128" id="DATA" />
        </in>
        <out>
            <data varRef="Vars_TypeData.OUT_MyType_Cmd" id="cmd" />
            <data varRef="Vars_TypeData.OUT_MyType_TypeName" id="typeName" />
            <data varRef="Vars_TypeData.OUT_MyType_StateInfo" id="errorText" />
        </out>
        </commandInterface>
    </station>