Erstellung von und Umgang mit TwinCAT Measurement-Projekten

Das TwinCAT Automation Interface stellt Methoden und Eigenschaften zur Verfügung, um TwinCAT Measurement-Projekte zu erzeugen und darauf zuzugreifen. Im folgenden Kapitel wird beschrieben, wie einige Grundaufgaben mit solch einem TwinCAT-Projekt gelöst werden können und umfasst Informationen zu folgenden Themen:

Anforderungen

Die Integration von TwinCAT Measurement-Projekten über das Automation Interface ist ab TwinCAT 3.1 Build 4013 möglich.

Die benötigten Interface-Definitionen zum Umgang mit TwinCAT-Measurement Projekten befinden sich in der TwinCAT.Measurement.AutomationInterface.dll (Diese befindet sich im Installationsverzeichnis des TE130x-Scope-View)

IMeasurementScope:

int StartRecord();

Startet die Aufnahme.

Der Command ist unabhängig von dem ausgewählten Knoten, da immer das zugrunde liegende Scope Projekt genutzt wird.

int StopRecord();

Stoppt die Aufnahme.

Der Command ist unabhängig von dem ausgewählten Knoten, da immer das zugrunde liegende Scope Projekt genutzt wird.

int Disconnect();

Trennt die Verbindung zum ScopeServer. Die Aufnahme wird verworfen.

int SaveSVD(string filePath);

Speichert die Aufnahme unter dem angegebenen Dateipfad.

int ExportCSV(string filePath);

Exportiert die aufgenommenen Daten in das CSV Format unter dem angegebenen Dateipfad.

int ExportBinary(string filePath);

Exportiert die aufgenommenen Daten in das Binär-Format unter dem angegebenen Dateipfad.

int ExportTDMS(string filePath);

Exportiert die aufgenommenen Daten in das TDMS Format unter dem angegebenen Dateipfad.

int ExportDAT(string filePath);

Exportiert die aufgenommenen Daten in das DAT Format unter dem angegebenen Dateipfad.

int CreateChild(out object item, string name = "", int elementType = 0);

Erzeugt ein neues Element unter dem aktuell selektierten.
Der Element-Typ gibt an, welche Art von Element angelegt werden soll (Wenn mehrere Möglichkeiten bestehen).

Die Elementtypen werden in der nachfolgenden Tabelle aufgeführt.

int ChangeName(string name);

Ändert den Namen des Elements.

int ShowControl();

Öffnet den Editor des Projektes

int CloseControl();

Schließt den Editor des Projektes

int LookUpChild(string name, out object childNode);

Sucht in dem Projektbaum das zum Namen passende Element.

Für die CreateChild Methode stehen folgende Elementtypen als Enum in der TwinCAT.Measurement.AutomationInterface.dll zur Verfügung:

CursorAlignment

Vertical = 1,
Horizontal = 2

MarkerType

TimeMarker = 100,
XMarker = 101,
YMarker = 102

ChartElement

AxisGroup = 0

ChartType

YT = 0,
XY = 1,
ARRAY = 2,
SingleBar = 3

AcquisitionType

ADS = 0,
OPC = 1

ConditionType

Area = 0,
Threshold = 1

AxisGroupMember

Channel = 0,
RoundShape = 1,
AngularShape = 2

TriggerSetType

ChannelSet = 0,
DirectorySet = 1

ChannelMember

AcquisitionInterpreter = 0,
DynamicStyle = 1

Erstellung eines TwinCAT Measurement-Projekts

TwinCAT Measurement ist ein globaler "Container" der eine oder mehrere Measurement-Projekte hosten kann, z.B. eine TwinCAT Scope-Konfiguration. Ähnlich wie eine reguläre TwinCAT-Konfiguration wird jedes Projekt zu allererst mit Hilfe einer Template-Datei beschrieben. Diese Template-Datei wird beim Hinzufügen eines neuen Projekts zur Solution verwendet, was mit Hilfe eines Aufrufs der AddFromTemplate()-Methode aus dem Visual Studio DTE-Objekt vorgenommen werden kann. Beachten Sie, dass diese Vorgehensweise beim Hinzufügen eines regulären TwinCAT-Projekts die gleiche ist. Der nachfolgende Code-Ausschnitt setzt voraus, dass Sie bereits eine DTE-Instanz erworben und eine Visual Studio Solution erzeugt haben, wie in unserem Artikel über Zugriff auf die TwinCAT-Konfiguration gezeigt. Ein Verweis auf die DTE-Instanz wird im Objekt "dte" gespeichert.

Code-Ausschnitt (C#):

EnvDTE.Project scopeProject = dte.Solution.AddFromTemplate(template, destination, name);

Definition der Parameter:

template

Die standardmäßigen Template-Dateien liegen in dem Installationsverzeichnis von TE130X-Scope-View (z.B. C:\TwinCAT\Functions\TE130X-Scope-View\Templates\Projects\) und haben den Dateityp "tcmproj".

destination

Pfad, in welchem die neue Konfiguration auf der Festplatte gespeichert werden soll.

name

Name der Projektkonfiguration.

Erstellung einer TwinCAT Scope-Konfiguration

Ein TwinCAT Scope-Projekt steht für eine Aufzeichnungskonfiguration. Das bedeutet, dass alle in das Projekt eingefügten Elemente den gleichen Aufzeichnungseinstellungen unterliegen. Sie können ein Scope-Projekt über das Automation Interface hinzufügen, indem Sie, wie oben beschrieben, das entsprechende "TwinCAT Scope Project"-Template beim Hinzufügen eines Projekts mithilfe der AddFromTemplate()-Methode spezifizieren.

Erstellung von, Zugriff auf und Umgang mit Diagrammen

In einer Scope-Konfiguration können mehrere Diagramme parallel bestehen. Um einem bestehenden Scope-Projekt Diagramme hinzuzufügen, verwenden Sie einfach die CreateChild()-Methode von der IMeasurementScope-Schnittstelle. Der folgende Code-Ausschnitt setzt voraus, dass bereits ein TwinCAT Measurement-Projekt erstellt wurde und dass ein Verweis auf dieses Projekt im Objekt "scopeProject" gespeichert ist.

Code-Ausschnitt (C#):

Project MeasurementProject = dte.Solution.Projects.Item(1);
ProjectItem ScopeProjectItem = MeasurementProject.ProjectItems.Item(1);
IMeasurementScope ScopeObj = (IMeasurementScope)ScopeProjectItem.Object;
ScopeObj.CreateChild(out object chartObj); // Erzeugen eines neuen YT-Charts im Scope

ProjectItem piChart = chartObj as ProjectItem;
IMeasurementScope imsChart = piChart.Object as IMeasurementScope;
imsChart.ChangeName("New Chart");
imsChart.CreateChild(out object axisObj); // Erzeugen einer neuen Achsengruppe unterhalb des Charts

ProjectItem piAxis = axisObj as ProjectItem;
IMeasurementScope imsAxis = piAxis.Object as IMeasurementScope;
imsAxis.ChangeName("New Axis");
imsAxis.CreateChild(out object channelObj); // Erzeugen eines neuen Kanals unterhalb der Achsengruppe
ProjectItem piChannel = channelObj as ProjectItem;
IMeasurementScope imsChannel = piChannel.Object as IMeasurementScope;
imsChannel.ChangeName("New Channel");

IMeasurementScope DataPoolObj = (IMeasurementScope)ScopeProjectItem.ProjectItems.Item(1).Object;
DataPoolObj.CreateChild(out object acqObj); // Erzeugen einer neuen Acquisition im DataPool
ProjectItem piAcq = acqObj as ProjectItem;
IMeasurementScope imsAcq = piAcq.Object as IMeasurementScope;
imsAcq.ChangeName("New Acq");

foreach (Property prop in piChannel.Properties)
{
Debug.WriteLine(prop.Name + " - " + prop.Value); // Wir geben einmal alle Properties mit Nammen und aktuellem Wert aus um uns einen Überblick zu verschaffen.
if (prop.Name == "Y-Data.Acquisition")
prop.Value = imsAcq; // Wir setzen die Acquisition des Channels auf die zuvor angelegte Acquisition im DataPool
}

Aufzeichnungen starten und stoppen

Zum Starten/Stoppen einer konfigurierten Scope-Aufzeichnung können die entsprechenden Methoden der IMeasurementScope-Schnittstelle verwendet werden:

Code-Ausschnitt (C#):

ScopeObj.StartRecord()
ScopeObj.StopRecord();