Lösungen Kapitel 14 ======================================================================= Aufgabe 14.1 Etage 2, Büro 1, Wechselschaltung mit Konfigurator 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; _________________________________________________________________________ Aufgabe 14.1 Etage 2, Büro 1, Wechselschaltung mit Kommunikationsbaustein 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; _____________________________________________________________________________ Aufgabe 14.2 Etage 2, Büro 1 und Besprechungsraum mit Konfigurator 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; __________________________________________________________________________ Aufgabe 14.2 Etage 2, Büro 1 und Besprechungsraum mit Kommunikationsbaustein 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 //Etage 2; 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üro 1 ---------------------------------------------------------------------------- // 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 =======================================================================================