Step 7 Var_OUT (FB) beschreibt nicht das DBD am aufrufenden Baustein

Kapitaen31

Level-1
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich habe folgendes Problem:

im OB1 rufe ich einen FB mit Instanz DB auf. Den FB selber habe ich nur mit Variablen IN / OUT / INOUT programmiert. Somit gebe ich die EA´s im OB1 für diesen Baustein an.

Im FB habe ich ein Variable (DWORD INOUT) deklariert, welches vom OB1 mit einem DB3.DBD40 versorgt wird.
Nun setze ich über = L4.6 die einzelnen Bits im FB von der Variable. Leider wird kein Datenbausteinbit im OB1 gesetzt. Warum nicht? Was mache ich falsch?

Kann mir einer dazu etwas schreiben... das wäre echt nett. ;)
Gruß
Andi
 
"= L4.6" schreibt in TEMP.

Wenn Du ein Bit in einem Word setzen willst, dann solltest Du das Bit sauber mittels OR-Verknüpfung mit einer Bitmaske setzen:
Code:
L  #IO_Word
OW W#16#40
T  #IO_Word

oder eine Struktur in TEMP nutzen, welche aus BOOLs besteht.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"= L4.6" schreibt in TEMP.

Das heisst mit INOUT bin ich ja falsch.... mhhh... ich dachte mit L4.6 komme ich auch darauf... weil in der Deklarationstabelle gibt er für diese Variable die Anfangsadresse 4.0 an.... (Für das gesamte DWORD)


Wenn Du ein Bit in einem Word setzen willst, dann solltest Du das Bit sauber mittels OR-Verknüpfung mit einer Bitmaske setzen:
Code:
L  #IO_Word
OW W#16#40
T  #IO_Word

oder eine Struktur in TEMP nutzen, welche aus BOOLs besteht.

Harald


Mhhh.... ich bin gerade am Überlegen....
Aber die TEMPs kann ich ja nicht am aufrufenden Baustein beschalten. Dann muß ich ja wieder einen Umweg über andere Variablen machen.
Andi
 
Zuletzt bearbeitet:
Nachtrag zur TEMP-Struktur: etwa so, aber Vorsicht, bei Multiinstanzen muß man bei solchen Schweinereien auch noch das AR2 beachten. (Nachtrag: nicht bei Adressen in TEMP, sondern nur wenn man indirekt auf die Instanz zugreift)

Harald
 
Zuletzt bearbeitet:
ich dachte mit L4.6 komme ich auch darauf... weil in der Deklarationstabelle gibt er für diese Variable die Anfangsadresse 4.0 an.... (Für das gesamte DWORD)
Mit "= DIX4.6" hättest Du das gewünschte Bit "getroffen"... so hat man sowas im vorigen Jahrhundert programmiert. Heutzutage versucht man das so weit wie möglich symbolisch zu programmieren. Eine AT-Sicht wäre perfekt dafür, doch die gibt es nicht in Step7-classic-AWL. Man kann aber in TEMP eine Struktur aus 16 BOOL anlegen (oder ein BOOL-Array) und das Word auf diese Struktur kopieren, auf die einzelnen Bits symbolisch zugreifen, und am Ende wieder als Word zurückkopieren (siehe den Link in Beitrag #4).


Aber die TEMPs kann ich ja nicht am aufrufenden Baustein beschalten. Dann muß ich ja wieder einen Umweg über andere Variablen machen.
Hmm, hier kann ich Dir nicht folgen wie Du das meinst... :confused:

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit "= DIX4.6" hättest Du das gewünschte Bit "getroffen"... so hat man sowas im vorigen Jahrhundert programmiert. Heutzutage versucht man das so weit wie möglich symbolisch zu programmieren. Eine AT-Sicht wäre perfekt dafür, doch die gibt es nicht in Step7-classic-AWL. Man kann aber in TEMP eine Struktur aus 16 BOOL anlegen (oder ein BOOL-Array) und das Word auf diese Struktur kopieren, auf die einzelnen Bits symbolisch zugreifen, und am Ende wieder als Word zurückkopieren (siehe den Link in Beitrag #4).



Hmm, hier kann ich Dir nicht folgen wie Du das meinst... :confused:

Harald

Ich meinte genau das, was du darüber geschrieben hast... Sorry, wenn ich es schlecht beschrieben habe...

Andreas
 
Zurück
Oben