SPS- Programmierung mit ST

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

Vorlagen Kapitel 15  Kommunikation Controller–Controller, Modbus

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


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;
  


Vogel Buchverlag