| Aufgabe 15.1 |
Lesen und schreiben, Analyse mit
WAGO I/O Pro SPS1
PROGRAM PLC_PRG
(***************************************************************
Firma: ......
Funktion: Kommunikation Controller-Controller.
Controller 192.168.0.100 als Master
Controller 192.168.0.101 als Slave
1.) Liest vom Slave MW0, MW1 und schreibt diese in
wLeseDaten[].
MODBUS-Startadresse für MW0 ist beim 750-881,-481 oder -482
16#3000
2.) Schreibt von wSendeDaten[] Werte in MW2, MW3 des
Slaves
Bibliotheken: Ethernet.lib, mod_com.lib, ModbusEthernet_04.lib
Version: 1.0, Datum: ......., Autor: .......
****************************************************************)
VAR
Master : ETHERNET_MODBUSMASTER_UDP;
strIP_Adresse:STRING:= '192.168.0.101';(*Slave*)
wLeseAdr:WORD:= 16#3000;(*Startadresse MW0*)
wLeseAnzahl:WORD:= 2;(*Lesen MW0 bis MW1*)
wSchreibAdr:WORD:= 16#3002;(*Startadresse MW2*)
wSchreibAnzahl:WORD:= 2;(*Schreiben in MW2 und MW3*)
wSendeDaten:ARRAY[1..2] OF WORD;
wLeseDaten:ARRAY[1..2] OF WORD;
T1:TON;(*Sende- Leseintervall*)
Digitalwert1_zum_Slave AT %IX2.0: BOOL;
Digitalwert2_zum_Slave AT %IX2.1: BOOL;
Digitalwert1_vom_Slave AT %QX0.0: BOOL;
Digitalwert2_vom_Slave AT %QX0.1: BOOL;
END_VAR
(*Merkerwords im Slave über Modbus/TCP lesen und
beschreiben*)
(*Wert vom %MX0.0, %MX0.1 des Controllers 2 (Slave) lesen*)
(*ins %MX2.0, %MX2.1 des Controllers 2 (Slave) schreiben*)
wSendeDaten[1].0:= Digitalwert1_zum_Slave;
wSendeDaten[1].1:= Digitalwert2_zum_Slave;
T1(IN:= MASTER.xREADY, PT:= T#0.1s);
MASTER(
strIP_ADDRESS:=
strIP_Adresse,(*Slave*)
wPORT:= 502,
bFUNCTION_CODE:=
23,(*WORDs empfangen und senden*)
wREAD_ADDRESS:=
wLeseAdr,(*Modbus-Startadr. MW0 im Slave*)
wREAD_QUANTITY:=
wLeseAnzahl,
ptREAD_DATA:=
ADR(wLeseDaten[1]),
wWRITE_ADDRESS:=
wSchreibAdr,
wWRITE_QUANTITY:=
wSchreibAnzahl,
ptSEND_DATA:=ADR(wSendeDaten),
xSTART:=T1.Q);
Digitalwert1_vom_Slave:= wLeseDaten[1].0;
Digitalwert2_vom_Slave:= wLeseDaten[1].1;
SPS2
PROGRAM PLC_PRG
(***************************************************************
Firma: ......
Funktion: Kommunikation Controller-Controller.
Controller 192.168.0.101 als Slave
MW0 und MW1 werden vom Master gelesen
MW1 und MW2 werden vom Master beschrieben
Version: 1.0, Datum: ......, Autor: .......
****************************************************************)
VAR
Digitalwert1_zum_Master AT %MX0.0:BOOL;
Digitalwert2_zum_Master AT %MX0.1:BOOL;
Digitalwert1_vom_Master AT %MX2.0:BOOL;
Digitalwert2_vom_Master AT %MX2.1:BOOL;
MW0 AT %MW0:WORD:=0;
MW1 AT %MW1:WORD:=0;
MW2 AT %MW2:WORD:=0;
MW3 AT %MW4:WORD:=0;
END_VAR
(*empfangene Daten aus MW2, MW3 lesen*)
%QX0.0:=Digitalwert1_vom_Master;
%QX0.1:=Digitalwert2_vom_Master;
(*Daten ins MW0, MW1 schreiben*)
Digitalwert1_zum_Master:=%IX2.0;
Digitalwert2_zum_Master:=%IX2.1;
|
| Aufgabe 15.2 |
Bandanlage FUNCTION_BLOCK BAND
(*Bandsteuerung mit Freigabe und Objekterkennung*)
VAR_INPUT
START, STOPP:BOOL; (*Freigabe*)
SENSOR_1, SENSOR_2:BOOL; (*Objekterkennung*)
END_VAR
VAR_OUTPUT
BAND, FREIGABE: BOOL;
END_VAR
VAR
RS_Freigabe, RS_Band:RS;
END_VAR
(*Freigabe*)
RS_Freigabe(SET:= START, RESET1:= STOPP);
FREIGABE:= RS_Freigabe.Q1;
(*Band*)
RS_Band(SET:= SENSOR_1, RESET1:= SENSOR_2);
BAND:= RS_Band.Q1 AND RS_Freigabe.Q1;
|
| Aufgabe 15.3 |
Bandanlage mit einer
Kommunikationsfehlermeldung FUNCTION_BLOCK BAND
(*Bandsteuerung mit Freigabe und Objekterkennung*)
VAR_INPUT
START, STOPP:BOOL; (*Freigabe*)
SENSOR_1, SENSOR_2:BOOL; (*Objekterkennung*)
END_VAR
VAR_OUTPUT
BAND, FREIGABE: BOOL;
END_VAR
VAR
RS_Freigabe, RS_Band:RS;
END_VAR
(*Freigabe*)
RS_Freigabe(SET:= START, RESET1:= STOPP);
FREIGABE:= RS_Freigabe.Q1;
(*Band*)
RS_Band(SET:= SENSOR_1, RESET1:= SENSOR_2);
BAND:= RS_Band.Q1 AND RS_Freigabe.Q1;
PROGRAM PLC_PRG
(**********************************************************************
Anlage: Bandanlage 1, Controller 1 beschreibt MW in der
Bandanlage 2,
Bibliotheken: ModbusEthernet_04.lib,
Firma: ......, Version: 1.0, Datum: ......., Autor:
.......
***********************************************************************)
VAR
KOMM:ETHERNET_MODBUSMASTER_UDP;
strIP_Adresse:STRING:= '192.168.0.101';(*Anlage 2*)
wSchreibAdr: WORD:=16#3000;(*Modbus-Adresse für MW0
in Anlage 2*)
wSchreibAnzahl: WORD:=1;(*beschreibe nur ein MW*)
wSendeDaten: WORD;
T1:TON;(*Leseintervall*)
Band_1:BAND;
A2_B1_hinten: BOOL;
END_VAR
(*zu sendente Daten beschreiben*)
wSendeDaten.0:= P1_Freigabe;
wSendeDaten.3:= B2_vorne;
(*Modbus-Kommunikation*)
T1(IN:= KOMM.xREADY, PT:= T#50ms);
KOMM(
strIP_ADDRESS:= strIP_Adresse,
wPORT:= 502,
bFUNCTION_CODE:= 16,(*WORD
senden*)
wWRITE_ADDRESS:=
wSchreibAdr,
wWRITE_QUANTITY:=
wSchreibAnzahl,
ptSEND_DATA:= ADR(wSendeDaten),
xSTART:= T1.Q);
(*empfangenes Status-WORD der Anlage 2*)
A2_P2_Freigabe:= %MX1.1;
A2_B1_hinten:= %MX1.2;
(*Fehler*)
P3_Fehler:= KOMM.wERROR > 0;
BAND_1(
START:= S1_Anl_Ein,
STOPP:= NOT S0_Anl_Stopp
OR P3_Fehler, (*Ö*)
SENSOR_1:= B1_hinten,
SENSOR_2:= NOT A2_P2_Freigabe AND B2_vorne
OR
A2_P2_Freigabe AND A2_B1_hinten OR P3_Fehler);
P1_Freigabe:= Band_1.FREIGABE;
Q1_Band:= Band_1.BAND;
|