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 Client benutzen

Kommunikationspartner auswählen

Geben Sie die beiden ADS-Parameter ein, um Ihren ADS-Kommunikationspartner zu bestimmen:

Verbindung mit Kommunikationspartner herstellen

Beim Klicken auf Connect wird die Methode TcAdsClient.Connect zwecks Herstellung einer Verbindung mit dem konfigurierten Port aufgerufen.

Beispiel03: ADS Client UI in C# 1:

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.

Beispiel03: ADS Client UI in C# 2:

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);
     }
    }
}
}