-> Hier kostenlos registrieren
hallo
Ich habe eine kleine udt (16 bytes) fur Rezept daten in mehrere DB's. Die daten sind als array of udt im DB angebracht.
Ich möchte jetzt alle DB's dursuchen um ein bestimmten Eintrag 'ProductID' zu finden.
Ich bekomme aber 4 Fehler beim compilieren.
Diese adressiereung scheint nicht zu funktionieren WORD_TO_BLOCK_DB(INT_TO_WORD(iDBNR)).Recipes[j].ProductID
wenn ich den ersten zeil der die DB adresseriung ersetze durch einen DB701.Recipes[j].ProductID klapt es aber dann kann ich nicht die adressirung vom DB-bausten indirekt machen.
Geht diese indirekte adressirung vom DB-bausten und array von strukturen in SCL??
/michael
Ich habe eine kleine udt (16 bytes) fur Rezept daten in mehrere DB's. Die daten sind als array of udt im DB angebracht.
Ich möchte jetzt alle DB's dursuchen um ein bestimmten Eintrag 'ProductID' zu finden.
Code:
TYPE UDT6
STRUCT
// Type Description
ProductID :DINT;
Adj_1_0_20 :INT;
Adj_2_20_40 :INT;
Adj_3_40_60 :INT;
Adj_4_60_80 :INT;
Adj_5_80_100 :INT;
Adj_6_OverAll :INT;
END_STRUCT
END_TYPE
DATA_BLOCK DB701
//
// Block Comment ...
//
STRUCT
Recipes :ARRAY[1..4000] OF UDT6;
END_STRUCT
BEGIN
END_DATA_BLOCK
FUNCTION FC700 : VOID
VAR_INPUT
iDBNR_Start : INT;
iDBNR_Slut : INT;
iDW : INT;
ProductID : DINT;
END_VAR
VAR_OUTPUT
FoundDBNR : INT;
FoundRecipeNO : INT;
RecipeFound : BOOL;
RecipeNotFound : BOOL;
END_VAR
VAR_TEMP
iDBNR,j : INT;
END_VAR
RecipeFound := false;
RecipeNotFound := false;
FOR iDBNR:= iDBNR_Start TO iDBNR_Slut BY 1 DO
// We have max 4000 recipes pr DB Block
// Search DB for ProductID
FOR j:= 1 TO 4000 BY 1 DO
// Statement Section
IF ( WORD_TO_BLOCK_DB(INT_TO_WORD(iDBNR)).Recipes[j].ProductID = 0 ) THEN
// ProductID does not exist
FoundDBNR := iDBNR;
FoundRecipeNO := j;
RecipeFound := false;
EXIT;
ELSIF ( WORD_TO_BLOCK_DB(INT_TO_WORD(iDBNR)).Recipes[j].ProductID = ProductID ) THEN
// ProductID found
FoundDBNR := iDBNR;
FoundRecipeNO := j;
RecipeFound := true;
EXIT;
END_IF;
END_FOR; //FOR j:= 1 TO 4000....
END_FOR; //FOR iDBNR:= iDBNR.....
FoundDBNR := 0;
FoundRecipeNO := 0;
RecipeFound := false;
RecipeNotFound := true;
END_FUNCTION
Ich bekomme aber 4 Fehler beim compilieren.
Diese adressiereung scheint nicht zu funktionieren WORD_TO_BLOCK_DB(INT_TO_WORD(iDBNR)).Recipes[j].ProductID
wenn ich den ersten zeil der die DB adresseriung ersetze durch einen DB701.Recipes[j].ProductID klapt es aber dann kann ich nicht die adressirung vom DB-bausten indirekt machen.
Geht diese indirekte adressirung vom DB-bausten und array von strukturen in SCL??
/michael