SPS- Programmierung mit ST

nach IEC 61131 mit CODESYS V2.3, CODESYS V3, e!COCKPIT

Lösungen Kapitel 14   Kommunikation Controller–Feldbuskoppler, Modbus für CODESYS V2.3 (WAGO I/O Pro)

  Kopieren Sie den Programmcode und fügen Sie diesen in Ihre Entwicklungsumgebung ein.
    

 Aufgabe 14.2 
Aufgaben 14.1 Gebäudeautomatisation mit WAGO I/O Pro
 
PROGRAM PLC_PRG
(*Funktion: Kommunikation Controller-Feldbuskoppler.
1.) Liest vom Slave 192.168.0.109 die Eingangswerte und schreibt
diese in Receive_Data[]
2.) Schreibt von ADR(Transmit_Data) Werte in die Ausgänge von
192.168.0.109
Bibliotheken: ModbusEthernet_04.lib, Ethernet.lib, mod_com.lib*)
VAR
(*2. Etage: Slave über Modbus lesen und beschreiben*)
 KOMMU_E2: ETHERNET_MODBUSMASTER_UDP;(*Instanz für die Kommunikation*)
 Receive_Data: ARRAY [0..5] OF WORD;(*Empfangsdaten*)
 Transmit_Data: ARRAY [0..2] OF WORD;(*Sendedaten*)
 TON1: TON;
 (*Slave-Eingänge*)
 x2S1, x2S2: BOOL;
 DI_WORD_0: WORD;
 (*Slave-Ausgänge*)
 x2E1: BOOL;
 x2E2: BOOL;
 DO_WORD_0: WORD;
END_VAR
(*2. Etage: Slave über Modbus alle 0.1s lesen und beschreiben*)
TON1(IN:= KOMMU_E2.xREADY, PT:= T#0.1s);
KOMMU_E2(
        strIP_ADDRESS:='192.168.0.109',
        wPORT:= 502,
        bFUNCTION_CODE:= 23,
        wREAD_ADDRESS:= 16#0000,(*Modbus-Adr. der Slave-Eingänge*)
        wREAD_QUANTITY:= 6,
        ptREAD_DATA:= ADR(Receive_Data),
        wWRITE_ADDRESS:= 16#0200,(*Modbus-Adr. der Slave-Ausgänge*)
        wWRITE_QUANTITY:= 3,
        ptSEND_DATA:= ADR(Transmit_Data),
        xSTART:= TON1.Q,);
(*2. Etage: Büro 1, Beleuchtung*)
DI_WORD_0:= Receive_Data[0];(*Slave-Eingänge lesen *)
x2S1:= DI_WORD_0.0;(*Bit 0*)
x2S2:= DI_WORD_0.1;
(*Verarbeiten*)
x2E1:= x2S1 XOR x2S2;
x2E2:= x2E1;
(*Slave-Ausgänge (Transmit_Data) beschreiben*)
DO_WORD_0.0:= x2E1;(*in Bit 0 schreiben*)
DO_WORD_0.1:= x2E2;
Transmit_Data[0]:= DO_WORD_0;

      
Aufgaben 14.2 Gebäudeautomatisation, Erweiterung mit WAGO I/O Pro

Passen Sie die Steuerungskonfiguration des Controllers, die IEC-Adressen und IP-Adresse an Ihre Automatisierungsgeräte an!
 
PROGRAM PLC_PRG
(*************************************************************************
Funktion: Kommunikation Controller-Feldbuskoppler.
1.) Liest vom Feldbuskoppler die Eingangswerte und schreibt diese in
Receive_Data[]
2.) Schreibt von ADR(Transmit_Data) Werte in die Ausgänge vom
Feldbuskoppler
Die Ein- und Ausgänge der Feldbuskoppler werden nicht über IEC-Adressen,
sondern über die Modbus-Adressen angesprochen.
Bibliotheken: Ethernet.lib, mod_com.lib, ModbusEthernet_04.lib
Firma: xxxx, Version: 1.0, Datum: xxxx
*************************************************************************)
VAR
(*1. Etage*)
 x1S1 AT %IX2.0:BOOL; (*Abwesenheitsschalter*)
(*2. Etage*)
 KOMMU_E2: ETHERNET_MODBUSMASTER_UDP;
 Receive_Data : ARRAY [0..5] OF WORD;
 Transmit_Data: ARRAY [0..5] OF WORD;
 T1: TON;
 LICHT_SZENE_1:LICHT_SZENE;
(*Slave-Eingänge*)
 x2S1, x2S2: BOOL; (*Schalter im Büro1*)
 x2S3, x2S3visual:BOOL; (*Taster im Besprechungsraum*)
 DI_WORD_0: WORD;
(*Slave-Ausgänge*)
 x2E1, x2E2: BOOL; (*Leuchten im Büro1*)
 x2E3, x2E4, x2E5: BOOL; (*Leuchten im Besprechungsraum*)
 DO_WORD_0: WORD;
 Fehler: BOOL;(*Netzwerkunterbrechung*)
END_VAR
(*2. Etage: Slave über Modbus/TCP lesen und schreiben*)
T1(IN:= KOMMU_E2.xREADY, PT:= T#0.1s );
KOMMU_E2(
           strIP_ADDRESS:='192.168.0.109',
           wPORT:= 502,
           bFUNCTION_CODE:= 23,
           wREAD_ADDRESS:= 16#0000,(*Modbus-Adr. der Eingangs-
                                     register (%IW0 ...)*)
           wREAD_QUANTITY:= 6,
           ptREAD_DATA:= ADR(Receive_Data),
           wWRITE_ADDRESS:= 16#0200,
           wWRITE_QUANTITY:= 6,
           ptSEND_DATA:= ADR(Transmit_Data),
           xSTART:=T1.Q);
(*2. Etage: Beleuchtung*)
(*Slave-Eingänge (Receive_Data) lesen*)
DI_WORD_0:= Receive_Data[0];(*Slave DI1...(%IX0.0...)*)
x2S1:= DI_WORD_0.0;(*Bit 0*)
x2S2:= DI_WORD_0.1;
x2S3:= DI_WORD_0.2;
(*Verarbeiten*)
IF NOT x1S1 THEN
 (*Büro 1*)
  x2E1:= x2S1 XOR x2S2;
  x2E2:= x2E1;
 (*Besprechungsraum: Lichtszene schalten*)
  LICHT_SZENE_1(IN:= x2S3 OR x2S3visual);
  x2E3:= LICHT_SZENE_1.OUT1;
  x2E4:= LICHT_SZENE_1.OUT2;
  x2E5:= LICHT_SZENE_1.OUT3;
 (*Slave-Ausgänge DO1...(Transmit_Data) beschreiben*)
  DO_WORD_0.0:= x2E1;(*in Bit 0 schreiben*)
  DO_WORD_0.1:= x2E2;
  DO_WORD_0.2:= x2E3;
  DO_WORD_0.3:= x2E4;
  DO_WORD_0.4:= x2E5;
 ELSE
  DO_WORD_0:= 0;
END_IF;
Transmit_Data[0]:= DO_WORD_0;
(*Netzwerkunterbrechung*)
IF KOMMU_E2.wERROR = 153 THEN
  Fehler:= TRUE;
 ELSE Fehler:=FALSE;
END_IF;
  


© Vogel Buchverlag