PDA

Просмотр полной версии : ПЛК63 +МВА8



CheeryNick
25.03.2012, 13:21
Обмен по протоколу ОВЕН использована ф-ция OWEN_GET_REAL, опрос идет и данные получены но возврат функции Complete всегда FALSE!!:mad:

CheeryNick
25.03.2012, 13:22
ВОТ ПРИМЕР ЧТО НЕ ВЕРНО НАПИСАНО АДРЕС МВА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

ASo
25.03.2012, 13:29
Вы не даете FB работать.
Вызывайте ее с ENABLE:= TRUE первый раз и дальше с ENABLE:= FALSE до момента COMPLETE = TRUE

CheeryNick
25.03.2012, 13:36
Но у меня прописано
---------------------
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; (*номер входа МВА**)

ASo
25.03.2012, 13:40
Это не состояние работы блока!
Это - команда блоку провести считывание. Своего рода триггер.

CheeryNick
25.03.2012, 13:43
Помоги чайнику как правильно это сделать!!!:confused:

CheeryNick
25.03.2012, 13:47
Данный пример я взял как готовый для опроса ПЛК63!!!
Сразу попутно еще один вопрос как прочитать правильно код ошибки с МВА8, например состояние входа ОБРЫВ ДАТЧИКА или НЕТ ДАТЧИКА.

ASo
25.03.2012, 14:04
Забудьте про примеры. Они кривые.
Прочитать состояние датчика можно блоком DECODE_FLOAT.

CheeryNick
25.03.2012, 14:24
Тоесть как кривые а зачем они тогда!!! Извини я Чайник но пытаю разобратся этом, на работе купили эти ПЛК. А где можно увидеть нормальные примеры и роспись блоков и их параметры как они работают. Например у меня вопрос что значат индекс параметра Index:=65535. Спасибо за ответ.

CheeryNick
25.03.2012, 15:10
И еще вопрос может не лепый но хочу задать. После работы ФБ необходимо закрывать порт или не надо.