Error: [527] Timeout when waiting for PCL Response mit Logo

…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