ProjectInfo (PRG)

PROGRAM ProjectInfo

Die Projektinfo informiert über Version und Anwendung der ELA-IO.

Note

Beschreibung: Direkten Zugriff auf die Ein- und Ausgänge einer Mastersteuerung,
sowie auf Slave-EA’s über eine CanOpen-Kommunikation. Alle EA’s werden hierbei über PLC-Code konfiguriert, geschrieben und gelesen. Eine statische Projektierung innerhalb CoDeSys entfällt.

MASTER: Alle Elrest Master- Geräte unter CoDeSys V3. SLAVES: - Elrest Robusto Slave 102 - Elrest Robusto Slave 123 - Elrest Combo Slave 1xx Maximale Anzahl von Slaves: 64

Name : ELA-IO_Basic Firma : Elrest GmbH, Deutschland Autor : F.Nething


Die Projektinfo ist eine Ansammlung zur Anwendung der Klasse im ProgrammCode.

Note

Die Beschreibung ist Beispielhaft und an das Projekt ELA_IO angelehnt.

***********************************************************************************************************************************************************
  • Initalisierung -> Typische vorgehensweise:
1.) Einbinden der Bibliothek ELA_IO und Instanzierung des FB’s

VAR:
IO           : ELA_IO.ELA_IO_Fb;

2.) Konfigurieren von Analogkanälen

Sollen Analogkanäle verwendet werden, müssen diesen mit den Funktionen XXX ein ensprechender Sensortyp zugewiesen werden. :

Code für Eingänge:
`` IO.AInConfigureType(Node,Channel, ELA_IO_ITF.AIN_0_10VOLT); // Type 0``

Code für Eingänge:
`` IO.AOutConfigureType(Node,Channel,ELA_IO_ITF.AOUT_0_10VOLT_NORMED); // Type 54``

Damit zur Sensorauswahl mit einem Pulldown-Menü gearbeitet werden kann, `` IO.AOutConfigureType(00+i,ELA_IO_ITF.[PULLDOWN-MENUE]); ``
sind innerhalb der Entwicklungsumgebung folgende Einstellungen vorzunehmen.

Wählen Sie:
Tools –> Optionen –> Intelligentes Kodieren.
dann wie folgt:
[X] Alle Instanzvariablen in der Eingabehilfe auflisten
[X] Komponenten auslisten, nachdem ein Punkt (.) eingegeben wurde
[X] Mit Namensraum einfügen.

3.) Lesen von analogen Eingängen

Code:
Digitaleingang01 := IO.Ain(1,1);
* weitere Detail zur Funktion finden sich weiter unten

4.) Schreiben von analogen Ausgängen

Code:
AnalogEingang02 := IO.Aout(0,2);
* weitere Detail zur Funktion finden sich weiter unten

5.) Lesen von digitalen Eingängen

Code:
DigitalEingang01 := IO.Din(1,1);
* weitere Detail zur Funktion finden sich weiter unten

6.) Schreiben von digitalen Ausgängen

Code:
DigitalEingang16 := IO.Dout(0,16);
* weitere Detail zur Funktion finden sich weiter unten


7.) Can-Initialisierung

IO.CanOpenInit(CanNo:=0,Baudrate:=125);

Die Methode muß nur aufgerufen werden, wenn auf Ein- und Ausgänge weiterer angelossener Geräte
(Canopen -Slaves) zugegriffen werden soll.



8.) Aufruf der Methode

IO();

Die Methode muß nur aufgerufen werden, wenn auf Ein- und Ausgänge weiterer angeschlossener Geräte
(Canopen -Slaves) zugegriffen werden soll.

***********************************************************************************************************************************************************
  • Erläuterung der Methoden
1.) CanBus- Initialisierung - CanOpenInit()

Code
IO.CanOpenInit(CanNo:=0,Baudrate:=125);



Ausgangsvariablen
VAR Output Typ Bedeutung
    Nicht verwendet

2.) Verhalten im Fehlerfall - AOutHandlingAfterStop()

Code
AOutHandlingAfterStop(Enable := TRUE);

Eingangsvariablen
VAR Input Typ Bedeutung
Enable BOOL
  • Legt fest, daß es nach Steuerung STOP eine Individuelle Konfiguration gibt.
  • FALSE: Alle Analogausgänge werden auf NULL gesetzt
  • TRUE : Es ist im Stop-Fall der Werte der Methode AoutValueAfterStop() zu verwenden

Ausgangsvariablen
VAR Output Typ Bedeutung
    Nicht verwendet

3.) Verhalten im Fehlerfall - AOutValueAfterStop()

Code
AOutValueAfterStop(Node := 1, Channel := 1, rValue:= 5000);

Eingangsvariablen
VAR Input Typ Bedeutung
Node BYTE Node-ID das anzusprechenden Slave
Channel UINT Nummer des zu setzenden Ausgang (HE)
rValue REAL Werte der gesetzt werden soll (im Beispiel: 5000 = 5 Volt am Ausgang )

Ausgangsvariablen
VAR Output Typ Bedeutung
    Nicht verwendet

4.) Verhalten im Fehlerfall - DoutHandlingAfterStop()

Code
DOutHandlingAfterStop(Enable := TRUE);

Eingangsvariablen
VAR Input Typ Bedeutung
Enable BOOL
  • Legt fest, daß es nach Steuerung STOP eine Individuelle Konfiguration gibt.
  • FALSE: Alle Analogausgänge werden auf NULL gesetzt
  • TRUE : Es ist im Stop-Fall der Werte der Methode AoutValueAfterStop() zu verwenden

Ausgangsvariablen
VAR Output Typ Bedeutung
    Nicht verwendet

5.) Verhalten im Fehlerfall - DOutValueAfterStop()

Code
DOutValueAfterStop(Node := 1, Channel := 1, xValue:= TRUE);

Eingangsvariablen
VAR Input Typ Bedeutung
Node BYTE
  • Node-ID das anzusprechenden Slave
Channel UINT
  • Nummer des zu setzenden Ausgang
xValue REAL
  • Werte der gesetzt werden soll

Ausgangsvariablen
VAR Output Typ Bedeutung
    Nicht verwendet

6.) Wahl des Eingangs- Sensortyp - AinConfigureType()

Code
IO.AInConfigureType(Node :=1, Channel := 1, eSensorType := ELA_IO_ITF.AIN_0_10VOLT);


Eingangsvariablen
VAR Input Typ Bedeutung
Node BYTE Node-ID das anzusprechenden Slave
Channel UINT Nummer des zu setzenden Ausgang
eSensorType ELA_IO_ITF.AIN_SENSORTYPE Sensortyp der gesetzt werden soll

Ausgangsvariablen
VAR Output Typ Bedeutung
    Nicht verwendet

7.) Wahl des Ausgangs- Sensortyp - AoutConfigureType()

Code
IO.AOutConfigureType(Node := 1 , Channel := 1, eSensorType := ELA_IO_ITF.AOUT_0_10VOLT_NORMED);


Eingangsvariablen
VAR Input Typ Bedeutung
Node BYTE Node-ID das anzusprechenden Slave
Channel UINT Nummer des zu setzenden Ausgang
eSensorType ELA_IO_ITF.AIN_SENSORTYPE Sensortyp der gesetzt werden soll * Die Enumeration entnehmen sie bitte der Bibliothek “IO Interface

Ausgangsvariablen
VAR Output Typ Bedeutung
    Nicht verwendet


8.) Lesen eines digitalen Eingang - Din()

Code
DigitalEingang01 := IO.Din(Node :=1 ,Channel:= 1);


Eingangsvariablen
VAR Input Typ Bedeutung
Node BYTE Node-ID das anzusprechenden Slave
Channel UINT Nummer des zu lesenden Eingang

Ausgangsvariablen
VAR Output Typ Bedeutung
  BOOL Werte des angefragen Digitaleingangs


9.) Schreiben eines digitalen Ausgang - Dout()

Code
IO.Dout( ChannelNo := 1, bValue := DigitalAusgang01 );


Eingangsvariablen
VAR Input Typ Bedeutung
Node BYTE Nummer des zu setzenden Ausgang (HE)
Channel UINT Nummer des zu setzenden Ausgang
bValue BOOL Werte des Digitalausgang (TRUE/FALSE)

Ausgangsvariablen
VAR Output Typ Bedeutung
    Nicht verwendet


10.) CanOpen-Slave Betriebsbereit - NodeActive()

Code
Slave01_OK := IO.NodeActice( NodeNo := 1 );


Eingangsvariablen
VAR Input Typ Bedeutung
NodeNo BYTE Knotennummer des zu detektierenden CanOpen- Teilnehmers

Ausgangsvariablen
VAR Output Typ Bedeutung
  BOOL CanOpen Teilnehmer betriebsbereit


11.) CanOpen-Slave Betriebsbereit - NodeState()

Code
Slave01_State := IO.NodeState( NodeNo := 1 );


Eingangsvariablen
VAR Input Typ Bedeutung
NodeNo BYTE Knotennummer des zu detektierenden CanOpen- Teilnehmers

Ausgangsvariablen
VAR Output Typ Bedeutung
  BOOL
  • Status des CanOpen Teilnehmer
  • 0..4 = Pre- Operational. Teilnehmer startet
  • 5 = OPERATIONAL. Teilnehmer Bertriebsbereit
  • 6..99 = Teilnehmer nicht gefunden oder in Störung


12.) CanOpen-Slave Betriebsbereit - SetNodeOptional()

Code
IO.SetNodeOptional( Node := 1 ; Optional := TRUE );


Eingangsvariablen
VAR Input Typ Bedeutung
Node BYTE Knotennummer des zu überwachenden CanOpen- Teilnehmers
Optional BYTE
  • Setzt einzelner CanOpen- Teilnehmer auf den Attribut “Optional”
  • TRUE = (Default) der CanOpen Master startet dennoch,

sollte der Slave nicht bereit sein * FALSE = der Master startet nicht, wenn ein Teilnehmer nicht bereit ist


Ausgangsvariablen
VAR Output Typ Bedeutung
    nicht verwendet

ACHTUNG: Das Ändern dieses Parameters auf FALSE ist nur bedingt sinnvoll.
Pre- Operational: Hier kann durch das Setzten auf FALSE der Master aufgefordert werden nicht zu startet.
Operational: Hier müssten Alle, auch die funktionierenden Teilnehmer zum Stillstand gezwungen werden.
Da dies so gut wie nicht im Sinne des Programmierers sein kann, wirkt diese Option im Betrieb nicht.
Verwenden sie zur Erkennung stattdessen die Methoden NodeActive(); oder NodeState();


13.) CanOpen-Slave Betriebsbereit - UnforceCircleSend()

Code
IO.UnforceCircleSend( Node := 1 ; Optional := TRUE );


Eingangsvariablen
VAR Input Typ Bedeutung
Unforce BOOL
  • TRUE = Werte werden nur bei Änderung übertragen
  • FALSE = Werte werden bei Änderung und Zyklisch übertragen (sicherer)

Ausgangsvariablen
VAR Output Typ Bedeutung
    nicht verwendet



14.) Nodeguarding - SetGuardTime()

Code
IO.SetGuardTime(Node:=2 , GuardTime:=1000 , Livetime:=4 );


Eingangsvariablen
VAR Input Typ Bedeutung
Node BYTE
  • SlaveNo
GuardTime WORD
  • Nodeguardingzeit in ms. In diesem Anstand sendet der Master ein Guard-Telegramm an den Slave
Livetime BYTE
  • Lifetime-Faktor. Nach Guardtime x Lifetimefactor kein Telegrammempfang geht der Slave in Störung

Ausgangsvariablen
VAR Output Typ Bedeutung
    nicht verwendet


15.) Verbundungsinformationen

Folgende Variablenwerte geben Rückschluss über den Baustein
IO.CAN_Itf.FBVersion;
Gibt Auskunft über die Bausteinversion z.B. „3.5.8.2“

IO.CAN_Itf.FBState;
Gibt Auskunft über den Verbindungzustand der Kommunikation des CanOpen.

„DISABLE“ := Baustein ist deaktiviert
„RUN“ := Baustein läuft, ist aber nicht verbunden
„WAIT“ := Verbindet sich gerade mit einem Gerät
„CONNECTED := Ist mindestens mit einem Gerät verbunden