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
- Erstellung eines TwinCAT Measurement-Projekts
- Erstellung einer TwinCAT Scope-Konfiguration
- Erstellung von, Zugriff auf und Umgang mit Diagrammen
- Erstellung von, Zugriff auf und Umgang mit Achsen
- Erstellung von, Zugriff auf und Umgang mit Kanälen
- Aufzeichnungen starten und stoppen
- Weitere Auskünfte zu TwinCAT Measurement finden Sie auf der entsprechenden Internetseite in unserem Informationssystem.
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. 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, |
MarkerType | TimeMarker = 100, |
ChartElement | AxisGroup = 0 |
ChartType | YT = 0, |
AcquisitionType | ADS = 0, |
ConditionType | Area = 0, |
AxisGroupMember | Channel = 0, |
TriggerSetType | ChannelSet = 0, |
ChannelMember | AcquisitionInterpreter = 0, |
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();