Programmiervorlage
Die EasyTools Vorlage wird als Programmierbeispiel mit EasySightPro® ausgeliefert und befindet sich im VisionPro Werkzeugkasten unter "EasySightPro Tools" - "EasyTool Template".
EasyTools - Programmierung
Es wird empfohlen die Werkzeug Vorlage als Basis für ein neues Werkzeug zu benutzen.
Wichtige Script Referenzen (DLLs):
%ESP_ROOT%\Reliste.VisionPro.Extensions.dll
System.Core.dll
Beide Script Referenzen sind im Template bereits eingefügt!
Alle notwendigen Funktionen werden über die DLL Reliste.Vision.Extensions zur Verfügung gestellt.
Das Objekt EasyToolContainer übernimmt die Implementierung aller notwendigen Funktionen für die EasyTool Funktionalitäten.
Kopieren
//Using Statement für die RELISTE Tools
using Reliste.VisionPro.Extensions;
public class CogToolBlockSimpleScript : CogToolBlockAdvancedScript
{
//Erzeuge den Tool Container -> Dieser wird in Initialize() nochmals initialisiert
Reliste.VisionPro.Extensions.EasyToolContainer easyToolContainer = new Reliste.VisionPro.Extensions.EasyToolContainer();
/// <summary>
/// Called when the parent tool is run.
/// Add code here to customize or replace the normal run behavior.
/// </summary>
/// <param name="message">Sets the Message in the tool's RunStatus.</param>
/// <param name="result">Sets the Result in the tool's RunStatus</param>
/// <returns>True if the tool should run normally,
/// False if GroupRun customizes run behavior</returns>
public override bool GroupRun(ref string message, ref CogToolResultConstants result)
{
//Erzeuge einen neuen Record und lösche die Graphics ab
easyToolContainer.CreateNewRecord(this.Inputs.InputImage);
//Prüfe Inputs auf Gültigkeit
easyToolContainer.ToolBlockInputInRange(RelDotNet.nameof(() => this.Inputs.PARAM_Schwellenwert), 0, 255);
easyToolContainer.ToolBlockInputInRange(RelDotNet.nameof(() => this.Inputs.PARAMA_Min_Pixels), 1, 10000000);
//Setze Ausgänge zurück
int numBlobs = 0;
double area = 0;
bool passed = false;
this.Outputs.RESULT_Anzahl = numBlobs;
this.Outputs.RESULTA_Groesste_Flaeche = area;
this.Outputs.Passed = passed;
if (this.Inputs.Found)
{
//Führt alle Werkzeuge aus
foreach(ICogTool tool in Tools)
RunTool(tool, ref message, ref result);
//Extrahiere Einheit, falls es eine Kalibrierung gibt
//unit kann dann für die Anzeige der Einheit in der message verwendet werden
//string unit = easyToolContainer.GetUnitFromImage(this.Tools.CogBlobTool.InputImage);
//Fragt die Ergebnisse ab
if ( this.Tools.Suchregion.Results != null )
{
//Abfragen der Anzahl an Blobs
numBlobs = this.Tools.Suchregion.Results.GetBlobs().Count;
area = this.Tools.Suchregion.Results.GetBlobs()[0].Area;
//Prüfen, ob IO oder NIO
if ( numBlobs >= this.Inputs.THRESHOLD_Anzahl_Min )
{
//IO Fall
message = string.Format(easyToolContainer.GetLocalizedText("Anzahl: {0}", "Number: {0}"), numBlobs);
passed = true;
}
else
{
//NIO Fall
result = CogToolResultConstants.Reject;
message = string.Format(easyToolContainer.GetLocalizedText("Außerhalb der Toleranz! Anzahl: {0}", "Out of range! Number: {0}"), numBlobs);
}
}
else
{
//Ablauf fehlerhaft
result = CogToolResultConstants.Error;
message = easyToolContainer.GetLocalizedText("Fehler", "Error");
}
//Blob Overlays hinzufügen
easyToolContainer.AddBlobToolResultToOverlay(this.Tools.Suchregion);
//Füge Suchregion als Overlay hinzu
CogColorConstants resultColor = result == CogToolResultConstants.Accept ? CogColorConstants.Green : CogColorConstants.Red;
if (result != CogToolResultConstants.Accept || (bool)easyToolContainer.GetUserDataVariable("alwaysShowSearchRegion"))
easyToolContainer.AddRegion(this.Tools.Suchregion.Region, resultColor);
}
else
{
result = CogToolResultConstants.Error;
message = easyToolContainer.GetLocalizedText("Positionsreferenz nicht gefunden!", "Position reference not valid!");
}
//Synchronisiert alle Grafiken in das Graphics Array
easyToolContainer.Run(ref message, ref result);
//Beschreibe Ausgänge
this.Outputs.RESULT_Anzahl = numBlobs;
this.Outputs.RESULTA_Groesste_Flaeche = area;
this.Outputs.Passed = passed;
return false;
}
#region ModifyCurrentRunRecord
public override void ModifyCurrentRunRecord(ICogRecord currentRecord)
{
//Erstellt den CurrentRecord zum Verändern der Suchregion
easyToolContainer.CreateCurrentRunRecord(ref currentRecord, this.Tools.Suchregion);
base.ModifyCurrentRunRecord(currentRecord);
}
#endregion
#region ModifyLastRunRecord
public override void ModifyLastRunRecord(ICogRecord lastRecord)
{
//Erstellt den LastRunRecord mit
easyToolContainer.CreateLastRunRecord(ref lastRecord);
}
#endregion
#region When the Script is Initialized
/// <summary>
/// Perform any initialization required by your script here
/// </summary>
/// <param name="host">The host tool</param>
public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host)
{
// DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVE
base.Initialize(host);
//Initialisiere den Tool Container
easyToolContainer.Init(host as CogToolBlock);
easyToolContainer.CreateUserDataVariable("alwaysShowSearchRegion", false); //Legt fest, ob der Suchbereich auch angezeigt wird, wenn das Segment i. O. wurde
}
#endregion
}