Обмен по протоколу ОВЕН использована ф-ция OWEN_GET_REAL, опрос идет и данные получены но возврат функции Complete всегда FALSE!!
Обмен по протоколу ОВЕН использована ф-ция OWEN_GET_REAL, опрос идет и данные получены но возврат функции Complete всегда FALSE!!
ВОТ ПРИМЕР ЧТО НЕ ВЕРНО НАПИСАНО АДРЕС МВА8 32
------
(*Устанавливаем настройки COM-порта*)
IF port_opened=0 THEN
Settings.Port:=com_num; (*номер COM-порта*)
Settings.dwBaudRate:=115200; (*скорость*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
(*Если COM-порт открыт, то переходим к приему и передачи данных *)
IF COM_SERVICE1.Ready THEN
port_opened:=2;
END_IF
IF port_opened=2 THEN (*Удачно проинициализировали*)
(*чтение 8 входов из прибора МВА8 с адресом 16 *)
get_fl_owen(
Enable:=Enabl , (* разрешение работы блока *)
Addr:=addres , (*адрес прибора*)
AddrLen:=A8BIT , (*длина адреса*)
Name:='read' , (*имя параметра, значение которого считываем*)
Index:=65535 , (*индекс параметра*)
RealType:=FLOAT32T , (*тип параметра, значение которого считываем*)
ComHandle:= Settings.Port, (*номер COM-порта*)
TimeOut:=TimeOut , (*Таймаут T#50ms*)
Complete=>cmpl , (* скопировать признак завершения операции *)
Value=>a , (*считанное значение*)
wTime=>wTime , (*значение времени для измерителя*)
Error=> err ); (* скопировать регистр ошибок *)
(*если установлен признак завершения операции, то *)
IF Enabl = FALSE THEN
Enabl := TRUE;
END_IF
(*Если завершен обмен и нет ошибок*)
IF cmpl THEN
IF (err=0) THEN
B[i]:=a; (*присваиваем массиву значение на входе*)
ELSE
Enabl := FALSE;
END_IF;
i:=i+1; (*увеличиваем номер входа*)
addres:=32+i; (*увеличиваем адрес*)
IF (i=8) THEN (*если номер входа меньше 8*)
addres:=32;
i:=0;
END_IF
END_IF
END_IF
Вы не даете FB работать.
Вызывайте ее с ENABLE:= TRUE первый раз и дальше с ENABLE:= FALSE до момента COMPLETE = TRUE
Но у меня прописано
---------------------
get_fl_owen:OWEN_GET_REAL; (*Чтение параметра типа Real*)
COM_SERVICE1: COM_SERVICE;
cmpl: BOOL; (* признак завершения операции *)
err: INT; (*номер ошибки*)
port_opened: BYTE := 0; (*состояние порта*)
Settings: COMSETTINGS;(* настройки последовательного порта *)
com_num: PORTS:=0 (*0 - RS-485, 1 - RS-232*);
TimeOut: TIME:=T#50ms;(*таймаут*)
Enabl: BOOL:=TRUE; (*состояние работы блока*)
wTime: WORD; (*значение времени для измерителя*)
A: REAL; (*считанное значение*)
addres: INT:=32; (*адрес МВА8*)
B: ARRAY [0..7] OF REAL; (*массив для хранения значений входов МВА8*)
i: INT; (*номер входа МВА**)
Это не состояние работы блока!
Это - команда блоку провести считывание. Своего рода триггер.
Помоги чайнику как правильно это сделать!!!
Данный пример я взял как готовый для опроса ПЛК63!!!
Сразу попутно еще один вопрос как прочитать правильно код ошибки с МВА8, например состояние входа ОБРЫВ ДАТЧИКА или НЕТ ДАТЧИКА.
Забудьте про примеры. Они кривые.
Прочитать состояние датчика можно блоком DECODE_FLOAT.
Тоесть как кривые а зачем они тогда!!! Извини я Чайник но пытаю разобратся этом, на работе купили эти ПЛК. А где можно увидеть нормальные примеры и роспись блоков и их параметры как они работают. Например у меня вопрос что значат индекс параметра Index:=65535. Спасибо за ответ.
И еще вопрос может не лепый но хочу задать. После работы ФБ необходимо закрывать порт или не надо.