DWord to Array

kai86

Level-1
Beiträge
158
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, kurze Frage was stimmt daran noch nicht? in der Zeile
Array_INDWord AT INDWord : ARRAY[0..3] OF BYTE;
kommt der Fehler, der typ der sicht ist nicht mit dem typ der variablen verträglich.
Code:
FUNCTION F_DWordToArray : Void
VAR_INPUT
    INDWord : DWORD;
    Array_INDWord AT INDWord : ARRAY[0..3] OF BYTE;
END_VAR
VAR_OUTPUT
    DWordToArray : ARRAY[0..3] OF BYTE;
END_VAR
VAR_Temp
    
END_VAR
BEGIN
    DWordToArray[1] := Array_INDWord[1];
    DWordToArray[2] := Array_INDWord[2];
    DWordToArray[3] := Array_INDWord[3];
    DWordToArray[4] := Array_INDWord[4];
END_FUNCTION;
 
Seh ich das richtig, daß du vier DWords in ein Array aus vier Bytes schreiben willst? Das wird aber eng...
 
Hallo,
ich würde sagen, dass es funktioniert, wenn du die richtigen Indexe einträgst - also statt von 1..4 vielleicht lieber 0..3 :rolleyes:
Gruß
LL
 
Der Compiler zeigt ja den Fehler an. Die Maus da drauf und dann "F1":

Beschreibung:

Der Datentyp einer Sicht muss mit dem Datentyp der Variablen kompatibel sein, auf die die Sicht zeigt. Die Variable gibt die Größe der Speicherbereichs vor. Der Speicherbedarf der Sicht darf gleich oder kleiner sein. Darüber hinaus gelten folgende Kombinationsregeln:


Datentyp der
Sicht: Datentyp der Variablen:


Elementar
Zusammen-
gesetzt ANY/
POINTER
FB Deklaration einer Sicht in
VAR, VAR_TEMP, VAR_IN
oder VAR_OUT Elementar Zusammengesetzt ANY/POINTER xx xx x (1) x (1)
Deklaration einer Sicht in
VAR_IN_OUT Elementar ZusammengesetztANY/POINTER x x
FC Deklaration einer Sicht in
VAR oder VAR_TEMP Elementar Zusammengesetzt ANY/POINTER xx xx x x
Deklaration einer Sicht in
VAR_IN, VAR_OUT oder
VAR_IN_OUT Elementar ZusammengesetztANY/POINTER x x
(1) Any_Pointer in VAR_OUT nicht erlaubt.

Leider wird das hier etwas verhackstückt, aber wenn ich das richtig interpretiere, kann in einem FC in einem Var_in die Sicht nur von einem elementarer Typ auf einen elementaren oder von einem zusammengesetzten Typ auf einen zusammengesetzten weisen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
so sieht es aus :
Code:
    DWordToArray[1] := Array_INDWord[1];
    DWordToArray[2] := Array_INDWord[2];
    DWordToArray[3] := Array_INDWord[3];
    DWordToArray[4] := Array_INDWord[4];
und so sollte es aussehen :
Code:
    DWordToArray[[COLOR=red][B]0[/B][/COLOR]] := Array_INDWord[[B][COLOR=red]0[/COLOR][/B]];
    DWordToArray[[B][COLOR=red]1[/COLOR][/B]] := Array_INDWord[[COLOR=red][B]1[/B][/COLOR]];
    DWordToArray[[B][COLOR=red]2[/COLOR][/B]] := Array_INDWord[[COLOR=red][B]2[/B][/COLOR]];
    DWordToArray[[B][COLOR=red]3[/COLOR][/B]] := Array_INDWord[[COLOR=red][B]3[/B][/COLOR]];
... entsprechend der Deklaration deines Code-Beispiels ...

Falls es nicht funktioniert, dann poste doch mal deinen "neuen" Code ...

Gruß
LL
 
Entweder nutzt du im FC den Var-Temp-Bereich für die Sicht, oder du nimmst einen FB statt eines FC!

PS: Nein, Array ist nicht elementar, sondern zusammengesetzt!
 
Der Code sieht nun so aus damit gehts. Danke

Code:
FUNCTION F_DWordToArray : Void
VAR_INPUT
    INDWord : DWORD;
END_VAR
VAR_OUTPUT
    DWordToArray : ARRAY[0..3] OF BYTE;
END_VAR
VAR_TEMP
    TDWord : DWORD;
    Array_TDWord AT TDWord : ARRAY[0..3] OF BYTE;    
END_VAR
BEGIN
    TDWord  := INDWord;
    DWordToArray[0] := Array_TDWord[0];
    DWordToArray[1] := Array_TDWord[1];
    DWordToArray[2] := Array_TDWord[2];
    DWordToArray[3] := Array_TDWord[3];
END_FUNCTION;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich behaupte mal: das array darf nicht als VAR_INPUT deklariert sein und der AT kann auch nur auf ein TEMP gehen

[edit] argh, scheiß nebenbei gearbeite [/edit]
 
Das hatte ich auch gearde herausbekommen. Anscheinend kann man bei einer Function keine derartige AT-Sicht auf eine Eingangsvariable machen sondern muß sie zunächst in den Lokaldaten-Bereich umkopieren ... war mir auch neu ... :rolleyes:
 
Zurück
Oben