Step 7 Merker vs DBX

Zuviel Werbung?
-> Hier kostenlos registrieren
An deiner Stelle würde ich einfach die S7 rausschmeißen
und eine S5 verbauen. Dann hast du am Sonntag Zeit um
auf den Leinenweber Markt zu gehen.

Ich fahr jetzt auch Arbeiten.


Hätte ich ja sofort gemacht aber das Teil was du mir mal verkaufst hast geht nicht mehr......
 
Zuviel Werbung?
-> Hier kostenlos registrieren
:ROFLMAO: ... dann sag mit warum es mit einem Merker geht und einem DBX nicht :D
Wie am MC7-Code im Beitrag #2 von Manuel zu sehen ist, wird die Parameterübergabe an FC unterschiedlich gehandelt, je nachdem welcher Aktualoperand außen angeschaltet ist.

  • wenn der Aktualparameter aus E/A/M/PE/PA ist, dann wird ein Pointer auf die original-Variable übergeben - ein Ändern des Wertes der Variable erfolgt nur (und zwar sofort!), wenn der FC auf den Ausgang (also die angeschaltete Variable) schreibt.
  • wenn der Aktualparameter aus DB ist, dann wird ein Pointer auf eine lokale TEMP-Variable übergeben und nach der FC-Rückkehr der Wert der TEMP-Variable in die angeschaltete original DB-Variable kopiert - es wird immer der (vorher nicht initialisierte!) Wert der TEMP-Variable in die DB-Variable kopiert, egal ob der FC auf seinen Ausgang geschrieben hat oder nicht. Es ist äußerst wichtig, daß der FC immer auf seinen Ausgang schreibt!
siehe Step7 Hilfe zu AWL: Parameterübergabe


hucki,
das ist kein Anfängerfehler, sondern ein Fehler wie gemacht für alte Hasen.
In den guten alten S5-Zeiten war es nämlich egal ob IN oder OUT. Das war damals nur eine rein grafische Geschichte.

Wenn ich mich nicht täusche, dann schmeisst einem TIA sogar mittlerweile eine Fehlermeldung bei sowas um die Ohren?
Ist es bei S7 und E/A/M.. immer noch. Weil ja ein Pointer auf die original-Variable übergeben wird, kann der Wert gelesen und geschrieben werden, unabhängig von der Deklaration als IN oder OUT. Es liegt am Compiler, ob der von der Deklaration abweichende Zugriffe ohne Meckern zulässt.

Bei Alex ist der Fehler imho aber eher in die Kategorie "Anfängerfehler" einzuordnen, weil er verletzt die einfache Regel, daß in FC den OUT-Parametern immer etwas zugewiesen werden soll. Unabhängig davon, was außen angeschaltet ist.

Harald
 
Naja, mit DBX würde es schon auch funktionieren ... wenn auch dann sehr dirty, und unter ein paar vorraussetzungen ;)

AUF DB10
Call "LiLa"
signal_out := DBX0.0

Bedingt natürlich, das innerhalb des FCs der Inhalt des DB-Registers nicht verändert wird, oder unmittelbar vor der Zuweisung wiederhergestellt wird.
Natürlich sollte dann auch für alle Parameter ein und derselbe DB Verwendung finden.

Also wenn schon S5-Style dann richtig und vollumfänglich.

Mfg
Manuel
 
Anfängerfehler hin oder her. Mit so was will ich mich gar nicht beschäftigen. Wenn da was falsch sein sollte muss mir das der Editor melden :) ...

und wer ist dieser Alex ? :ROFLMAO:ROFLMAO:ROFLMAO:
 
Zurück
Oben