FUNCTION_BLOCK "IP lesen und korrigieren"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR
Taktgeber {InstructionName := 'TON_TIME'; LibVersion := '1.0'; S7_SetPoint := 'False'} : TON_TIME;
Takt { S7_SetPoint := 'True'} : Bool;
"IP auslesen CPU" : "FB_Get_Parameter_Network_Interface";
"neue IP in CPU schreiben" {InstructionName := 'T_CONFIG'; LibVersion := '1.0'} : T_CONFIG;
"IP auslesen CP 1543-1" : "FB_Get_Parameter_Network_Interface";
"neue IP in CP 1543-1 schreiben" {InstructionName := 'T_CONFIG'; LibVersion := '1.0'} : T_CONFIG;
END_VAR
VAR_TEMP
et : Time;
"gewandeltes Array 1" : Array[0..3] of USInt;
"gewandeltes Array 2" : Array[0..3] of USInt;
END_VAR
BEGIN
// IP-Adresse der CPU auslesen und bei Bedarf korrigieren
// Die Überprüfung soll vorerst einmal pro Minute laufen.
#Taktgeber(IN := NOT #Takt,
PT := "Par"."Taktfrequenz IP-Check",
Q => #Takt,
ET => #et);
// Zuerst die IP der CPU auslesen ...
#"IP auslesen CPU"(REQ := #Takt,
HW_ID := "Local~CPU",
IPParam => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU lesen".IPParam,
Busy => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU lesen".Busy,
Valid => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU lesen".Valid,
Error => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU lesen".Error,
Status => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU lesen".Status,
LEN => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU lesen".LEN);
"IP Byte zu USint"(Eingang:="Mon"."akt. Parameter".Bauwerk.SPS."Ip-Adresse CPU".Adresse.InterfaceAddress.ADDR,
Ausgang=>#"gewandeltes Array 1");
IF "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU lesen".Valid
THEN
IF "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU lesen".IPParam.IPAddress <>
#"gewandeltes Array 1"
OR "Test-DB"."IP-Adressen"."IP-Adressen CPU erneuern"
THEN
#"neue IP in CPU schreiben".Req := TRUE;
END_IF;
END_IF;
// .. und bei Abweichung neu schreiben:
#"neue IP in CPU schreiben"
(Interface := "Local~CPU",
Conf_Data := "Mon"."akt. Parameter".Bauwerk.SPS."Ip-Adresse CPU",
Done => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU schreiben".Done,
Busy => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU schreiben".Busy,
Error => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU schreiben".Error);
IF #"neue IP in CPU schreiben".Done
OR #"neue IP in CPU schreiben".Error
THEN
"Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU schreiben".Status :=
#"neue IP in CPU schreiben".Status;
"Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU schreiben".Error_Loc :=
#"neue IP in CPU schreiben".Err_Loc;
#"neue IP in CPU schreiben".Req := FALSE;
END_IF;
// Danach die IP-Adresse des CP 1543-1 auslesen ...
#"IP auslesen CP 1543-1"(REQ := #Takt,
HW_ID := "Local~CP_1543-1~CP",
IPParam => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 lesen".IPParam,
Busy => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 lesen".Busy,
Valid => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 lesen".Valid,
Error => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 lesen".Error,
Status => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 lesen".Status,
LEN => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 lesen".LEN);
"IP Byte zu USint"(Eingang:="Mon"."akt. Parameter".Bauwerk.SPS."Ip-Adresse CP 1543-1".Adresse.InterfaceAddress.ADDR,
Ausgang=>#"gewandeltes Array 2");
IF #Takt
& NOT #"neue IP in CPU schreiben".Busy
& "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CPU lesen".IPParam.IPAddress =
#"gewandeltes Array 1"
THEN
IF "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 lesen".IPParam.IPAddress <>
#"gewandeltes Array 2"
OR "Test-DB"."IP-Adressen"."IP-Adressen CP erneuern"
THEN
#"neue IP in CP 1543-1 schreiben".Req := TRUE;
END_IF;
// ... und in den CP schreiben
END_IF;
#"neue IP in CP 1543-1 schreiben"
(Interface := "Local~CP_1543-1~CP",
Conf_Data := "Mon"."akt. Parameter".Bauwerk.SPS."Ip-Adresse CP 1543-1",
Done => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 schreiben".Done,
Busy => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 schreiben".Busy,
Error => "Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 schreiben".Error);
IF #"neue IP in CP 1543-1 schreiben".Done
OR #"neue IP in CP 1543-1 schreiben".Error
THEN
"Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 schreiben".Status :=
#"neue IP in CP 1543-1 schreiben".Status;
"Mon".Steuerung."SPS-Hardware"."Ethernet-Schnittstelle CP 1543-1 schreiben".Error_Loc :=
#"neue IP in CP 1543-1 schreiben".Err_Loc;
#"neue IP in CP 1543-1 schreiben".Req := FALSE;
END_IF;
END_FUNCTION_BLOCK