Fehler in S7-Programm

Earny

Level-1
Beiträge
422
Reaktionspunkte
38
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich muss einen Fehler in einem fremden Programm finden. Das will nicht gelingen. Ich habe die Sache ziemlich abgespeckt.
Ich teste mit PLCSIM.

OB35
Code:
      U     E      0.0
      SPBN  M1
      CALL  FC     1
M1:   NOP   0

FC1 in SCL (soll 1000 Messwerte in den DB1 schreiben)
Code:
FUNCTION FC1:VOID
Messwerte.Wert[Nummer]:=Messwert;
Nummer:=Nummer + 1;
END_FUNCTION

DB1
Hier ist eine Array für 1000 Integerwerte angelegt:
sinngemäß:
Wert.....ARRAY[1..1000].....0
INT

Symboltabelle
CYC_INT5........OB35......OB35......Cyclic Interrupt 5
Messwert.........PEW304......INT
Messwerte.......DB1.........DB1
Nummer..........MW40......INT


Ich lade den OB35, den DB1 und die (fehlerfrei) übersetzte
FC1 in die PLCSIM-CPU.
Sobald man E0.0 einschaltet geht die CPU auf STOP.


Gruß
Earny
 
Hallo Earny,

kannst Du Dir den Baugruppenzustand ansehen, und etwas bei den Fehlern finden?

Gruß Jan
 
Das PEW304 muß existieren, sonst geht die CPC in Stop. Außerdem kontrolliere bitte MW40, da dürfen nie andere Werte als 1-1000 drinstehen, sonst geht die SPS in Stop.

Ersteres verhinderst du, indem du die entsprechenden OB in das AG lädst (glaube OB82, aber das sagt dir ein Blick in den Diagnosepuffer). Das Zweite verhinderst du, indem du den Wertebereich des MW 40 mit zwei Vergleichern kontrollierst und bei falschen Werten entweder keinen Zugriff auf das Array ausführst oder den Wert des MW40 korrigierst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

zu Jan und crash:
Im Diagnosepuffer steht
1. STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB...
2. Bereichslängenfehler beim schreiben


zu Ralle:
Im MW40 steht beim Start der Wert 0
Habe jetzt auch das PEW304 in PLCSIm angelegt und schreibe da z.B. 12345 rein


Mit der CPU kann es nichts zu tun haben, weil ich doch in PLCSIM teste. Ich lade die Systemdaten nicht in PLCSIM.
Das habe ich bei einem ähnlichen Projekt, welches funktioniert, auch gemacht. Der OB35 läuft dann mit Default 100 ms.

Gruß
Earny
 
Mit der CPU kann es nichts zu tun haben, weil ich doch in PLCSIM teste. Ich lade die Systemdaten nicht in PLCSIM.
Das habe ich bei einem ähnlichen Projekt, welches funktioniert, auch gemacht. Der OB35 läuft dann mit Default 100 ms.

Gruß
Earny

Hab ich glatt überlesen das du mit PLCSIM arbeitest. :eek:

godi
 
Kann es sein, daß ein OB aufgerufen werden soll, der nicht vorhanden ist? Evt. OB 122?
Und kann es sein, daß Du in einen Bereich eiunes DB schreibst, den es nicht gibt?

Gruß Jan
 
Hallo Jan,
das S7-Programm, dass ich eingestellt habe, das ist Alles. Ich habe das Programm wie gesagt abgespeckt.
Der Rest ist aber immer noch "failsafe" - der Fehler wurde gerettet.
Im DB1 ("Messwerte") habe ich ein Array mit 1000 Integerwerten angelegt, Vorbelegung 0, Datentyp INT, Arrayname "Wert" (s.o.)

Gruß
Earny
 
Hast du schon dein MW40 kontrolliert welchen Wert es hat?
Programmiere sonst noch was dazu das dein MW 40 nicht den bereich von 0 bis 999 verlässt.

godi
 
Hallo Jan,
die Übersetzung von "failsafe" in "der Fehler wurde gerettet" ist nur ein Gag, der aber meine Verzweiflung gut zum Ausdruck bringt.
Murphy würde vielleicht sagen: Es geht immer alles schief.

Gruß
Earny
 
Zuletzt bearbeitet:
Hallo Ralle,
dass hatte ich natürlich wieder vergessen.
Ich habe jetzt die SCL-Quelle neu übersetzt. Jetzt gehts.
Ich werde nie mehr ein Array von [1..1000] deklarieren, sondern nur noch von [0 bis 999] - für 1000 Werte.
Das MW40 (nicht remanent) startet ja immer mit 0 (S7-300-Default).

Gruß und besten Dank
Earny
 
Hallo Ralle,
habe in meiner PLCSIM-Umgebung einen Speicherbereich "Allgemein" eingefügt und den dann in PEW304 geändert.
Dann kann man da Integerwerte reinschreiben. 12345 ist ein Integerwert. Das mache ich deshalb, damit bei geöffnetem DB1 beobachten kann, wie da der Wert 12345 reingeschrieben wird.

Die Grenzwertüberwachung habe ich natürlich noch nicht aktiviert.
Würde ich das Programm so weiterlaufen lassen, käme es beim 1001 Schreibversuch zum Absturz. Aber das ist nicht das Problem.

Gruß
Earny
 
Zurück
Oben