Schnittstelle Viper.NET zu Cognex VisionPro¶
Innerhalb von Viper.NET erhalten einige Bausteine in ToolGroups Sonderfunktionen. Beispielsweise können Ergebnisse eines Tools von Viper.NET an anderer Stelle angezeigt oder Konfigurationsoptionen zum Speichern von Bildern angepasst werden.
Namenskonventionen¶
Einige Sonderfunktionen sind als Namenskonvention realisiert: Standard-Bausteine, beispielsweise ein CogToolBlock und dessen Terminals, erhalten innerhalb Viper.NET eine Sonderfunktion, sobald deren Name einem Muster entspricht. Je nachdem, um welche Funktion es sich handelt, muss der Name exakt stimmen, oder der Name muss mit dem Muster beginnen. Wenn der Name exakt überstimmen muss, muss der CogToolBlock auf der obersten Ebene angelegt sein (z.B. bei InputDataBlock).
Mit Viper.NET werden Vorlagen für die Namenskonventions-ToolBlocks installiert und über die Cognex VisionPro ToolBox eingebunden:
ImagesToolBlock¶
Bilder die vor der Ausführung der Toolgroup durch den Bildeinzug des Jobs aufgenommen werden, erhält die Toolgroup in einem CogToolBlock mit Namen Images. Jedem Output-Terminal vom Typ ICogImage wird im ToolGroup Item Editor eine Bildquelle: zugeordnet. Wenn die Bildquelle aktiv ist, wird der Terminalwert vor der Ausführung der ToolGroup auf das entsprechende Bild gesetzt.
InputBlock¶
Auf Job-Ebene können BV Parameter zentral verwaltet werden. Definition und Verwendung erfolgt in Form eines CogToolBlock mit Namen InputBlock: die Output-Terminal eines solchen Blocks werden automatisch als Parameter erkannt. Bei Änderungen in der Parametrierung werden die Werte der Terminals angepasst.
GlobalVisionParams¶
Übergreifende Globale Parameter werden in CogToolBlock bereitgestellt, deren Name mit GlobalVisionParams beginnt. Allein die Erstellung eines Ausgabe-Terminals definiert noch keinen neuen Globalen Parameter: Die Konfiguration erfolgt innerhalb des Job-Editors.
InputDataBlock¶
Eingabe-Werte von externen Datenquellen wie einer Steuerung werden als Ausgabe-Terminals in einem CogToolBlock mit Namen InputDataBlock bereitgestellt. Die Verknüpfung von GIO-Daten mit den Terminals erfolgt im Reiter Data des Toolgroup Item Editor. Bei der Ausführung des ToolgroupItems durch einen externen Trigger werden die Werte der Ausgabe-Terminals anhand der konfigurierten Quelle aktualisiert.
Die Input-Terminal-Werte des InputDataBlock werden außerdem zusammen mit den Eingabebildern gespeichert und können bei erneuten Überprüfung mit RunFromDir geladen werden.
Einige Input-Terminals des InputDataBlocks mit vordefinierten Namen können spezielle Eingabe-Werte bereitstellen. Insbesondere können projektspezifische Viper.NET Plugins Eingabedaten für die Bildverarbeitung über solche Terminals bereitstellen.
JobInputDataBlock¶
In einem CogToolBlock mit Namen JobInputDataBlock werden Informationen über die Job-Konfiguration in Viper.NET bereitgestellt.
Viper.NET setzt in diesem Toolblock die Werte von Ausgabe-Terminals mit folgenden Namen:
LoadedType: Name des aktuell geladenen Typen
JobName: Name des Job
TgId: ID des ToolGroup Item
TgName: Name des ToolGroup Item
JobName_TgName: Kombination aus Job-Name und ToolGroup-Item-Name in der Form
<Job-Name>\<ToolGroup-Item-Name>. Beispiel: „DemoJob\DemoTG“Trigger: Art des Triggers der Toolgroup-Ausführung. Mögliche Werte:
ePlc: Externer Trigger (SPS)
eManual: Start über BV ausführen im Job Display
eManualFromDispl: Start über BV auf Anzeigebild ausführen im Job Display
eManualContinuous: Start über BV kontinuierlich ausführen im Job Display
eRunFromDir: Start über RunFromDir
eUnknown: Unbekannter Triggermodus
RunFromDir_FullPath: Gibt bei Ausführung im Rahmen des RunFromDir den absoluten Pfad des Eingabebildes an.
OutputDataBlock¶
Um Ergebnisse der ToolGroup als Ausgaben an Empfänger wie beispielsweise eine Steuerung weiterzuleiten muss ein CogToolBlock mit Namen OutputDataBlock definiert werden. Daten vom Input-Terminal des ToolBlocks werden durch die Konfiguration im Reiter Data mit Ausgabe-Zielen verknüpft.
JobDataBlock¶
Der Ort zum Speichern von Eingabebildern der Toolgroup kann dynamisch angepasst werden. Die Konfiguration erfolgt durch Ausgabe-Terminals des CogToolBlock mit Namen JobDataBlock.
Folgende Ausgabe-Terminals werden von Viper.NET ausgewertet:
ImageNamePrefix [String]: Präfix, das den konstanten Teil des Dateinamens definiert.
ImageSubdirectory [String]: Name eines Unterverzeichnisses zum Speichern. Das Verzeichnis wird neu erstellt, falls es nicht existiert.
OverrideSaveImageFlags [String]: Erzwingt das Abspeichern unabhängig von den eingestellten Flags in den Globalen Einstellungen.
IgnoreScriptErrors [bool]: In Cognex VisionPro werden Kompilierfehler in Skripten ignoriert, die Skripte werden dann einfach nicht ausgeführt. Da das zu ungewolltem Verhalten führen kann, prüft Viper.NET standardmäßig nach der Ausführung alle Tools mit Skripten auf Fehler, und löst einen RunError aus wenn ein Skriptfehler erkannt wird. Mit
IgnoreScriptError=truekann diese Prüfung deaktiviert werden.UpdateDisplay [bool]: Kann auf
falsegesetzt werden, um das Aktualisieren des Displays zu unterdrücken.
CounterData¶
In einer CogToolGroup namens CounterData werden Zusatzinformationen für Zähler angegeben.
Insbesondere kann mit CounterGroups gesteuert werden, welche Zählergruppen inkrementiert werden. Mit PartInfo können Zusatzinformationen in die Datenbank gespeichert werden. Die Funktion wird unter Zähler erläutert.
SaveImagesEx¶
Das benutzerdefinierte Abspeichern beliebiger Bildern kann in Viper.NET durch einen CogToolBlock realisiert, dessen Name mit SaveImagesEx beginnt. Gespeichert werden können sowohl Bilddaten aus dem Ablauf, als auch Bild-Anzeigen aus Ansichten und SubDisplays inklusive überlagerter Grafiken. Konfigurationsparameter können durch Terminals dynamisch verändert werden.
Um Bilder aus dem Ablauf zu speichern, werden Input-Terminals vom Typ ICogImage angelegt. In der Standardeinstellung wird der Name des Terminals Bestandteil des Ausgabedateinamens.
Um Bilder aus Bild-Anzeigen zu speichern, werden Input-Terminals vom Typ System.Int32 angelegt, deren Namen mit FromSubdisplay beginnt. Viper.NET interpretiert den Wert dieser Terminals als ID eines SubDisplays aus der Konfiguration. Das SubDisplay wird einschließlich der überlagerten Grafiken in eine Bilddatei gespeichert, wobei der erzeugte Dateiname in der Standardeinstellung den Namen des Terminals enthält.
Hinweis
Die Gefasoft VisionPro Tools enthalten ein Tool-Template mit einem Eingabe-Bild-Terminal und Terminals für alle unterstützten Konfigurationsvariablen.
Mit folgenden Terminals kann das Verhalten beim Speichern gesteuert werden:
Enabled (bool): Nur wenn der Wert True ist, werden Bilder gespeichert.
Synchronous (bool): Wenn der Wert True ist, erfolgt das Speichern synchron innerhalb des Ablaufes. In diesem Fall führen Fehler beim Speichern zu einem NIO-Status des ToolBlocks.
OverwriteImage (bool): Wenn der Wert True ist und werden potentiell existierende Dateien am Zielort überschrieben.
ImageSubdirectory (String): Optionaler Pfad eines Unterverzeichnisses, in welchem die Bilder gespeichert werden sollen. Der Pfad wird relativ zum eingestellten Bilderausgabeverzeichniss des *Jobs* interpretiert.
UsePrefixAsImageName (bool): Falls True entspricht der Ausgabedateinamen exakt dem ImageNamePrefix. Andernfalls wird der Name dynamisch gemäß dem ImageNamePattern erzeugt.
ImageNamePrefix (String): Bestandteil des erzeugten Ausgabedateinamens. Die Erzeugung des Dateinamens wird von den Parametern UsePrefixAsImageName und ImageNamePattern bestimmt.
OverrideSaveImageFlags (bool): Falls True werden die Globalen Bedingungen zum Speichern von Bildern ignoriert und immer gespeichert, wenn die lokalen Bedingungen erfüllt sind.
OutputFormat (String): Definiert das Ausgabedateiformat in Form der Dateinamenserweiterung. Gültige Werte sind, unabhängig von der Großschreibung: bmp, png, jpg, jpeg, tif, tiff, idb, cdb
Compression (Integer): Falls als Dateiformat png oder jp(e)g eingestellt ist, kann der Kompressionsgrad angepasst werden: 0 bedeutet maximale Kompression (mit höchstem Qualitätsverlust bei jp(e)g, 100 minimale Kompression.
TextToWriteInImage (String): Falls gesetzt, wird der gegebene Text als Overlay in das Ausgabebild gezeichnet.
TextToWriteInImageFontSize (Double): Schriftgröße des TextToWriteInImage.
AppendTerminalNameToTxt (String): Falls TextToWriteInImage nicht leer ist, wird zu diesem der Terminal-Name des Bildes hinzugefügt.
SaveInputData/SaveResultData (bool): Wenn der Wert True ist, werden neben den Bildern auch die Eingabe- beziehungsweise Ergebnisdaten abgespeichert. Die Dateinamen werden vom Dateinamen des jeweils ersten Bildes des SaveImagesEx-Blocks abgeleitet.
ImageNamePattern (string): Definiert den Dateinamen der Ausgabebilder mit Hilfe von Platzhaltern (solange nicht UsePrefixAsImageName aktiv ist). Zur Laufzeit werden die Dateinamen erzeugt, indem die Platzhalter durch entsprechende Werte ersetzt werden. Folgende Platzhalter werden unterstützt:
$(ImgName): Name des bildgebenden Input-Terminal im SaveImagesEx
$(Job): Der Name des Jobs. Enthält der Job ein ToolgroupArray, so wird ein zusammengesetzter Name erzeugt: „<Job Name>.<Toolgroup-Item Name>“. Ein Beispiel: „JobTopside.01_CheckCracks“
$(Timestamp): Zeitstempel des Erzeugungszeitpunktes in der Form:
yyyyMMdd_HHmmssfff$(ResultInfo): Ergebnis-Status der Toolgroup am Ende der Ausführung als Zeichenkette: „pass“, „warn“ oder „fail“
$(Prefix) Der Wert des „ImageNamePrefix“
SaveImagesPass, SaveImagesWarn und SaveImagesFail (bool): Abhängig vom Ergebnis-Status der Toolgroup (IO,*Warnung*,*NIO*) werden die Bilder nur gespeichert, falls die jeweils entsprechende Einstellung auf True ist. Zugleich kann, abhängig von OverrideSaveImageFlags, das Verhalten auch von globalen Flags beeinflusst werden.
Hinweis
In der Standardkonfiguration erfolgt das Speichern von Bildern mit SaveImagesEx asynchron nach abgeschlossener Ausführung des Jobs. Die Ausführungszeit des Ablaufes bleibt somit unbeeinflusst von der benötigten Zeit des eigentlichen Speichervorganges (siehe auch WorkerStoreImage).
Hinweis
Beim Ausführen des Jobs im Rahmen des RunFromDir werden Bilder nur dann gespeichert, wenn dies eingestellt ist.
ValueBlock¶
Ein CogToolBlock dessen Namen mit ValueBlock beginnt, sammelt Ergebnisse für Visualisierung und Analyse, zum Beispiel gemessene Bauteilgrößen.
Alle Eingabeterminals mit primitiven Systemtypen, zum Beispiel int, double oder string, werden als Werte erfasst. Die Werte können zum Beispiel zu Trends oder Ansichten und SubDisplays hinzugefügt werden.
TrendResults¶
ToolgroupItems können einen CogToolBlock mit Namen TrendResults nutzen, um Werte in einen Trend aufzunehmen und die Erfassung von Trenddaten zu steuern. Der Block muss sich in der Toolblock-Hierarchie unmittelbar innerhalb der Toolgroup befinden.
Alle Output-Terminals vom Typ double werden als Trend-Ergebnisse erfasst. Der Terminal-Name dient als Identifikations-Schlüssel des Trend Eintrags. Besondere Terminals steuern das Verhalten der Trend-Daten-Erfassung:
Enabled [bool]: (De-)Aktiviert die Erfassung der Trend-Werte einer Ausführung. Zum Beispiel können so Werte nur dann erfasst werden, wenn der Triggermodus „ePlc“ aktiv ist.
PartInfo [string]: Optionale Informationen zum Bauteil. Der Text wird als ToolTip der Trend-Datenpunkte angezeigt.
Hinweis
Werte, die in einem CogDataAnalysisTool ausgewertet werden, sind automatisch als Trend-Einträge verfügbar und müssen nicht separat in einem TrendResults Block erfasst werden.
Hinweis
Auch mit ValueBlock Toolblöcken können Werte in Trends erfasst werden. Im Gegensatz zum TrendResults Block können diese auch in verschachtelten Toolgroups- oder Toolblöcken angelegt werden und werden zu diesem Zweck empfohlen. Der TrendResults Block sollte bevorzugt nur mehr zur Konfiguration der Daten-Erfassung verwendet.
Spezielle VisionPro Tools¶
CogDataAnalysisTool¶
Messwerte oder Ergebnisse von Bildverarbeitungs-Tools sind in der Regel ohne Bewertung an einem Ausgabe-Terminal verfügbar. Innerhalb Viper.NET wird empfohlen, die Ergebnis-Bewertungen als IO, NIO oder Warnung mit einem CogDataAnalysisTool zu realisieren.
Alle Einträge aus allen CogDataAnalysisTools einer ToolGroup werden in die Analyse (Grenzwertprüfung) aufgenommen.
Zur Definition eines Ergebnisses muss zunächst im Editor des Tools ein neuer Kanal hinzugefügt und konfiguriert werden. Im ToolGroup Editor muss dann über das Kontextmenü ein Input-Terminal für den Wert (CurrentValue) des Kanals hinzugefügt werden, um ihn sichtbar zu machen.
Warnung
Das Ändern der Namen von Kanälen hat Auswirkung auf die Zuordnung zu den Terminals. Daher müssen nach einer Änderung betroffene Terminals des CogDataAnalysisTools entfernt und neu hinzugefügt werden.