Beispiel03: ADS Client UI in C#
Dieser Artikel beschreibt den ADS Client, der ADS-Meldungen an den zuvor beschriebenen ADS Server sendet.
Die Implementierung des ADS Servers hängt weder von der Sprache (C++ / C# / PLC / ...), noch von der TwinCAT Version (TwinCAT 2 oder TwinCAT 3) ab.
Download
Hier erhalten Sie den Quellcode für dieses Beispiel.
- Dieser Code erfordert .NET Framework 3.5 oder höher!
- 1. Entpacken Sie die heruntergeladene ZIP-Datei.
- 2. Öffnen Sie die enthaltene sln-Datei mit Visual Studio.
- 3. Erstellen Sie das Beispiel auf Ihrer lokalen Maschine (rechtsklicken Sie auf das Projekt und klicken Sie Build).
- 4. Starten Sie das Programm mit einem Rechtsklick auf Projekt, Debug->Start new instance.
Beschreibung
Dieser Client führt zwei Aufgaben aus:
- Den zuvor beschriebenen ADS Server testen.
- Beispielcode für die Implementierung eines ADS Client bereitstellen.
Den Client benutzen
Kommunikationspartner auswählen
Geben Sie die beiden ADS-Parameter ein, um Ihren ADS-Kommunikationspartner zu bestimmen:
- NetID:
127.0.0.1.1.1 (für ADS-Partner auch mit lokalem ADS Message Router verbunden)
Geben Sie eine andere NetID ein, wenn Sie über das Netzwerk mit einem an einen anderen ADS Router angeschlossenen ADS-Partner kommunizieren möchten.
Zuvor müssen Sie einmal eine ADS Route zwischen Ihrem Gerät und dem fernen Gerät herstellen.
- AdsPort
Geben Sie den AdsServerPort Ihres Kommunikationspartners ein.
Verwechseln Sie nicht den ADS Server Port (der ausdrücklich Ihren eigenen Message-Handler implementiert hat) mit dem regulären ADS Port zwecks Zugriff auf Symbole (es gibt nichts zu tun, wird automatisch zur Verfügung gestellt).
Finden Sie den zugewiesenen AdsPort in diesem Beispiel heraus, der AdsPort war 0x8235 (dez 33333).
Verbindung mit Kommunikationspartner herstellen
Beim Klicken auf Connect wird die Methode TcAdsClient.Connect zwecks Herstellung einer Verbindung mit dem konfigurierten Port aufgerufen.
Mit Hilfe der Schaltflächen Start / Lesen / Stopp / Überschreiben / Zurücksetzen werden ADS-Meldungen an den ADS Server gesendet.
Die spezifischen indexGroup / indexOffset Befehle wurden bereits in der ADS-Schnittstelle des ADS Servers entworfen.
Das Ergebnis des Klickens auf die Befehlsschaltflächen ist auch in der Modulinstanz auf der Registerkarte Parameter (Online) zu sehen.
C# Programm
Hier ist der „Kern“-Code des ADS Client - für die GUI usw. ZIP-Datei oben herunterladen.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using TwinCAT.Ads;
namespace adsClientVisu
{
public partial class form : Form
{
public form()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// create a new TcClient instance
_tcClient = new TcAdsClient();
adsReadStream = new AdsStream(4);
adsWriteStream = new AdsStream(4);
}
/*
* Connect the client to the local AMS router
*/
private void btConnect_Click(object sender, EventArgs e)
{
AmsAddress serverAddress = null;
try
{
serverAddress = new AmsAddress(tbNetId.Text,
Int32.Parse(tbPort.Text));
}
catch
{
MessageBox.Show("Invalid AMS NetId or Ams port");
return;
}
try
{
_tcClient.Connect(serverAddress.NetId, serverAddress.Port);
lbOutput.Items.Add("Client port " + _tcClient.ClientPort + " opened");
}
catch
{
MessageBox.Show("Could not connect client");
}
}
private void btStart_Click(object sender, EventArgs e)
{
try
{
_tcClient.ReadWrite(0x1, 0x1, adsReadStream, adsWriteStream);
byte[] dataBuffer = adsReadStream.ToArray();
lbOutput.Items.Add("Counter started value = " + BitConverter.ToInt32(dataBuffer, 0));
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
private void btRead_Click(object sender, EventArgs e)
{
try
{
_tcClient.ReadWrite(0x1, 0x2, adsReadStream, adsWriteStream);
byte[] dataBuffer = adsReadStream.ToArray();
lbOutput.Items.Add("Counter = " + BitConverter.ToInt32(dataBuffer, 0));
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
private void btStop_Click(object sender, EventArgs e)
{
try
{
_tcClient.ReadWrite(0x2, 0x1, adsReadStream, adsWriteStream);
byte[] dataBuffer = adsReadStream.ToArray();
lbOutput.Items.Add("Counter stopped value = " + BitConverter.ToInt32(dataBuffer, 0));
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
private void btReset_Click(object sender, EventArgs e)
{
try
{
_tcClient.ReadWrite(0x2, 0x2, adsReadStream, adsWriteStream);
byte[] dataBuffer = adsReadStream.ToArray();
lbOutput.Items.Add("Counter reset Value = " + BitConverter.ToInt32(dataBuffer, 0));
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
}
}