Step 7 Frage zu Code?

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

an einer Maschine, die mein Vorgänger programmiert hat, passiert sporadisch etwas, das ich mir (noch) nicht erklären kann.

Obgleich beide Alarm-Wörter den Status 0 haben, ist der Merker M11.0 aktiv und zeigt einen anstehenden Alarm an... den es aber gar nicht gibt. Wie kann das sein?

Alarm.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Michael,

nein eine Doppelzuweisung liegt nicht vor. M11.0 wird nur noch an eine andere FC übergeben.

Aber in dem Stückchen Code ist doch eindeutig zu erkennen, dass beide Vergleiche auf Ungleich 0 "false" sind, dann kann doch M11.0 nicht plötzlich den Status 1 haben, oder?

Ich weiß ja nicht um was für einen Alarm es sich handeln soll; alles Bits in den beiden AlarmWörtern sind ebenfalls 0.
 
Für mich sieht das so aus, als ob es in (einem der) vorherigen Netzwerk(e) eine nicht abgeschlossene Verknüpfung steht.
Also ein einzelnes "UND bzw. ODER" ohne folgende Zuweisung, wodurch das erste O( keine Erstabfrage darstellt.

Du kannst mal im Status das Statuswort mit einblenden, hier gibt es das Bit /ER, dieses mal kontrollieren.

Mfg
Manuel
 
Ich vermute, das Netzwerk davor wurde nicht VKE-begrenzend abgeschlossen - wurde da vielleicht etwas auskommentiert?
Füge mal vor den Vergleichen ein SET oder CLR ein.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das "mitgeschleppte" VKE sieht man bei der ersten schließenden Klammer. Da müßte VKE=0 angezeigt werden - ist hier aber 1.
(Zustand des VKE ist in der ersten Statusspalte)

Harald
 
Wow! Ja, ihr habt Recht.

Einige Netzwerke davor war etwas auskommentiert.

Das heißt also, solche Klammerausdrücke sind nicht VKE-begrenzend - daher müsste im Normalfall nach jeder schließenden Klammer das VKE = 0 sein. Stimmt das so?

Lieben Dank!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das heißt also, solche Klammerausdrücke sind nicht VKE-begrenzend
Ja

daher müsste im Normalfall nach jeder schließenden Klammer das VKE = 0 sein. Stimmt das so?
Nein.

Die schließende Klammer verknüpft das in der Klammer gebildete "Unter-VKE" mit dem VKE der bisherigen Verknüpfung vom vorherigen "Klammer Auf" - so wie da angegeben - bei Dir also O( --> ODER
Das kann auch VKE = 1 ergeben.

VKE-begrenzend sind nur Zuweisungen S/R/=, SET, CLR, SPB, SPBN, (...?), jedoch kein Beginn einer Verknüpfung. Ob eine neue Verknüpfung beginnt oder eine laufende fortgesetzt wird, sehen die Verknüpfungsoperationen U/O/X/... am Statusbit /ER (Erstabfrage) - ist das Bit 0, dann beginnt eine neue Verknüpfung und das bei der Operation gebildete VKE wird direkt unverknüpft als VKE der Verknüpfungskette übernommen. Das Statusbit /ER wird von VKE-begrenzenden Operationen auf 0 gelöscht.


Deswegen sollte man solche Netzwerke immer mit einem UND beginnen.
;)
Das ist ein offensichtlich weit verbreiteter Irrtum. Man sieht diese "Angst"-UND ja ziemlich häufig, doch die helfen leider auch nicht gegen die VKE-Verschleppung. Dann tritt nämlich der gegenteilige Effekt auf: die Verknüpfungskette ist voll erfüllt und doch entsteht keine VKE = 1, wenn von vorher ein VKE = 0 mitgeschleppt wird.

Harald
 
Nein.

Die schließende Klammer verknüpft das in der Klammer gebildete "Unter-VKE" mit dem VKE der bisherigen Verknüpfung vom vorherigen "Klammer Auf" - so wie da angegeben - bei Dir also O( --> ODER
Das kann auch VKE = 1 ergeben.

Harald

Hm, so ganz verstehe ich das noch nicht, sorry.

Die schließende Klammer sollte doch das bisherige (davorstehende) VKE mit dem in der Klammer verknüpfen.

Bei mir hatte durch das Auskommentieren das VKE vor dem "(O" doch den Status 1, oder?
Der Klammerausdruck war jedoch nicht erfüllt, somit VKE = 0.

Nach Schließen der Klammer war das VKE = 1 durch ODER. Nur, woran hast du gesehen, dass da davor etwas auskommentiert sein muss - es ist doch nichts Ungewöhnliches, dass das VKE vor der Klammer 1 hat?
 
Der unnötige "O(" stammt vermutlich davon das die Code in KOP oder FUP erstellt ist.
Probier mal mit CTRL-1 oder CTRL-3. Die Code wechselt in KOP bzw. FUP.

Das Problem ist (wie schon erwähnt) das die VKE in den vorigen Netzwerk nicht abgeschlossen ist durch ein =, S, R, SET oder CLR.

edit: Ich habe den obigen Erklärung etwas verbessert.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Nach Schließen der Klammer war das VKE = 1 durch ODER. Nur, woran hast du gesehen, dass da davor etwas auskommentiert sein muss - es ist doch nichts Ungewöhnliches, dass das VKE vor der Klammer 1 hat?
Ist nicht ungewöhnlich. Aber beim Anfang von ein Netzwerk mach es ein Unterschied ob den /ER bit (Erstabfrage) gesetzt ist oder nicht.
 
Ist nicht ungewöhnlich. Aber beim Anfang von ein Netzwerk mach es ein Unterschied ob den /ER bit (Erstabfrage) gesetzt ist oder nicht.

Danke Jasper,

aber das /ER Bit konnte Harald in meiner Darstellung doch gar nicht sehen, oder doch? Woher wusste er dann, dass das VKE im vorhergehenden NW nicht abgeschlossen war? :confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Problem ist (wie schon erwähnt) das die VKE in den vorigen Netzwerk nicht abgeschlossen ist durch ein =, S, R, SET oder CLR.

Ja ok. Also sieht man es nur daran, dass das VKE bei der ersten schließenden Klammer anstatt 0 (da ja Inhalt nicht erfüllt) fälschlicherweise 1 ist, richtig?

In einem NW davor war der Setz-Befehl auskommentiert:

Code:
     U     T     12
  // S     DB31.DBX    1.4
 
Also sieht man es nur daran, dass das VKE bei der ersten schließenden Klammer anstatt 0 (da ja Inhalt nicht erfüllt) fälschlicherweise 1 ist, richtig?
Richtig.
Hatte ich ja auch schon so in #6 geschrieben.

Die erste OR-Verknüpfung O(...) ergibt an der schließenden Klammer VKE=1, obwohl das Ergebnis in der Klammer 0 ist - das ist nur möglich, wenn bei der schließenden Klammer das VKE nicht direkt übernommen wird sondern mit dem beim O( vorhandenen VKE OR-verknüpft wird - was wiederum bedeutet, daß diese OR-Verknüpfung O(...) gar nicht die erste Verknüpfung ist (also keine Erstabfrage ist), weil der nicht sichtbare Code vor dem gezeigten Code nicht VKE-begrenzend abgeschlossen ist.

Merke: Netzwerkgrenzen sind keine VKE-Grenzen.
Netzwerkgrenzen kann man auch willkürlich mitten in AWL-Verknüpfungen setzen.

In reinem FUP/KOP kann dieses Erstabfrage-Problem übrigens nicht auftreten. Sowas passiert nur bei unsachgemäßer Programmierung in AWL.

Mein Hinweis auf eventuell auskommentierten Code resultierte daher, weil ich solchen Mist schon oft fixen mußte - besonders oft bei den Programmierern, die sich für besonders gute smarte AWL-Programmierer hielten... :(

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Deswegen sollte man solche Netzwerke immer mit einem UND beginnen.

Das ist ein offensichtlich weit verbreiteter Irrtum. Man sieht diese "Angst"-UND ja ziemlich häufig, doch die helfen leider auch nicht gegen die VKE-Verschleppung. Dann tritt nämlich der gegenteilige Effekt auf: die Verknüpfungskette ist voll erfüllt und doch entsteht keine VKE = 1, wenn von vorher ein VKE = 0 mitgeschleppt wird.

Harald
:oops:

Da hätte ich wohl besser LOAD schreiben sollen, wie es bei der S7-200/MicroWin Standard ist. Aber das geht ja bei S7 Classic bzw. TIA nicht.
:(
 
Richtig.
Hatte ich ja auch schon so in #6 geschrieben.
Harald

Ja stimmt Harald, da hatte ich es nur noch nicht so ganz verstanden... ;)

Habe das Ganze jetzt so abgeändert, dass in AWL keine Klammern mehr vorhanden sind. Das Auskommentieren in einem NW davor hätte aber auch jetzt die gleichen Auswirkungen, oder?
 
Ich wurde den Netzwerk mit die zwei Vergleicher behalten ohne Änderungen.
Der Fehler ist in den vorigen Netzwerk.

Einfach
Code:
  [COLOR="#FF0000"]//[/COLOR] U     T     12
  // S     DB31.DBX    1.4
und gut ist.
 
Zurück
Oben