Показано с 1 по 5 из 5

Тема: Ошибка при записи параметра с помощью библиотеки OwenNet.lib

  1. #1

    По умолчанию Ошибка при записи параметра с помощью библиотеки OwenNet.lib

    Добрый день. Имеется контроллер ПЛК 110-24 [М02] и модуль аналогового ввода МВ110-8А. Пытаюсь записать параметры модуля с помощью библиотеки OwenNet.lib. Паписывает нормально любые числа (в пределах допустимых) с плавающей точкой в параметр "Itrl", кроме 1.0. Операция записи возращается с ошибкой Error = 5.
    Вот код:
    Код:
    FUNCTION_BLOCK WriteParamsToModules
    VAR_INPUT
    	ModuleAddr:WORD; (*Адрес модуля*)
    	ChanelAddr:WORD;		(*Номер канала*)
    	Settings:POINTER TO COMSETTINGS; (*Настройки порта*)
    	in_t: WORD; (*Тип датчика*)
     	in_Fd:WORD;       	(*Постоянная времени цифрового фильтра*)
    	Itrl:REAL;			(*Период опроса датчика*)
    	in_SH: REAL;		(*Сдвиг характеристики датчика*)
    	in_SL:REAL;		(*Наклон характеристики датчика*)
    	in_FG:REAL;		(*Полоса цифрового фильтра*)
    	Ain_L:REAL;	(*Нижнее значение параметра, измеряемое активным датчиком*)
    	Ain_H:REAL;	(*Верхнее значение параметра, измеряемое активным датчиком*)
    	dP:	WORD	;	(*Смещение десятичной точки*)
    END_VAR
    VAR_OUTPUT
    	Done:BOOL; 	(*Запись завершена*)
    END_VAR
    VAR_IN_OUT
    	paramNum:INT;
    END_VAR
    VAR
    	Se:COMSETTINGS;
    	TimeOut:TIME:= t#50ms;
    
    	set_di_owen_type:OWEN_SET_DINT; 	(*Тип датчика*)
    	set_di_owen_Fd:OWEN_SET_DINT;	(*Постоянная времени цифрового фильтра*)
    	set_fl_owen_Itrl:OWEN_SET_REAL; 	(*Период опроса датчика*)
    	set_fl_owen_SH:OWEN_SET_REAL;	(*Сдвиг характеристики датчика*)
    	set_fl_owen_SL:OWEN_SET_REAL;	(*Наклон характеристики датчика*)
    	set_fl_owen_FG:OWEN_SET_REAL;	(*Полоса цифрового фильтра*)
    	set_fl_owen_L:OWEN_SET_REAL;		(*Нижнее значение параметра, измеряемое активным датчиком*)
    	set_fl_owen_H:OWEN_SET_REAL;		(*Верхнее значение параметра, измеряемое активным датчиком*)
    	set_di_owen_dP:OWEN_SET_DINT;	(*Смещение десятичной точки*)
    
    	cmpl: BOOL; 	(* признак завершения операции 1*)
    	err: INT; 		(*номер ошибки 1*)
    
    	Enable:BOOL:=TRUE;
    
    	tempValInt:DINT;
    	tempValReal:REAL;
    
    
    
    END_VAR
    
    
    Done:= FALSE;
    
    CASE  paramNum OF
    (*Тип датчика*)
    0:
    	set_di_owen_type(
    	Enable:= Enable,
    	Addr:= ModuleAddr,
    	AddrLen:= A8BIT,
    	Name:= 'in-t',
    	Index:= ChanelAddr,
    	IntType:= UINT_FRM,
    	Value:= in_t,
    	ComHandle:= Settings^.Port,
    	TimeOut:= TimeOut,
    	Complete=> cmpl,
    	Error=> err);
    
    	(*если установлен признак завершения операции, то *)
    	IF Enable = FALSE THEN
    		Enable := TRUE;
    	END_IF
    	(*Если завершен обмен и нет ошибок*)
    	IF cmpl THEN
    		IF (err=0) THEN
    			paramNum:=1;
    			cmpl:= FALSE;
    		ELSE
    			Enable:= FALSE;
    		END_IF
    	END_IF
    
    (*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*)
    (*Постоянная времени цифрового фильтра*)
    1:
    	set_di_owen_Fd(
    	Enable:= Enable,
    	Addr:= ModuleAddr,
    	AddrLen:= A8BIT,
    	Name:= 'in.Fd',
    	Index:= ChanelAddr,
    	IntType:= UINT_FRM,
    	Value:= in_Fd,
    	ComHandle:= Settings^.Port,
    	TimeOut:= TimeOut,
    	Complete=> cmpl,
    	Error=> err);
    
    	(*если установлен признак завершения операции, то *)
    	IF Enable = FALSE THEN
    		Enable := TRUE;
    	END_IF
    	(*Если завершен обмен и нет ошибок*)
    	IF cmpl THEN
    		IF (err<>0) THEN
    			Enable:= FALSE;
    		END_IF
    	END_IF
    
    	IF cmpl = TRUE AND err=0 THEN
    		paramNum:=2;
    		cmpl:= FALSE;
    	END_IF
    (*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*)
    (*Период опроса датчика*)
    2:
    	set_fl_owen_Itrl(
    	Enable:= Enable,
    	Addr:= ModuleAddr,
    	AddrLen:= A8BIT,
    	Name:= 'Itrl',
    	Index:= ChanelAddr,
    	RealType:=3, (*FIX_BIN,*)
    	Value:= Itrl,
    	ComHandle:= Settings^.Port,
    	TimeOut:= TimeOut,
    	Complete=> cmpl,
    	Error=> err);
    
    
    	(*если установлен признак завершения операции, то *)
    	IF Enable = FALSE THEN
    		Enable := TRUE;
    	END_IF
    	(*Если завершен обмен и нет ошибок*)
    	IF cmpl THEN
    		IF (err<>0) THEN
    			Enable:= FALSE;
    		END_IF
    	END_IF
    
    	IF cmpl = TRUE AND err=0 THEN
    		paramNum:=3;
    		cmpl:= FALSE;
    	END_IF
    (*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*)
    (*Сдвиг характеристики датчика*)
    3:
    	set_fl_owen_SH(
    	Enable:= Enable,
    	Addr:= ModuleAddr,
    	AddrLen:= A8BIT,
    	Name:='in.SH',
    	Index:= ChanelAddr,
    	RealType:= FIX_BIN,
    	Value:= in_SH,
    	ComHandle:= Settings^.Port,
    	TimeOut:= TimeOut,
    	Complete=> cmpl,
    	Error=> err);
    
    
    	(*если установлен признак завершения операции, то *)
    	IF Enable = FALSE THEN
    		Enable := TRUE;
    	END_IF
    	(*Если завершен обмен и нет ошибок*)
    	IF cmpl THEN
    		IF (err<>0) THEN
    			Enable:= FALSE;
    		END_IF
    	END_IF
    	IF cmpl = TRUE AND err=0 THEN
    		paramNum:=4;	(*paramNum:=4;*)
    		cmpl:= FALSE;
    	END_IF
    (*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*)
    (*Наклон характеристики датчика*)
    4:
    	set_fl_owen_SL(
    	Enable:= Enable,
    	Addr:= ModuleAddr,
    	AddrLen:= A8BIT,
    	Name:= 'in.SL',
    	Index:= ChanelAddr,
    	RealType:= 3,	(*FIX_BIN*)
    	Value:=in_SL, (*in_SL*)
    	ComHandle:= Settings^.Port,
    	TimeOut:= TimeOut,
    	Complete=> cmpl,
    	Error=> err);
    
    	(*если установлен признак завершения операции, то *)
    	IF Enable = FALSE THEN
    		Enable := TRUE;
    	END_IF
    	(*Если завершен обмен и нет ошибок*)
    	IF cmpl THEN
    		IF (err<>0) THEN
    			Enable:= FALSE;
    		END_IF
    	END_IF
    
    	IF cmpl = TRUE AND err=0 THEN
    		paramNum:=5;
    	cmpl:= FALSE;
    	END_IF
    (*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*)
    (*Полоса цифрового фильтра*)
    5:
    	set_fl_owen_FG(
    	Enable:= Enable,
    	Addr:= ModuleAddr,
    	AddrLen:= A8BIT,
    	Name:= 'in.FG',
    	Index:= ChanelAddr,
    	RealType:= FIX_BIN,
    	Value:= in_FG,
    	ComHandle:= Settings^.Port,
    	TimeOut:= TimeOut,
    	Complete=> cmpl,
    	Error=> err);
    
    
    	(*если установлен признак завершения операции, то *)
    	IF Enable = FALSE THEN
    		Enable := TRUE;
    	END_IF
    	(*Если завершен обмен и нет ошибок*)
    	IF cmpl THEN
    		IF (err<>0) THEN
    			Enable:= FALSE;
    		END_IF
    	END_IF
    
    	IF cmpl = TRUE AND err=0 THEN
    		paramNum:=6;
    		cmpl:= FALSE;
    		err:= -1;
    	END_IF
    (*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*)
    (*Нижнее значение параметра, измеряемое активным датчиком*)
    6:
    	set_fl_owen_L(
    	Enable:= Enable,
    	Addr:= ModuleAddr,
    	AddrLen:= A8BIT,
    	Name:= 'Ain.L',
    	Index:= ChanelAddr,
    	RealType:= FIX_BIN,
    	Value:= Ain_L,
    	ComHandle:= Settings^.Port,
    	TimeOut:= TimeOut,
    	Complete=> cmpl,
    	Error=> err);
    
    
    	(*если установлен признак завершения операции, то *)
    	IF Enable = FALSE THEN
    		Enable := TRUE;
    	END_IF
    	(*Если завершен обмен и нет ошибок*)
    	IF cmpl THEN
    		IF (err<>0) THEN
    			Enable:= FALSE;
    		END_IF
    	END_IF
    
    	IF cmpl = TRUE AND err=0 THEN
    		paramNum:=7;
    		cmpl:= FALSE;
    		err:= -1;
    	END_IF
    (*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*)
    (*Верхнее значение параметра, измеряемое активным датчиком*)
    7:
    	set_fl_owen_H(
    	Enable:= Enable,
    	Addr:= ModuleAddr,
    	AddrLen:= A8BIT,
    	Name:=  'Ain.H',
    	Index:= ChanelAddr,
    	RealType:= FIX_BIN,
    	Value:= Ain_H,
    	ComHandle:= Settings^.Port,
    	TimeOut:= TimeOut,
    	Complete=> cmpl,
    	Error=> err);
    
    	(*если установлен признак завершения операции, то *)
    	IF Enable = FALSE THEN
    		Enable := TRUE;
    	END_IF
    	(*Если завершен обмен и нет ошибок*)
    	IF cmpl THEN
    		IF (err<>0) THEN
    			Enable:= FALSE;
    		END_IF
    	END_IF
    
    	IF cmpl = TRUE AND err=0 THEN
    		paramNum:=8;
    		cmpl:= FALSE;
    		err:= -1;
    	END_IF
    (*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*)
    (*Смещение десятичной точки*)
    8:
    	set_di_owen_dP(
    	Enable:= Enable,
    	Addr:= ModuleAddr,
    	AddrLen:= A8BIT,
    	Name:= 'dP',
    	Index:= ChanelAddr,
    	IntType:= UINT_FRM,
    	Value:= dP,
    	ComHandle:= Settings^.Port,
    	TimeOut:= TimeOut,
    	Complete=> cmpl,
    	Error=> err);
    
    
    	(*если установлен признак завершения операции, то *)
    	IF Enable = FALSE THEN
    		Enable := TRUE;
    	END_IF
    	(*Если завершен обмен и нет ошибок*)
    	IF cmpl THEN
    		IF (err<>0) THEN
    			Enable:= FALSE;
    		END_IF
    	END_IF
    
    	IF cmpl = TRUE AND err=0 THEN
    		paramNum:=9;
    	END_IF
    ELSE
    	(*Если все прошло успешно, снимаем команду на чтение и ставим в очередь на 0*)
    	IF paramNum = 9 THEN ReadWriteOwen:= 0; paramNum:= 0; Done:= TRUE;  END_IF;
    	;
    END_CASE
    в RealType пробовал ставить FIX_BIN, FLOAT32, FIX_BCD. Результат не меняется. Может кто-нибудь сталкивался с таким?

  2. #2

  3. #3

    По умолчанию

    Благодарю за помощь. С параметром "Itrl" всё получилось, а вот с параметром "in.SL" этот фокус не проходит. всё равно возвращается Error = 5. Вообще в параметр "in.SL" не пишется никакое число (0,9; 0,95; 1,0; 1,1) даже функцией OWEN_SET_REAL. Всегда возвращается Error = 5. Вы случайно не знаете что ему нужно засунуть, чтобы он проглотил?

  4. #4

    По умолчанию

    Цитата Сообщение от Серджиус Посмотреть сообщение
    Вы случайно не знаете что ему нужно засунуть, чтобы он проглотил?
    К сожалению, нет. Судя по документации - разницы в обработке "Itrl" и "in.SL" быть не должно (типы данных одинаковые, отличаются только диапазоны).
    Напишите, пожалуйста, на support@owen.ru - тогда сформируется официальная заявка и будет возможность привлечь сотрудника техподдержки для проведения исследования по этому вопросу.

  5. #5

    По умолчанию

    Спасибо за помощь.

Похожие темы

  1. Порт библиотеки OwenNet (протокол ОВЕН) на ПЛК Simatic S7-1200 и S7-1500
    от f-kons в разделе Помощь Разработчикам
    Ответов: 3
    Последнее сообщение: 02.03.2018, 09:38
  2. Использование OwenNet и библиотеки SysCom
    от MasterDarius в разделе СПК1xx (архив)
    Ответов: 16
    Последнее сообщение: 13.02.2018, 17:28
  3. Ответов: 1
    Последнее сообщение: 21.04.2015, 18:25
  4. Ответов: 1
    Последнее сообщение: 21.04.2015, 18:25
  5. Библиотеки MODBUS.LIB и OWENNET.LIB
    от desperadoes в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 30.01.2014, 19:15

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •