Steuern eines Charts

Damit in der Integration nicht dauerhaft die Toolbar und die Zeitleiste eingeblendet sein müssen, ist es möglich, die Funktionalitäten direkt über die Chart-Objekte anzusteuern.

Da diese Funktionen nur im Aufnahmebetrieb genutzt werden kann, muss eine Abfrage erfolgen, ob aktuell Signale aufgenommen werden.
Mit der Methode StartDisplay des Charts kann dieses gestartet werden. Mit der Methode StopDisplay kann das Display angehalten werden. Die Aufnahme läuft im Hintergrund weiter. Dies ist z. B. bei eingeschaltetem Overview-Chart erkennbar.

Zum Löschen des Graphen wird zunächst überprüft, ob ein Chart offen ist. Danach wird überprüft, ob momentan eine Aufnahme stattfindet. Ist dies der Fall, wird die aktuelle Aufnahme beendet. Mit der Methode Disconnect kann der Graph aus dem Chart gelöscht werden und dann kann über die Methode RemoveMember das Chart vom Projekt gelöscht werden.

private void btnRun_Click(object sender, EventArgs e)
{
  if (scopeProjectPanel.ScopeProject.ScopeState != TwinCAT.Measurement.Scope.API.ScopeViewState.Record)
  {
    MessageBox.Show(this, "Only possible if a record is running!", "Run not possible!",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  }
  if (scopeProjectPanel.ScopeProject.ScopeState == TwinCAT.Measurement.Scope.API.ScopeViewState.Record)
    scopeProjectPanel.ScopeProject.SubMember.OfType<Chart>().First().StartDisplay();
}
private void btnPause_Click(object sender, EventArgs e)
{
  if (scopeProjectPanel.ScopeProject.ScopeState != TwinCAT.Measurement.Scope.API.ScopeViewState.Record)
  {
    MessageBox.Show(this, "Only possible if a record is running!", "Pause not possible!",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  }
  if (scopeProjectPanel.ScopeProject.ScopeState == TwinCAT.Measurement.Scope.API.ScopeViewState.Record)
    scopeProjectPanel.ScopeProject.SubMember.OfType<Chart>().First().StopDisplay();
}

private void btnDelChart_Click(object sender, EventArgs e)
{
  if (scopeProjectPanel.ScopeProject.SubMember.OfType<Chart>().Count() == 0)
  {
    MessageBox.Show(this, "No chart is connected!", "Nothing to delete!",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  }
  else if (scopeProjectPanel.ScopeProject.ScopeState == TwinCAT.Measurement.Scope.API.ScopeViewState.Record)
  {
    scopeProjectPanel.ScopeProject.StopRecord();
    scopeProjectPanel.ScopeProject.Disconnect(false);
  }
  else if (scopeProjectPanel.ScopeProject.ScopeState == TwinCAT.Measurement.Scope.API.ScopeViewState.Reply)
  {
    scopeProjectPanel.ScopeProject.Disconnect(false);
  }
  else
  {
    scopeProjectPanel.ScopeProject.RemoveMember(scopeProjectPanel.ScopeProject.SubMember.OfType<Chart>().First());
  }
}