// Get offset in the instant DB
TAR2
SLD 8
SRD 8
T #Offset
L P##IA_Interface
L #Offset
+D
LAR1
L DIB [ AR1 , P#7.0 ]
L B#16#7
UW
T #S_ByteT
// get start adress of the device interface
L DIW [ AR1 , P#8.0 ]
T #S_WordT
SRW 3
T #S_WordT
L #S_ByteT
SLW 13
L #S_WordT
+I
ITD
T #T_StartAdres
// get DB number of the interface interface
L DIW [ AR1 , P#4.0 ]
T #DBNumber
#temp_Datentyp := WORD_TO_INT(AT_Variable[0].%B0);
#temp_DB_Nummer := WORD_TO_INT(AT_Variable[2]);
#temp_Speicherbereich := WORD_TO_INT(AT_Variable[3].%B1);
#temp_Byteadresse := WORD_TO_INT(SHR_WORD(IN := AT_Variable[4], N := 3));
#temp_Bitadresse := WORD_TO_INT(SHR_WORD(IN := SHL_WORD(IN := #AT_Variable[4], N := 13), N := 13));
Na, ganz so easy geht es dann doch nicht - Byteadresse wird falsch ermittelt. Und Bitadresse ist viel zu umständlich gelöst.Anschließend kannst du die Elemente in SCL ganz normal mit etwas Bit-Schieberei auseinander nehmen:
Code:#temp_Datentyp := WORD_TO_INT(AT_Variable[0].%B0); #temp_DB_Nummer := WORD_TO_INT(AT_Variable[2]); #temp_Speicherbereich := WORD_TO_INT(AT_Variable[3].%B1); [COLOR="#FF0000"]#temp_Byteadresse := WORD_TO_INT(SHR_WORD(IN := AT_Variable[4], N := 3));[/COLOR] #temp_Bitadresse := WORD_TO_INT(SHR_WORD(IN := SHL_WORD(IN := #AT_Variable[4], N := 13), N := 13));
Na, ganz so easy geht es dann doch nicht - Byteadresse wird falsch ermittelt. Und Bitadresse ist viel zu umständlich gelöst.
ABER: Wenn du es eh gerade umschreibst , dann mach es doch gleich vernünftig :wink: und löse dich von dem alten Gedankengut.
Wenn du es jetzt eh endlich umschreibst, dann mach es doch endlich vernünftig und löse dich von den uralten Konzepten, die noch nie gut waren.
Na, ganz so easy geht es dann doch nicht - Byteadresse wird falsch ermittelt. Und Bitadresse ist viel zu umständlich gelöst.
@C7633
Der ANY der zeigt doch bestimmt auf irgendwas strukturiertes? Dann erkläre doch die Struktur zu einem Datentyp, dann kannst Du ganz ohne rumbasteln in- und außerhalb des Bausteins symbolisch mit dem Übergabeparameter arbeiten.
Oder soll da Schweinkramaus der Programmier-Steinzeit in dieses Jahrtausend übernommen werden?
Harald
Moin,
erst in der DB_Any-Variable bei Remanenz "im IDB setzen" einstellen.
Dann in der darauf folgenden Variable als Typ "AT" auswählen. Diese "Folge-Variable" überlagert dann die darüber stehende. Geht aber alles nur bei FBs und dort nur im In, Out, In/Out und Static-Teil.
Anhang anzeigen 47315
Na, ganz so easy geht es dann doch nicht - Byteadresse wird falsch ermittelt. Und Bitadresse ist viel zu umständlich gelöst.
@C7633
Der ANY der zeigt doch bestimmt auf irgendwas strukturiertes? Dann erkläre doch die Struktur zu einem Datentyp, dann kannst Du ganz ohne rumbasteln in- und außerhalb des Bausteins symbolisch mit dem Übergabeparameter arbeiten.
Oder soll da Schweinkramaus der Programmier-Steinzeit in dieses Jahrtausend übernommen werden?
Harald
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?