Pimp.my.PC
Level-1
- Beiträge
- 16
- Reaktionspunkte
- 0
ORGANIZATION_BLOCK "Programming error"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_TEMP
index : Int;
END_VAR
BEGIN
FOR #index := 100 TO 1 BY -1 DO
"FehlerSpeicher".OB121[#index] := "FehlerSpeicher".OB121[#index - 1];
END_FOR;
"FehlerSpeicher".OB121[0].BlockNr := #BlockNr;
"FehlerSpeicher".OB121[0].Reaction := #Reaction;
"FehlerSpeicher".OB121[0].Fault_ID := #Fault_ID;
"FehlerSpeicher".OB121[0].BlockType := #BlockType;
"FehlerSpeicher".OB121[0].Area := #Area;
"FehlerSpeicher".OB121[0].DBNr := #DBNr;
"FehlerSpeicher".OB121[0].Csg_OBNr := #Csg_OBNr;
"FehlerSpeicher".OB121[0].Width := #Width;
END_ORGANIZATION_BLOCK
TYPE "OB121_Struct"
VERSION : 0.1
STRUCT
BlockNr { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : UInt; // Number of causing block
Reaction { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : USInt; // 0:ignore, 1:substitute, 2:skip
Fault_ID { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Byte; // Fault identifier
BlockType { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : USInt; // 16#01:OB, 16#02:FC, 16#03:FB, 16#04:SFC, 16#05:SFB, 16#06:DB: Type of block causing the error
Area { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : USInt; // Area where the error occured
DBNr { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : DB_ANY; // DB number if Area = DB or DI
Csg_OBNr { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : OB_ANY; // Number of OB causing the error
Csg_Prio { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : USInt; // Priority of OB causing the error
Width { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : USInt; // 0:bit, 1:byte, 2:word, 3:dword, 4:lword
END_STRUCT;
END_TYPE
"Auslösestelle" := 0;
"Ausloesestelle" := 2020;
"Ausloesestelle" := 2021;
"FehlerSpeicher".OB121[0].Ausloesestelle:= "Ausloesestelle";
Ereignis 1 von 120: Ereignis-ID 16# 2523
Bereichslängenfehler beim Schreiben
Global -DB , Wortzugriff, Zugriffsadresse: 53536
FC-Nummer: 800
Bausteinadresse: 620
Angeforderter OB: Programmierfehler-OB (OB 121)
Prioritätsklasse: 1
interner Fehler, kommendes Ereignis
08:04:58.651 21.04.2016
(Kodierung: 16# 2523 0179 8C24 D120 0320 026C)
Den Fehler kenne ich ja bereits.Wie häufig kommen die Fehler eigentlich?
Magst Du uns den Code des FC vielleicht mal zeigen? Vielleicht sehen wir da den Fehler oder weitere Ansatzpunkte zum Finden der individuellen Instanz.
ID_ZIEL := ID_QUELLE;
ID_QUELLE := LEER;
Ja, wenn Du in dem FC100 außer den fehlerhaften Quell-/Ziel-Angaben auch übergeben bekommst (oder errechnen kannst), zu welchem Förderer die Daten gehören, dann kannst Du mit diesen Angaben auch gezielt auf die Suche nach der problematischen Aufrufstelle gehen. Die Förderernummer könnte so eine Signatur ähnlich einer Aufruf-ID sein, mit der Du den Fehler einem oder nur wenigen FC-Aufrufen zuordnen kannst. Wo welcher Förderer bearbeitet wird sollte in dem strukturierten Programm ja leicht zu finden sein.Aber ich hab noch ne Idee:
Ich werde im FC100 einen Bereichsfehler abfangen und im Fehlerfall die Lokaldaten wegsichern. Dann weiß ich, welcher Förderer übergeben wird und finde so bestimmt den Tippfehler.
Merkwürdig finde ich nur, daß die nicht geschriebenen (weil falsch adressierten) Daten anscheinend nirgends vermisst werden oder bisher unbemerkt Datensätze mehrfach vorkommen. Da kann man ja fast froh sein, daß die Fehler Diagnosepuffereinträge verursachen, sonst würden sie wohl gar nicht auffallen.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?