Gegenüberstellung der Integration in den zwei Scopeversionen

Die Unterschiede zwischen der alten und der neuen Scope View Control API wird in der folgenden Gegenüberstellung verglichen.

Hierbei werden die Grundmethoden verglichen um ein YT-Chart zu erzeugen.

Laden einer Konfiguration

scopeViewControl.LoadScopeConfig(@"C:\temp\Scope YT Project.tcscope");
scopeViewControl.Operating.StartRecord();
//Project Panel
scopeProjectPanel.ScopeProject = ScopeProject.LoadScopeProject(@"C:\temp\YT Scope Project.svproj");
scopeProjectPanel.ScopeProject.StartRecord();

//Chart Panel
ScopeProject scopeProject = ScopeProject.LoadScopeProject(@"C:\temp\YT Scope Project.svproj");
chartPanel.ModelChart = scopeProject.SubMember.OfType<Chart>().First();
scopeProject.StartRecord();

Die Methode zum Laden einer Konfiguration ist in der neuen Version aus dem Control herausgezogen worden und ist in dem ScopeProject zu finden, welches nun über ein Property in dem Control zu erreichen ist.

Neben dem Control, welches ein ganzes Projekt anzeigen kann und die Charts in einem Sanddock anzeigt, gibt es nun auch die Möglichkeit ein Control für ein einzelnes Chart zu nutzen. Dies ist Beispielsweise in dem Code unter dem Kommentar „Chart Panel“ gezeigt.

Konfiguration im Code erstellen

ScopeViewControlChart chart_old       = scopeViewControl.NewChart(scopeDisplayModes.XT);
ScopeViewControlYAxis axis_old        = chart_old.NewAxis();
ScopeViewControlChannel channel_old   = axis_old.NewChannel();
ScopeProject scopeProject_new = new ScopeProject();
Chart chart_new               = new YTChart();
AxisGroup axisGroup_new       = new AxisGroup();
Channel channel_new = new Channel();
AcquisitionInterpreter acquisitionInterpreter_new = new AcquisitionInterpreter();
AdsAcquisition adsAcquisition_new = new AdsAcquisition();

scopeProject_new.AddMember(chart_new);
chart_new.AddMember(axisGroup_new);
axisGroup_new.AddMember(channel_new);
channel_new.AddMember(acquisitionInterpreter_new);
acquisitionInterpreter_new.AddMember(adsAcquisition_new);

Das Erstellen einer Konfiguration im C# Code ist aus dem statischen Gerüst heraus in einen dynamischen Ablauf übergegangen. Es gibt nicht mehr die Methoden um ein weiteres Objekt an dem hierarchisch höher liegen Objekt zu erstellen und hinzuzufügen. Nun können alle Objekte für sich erstellt werden und mit der Methode „AddMember“ hinzugefügt werden.

Hierbei sollte darauf geachtet werden, dass die Hierarchie wie in dem Beispiel eingehalten wird. Es ist möglich, einzelne Hierarchiestufen nicht zu erstellen. Dies wird dann automatisch übernommen. (Beispiel: Hinzufügen einer Acquisition an eine AxisGroup sorgt dafür, dass ein Channel und ein AcquisitionInterpreter Objekt erzeugt wird.)

Die Objekte werden immer in der „SubMember“-Liste des höher liegenden Objektes hinzugefügt. Wird zu einem späteren Zeitpunkt nach einem Objekt durchsucht, kann einfach rekursiv durch die Listen gelaufen werden um vom Projektobjekt bis zur Acquisition zu gelangen.

Anpassen des Styles

channel_old.Style.ScaleFactor = 2;
channel_old.Style.Offset      = 2;
channel_old.Style.LineColor   = Color.Red;
channel_old.Style.MarkColor   = Color.DarkRed;
channel_old.Style.LineWidth   = 2;
acquisitionInterpreter_new.ScaleFactor = 2;
acquisitionInterpreter_new.Offset      = 2;
SeriesStyle seriesStyle                = channel_new.Style.SubMember.OfType<SeriesStyle>().First();
seriesStyle.DisplayColor               = Color.Green;
seriesStyle.MarkColor                  = Color.DarkRed;
seriesStyle.LineWidth                  = 2;

Properties, welche die Werte eines Channels beeinflussen, wurden aus dem Channel.Style heraus in den AcquisitionInterpreter verschoben.

Andere Styleeigenschaften, die den Style eines Graphens definieren, sind in der Klasse SeriesStyle zu finden. Diese Klasse ist ein SubMember der Klasse ChannelStyle, welche wiederum in den SubMembern eines Channels zu finden ist.

Die Styleklassen sind folgendermaßen strukturiert:

Übersicht über die verschiedenen Style-Hierarchien. Die tiefer liegenden Klassen liegen immer in den SubMember-Listen der höher liegenden Klasse.

Chart

AxisGroup

Axis

Channel

Anpassen der Akquisition

channel_old.Acquisition.AmsNetId      = new AmsNetId("172.17.61.30.1.1");
channel_old.Acquisition.TargetPort    = 851;
channel_old.Acquisition.IsSymbolBased = true;
channel_old.Acquisition.SymbolName    = "Variables.fSine";
channel_old.Acquisition.DataType      = Scope2DataType.REAL64;
channel_old.Acquisition.SampleTime    = (uint)TimeSpan.TicksPerMillisecond;
adsAcquisition_new.AmsNetIdString    = "172.17.61.30.1.1";
adsAcquisition_new.TargetPort        = 851;
adsAcquisition_new.IsSymbolBased     = true;
adsAcquisition_new.SymbolName        = "Variables.fSine";
adsAcquisition_new.DataType          = Scope2DataType.REAL64;
adsAcquisition_new.SampleTime        = (uint)TimeSpan.TicksPerMillisecond;

Bei der Konfiguration der Acquisition hat sich nichts verändert.

Steuern der Aufnahme

//Start Record
scopeViewControl.Operating.StartRecord();
scopeViewControl.Operating.StartAllDisplays();
//Stop Record
scopeViewControl.Operating.StopRecord();

//Save SVD
scopeViewControl.Operating.SaveData("ExportData.svd");
//Start Record
scopeProject.StartRecord();
foreach(Chart chart in scopeProject.SubMember.OfType<Chart>())
{
    chart.StartDisplay();
}

//Stop Record
scopeProject.StopRecord();

//Save SVD
scopeProject.SaveData("ExportData.svdx");

Die Funktionalitäten zum Behandeln einer Aufnahme sind von dem Operating Objekt direkt in die ScopeProject Klasse verschoben worden.

Ein Chart wird direkt über die StartDisplay Methode gestartet und nicht mehr über die Operating-Klasse.

Beim Speichern ist zu beachten, dass das neue Datenformat auf „svdx“ endet und nicht mehr auf „svd“.