[?+]: Доступ к параметрам DB из SCL

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
kep4uk
Posts: 29
Joined: Fri Nov 19, 2010 8:41 am
Location: Russia

[?+]: Доступ к параметрам DB из SCL

Post by kep4uk »

В SCL программе требуется читать/записывать во внешний DB значения REAL.
Опуская все лишнее, имею следующее:

Code: Select all

FUNCTION_BLOCK FB100
VAR_INPUT
  PTR : INT ;
  DB_NBR : BLOCK_DB ;    //data block number
END_VAR
VAR_OUTPUT
  OUTV : REAL ;    //output variable
END_VAR
BEGIN
  OUTV:=DB_NBR.DD[PTR*4]; // тут не работает
END_FUNCTION_BLOCK
И сам DB :

Code: Select all

DATA_BLOCK DB100
  STRUCT     
    TEMP_VAR : ARRAY [1 .. 5] OF REAL;     
  END_STRUCT
BEGIN
END_DATA_BLOCK
Собственно это все не работает :) как быть?
kep4uk
Posts: 29
Joined: Fri Nov 19, 2010 8:41 am
Location: Russia

Re: [?]: Доступ к параметрам DB из SCL

Post by kep4uk »

Блин, все работает :)
Оказывается функции DWORD_TO_REAL и REAL_TO_DWORD - копируют поля побитно, т.е. ниче не округляется. Юзаем их и все! (sorry)
AndreyUA
Posts: 11
Joined: Tue Sep 28, 2010 7:39 am

Re: [?+]: Доступ к параметрам DB из SCL

Post by AndreyUA »

Кстати, недавно тоже понадобилось читать и писать в DB

Code: Select all

FUNCTION FC600: BOOL
TITLE = 'CopyRecipeFromDB600'

VAR_INPUT
RecipeNumberFromHMI:INT;
END_VAR

VAR_IN_OUT
 
END_VAR

VAR_OUTPUT
 
END_VAR

IF RecipeNumberFromHMI>0 AND RecipeNumberFromHMI<99 THEN

   DB601.DD4:= WORD_TO_BLOCK_DB (600).DD[RecipeNumberFromHMI*4];
ELSE
 FC600:=FALSE;
END_IF;
END_FUNCTION

FUNCTION FC601: BOOL
TITLE = 'CopyParameterfromHMItoDB600'

VAR_INPUT
ParSlideAdj:REAL;
RecipeNumber:INT;
END_VAR

VAR_IN_OUT
 
END_VAR

VAR_OUTPUT
 
END_VAR

IF RecipeNumber>0 
AND RecipeNumber<99 
AND REAL_TO_INT(ParSlideAdj)>=1000 
AND REAL_TO_INT(ParSlideAdj)<1500
 THEN

   WORD_TO_BLOCK_DB (600).DD[RecipeNumber*4]:=REAL_TO_DWORD(ParSlideAdj);
ELSE
 FC601:=FALSE;
END_IF;
END_FUNCTION