GDataExchange

Ab Viper.NET 6.5.1 können Daten stations- bzw. anlagenübergreifend gespeichert und abgerufen werden. Damit können bspw. Ergebnisse, die in der ersten Bearbeitungsstation erzeugt wurden, in der letzten Bildverarbeitung-Anwendung verwendet werden, ohne dass die Daten von der SPS durchgeschleust werden. GDataExchange nutzt dafür die Kommando-Schnittstelle, womit die Daten über Netzwerk auch zwischen Applikationen und Anlagen ausgetauscht werden können.

Um GDataExchange zu nutzen muss eine beliebige Viper.NET Anwendung als zentraler Datenspeicher dienen. Es kann sowohl ein dedizierter Linienrechner als auch eine bestehende BV Applikation verwendet werden.

Funktionsprinzip

In GDataExchange können mehrere, unabhängige Speicher, sogenannte Memories, angelegt werden. Ein Memory steht für eine bestimmte Kategorie, bspw. Bauteildaten oder Anlagendaten.

Innerhalb eines Memory werden wiederum beliebig viele Buffer gespeichert. Im Buffer werden dann die Daten als Schlüssel-/Wertpaare abgelegt. GDataExchange unterstützt ausschließlich Zeichenketten, d.h. Zahlen usw. müssen vorab umgewandelt werden.

Jedes Memory und jeder Buffer innerhalb eines Memory wird über einen eindeutigen Namen identifiziert.

Daten hinterlegen und abrufen

Derzeit können die Daten ausschließlich über die Kommando-Schnittstelle und das CommandInterfaceTool gespeichert, gelöscht und abgerufen werden. Für den Client ist somit eine Cognex VisionPro Lizenz erforderlich. Der Server, also die Viper.NET Applikation, die GDataExchange bereitstellt, ist diese nicht notwendig.

GDataExchange bietet folgende Kommando-Funktionen:

  • SetData: Einzelnen Datenwert hinterlegen und optional speichern.

  • SetDatas: Mehrere Datenwerte hinterlegen und optional speichern.

  • GetData: Einzelnen Datenwert abrufen.

  • GetDatas: Mehrere Datenwerte abrufen.

  • GetAllData: Alle Datenwerte eines Buffers abrufen.

  • CreateBuffer: Buffer explizit anlegen. Wird bei SetData/SetDatas implizit gemacht.

  • DeleteBuffer: Buffer löschen.

  • IsBufferExisting: Abfrage, ob ein Buffer existiert.

  • ChangeBufferName: Buffer umbenennen, bspw. wenn sich die Seriennummer eines Bauteils ändert.

  • Add/RemoveChildBuffer: Parent/Child Relation zwischen Buffer anlegen/löschen.

  • GetChildBufferNames: Alle zugeordneten Child-Buffer abfragen.

  • SetEnabled: Aktivieren/Deaktivieren von GDataExchange.

  • SaveData: Explizites Speichern eines Buffers.

Datenspeicher

Die Daten werden im Arbeitsspeicher gehalten und optional im Dateisystem gespeichert. Für jeden Memory kann definiert werden, wie viele Buffer im Speicher gehalten werden. Buffer werden automatisch gespeichert, wenn Sie aus dem Arbeitsspeicher entladen werden, ebenso beim Beenden von Viper.NET.

Im Dateisystem wird für jedes Memory ein Ordner angelegt. Pro Buffer wird dann eine .buf-Datei im Ini-Format gespeichert.

Warnung

Die Buffer werden nicht automatisch gelöscht, sondern nur explizit über DeleteBuffer. Alternativ kann WatchDir zur Überwachung verwendet werden.

Beispiel einer .buf Datei:

[main]
fullName = Test.Part013
nameHistory =
parentBufferName =
childBufferNames = Part013.Station01

[data]
SerialNo = ABC

Hinweis

Buffer, die nicht mehr im Arbeitsspeicher sind, werden bspw. bei GetData im Dateisystem gesucht und geladen.

GDataExchange einbinden

GDataExchange kann auf mehrere Arten aktiviert und eingebunden werden.

Einbinden über Funktionsmenü

Am einfachsten kann GDataExchange über die Globalen Einstellungen in das Funktionsmenü eingebunden werden (ab Viper.NET 6.5.2).

../_images/gdataexchange-function-menu.png

Einbinden als UserTab bzw. LayoutChild

Alternativ kann, ähnlich wie bei den SPS Typdaten, ein UserTab angelegt werden, in dem die GUI für GDataExchange eingebettet wird. Dazu sind Änderungen an der Konfigurationsdatei userTabs.xml und sowie eine passende extAppLayoutChild.xml notwendig:

<!-- userTabs.xml -->
<tab name="DataExchange" type="ControlLayoutExtApps">
        <param name="operation" value=""/>
        <param name="sortId" value="15" />
        <param name="width" value="1" />
        <param name="height" value="1" />
        <param name="extAppLayoutChildXml" value="Configuration\\gDataExchangeTab.xml" />
      </tab>
<!-- gDataExchangeTab.xml -->
<?xml version="1.0" encoding="utf-8" ?>
<extAppLayoutChilds rolesOrder="Admin,Service,Operator,Technican">

 <child type="CtlGDataExchangeMemories" >
   <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="DataExchange" backColor="" foreColor="" border="True" />
   <param name="backColor" value="LightSteelBlue"/>
   <param name="borderStyle" value="FixedSingle"/>
 </child>

</extAppLayoutChilds>

Konfiguration

GDataExchange wird über die GUI konfiguriert:

../_images/gdataexchange-configuration.png
  • Enabled: Kommando-Schnittstelle für GDataExchange aktivieren/deaktivieren.

  • Root Directory: Basispfad für das Speichern der Memories bzw. Buffer. Relativ zum Verzeichnis Data im Viper-Projekt.

  • Default MaxBufferCount in RAM Per Memory: Vorgabewert für MaxBufCountInRAM für neue Memories.

Im Grid können Memories angelegt sowie die MaxBufCountInRAM definiert werden (maximale Anzahl an Buffern im Arbeitsspeicher).

GUI

In der GDataExchange GUI können sowohl die Buffer im Arbeitsspeicher als auch die im Dateisystem angezeigt werden.

../_images/gdataexchange-ui.png
  1. Auswahl des Memory

  2. Auswahl des anzuzeigenden Buffers. Mit dem Button ... kann ein Buffer vom Dateisystem geladen werden.

  3. Optional werden auch die Daten der Child Buffer angezeigt.

  4. Aktualisierung der Datenanzeige

  5. Datenanzeige des Buffers