Hinweis: Step7 (V5.4.3.1) ändert eigenmächtig Programmcode

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2022
Beiträge
21.965
Reaktionspunkte
6.836
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, schon gewußt?

Nur durch das Umschalten der Ansicht von AWL zu FUP und wieder zu AWL ändert Step7 den
Programmcode eigenmächtig: :?
Code:
U #IN1  ==FUP==> speichern ==AWL==>  X #IN1
X #IN2                               X #IN2
= #OUT                               = #OUT

Hat man den Baustein mit "U #IN1" in die CPU geladen, dann den Baustein mit "X #IN1"
gespeichert und vergleicht offline<->online, dann meldet Step7 keinen Unterschied,
weil die Änderung nicht von einer Programmierer-Eingabe stammt und deshalb der Baustein
keinen neuen Zeitstempel erhalten hat. (!)
Öffnet man den offline-Baustein und den online-Baustein, dann wird der Unterschied exakt
dargestellt ("U #IN1" online, "X #IN1" offline).

Erst wenn man im offline-Baustein irgend ein Zeichen hinzufügt, wieder löscht und speichert,
dann ergibt der offline<->online Vergleich einen Unterschied.

Das gleiche passiert auch, wenn Oder-Verknüpfungen mit U begonnen werden:
Code:
U #IN1  ==FUP oder KOP==> speichern ==AWL==>  O #IN1
O #IN2                                        O #IN2
= #OUT                                        = #OUT

Überflüssige Klammern werden entfernt:
Code:
O(
U #IN1  ==FUP oder KOP==> speichern ==AWL==>  U #IN1
U #IN2                                        U #IN2
)                                             O #IN3
O #IN3                                        = #OUT
= #OUT

Überflüssige Sprungmarken werden grundsätzlich gelöscht
(das ist aber allgemein bekannt und nur ärgerlich).

Das kommt mir doch bekannt vor?
Auch in Step7 MicroWin 32 für S7-200 muß man nach Umschalten der Ansicht nachprüfen, ob das
Programm noch das selbe geblieben ist. :rolleyes:

Also ich mag es nicht, wenn irgendwas ungefragt meine Programme ändert.
Wenn dieses Verhalten wenigstens in einem Handbuch oder Hilfe stehen würde, dann könnte man das
als Featuritis abtun. Da Step7 diese Dinge aber heimlich tut, qualifiziere ich es als Bug.
:TOOL:

Gruß
PN/DP
 
Tabu

Voll der gleichen Meinung, der Source Code IST tabu!

Ich kenne so ein Problem auch aus einer anderen Ecke: Microsoft Visual Studio 8 codiert im Resourcen Compiler klammheimlich eine 24 Bit/Pixel (ROT,GRÜN,BLAU) in eine 32 Bit/Pixel (+Alpha Kanal) um.

Der Effekt ist, dass eingebettete Wasserzeichen weg sind und die Bitmap 33% mehr Speicher frisst!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also offengestanden verstehe ich nicht worüber du dich aufregst.

Wenn man in Bezug auf AWL/KOP/FUP mal den Begriff "Ansicht" vergisst,
dann ist das ganz klar eine bewusst ausgeführte Wandlung des Programmcodes
und somit u.U. eben auch eine Vereinfachung des Codes.

Bei der Konkurrenz also Codesys und Co. funktioniert das entweder überhaupt nicht,
oder mit einer relativ aufwändigen Übersetzung (Konvertierung).

Mfg
Manuel
 
Danke für diese wissenswerte Information!
Frage: ist diese Umwandlung grundsätzlich so, oder nur wenn der Befehl davor VKE-begrenzend ist, weil wenn das so ist, ändert sich definitiv der Ausgang der logischen Verknüpfung, und dann ist es ein Bug!

lG
Karl
 
Also, an der Funktion ändert sch definitiv nichts!

Und meiner Meinung nach ist das Ändern in einige Fällen durchaus gerechtfertigt, z.B. ist
Code:
U   #BOOL1
X   #BOOL2
lt meiner Ansicht einfach nur schlampig programmiert - und es darf zurecht umgewandelt werden. Genauso wie z.B.
Code:
U   #BOOL1
O   #BOOL2
Hier haben wohl einige Programmierer einfach nur Angst, dass der zuvor geschriebene Programmteil das VKE noch nicht abgeschlossen hat, ich sehr auch immer wieder, dass einige Leute am Beginn jeder Verknüpfung noch SET oder CLR reinschreiben, wozu das?

mfg Maxl
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier haben wohl einige Programmierer einfach nur Angst, dass der zuvor geschriebene Programmteil das VKE noch nicht abgeschlossen hat, ich sehr auch immer wieder, dass einige Leute am Beginn jeder Verknüpfung noch SET oder CLR reinschreiben, wozu das?

mfg Maxl

Kein Mensch hat hier Angst, nur wenn es so eine "Autofunktion" gibt, sollte diese zumindest die VKE-Begrenzung mitchecken, ansonsten ist es eben ein Bug.


lG
Karl
 
Hallo,
das Step 7 den Programmcode ändert ohne das ich es will finde
ich auch nicht besonders toll. Dieses kann er tun wenn ich ihn
dazu auffodere, wie z.B. bei der Bausteinkonsitenzprüfung.
Das mit dem Marken stört mich auch umheimlich, was soll das
die Steuerungen sind doch groß und schnell genug das Sie ein
paar Marken mehr verkraften können.
Was für mich das größte Elend ist das ich ein Baustein mit "Fehlern"
am Abend nicht einfach Abspeichern kann und am nächsten Morgen
weiterarbeiten kann. Ich kann erst speichern wenn ich alle Roten
Zeilen gelöscht oder auskommentiert habe.
Könnten die von Siemens nicht einfach den Baustein in der Baustein-
liste zusätzlich Rot kenzeichnen. Dann vergesse ich schon nicht
das dieser Baustein noch bearbeitet werden muss.

gruß helmut
 
Zuletzt bearbeitet:
Also, an der Funktion ändert sch definitiv nichts!

Und meiner Meinung nach ist das Ändern in einige Fällen durchaus gerechtfertigt, z.B. ist
Code:
U   #BOOL1
X   #BOOL2
lt meiner Ansicht einfach nur schlampig programmiert - und es darf zurecht umgewandelt werden. Genauso wie z.B.
Code:
U   #BOOL1
O   #BOOL2
Hier haben wohl einige Programmierer einfach nur Angst, dass der zuvor geschriebene Programmteil das VKE noch nicht abgeschlossen hat, ich sehr auch immer wieder, dass einige Leute am Beginn jeder Verknüpfung noch SET oder CLR reinschreiben, wozu das?

mfg Maxl

Ich mache beides.

Bei mir fängt halt ein neues Netzwerk mit Logiík immer mit UND an, was soll daran schlimm sein, das sind einfach Gewohnheiten. Machmal weiß ich ja noch gar nicht, ob ich mit einem ODER weitermache. :ROFLMAO:

Ein SET bringt für mich in einer langen Reihe von AWL-Anweisungen, z.Bsp. in einem FB mit Sprüngen, ein wenig Struktur und tatsächlich für jeden Betrachter das eindeutige Signal, hier geht ein neuer logischer Abschnitt los.
Auch daran kann ich nichts Verwerfliches sehen. Ansonsten hab ich irgendwann mal ewig nach genau so einem Fehler gesucht, immer frei weg im Spagetticode eines Programmierers.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beim Bausteinvergleich scheint Step 7 zuerst nur den Zeitstempel zu vergleichen.
Dabei wird beim Vergleich auch noch die Bausteinprüfsumme aus der SPS abgefragt, die bei den beiden Versionen auf jeden Fall voneinander abweichen.
Selbst wenn ich beim Bausteinvergleoch "Codevergleich durchführen" anwähle, prüft er zuerst nur den Zeitstempel. Wenn dieser gleich ist, wird nichts weiteres verglichen.

Das finde ich eigentlich viel schlimmer, dass ich die verschiedenen Bausteine außer durch in Augenschein nehmen der Onlineversion nicht feststellen kann.

Man müsste mal einen Baustein mit "gefaktem" Zeitstempel in die SPS schieben, wobei der Programmcode völlig unterschiedlich ist, und dann testen was die SPS macht wenn ich diesen Baustein beobachten will :cool:
 
Kommentare werden entfernt

@Thomas_v2.1 *ACK*

@All
Ob nun eine OR oder XOR-Verknüpfung nicht mit U begonnen werden darf, darüber läßt sich streiten.
Es ergibt ja das gleiche Verknüpfungsergebnis.
Es gab auch SPS, da MUSSTEN Verknüpfungen mit U begonnen werden (z.B. AEG LOGISTAT A020).
In MicroWIN für die S7-200 ist das eindeutiger gelöst, da beginnt eine Verknüpfung mit LD und erst
beim zweiten Operanden steht dann O.
icon14.gif


Code-Optimierungen sind ja eine prima Sache, allerdings nur, wenn ich Step7 extra dazu auffordere.

Der Bug an der ganzen Sache ist der Umstand, daß der Baustein keinen neuen Zeitstempel bekommt
und "Bausteine vergleichen" zunächst NUR die Baustein-Zeitstempel vergleicht. Die Baustein-Prüfsummen
werden NICHT verglichen und deshalb keine Code-Unterschiede gemeldet.
icon13.gif


Noch "lustiger" wird die Zwangs-Optimierung, wenn Zeilenkommentare vorhanden sind. Die werden dann
verschoben oder verschwinden auf Nimmerwiedersehen. Das kann nicht im Sinne des Programmierers sein.
icon13.gif


Beispiel (Ursprungscode ist AWL, die Ansicht wird nach FUP umgestellt):
Code:
U(         //K1
U(         //K2            +---+
O   #IN1   //K3       #IN1-|>=1| +---+
O   #IN2   //K4       #IN2-|   |-| & |
)          //K5            +---+ |   | +---+
U   #IN3   //K6             #IN3-|   |-| & |
)          //K7                  +---+ |   |
U(         //K8                  +---+ |   |  #OUT
O   #IN4   //K9             #IN4-|>=1| |   | +---+
O   #IN5   //K10            #IN5-|   |-|   |-| = |
)          //K11                 +---+ +---+ +---+
=   #OUT   //K12

Erstes Speichern in FUP: Klammern werden umgestellt (Zeilen 6 und 7 getauscht), Zeilenkommentare K6
und K7 sind vertauscht
Code:
U(         //K1
U(         //K2                  +---+
O   #IN1   //K3             #IN1-|>=1| +---+
O   #IN2   //K4             #IN2-|   |-| & |
)          //K5                  +---+ |   |
)          //K6                        |   |
U   #IN3   //K7                   #IN3-|   |
U(         //K8            +---+       |   |  #OUT
O   #IN4   //K9       #IN4-|>=1|       |   | +---+
O   #IN5   //K10      #IN5-|   |-------|   |-| = |
)          //K11           +---+       +---+ +---+
=   #OUT   //K12

Zweites Speichern in FUP: erste U-Klammer wird entfernt, Zeilenkommentare K11 und K12 verschwinden
auf Nimmerwiedersehen, K2 bis K10 werden verschoben
Code:
U(         //K1                  +---+
O   #IN1   //K2             #IN1-|>=1| +---+
O   #IN2   //K3             #IN2-|   |-| & |
)          //K4                  +---+ |   |
U   #IN3   //K5                   #IN3-|   |
U(         //K6            +---+       |   |  #OUT
O   #IN4   //K7       #IN4-|>=1|       |   | +---+
O   #IN5   //K8       #IN5-|   |-------|   |-| = |
)          //K9            +---+       +---+ +---+
=   #OUT   //K10

Dieses Beispiel halte ich übrigens NICHT für "schlampig programmiert", es kann auch nach
Programm-Änderungen so entstanden sein.

Gruß ;-)
PN/DP
 
Also meiner werten Auffassung nach forderst du Step7 höchst bewusst dazu auf etwas zu ändern.

Allen deinen Aktionen geht der Befehl "Ansicht" -> "KOP" ODER "FUP" voran,
und ein nachgeschaltetes Speichern und somit Huckepack ein Übersetzen.
Also selbst wenn Step7 gar nichts ändert, die Erstellsprache ist geändert, so oder so.

Da KOP/FUP sozusagen eine ganz andere Programmiersprache ist, sind Code-Änderungen def. nicht überraschend.
Wobei Änderung eigentlich das falsche Wort ist, die funktionalität bleibt ja vollständig erhalten,
somit finde ich das nichtbemerken per Bausteinvergleich auch nicht so schlimm.
Das einzige was sich gehören würde, das die AWL-Zeilenkommentare bei der Aktion def. gelöscht werden,
da sowas bei KOP/FUP ja ohnehin nicht vorgesehen ist.

Es ist von Siemens hier imho lediglich ein wenig "ungünstig" das sich das ganze im Menü Ansicht befindet,
sinniger wäre hier "Datei" - "Konvertieren" - "AWL .. KOP .. FUP".

Mfg
Manuel
 
unverstandenes Feature?

Es ist von Siemens hier imho lediglich ein wenig "ungünstig" das sich das ganze im Menü Ansicht befindet,
sinniger wäre hier "Datei" - "Konvertieren" - "AWL .. KOP .. FUP".

OK, diese Ansicht kann man teilen (und sich merken).

Das erklärt mir aber noch nicht restlos, wieso in meinem letzten Beispiel zweimaliges Speichern
zwei verschiedene Codevarianten hervorbringt.
Das zweite Speichern ist dann ja quasi "Konvertieren FUP -> FUP".

Jedenfalls sind die "Ansichtsänderungen" oder "Konvertierungen" nicht ganz sauber realisiert
(Kommentare, Zeitstempel).

Gruß
PN/DP
 
Da ich FUP und KOP sowieso nie nehme, habe ich das Problem gar nicht :D
Aber man sieht doch schon, wenn das Programm Klammern entfernt, dass sie einfach überflüssig sind. Einfach das positive daraus ziehen und lernen wie es einfacher geht. :D
Die Klammerdarstellung von FUP auf AWL ist doch wirklich schrecklich, die Klammer wird zwischen ein paar NOP's geschlossen, dass kann doch niemand richtig lesen.
Darum wahrscheinlich auch die Aussage: "AWL ist schwierig". Wenn es sauber geschrieben ist, ist es ganz einfach.
Sind eigentliche die lästigen NOP 0 nach dem übersetzen jetzt auch draußen? Die haben mich schon immer gestört.

Und die Sache mit der Erstabfrage ist doch eigentlich auch klar. Das Netzwerk davor muss natürlich richtig sein und dann ist es egal wie ich beginne, ob mit UND oder ODER!
Gefährlich sind da nur Sprünge über Netzwerke hinweg (schrecklich) aber das geht halt jetzt bei S7, bei S5 ging das nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
mangels Step7 zum Testen im Moment stellt sich mir gerade folgende Frage:
Was Passiert mit dem Code, wenn ich die 1.Zeile zum Testen/brücken auskommentiere
Code:
U IN1
U IN2
O IN3
.
.
.
die beschriebene Ansichtsänderung mit speichen von nem Kollegen vorgenommen wird, und er dann den Kommentar entfernt, um die Originalfunktion wieder zu bekommen? Ist das nur mit dieser genannten Step7 Version so?

Thomas
 
auskommentierte Befehlszeile

Was Passiert mit dem Code, wenn ich die 1.Zeile zum Testen/brücken auskommentiere
Tja, dann hast Du und Dein Kollege die A....karte gezogen.

Ursprungscode AWL und FUP-Ansicht
Code:
                       +---+
U   #IN1          #IN1-| & | +---+
U   #IN2          #IN2-|   |-|>=1|  #OUT
O   #IN3               +---+ |   | +---+
=   #OUT                #IN3-|   |-| = |
                             +---+ +---+

1. Zeile auskommentiert und umschalten zu FUP und wieder AWL
Der Code wird schon ohne Speichern geändert
Code:
//U   #IN1             +---+  #OUT          //U   #IN1
U   #IN2          #IN2-|>=1| +---+          [COLOR="red"]O[/COLOR]   #IN2
O   #IN3          #IN3-|   |-| = |          O   #IN3
=   #OUT               +---+ +---+          =   #OUT

Zurück zu AWL, 1. Zeile wieder aktivieren, Umschalten zu FUP und wieder AWL
Der Code wird schon ohne Speichern geändert
Code:
                       +---+
U   #IN1          #IN1-|>=1|  #OUT          [COLOR="Red"]O[/COLOR]   #IN1
O   #IN2          #IN2-|   | +---+          O   #IN2
O   #IN3          #IN3-|   |-| = |          O   #IN3
=   #OUT               +---+ +---+          =   #OUT

Vor solchen Test-Änderungen sollte der ursprüngliche AWL-Code in den Netzwerk-Kommentar
kopiert werden, damit er später korrekt wiederhergestellt werden kann.

Andere Möglichkeit:
Deaktivieren oder Überbrücken von Operanden durch Hinzufügen von IMMER0/IMMER1-Merkern.
Dann bleibt die Logik erhalten.

Bei komplizierteren Verknüpfungen kann man Glück haben, daß der AWL-Code mit auskommentierten
Befehlszeilen nicht in FUP dargestellt wird.

Sobald der Code in FUP dargestellt wird, ist es schon zu spät.
Bei jedem Umschalten der "Ansicht" im FUP/KOP/AWL-Editor wird der "Rückgängig"-Puffer gelöscht.
Ein Rückgängig-machen ist nur noch über Schließen des Bausteins ohne Speichern möglich.

Ist das nur mit dieser genannten Step7 Version so?
Ich denke, das dürfte in allen Step7-Versionen so passieren.

Gruß
PN/DP
 
Wenn Step7 seine eigenen Regeln ernst nehmen würde, dürfte die U-X-Verknüpfung gar nicht speicherbar sein, sondern müsste immer schön rot aus dem Editor leuchten.
Da Step7 aber nicht das speichert (schreib mal einen FB-Aufruf, speichere dein Werk, lösche den aufgerufenen Baustein und kuck dir dann dein Werk noch mal an), was du im Editor siehst, kann es das auch mal anders übersetzen, als du erwartest.
Wenn du deine Texte unversehrt wiedersehen willst, musst du Quelltexte schreiben und übersetzen.
 
Zurück
Oben