UdpDevice Plugin konfigurieren

<< Klicken Sie hier um das Inhaltsverzeichnis anzuzeigen >>

Navigation:  Anleitungen >

UdpDevice Plugin konfigurieren

Mit Hilfe des UdpDevice Plugins können UDP basierte Geräte mittels Scripting angesteuert werden (z.B. das GPIO-Modul Barionet 50).

 

Funktionsprinzip

Die Applikation stellt dem Plugin eine Schnittstelle für die Kommunikation zur Verfügung. Diese Schnittstelle kann mehrere Zwecke erfüllen, z.B. kann die Applikation das Plugin über ein Ereignis in der Applikation informieren. Umgekehrt kann das Plugin über diese Schnittstelle Applikationsfunktionen aufrufen.

Auf der anderen Seite besitzt das Plugin eine Schnittstelle um mit dem UDP-Gerät zu kommunizieren.

Und zwischen diesen beiden Schnittstellen sitzt eine Scripting-Engine, dadurch ist das Plugin flexibler einsetzbar als über rein herkömmliche Konfigurationsparameter.

 

Konfigurationsparameter

DCLS_UdpDevicePluginUebersicht

Parameter

Beschreibung

Activated

Legt fest ob das Plugin bzw. die Plugininstanz ausgeführt wird oder nicht.

Description

Benutzerdefinierte Beschreibung (sinnvoll wenn mit mehreren Plugininstanzen gearbeitet wird).

Host

Name oder IP-Adresse des UDP Gerätes.

Parameters

Ermöglicht die Definition von Parametern (Name/Value-Paare), die im Scripting verwendet werden können.

Port

Port des UDP Gerätes.

Scripting

Ermöglicht die skriptbasierte Kommunikation mit einem externen Modul.

TimerInterval

Legt das Intervall des Timers fest (in Millisekunden; 0 deaktiviert ihn). Der Timer kann im Scripting verwendet werden.

 

Scripting

Den Scripts stehen die nachfolgenden Schnittstellen zur Verfügung um ihre Arbeit zu erledigen.

 

IScriptingHost

Die Schnittstelle IScriptingHost stellt folgende Ressourcen zur Verfügung:

Die Methode GetParameter um die in der Konfiguration hinterlegten Parameter zu lesen.

Das TimerElapsed Ereignis, dessen Intervall über den Kofigurationsparameter TimerInterval festgelegt werden kann.

Methoden um Daten asynchron vom UDP Gerät zu empfangen: BeginReceive, EndReceive und AsciiEndReceive.

Methoden um Daten an das UDP Gerät zu senden: SendDatagram und AsciiSendDatagram.

Der verwendete UdpClient für erweiterte Anwendungen.

Die Schnittstelle steht im Script als Eigenschaft ScriptingHost zur Verfügung und kann z.B. wie folgt verwendet werden:

ScriptingHost.AsciiSendDatagram("setio,1,1\r");

 

IScCommandControl

Die Schnittstelle IScCommandControl stellt folgende Ressourcen zur Verfügung:

Die Status-Eigenschaften Abhaken, Automat und Pfl.

Die Ereignisse ControlCommandFired und TextCommandFired, die ausgelöst werden wenn der Studio Controller einen Steuerbefehl versendet.

Das Ereignis StatusMessageFired, das ausgelöst wird wenn der Studio Controller eine Statusmeldung versendet.

Das Ereignis InputCommandReceived, das ausgelöst wird wenn der Studio Controller einen Steuerbefehl von einem externen Modul empfangen hat.

Die Methode SendInternalCommand um dem Studio Controller einen Steuerbefehl zu senden.

Die Schnittstelle steht im Script als Eigenschaft ScCommandControl zur Verfügung und kann z.B. wie folgt verwendet werden:

ScCommandControl.SendInternalCommand(-10103);

 

Beispiel UDP Daten senden

Dieses Beispiel schaltet ein Relais des Barionet Gerätes ein bzw. aus wenn der Automat aktiviert bzw. deaktiviert wird (aber nur wenn das Abhaken aktiviert ist).

 

1.Den Einstellungsdialog anzeigen.

2.Im Menu Einstellungen die Hierarchie Modul-Instanz auswählen. Dadurch wird das zugehörige Fenster geöffnet.

3.Eine Plugininstanz für das UdpDevice Plugin erstellen.

4.Den Knoten Extensions aufklappen.

5.Die neu erstellte Plugininstanz auswählen und aufklappen.
UdpDevicePluginKonfigurieren

6.Die Eigenschaft Activated auf True setzen.

7.Die Einstellungen Host und Port setzen.

8.Den Skript-Editor öffnen.
UdpDevicePluginScriptEditorOeffnen

9.Das Ereignis StatusMessageFired auswählen und den gewünschten Code eingeben (siehe auch Scripting Grundlagen).
UdpDevicePluginStatusMessageFired

10.Mit einem Klick auf "OK" die Änderungen übernehmen.

11.Die Einstellungen speichern.

12.Den Studio Controller neu starten.

 

Bemerkung: Bei diesem Beispiel wurde das Plugin auf der Ebene Modul-Instanz konfiguriert. Dies kann aber auch auf der Ebene Modul erfolgen (siehe Plugin-Konzept).

 

Beispiel UDP Daten empfangen

Dieses Beispiel wartet auf Statusmeldungen des Barionet Gerätes, und aktiviert bzw. deaktiviert das Abhaken wenn der Eingang 1 ein- bzw. ausgeschaltet wird. Das Beispiel zeigt nur die notwendigen Codeabschnitte, das schrittweise Vorgehen kann dem vorangehenden Beispiel entnomen werden.

 

Load

// Den asynchronen Empfang starten.

ScriptingHost.BeginReceive(ReceiveCallback);

 

Free Code

// Die asynchrone Empfangsmethode.

void ReceiveCallback(IAsyncResult asyncResult)

{

   try

   {

       try

       {

           IPEndPoint endPoint = null;

           string response = ScriptingHost.AsciiEndReceive(asyncResult, ref endPoint);

 

           string[] lines = response.Split(new char[] { '\r' }, StringSplitOptions.RemoveEmptyEntries);

           foreach (var line in lines)

           {

               Logger.DebugFormat("Antwort von Barionet erhalten: \"{0}\"", line);

 

               // Gemäss Doku sind Befehle immer in Kleinschrift, deshalb einfach vergleichen.

               if (line == "state,1,0")

               {

                   // -10103 = SetAbhakenOff

                   int command = -10103;

                   Logger.Info2Format("Sende Befehl an Studio Controller: {0}", command);

                   ScCommandControl.SendInternalCommand(command);

               }

               else if (line == "state,1,1")

               {

                   // +10103 = SetAbhakenOn

                   int command = +10103;

                   Logger.Info2Format("Sende Befehl an Studio Controller: {0}", command);

                   ScCommandControl.SendInternalCommand(command);

               }

           }

       }

       finally

       {

          // Den asynchronen Empfang erneut starten.

          ScriptingHost.BeginReceive(ReceiveCallback);

       }

   }

   catch (ObjectDisposedException)

   {

       // Kann beim Beenden passieren, deshalb fangen wir diese Exception separat ab.

   }

   catch (Exception exp)

   {

       Logger.ErrorFormat("Fehler beim Empfangen von Barionet Daten", exp);

   }

}

 

Referenced Assemblies

System.dll

 

Using Directives

using System.Net;

 


 

Siehe auch

Plugininstanzen/Extensions verwalten

Scripting Grundlagen