Показано с 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
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,147

    По умолчанию

    Цитата Сообщение от Серджиус Посмотреть сообщение
    Вы случайно не знаете что ему нужно засунуть, чтобы он проглотил?
    К сожалению, нет. Судя по документации - разницы в обработке "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

Ваши права

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