Behoben ab:
PLC Designer V3.18
Verhalten der neuen Version:
Die Abarbeitung eines PLC-Projekts wird nicht durch einen Ausnahmefehler gestoppt, nur weil innerhalb des PLC-Projekts ein Funktionsbaustein aufgerufen wird, der netzausfallsicher vom Typ ARRAY [...] OF <FUNCTION_BLOCK> deklariert wurde.
Beschreibung des Verhaltens:
Die Abarbeitung des PLC-Projekts wird mit einem Ausnahmefehler (=Exception) gestoppt. Im Logbuch des Controllers befinden sich folgende Einträge:
*SOURCEPOSTION* App=[Application] area=x, offset=x Fatal error
*EXCEPTION* [AccessViolation] occurred: App=[Application], Task=[Task] Fatal Error
Die PLC-Runtime wird gestoppt und ein Verbindungsaufbau mit dem PLC Designer ist nicht mehr möglich. Im Logbuch des Controllers befinden sich mehrere Einträge, wie z.B.:
Process 112656562: exceptional exit (OpenContext=0x2!lx!)
Unter welchen Bedingungen tritt das Verhalten auf?
Die Abarbeitung eines PLC-Projekts kann durch einen Ausnahmefehler gestoppt werden, wenn innerhalb des PLC-Projekts ein Funktionsbaustein aufgerufen wird, der netzausfallsicher (also im Bereich VAR RETAIN oder VAR RETAIN PERSISTENT) vom Typ ARRAY [...] OF <FUNCTION_BLOCK> deklariert wurde, z.B.
VAR RETAIN
R_afbRS : ARRAY[0..10] OF RS;
END_VAR
Betroffene Produkte:
PLC Designer ab V3.0
Kurzfristige Maßnahmen:
Deklarieren Sie ein ARRAY vom Typ <FUNCTION_BLOCK> nicht im Bereich VAR RETAIN oder VAR RETAIN PERSISTENT.
Bewertung/Empfehlungen:
Wird ein ARRAY von Funktionsbausteinen netzausfallsicher deklariert, kann der Aufruf eines Funktionsbausteins dieses ARRAYs zu einem Ausnahmefehler führen und die PLC-Abarbeitung wird gestoppt. Der Ausnahmefehler kann durch Netzschalten des Controllers zurückgesetzt werden.
Lenze empfiehlt, Funktionsbausteine grundsätzlich nicht netzausfallsicher zu deklarieren. Netzausfallsichere Daten sollten über die VAR_IN_OUT-Schnittstelle in den Funktionsbaustein übergeben werden. Hier beispielhaft gezeigt anhand eines netzausfallsicheren RS Flip Flops:
Erklärung: Die netzausfallsichere Variable R_xQ1 wird über die VAR_IN_OUT-Schnittstelle Q1 in den Funktionsbaustein RS_POWERSAFE übergeben. Durch die interne Logik des Funktionsbausteins bleibt der Zustand von Q1 auch nach dem Netzschalten erhalten.