Hinzufügen von Elementen

Alle hierarchischen Elemente, die im TwinCAT Scope im Solution Explorer zu finden sind, können bei der Integration auch im Code hinzugefügt werden. Ein hierarchisches Element ist so aufgebaut, dass es eine Liste „SubMember“ besitzt, durch welche durchiteriert werden kann. Weitere Objekte können mit „AddMember“ hinzugefügt werden.

Wird das neue Objekt nicht einem direkt darüber liegenden Objekt hinzugefügt, dann wird von dem hinzufügenden Objekt alles neu erstellt, bis das hinzuzufügende Objekt in der Hierarchie eingegliedert werden kann. Dabei muss jedoch darauf geachtet werden, dass als Standard-Chart-Typ immer ein YT-Chart erstellt wird.

Die grundlegende Hierarchie in dem Scope sieht folgendermaßen aus:

ScopeProject

╚╦ DataPool

║╚ Acquisition

╠╦ Chart

║╚╦ AxisGroup

║   ╠╦ MarkerContainer

║   ║╚ Marker

║   ╠╦ Axes

║   ╚╦ Channels

║      ╚ AcquisitionInterpreter

… weitere Charts

Charts:

Das Chart ist die Umgebung, in welcher der Graph mit dem Koordinatensystem erscheint. Damit stellt das Chart das Grundgerüst dar und muss zuerst erstellt werden.

private void btnAddChart_Click(object sender, EventArgs e)
{
    ArrayBarChart chart = new ArrayBarChart();
    scopeProjectPanel.ScopeProject.AddMember(chart);
    chart.SubMember.OfType<ChartStyle>().First().ToolTipEnabled = true;
}

Achsen:

Die AxisGroup beinhaltet zum einen die Achsen, welche für die passende Skalierung der Werte sorgen, und zum anderen die Channels, welche in dem Chart angezeigt werden.

Wenn nun die AxisGroup an dem Chart hinzugefügt wird, werden automatisch die Achsen-Objekte erstellt.

private void btnAddAxis_Click(object sender, EventArgs e)
{
  if (scopeProjectPanel.ScopeProject.SubMember.OfType<Chart>().Count() == 0)
  {
    MessageBox.Show(this, "Please create a chart first!", "No chart connected!",
      MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  }
  else
  {
    scopeProjectPanel.ScopeProject.SubMember.OfType<Chart>().First().AddMember(new AxisGroup());
  }
}

Channels:

Der Channel beinhaltet alle Informationen zu den Daten, welche im Scope aufgezeichnet werden und wird unter die Achsen-Gruppe gehangen in welchem diese Werte dargestellt werden sollen.

private void btnAddChannel_Click(object sender, EventArgs e)
{
  Channel channel = new Channel();
  if (scopeProjectPanel.ScopeProject.SubMember.OfType<Chart>().Count() == 0)
  {
    MessageBox.Show(this, "Please create a chart first!", "No chart connected!",
      MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  }
  else if (scopeProjectPanel.ScopeProject.SubMember.OfType<Chart>().First().SubMember.OfType<AxisGroup>().Count() == 0)
  {
    MessageBox.Show(this, "Please create a axis first!", "No axis connected!",
      MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  }
  else
  {
    scopeProjectPanel.ScopeProject.SubMember.OfType<Chart>().First().SubMember.OfType<AxisGroup>().First().AddMember(channel);
    ChangeChannelSettings(channel);
    SetAcquisitions(channel);
  }
}