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 V3 oder e!COCKPIT ,  für CoDeSys V2.3

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

 Aufgabe 14.2 
Aufgaben 14.1 Etage 2, Büro 1, Wechselschaltung mit Konfigurator mit e!COCKPIT
 
PROGRAM PLC_PRG
(*********************************************************
Firma: ..............; Version: 1.0; Datum: ..............
Funktion: Etage 2, Büro 1, Wechselschaltung
Kommunikation Controller-Feldbuskoppler.
Liest und beschreibt die Modbusvariablen
des Feldbuskopplers (Slave 192.168.1.20)
Konfiguriert mit den MODBUS-Konfigurator
**********************************************************)
Var
END_VAR
//Etage 2
//Beleuchtung- Wechselschaltung
MODBUS.Etage2_udp.xE1:= MODBUS.Etage2_udp.xS1
                    XOR MODBUS.Etage2_udp.xS2;
MODBUS.Etage2_udp.xE2:= MODBUS.Etage2_udp.xE1;

Etage 2, Büro 1, Wechselschaltung mit Kommunikationsbaustein mit e!COCKPIT

PROGRAM PLC_PRG
(**************************************************************************
Firma: ......; Version: 1.0; Datum: .......
Funktion: Etage 2, Büro 1, Wechselschaltung mit Bibliotheksbaustein
Kommunikation Controller-Feldbuskoppler
1.) Liest vom Slave 192.168.178.101 die Eingangswerte und schreibt
diese in utResponse.awData[]
2.) Schreibt von utQuery.awWriteData[] die Werte in die Ausgänge vom Slave
Bibliotheken: WagoAppPlcModbus
**************************************************************************)
VAR
 KOMMU_E2: FbMbMasterUdp;
 utQuery: typMbQuery:= (bUnitId := 1, // Slaveaddress
 bFunctionCode := 16#17, // Register lesen und schreiben
 uiReadAddress := 0, // Startaddress
 uiReadQuantity := 1, // Quantität der Register
 uiWriteAddress := 0,
 uiWriteQuantity := 1,
 awWriteData := [124(0)]);
 xTxTrigger:BOOL; (*Setzen Sie diese Variable einmal,
                    um einen Job zu starten.
                    Diese Variable wird vom Master automatisch
                    zurückgesetzt wenn der Job erledigt ist.*)
 utResponse: typMbResponse;
 tonDelay:TON:= (PT:=T#20MS);(*Das ist die schweige Zeit
                               zwischen zwei Anträgen*)
 xError:BOOL;
END_VAR
// Verzögerung zwischen zwei Anfragen
tonDelay( IN := (NOT tonDelay.Q) AND (NOT xTxTrigger));
xTxTrigger S= tonDelay.Q; // die nächste Anfrage auslösen
//2. Etage: Slave über Modbus lesen und beschreiben
KOMMU_E2(xConnect:= TRUE,
         sHost:= '192.168.178.101',
         wPort:= 502,
         eFrameType:= eMbFrameType.ETHERNET,
         tTimeOut:= T#30MS,
         utQuery:= utQuery,
         xTrigger:= xTxTrigger,
         utResponse:= utResponse,
         xIsOpen=> ,
         xError=> xError,
         oStatus=> );
//Etage 2: Slave-Eingänge lesen DI1, DI2 und Ausgänge DO1, DO2 beschreiben
//Wechselschaltung
utQuery.awWriteData[0].0:= utResponse.awData[0].0                        XOR utResponse.awData[0].1;
utQuery.awWriteData[0].1:= utQuery.awWriteData[0].0;

    

Aufgaben 14.2 Etage 2, Büro 1 und Besprechungsraum mit Konfigurator mit e!COCKPIT

GEBAEUDE.library über den Bibliotheksverwalter eingebunden
 
PROGRAM PLC_PRG
(*******************************************
Firma:.....; Version:1.0; Datum:......
Funktion: Kommunikation PFC-FBC
Liest und beschreibt die MODBUS-Variablen
Konfiguriert mit dem MODBUS-Konfigurator
Bibliothek: GEBAEUDE.library
*******************************************)
VAR
 LICHTSZENE_1:Gebaeude.FbLichtszenen;
(*oder mit den importierten FB LICHT_SZENEN*)
 x1S1:BOOL;//Abwesendheitsschalter
END_VAR
//Etage 2 --------------------------------------
//Büro 1
MODBUS.Etage2_udp.x2E1:=(MODBUS.Etage2_udp.x2S1
XOR MODBUS.Etage2_udp.x2S2) AND x1s1;
MODBUS.Etage2_udp.x2E2:=MODBUS.Etage2_udp.x2E1;
//Besprechungsraum -----------------------------
LICHTSZENE_1(IN:= MODBUS.Etage2_udp.x2S3, tAUS:= T#3S);
MODBUS.Etage2_udp.x2E3:= LICHTSZENE_1.OUT1 AND x1s1;
MODBUS.Etage2_udp.x2E4:= LICHTSZENE_1.OUT2 AND x1s1;
MODBUS.Etage2_udp.x2E5:= LICHTSZENE_1.OUT3 AND x1s1;
  
Etage 2, Büro 1 und Besprechungsraum mit Kommunikationsbaustein mit e!COCKPIT

PROGRAM PLC_PRG
(******************************************************************
Firma: ......; Version: 1.0; Datum: .......
Bibliotheken: WagoAppPlcModbus
Funktion mit Bibliotheksbaustein:
Etage 2
- Büro 1, Wechselschaltung, Abwesenheitsschalter (x1S1)
- Besprechungsraum- Lichtszenen, Abwesenheitsschalter
Kommunikation Controller-Feldbuskoppler
1.) Liest vom Slave 192.168.178.101 die DI und schreibt
diese in utResponse.awData[]
2.) Schreibt von utQuery.awWriteData[] die Werte in die DO vom Slave
*******************************************************************)
VAR
 KOMMU_E2: FbMbMasterUdp;
 utQuery: typMbQuery:= (bUnitId := 1, // Slaveaddress
          bFunctionCode := 16#17, // Register lesen/schreiben
          uiReadAddress := 0, // Startaddress
          uiReadQuantity := 1, // Quantität der Register
          uiWriteAddress := 0,
          uiWriteQuantity := 1,
          awWriteData := [124(0)]);
 xTxTrigger: BOOL;(*Job zu starten. Variable wird vom Master
                    zurückgesetzt, wenn der Job erledigt ist.*)
 utResponse: typMbResponse;
 tonDelay:TON := (PT := T#20MS); // Zeit zwischen zwei Anträgen
 xError:BOOL;
 LICHTSZENE_1:LICHT_SZENEN;
 x1S1 AT %IX1.0:BOOL;//Abwesendheitsschalter
END_VAR
//Etage2;Kommunikation----------------------------------------------------
// Verzögerung zwischen zwei Anfragen
tonDelay( IN := (NOT tonDelay.Q) AND (NOT xTxTrigger));
xTxTrigger S= tonDelay.Q; // die nächste Anfrage auslösen
// 2. Etage: Slave über Modbus lesen und beschreiben
KOMMU_E2(xConnect:= TRUE,
         sHost:= '192.168.178.101',
         wPort:= 502,
         eFrameType:= eMbFrameType.ETHERNET,
         tTimeOut:= T#30MS,
         utQuery:= utQuery,
         xTrigger:= xTxTrigger,
         utResponse:= utResponse,
         xIsOpen=> ,
         xError=> xError,
         oStatus=> );
//Büro1-------------------------------------------------------------------
// Slave-Eingänge lesen DI1, DI2 und Ausgänge DO1, DO2 beschreiben
utQuery.awWriteData[0].0:= (utResponse.awData[0].0
                        XOR utResponse.awData[0].1) AND x1S1;
utQuery.awWriteData[0].1:= utQuery.awWriteData[0].0;
//Besprechungsraum--------------------------------------------------------
LICHTSZENE_1(
             IN:= utResponse.awData[0].2, // Taster 2S3
             tAUS:= T#3S);
utQuery.awWriteData[0].2:= LICHTSZENE_1.OUT1 AND x1S1; // Leuchte 2E3
utQuery.awWriteData[0].3:= LICHTSZENE_1.OUT2 AND x1S1; // 2E4
utQuery.awWriteData[0].4:= LICHTSZENE_1.OUT3 AND x1S1; //2E5
  


© Vogel Buchverlag