…gibt es jetzt eigentlich schon eine Lösung für dieses Thema?
Joachim
…gibt es jetzt eigentlich schon eine Lösung für dieses Thema?
Joachim
Hallo Joachim
Da ich den Fehler im LOG nicht abfangen kann (da wäre Hilfe der Profis nötig), mache ich es „von Hand zu Fuss“:
<?
// Verbindung zur Logo überwachen
// überwacht wird mit Ping Status ok: 0000000 Error: 00000001
// Status der letzten Messung ok: 0000000 Error: 00000010
// Status der Verbindung ok: 0000000 Error: 00000100
//
// Aus diesen Stati gibt es 8 mögliche Systemzustände und die Reaktion darauf:
// 0: Ping ok, Verbindung war ok; Verbindung ist offen -> normale LOGO Abfragen
// 1: Ping NICHT ok, Verbindung war ok; Verbindung ist offen -> Verbindung nicht ok setzen, Port schliessen
// 2: Ping ok, Verbindung war NICHT ok; Verbindung ist offen -> Verbindung und StatusKommFutterautomat OK setzen
// 3: Ping NICHT ok, Verbindung war NICHT ok; Verbindung ist offen -> Verbindung schliessen
// 4: Ping ok, Verbindung war ok; Verbindung ist NICHT offen -> Verbindung öffnen durch IPS Neustart
// 5: Ping NICHT ok, Verbindung war ok; Verbindung ist NICHT offen -> Verbindung NICHT OK setzen
// 6: Ping ok, Verbindung war NICHT ok; Verbindung ist NICHT offen -> IPS Neustart (lädt startup und bau so Verbindung wieder auf)
// 7: Ping NICHT ok, Verbindung war NICHT ok; Verbindung ist NICHT offen -> nichts zu tun
// Status 4 ist der kritische Task, nach dem 2ten erfolgreichen Ping ist eine Kommunikation wieder möglich
// das Port kann aber nur mit einem Neustart von IPS geöffnet werden.
// Windows lässt einen das nur mit den richtigen Rechten zu. Das funktioniert wie Aufgabenplanung sehr gut:
// Shell_Exec('schtasks /Run /TN IPS_Restart');
// In der Aufgabe IPS_Restart werden im Benutzerkontext ausgeführt:
// 1: C:\ip-symcon\RebootIPS\pskill ips_tray
// 2: C:\ip-symcon\RebootIPS\pskill ips_console
// 3: sc stop ipsserver
// 4: C:\ip-symcon\RebootIPS\StartServiceTrayIcon.bat
// Inhalt von StartServiceTrayIcon.bat
// ping 127.0.0.1 -n 5
// start sc start ipsserver
// ping 127.0.0.1 -n 5
// start c:\ip-symcon\ips_tray
// start /MAX c:\ip-symcon\ips_console /localhost /locationview
$ID_Path = '['.IPS_GetLocation($_IPS['SELF']).']';
$Msg_Source = 'UserMessage';
// Ping Test
if (@sys_ping("10.22.29.110",500) == true){$status = 0;} else {$status = 1;}
// Ping Test 2te Chance
if (@sys_ping("10.22.29.110",500) == true){$status = 0;}
// Status der Verbindung bei der letzten Überprüfung ?
if ( GetValue(29209 /*[Geräte\Test\Futterautomat Logo Real\VerbindungsStatusAlt]*/) == true) {$status = $status;}
else {$status = $status+2; }
// Verbindung zur Logo offen ?
if (S7_GetOpen(56804 /*[Siemens PLC Futterautomat]*/) == true) {$status = $status;}
else { $status = $status+4;}
// Wenn alles ok, Versuch etwas zu lesen
if ($status == 0) // alles ok, Kommunikation überprüfen (Stunden aus Logo VM auslesen)
{
if (S7_RequestRead(41649 /*[Geräte\Test\Futterautomat Logo Real\Echtzeit Stunden]*/) == true) //lesen möglich
{$status = $status;}
else // lesen funktioniert nicht --> IPS Reboot
{
if ($status == 0) {$status = 4;}
}
}
SetValue(50928 /*[Geräte\Test\Futterautomat Logo Real\StatusKommFutterautomat]*/,$status);
switch ($status)
{
case 0: // Ping ok, Verbindung war ok; Verbindung ist offen
// normale LOGO Abfragen
S7_RequestRead(41649 /*[Geräte\Test\Futterautomat Logo Real\Echtzeit Stunden]*/);
$hh = GetValue(59414 /*[Geräte\Test\Futterautomat Logo Real\Echtzeit Stunden\Value]*/);
S7_RequestRead(56978 /*[Geräte\Test\Futterautomat Logo Real\Echtzeit Minuten]*/);
$mm = GetValue(58897 /*[Geräte\Test\Futterautomat Logo Real\Echtzeit Minuten\Value]*/);
$hms = mktime($hh,$mm);
SetValue(16309 /*[Geräte\Test\Futterautomat Logo Real\Logozeit]*/,date('H:i', $hms));
if (GetValue(16309 /*[Geräte\Test\Futterautomat Logo Real\Logozeit]*/) <>
GetValue(33285 /*[Geräte\Test\Futterautomat Logo Real\LogozeitAlt]*/))
{
SetValue(33285 /*[Geräte\Test\Futterautomat Logo Real\LogozeitAlt]*/,
GetValue(16309 /*[Geräte\Test\Futterautomat Logo Real\Logozeit]*/));
IPS_LogMessage($Msg_Source,$ID_Path."=OK");
}
if (abs(strtotime(GetValue(16309 /*[Geräte\Test\Futterautomat Logo Real\Logozeit]*/)) - time()) > 60)
{
S7_WriteByte(41649 /*[Geräte\Test\Futterautomat Logo Real\Echtzeit Stunden]*/,intval(date("H")));
S7_WriteByte(56978 /*[Geräte\Test\Futterautomat Logo Real\Echtzeit Minuten]*/,intval(date("i")));
}
break;
case 1: // Ping NICHT ok, Verbindung war ok; Verbindung ist offen
// Verbindung nicht ok setzen, Port schliessen
SetValue(29209 /*[Geräte\Test\Futterautomat Logo Real\VerbindungsStatusAlt]*/,false);
S7_SetOpen(56804 /*[Siemens PLC Futterautomat]*/,false);
IPS_ApplyChanges(56804 /*[Siemens PLC Futterautomat]*/);
IPS_LogMessage($Msg_Source,$ID_Path."=ERROR :".$status);
break;
case 2: // Ping ok, Verbindung war NICHT ok; Verbindung ist offen
// Verbindung und StatusKommFutterautomat OK setzen
SetValue(29209 /*[Geräte\Test\Futterautomat Logo Real\VerbindungsStatusAlt]*/,true);
SetValue(50928 /*[Geräte\Test\Futterautomat Logo Real\StatusKommFutterautomat]*/,0);
IPS_LogMessage($Msg_Source,$ID_Path."=ERROR :".$status);
break;
case 3: // Ping NICHT ok, Verbindung war NICHT ok; Verbindung ist offen
// Verbindung schliessen
S7_SetOpen(56804 /*[Siemens PLC Futterautomat]*/,false);
IPS_ApplyChanges(56804 /*[Siemens PLC Futterautomat]*/);
IPS_LogMessage($Msg_Source,$ID_Path."=ERROR :".$status);
break;
case 4: // Ping ok, Verbindung war ok; Verbindung ist NICHT offen
// Verbindung öffnen durch IPS Neustart
IPS_LogMessage($Msg_Source,$ID_Path."=ERROR :".$status);
Shell_Exec('schtasks /Run /TN IPS_Restart');
break;
case 5: // Ping NICHT ok, Verbindung war ok; Verbindung ist NICHT offen
// Verbindung NICHT OK setzen
SetValue(29209 /*[Geräte\Test\Futterautomat Logo Real\VerbindungsStatusAlt]*/,false);
IPS_LogMessage($Msg_Source,$ID_Path."=ERROR :".$status);
break;
case 6: // Ping ok, Verbindung war NICHT ok; Verbindung ist NICHT offen
// IPS Neustart (lädt startup und bau so Verbindung wieder auf)
Shell_Exec('schtasks /Run /TN IPS_Restart');
IPS_LogMessage($Msg_Source,$ID_Path."=ERROR :".$status);
break;
case 7: // Ping NICHT ok, Verbindung war NICHT ok; Verbindung ist NICHT offen
// nichts zu tun
break;
}
?>
Gruess Erwin
Hallo Erwin,
da hast Du ja richtig Aufwand betrieben…
Da muss ich jetzt erst einmal durchsteigen, Vielen Dank für das Teilen!
Joachim