indirekte Adressierung in SCL

BiBi

Level-2
Beiträge
131
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte in SCL Datenbaustein und Datenwort indirekt adressieren.
Mit den hier gefundenen Infos und der Hilfe im Editor klappt es aber nicht.
Vielleicht könnt Ihr mir weiterhelfen.

Ich habe folgenden Code:

Code:
VAR_INPUT
iDW_Zeiger       : INT;
iDBNR              : INT;
iMessMittelWert : INT;
END_VAR;
 
 
DB11.DW[iDW_Zeiger] := iMessMittelWert;
 
WORD_TO_BLOCK_DB[iDBNR].DW[iDW_Zeiger] := iMessMittelWert;
 
DATEN.DW[iDW_Zeiger] := iMessMittelWert;

Egal welche Zeile ich nutze, es kommt immer der Fehler
"Ungültiger Datentyp" und der Cursor steht hinter iMessMittelWert.

Ich bin momentan mit meinem Latein am Ende.

Weiss einer warum der Compiler diese Zeilen anmeckert?:confused:

So funktioniert der Code in allen 3 Zeilen:

Code:
VAR_INPUT
iDW_Zeiger       : INT;
iDBNR              : INT;
iMessMittelWert : INT;
DATEN             : BLOCK_DB;
END_VAR;
 
 
DB11.DW[iDW_Zeiger] := INT_TO_WORD(iMessMittelWert);
 
WORD_TO_BLOCK_DB(INT_TO_WORD(iDBNR)).DW[iDW_Zeiger] := INT_TO_WORD(iMessMittelWert);
 
DATEN.DW[iDW_Zeiger] := INT_TO_WORD(iMessMittelWert);



Gruß
BiBi
 
Zuletzt bearbeitet:
Hallo,
warum Beispiel 1 nicht funktioniert weiß ich auch nicht. Sollte so gehen.
In Beispiel 2 verwendest du den Befehl "WORD_TO_BLOCK_DB" und hast als Parameter einen Integer angegeben. "iDBNR" sollte hier vom Typ WORD sein.
In Beispiel 3 muss "DATEN" vom Typ "BLOCK_DB" sein. Aus deiner Deklaration geht aber nicht hervor wer oder was Daten ist.

Das Beispiel 2 bzw. 3 setze ich in meinen Applikationen auch ein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachsatz

Man konnte das aus deinem Listing nicht erkennen :
Das ganze sollte so anfangen :
Code:
FUNCTION FC169 : VOID

VAR_INPUT
 deine Variablen
END_VAR ;
 
BEGIN
  dein Programm
END_FUNCTION

Nicht das es daran liegt ...
 
Beispiel 1 geht so
Code:
DB11.DW[iDW_Zeiger] := INT_TO_WORD(iMessMittelWert);
Beispiel 2 geht so:
Code:
WORD_TO_BLOCK_DB(INT_TO_WORD(iDBNR)).DW[iDW_Zeiger] := INT_TO_WORD(iMessMittelWert);
Und ich denke das Beispiel 3so geht, wobei ich nicht weiß was hinter dem Symbol Daten steckt....
Code:
DATEN.DW[iDW_Zeiger] := INT_TO_WORD(iMessMittelWert);
 
Zuletzt bearbeitet:
... stimmt, da hast du recht. War mir gar nicht aufgefallen. Ich habe es sogar extra bei mir nachgesehen. Mache ich auch so ...
 
@Alle

Erstmal Danke für Eure Tipps.

Grundsätlich funktionieren alle 3 Zeilen. Mein Fehler war, dass ich
die INT Variable nicht in WORD gewandel habe. Nach Umwandlung
funktioniert die indirekte Adressierung wie gewünscht.:)

Daten war als BLOCK_DB ein INPUT Parameter.

Gruß
BiBi
 
Zurück
Oben