Probleme DB Zugriff mit SCL

chstad

Level-1
Beiträge
30
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

kann mir jemand sagen warum ich die folgende Fehlermeldung in SCL bekomme:

Ungültiger Datentyp

bei folgenden Programmzeilen:

TempCount:=DB1.DD20;
DB1.DD20:=DB1.DD20 + diAnzahl;

Das Datenfeld im DB1 ab Adresse 20 ist als DINT deklariert. Die beiden Variablen TempCount und diAnzahl sind im lokalen Baustein ebenfalls DINT.


Danke schon im Voraus für Eure Hilfe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du DD lädst, dann wird das immer und grundsätzlich als DWORD geladen.

Folglich brauchst du also einen Typecast:
TempCount:= DWORD_TO_DINT(DB1.DD20);
DB1.DD20:=DB1.DD20 + DINT_TO_DWORD(diAnzahl);

Mit DD lädst du hart das entsprechende Doppelwort, da das ganze nich symbolisch ist,
wird auch der dahinterstehende Datentyp nicht beachtet.

Evtl. würde sich ja sowas anbiete, du lädst nicht DB1.DD20 sondern Werte.Zaehler ... dann klappts auch mit dem Datentyp.

@Nordischerjung
In SCL heißt das wirklich so ...

Mfg
Manuel
 
Hallo, ich hab einfach mal noch ne Variable verwendet, das wird dann aber ohne Fehler übersetzt.
Code:
FUNCTION FC1: VOID

VAR
 TempCount: DINT;
 diAnzahl: DINT;
 Summe: DINT;
END_VAR
 
   
TempCount:= DWORD_TO_DINT (DB1.DD0);
Summe:= DWORD_TO_DINT (DB1.DD0) + diAnzahl;

END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
TempCount:= DWORD_TO_DINT(DB1.DD20);
DB1.DD20:=DB1.DD20 + DINT_TO_DWORD(diAnzahl);

... besser wäre auch :
Code:
[I]TempCount := DWORD_TO_DINT(DB1.DD20) ;[/I]
[I]DB1.DD20 := DINT_TO_DWORD(DWORD_TO_DINT(DB1.DD20) + diAnzahl) ;[/I]
mit den BYTE, WORD und DWORD rechnet SCL nicht so gerne ... ;)

Gruß
LL
 
Zurück
Oben