| Aufgabe 14.1 |
Gebäudeautomatisation mit
WAGO I/O Pro PROGRAM
PLC_PRG
(**************************************************************************
Firma: ......
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: Ethernet.lib, mod_com.lib, ModbusEthernet_04.lib
Version: 1.0, Datum: .......
**************************************************************************)
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,
bUNIT_ID:=
,
bFUNCTION_CODE:=
23,
wREAD_ADDRESS:=
16#0000,(*Modbus-Adr. der Slave-Eingänge
(%IW0...%IW5)*)
wREAD_QUANTITY:=
6,
ptREAD_DATA:=
ADR(Receive_Data),
wWRITE_ADDRESS:=
16#0200,(*Modbus-Adr. der Slave-Ausgänge
(%QW0...%QW2)*)
wWRITE_QUANTITY:=
3,
ptSEND_DATA:=
ADR(Transmit_Data),
xSTART:=
TON1.Q,
xRESET:=
,
tTIME_OUT:=
,
wERROR=>
,
xREADY=>
,
bRESPONSE_UNIT_ID=>
);
(* 2. Etage: Büro 1, Beleuchtung
************************************)
(*Slave-Eingänge (Receive_Data) lesen*)
DI_WORD_0:= Receive_Data[0];(*Slave %IX0.0...%IX0.15*)
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;
|
| Aufgabe 14.2 |
Gebäudeautomatisation mit
Erweiterung mit WAGO I/O Pro FUNCTION_BLOCK LICHT_SZENEN
VAR_INPUT
IN:BOOL;(*Impulse ändern die Ausgangswerte*)
END_VAR
VAR_OUTPUT
OUT1, OUT2, OUT3:BOOL;
END_VAR
VAR
CTU1:CTU;(*Instanz*)
TON1:TON;
END_VAR
CTU1(CU:= IN);
CASE CTU1.CV OF
0: OUT1 := FALSE;OUT2 := FALSE;OUT3 := FALSE;
1: OUT1 := FALSE;OUT2 := TRUE;OUT3 := FALSE;
2: OUT1 := FALSE;OUT2 := TRUE;OUT3 := TRUE;
3: OUT1 := TRUE;OUT2 := TRUE;OUT3 := FALSE;
4: OUT1 := TRUE;OUT2 := FALSE;OUT3 := TRUE;
5: OUT1 := TRUE;OUT2 := TRUE;OUT3 := TRUE;
END_CASE;
IF CTU1.CV > 5 THEN
CTU1.RESET:=TRUE;
ELSE CTU1.RESET:=FALSE;
END_IF
(*Ausschalten
TON1(IN:= IN, PT:=T#1s);
IF TON1.Q THEN
CTU1.RESET:= TRUE;
END_IF;*)
|