PDA

Просмотр полной версии : Обрыв с косяком на МВА



Anton_Minsk
24.11.2008, 18:33
Доброго времени суток.
Сегодня провел значительное время на решение неприятной задачи.Ответ так и не нашел
суть:
подключаю ПЛК 100 р-м target 2.0-4 к МВА8 через протокол Овен.
на МВА конфигурирую датчики температуры(термосопротивление), задаю диапазон измеряемых величин, тип датчика.
считываю значение датчиков через конфигуратор, результат отличный, считываю значения с ПЛК, зачение опять отличное, обрываю датчик а значения в ПЛК остаются старые! через конфигуратор МВА видно что датчик отключен, а через ПЛК застревает последнее значение!

что за притча!!?

по идее МВА должен слать код ошибки, но этого нету...

я нутром понимаю, дело в какой то насторойке, но в какой и где??
Программа исключается, брал не использованную переменную, МВА тоже маловероятно, через конфигуратор все нормально...
подкиньте идейку пожалуйста

Николаев Андрей
25.11.2008, 09:42
Трабл в понимании межсетевого обмена...
Вам необходимо с помощью блока Decoad Float отслеживать ошибку - она закодирована в переменной, которую Вы получаете по сети.

А сеть в принципе отбрасывает неверные принятые значения, и хранить последнее нормальное. Особенности построения сетей.

В случае работы по ModBus необходимо опрашивать дополнительный регистр, чтобы понимать, что на входе ошибка...

Anton_Minsk
25.11.2008, 12:21
подключил DECODE_FLOAT

PROGRAM PLC_PRG
VAR
DECODE_FLOAT1: DECODE_FLOAT;
out:REAL;
err: BYTE;
END_VAR

DECODE_FLOAT1(value:=a1,DEF_VALUE:=0);
out:=DECODE_FLOAT1.OUT_VALUE;
err:=DECODE_FLOAT1._ERR;

,где
a1:real; получаю из прибора по протоколу овен
обрываю термопару на МВА,
кода ошибки нет, err=0!!!
out выдает последнее удачное значение
в чем косяк???

Anton_Minsk
26.11.2008, 09:54
Почитал форумы, ФБ DECODE_FLOAT работает некорректно. При обрыве датчика этот блок(DECODE_FLOAT), не выдает код ошибки. Я конечно при помощи переменных Last Error и Last Adress достал код ошибки и адрес где она произошла, но это не совсем то что надо.

А если обрыв будет на 2-х и более датчиках? то переменные Last Error и Last Adress укажут на последний обрыв, а код ошибки и адреса будет постоянно меняться,
как же поймать несколько ошибок??

Kirill
26.11.2008, 09:59
Почитал форумы, ФБ DECODE_FLOAT работает некорректно. При обрыве датчика этот блок(DECODE_FLOAT), не выдает код ошибки. Я конечно при помощи переменных Last Error и Last Adress достал код ошибки и адрес где она произошла, но это не совсем то что надо.

А если обрыв будет на 2-х и более датчиках? то переменные Last Error и Last Adress укажут на последний обрыв, а код ошибки и адреса будет постоянно меняться,
как же поймать несколько ошибок??

Last error и last adress не имеют отношения к датчикам. Это переменные, отображающие режим работы сети, и соответственно ее обрыв, если таковой случился. Информации о датчиках они не несут.

Где вы прочитали об ошибках ФБ? и за какой датой было это сообщение? С тех пор много было подправлено.

Николаев Андрей
26.11.2008, 10:13
Блок Decoad Float очень хорошо работает - сам проверял.
Единственное его ограничение - то, что он не работает в режиме эмуляции, что при наладке сети не существенно.
На вход подаете полученное значение и величину, которую нужно передавать на выход блока при наличии ошибки.
Если ошибки в данных нет - блок возвращает 0 - ошибок нет.
Если есть - на выход подается предустановленное значение на втором входе блока, на выход статуса причина ошибки.
В чем не корректность?
Или трабл сравнить сигнальный выход: если не 0, то датчик ошибка и делаю...
Читайте документацию господа.
Я даже аналоговые входы ПЛК предлагаю пропускать через этот блок, чем самому анализировать - что если сигнал изменился за заданное время на интервал больше такого то - тогда обрыв или что то еще...

Anton_Minsk
26.11.2008, 13:02
Уважаемые Кирилл и Андрей, я вам проект скину, посмотрите свежим взглядом, таргет 2.0-4, подкл. МВА8
куда кидать кстати??
о, Кирилу скинул проект
Есть еще один вариант, у меня библиотечка PID Regulator 9.1.07, может в свежих версиях как то по другому?
киньте мне на ящик может версию по свежее dubrava123собякаточкаcom

а при помощи Last error и Last adres легко ловить тип ошибки и где она произошла, кстати в документации, это все описанно:
МВА8 Руководство эксплуатации
6.4Исключительные ситуации
таблица 6.

я ловлю ошибок уже почти решил, может подскажете как по адресу записать значение средствами кодесиса??:confused:

Anton_Minsk
26.11.2008, 13:27
Опишу как работает у меня этот DECODE_FLOAT:
реаловские значения с датчика подаю на вход Value,
на вход DEF_VALUE подаю любую константу, к примеру 2
считываю значение с _ERR.
когда датчик работает нормально, _ERR=0
когда датчик обрывается или закорачивается все равно _ERR=0!!!

Филоненко Владислав
26.11.2008, 14:22
Значит так.
Тут в умах путаница чрезвычайная. А в описании конфигурации всё подробно описано:
Овен мастер, когда опрашивает прибор, делает это по 1 переменной за раз, и выводит в три переменные своего статуса адрес, хеш и результат. Если в ответе прибора код исключительной ситуации (например обрыв датчика), то в статусе мастера для этой переменной появляется соответствующий код, который можно дешифровать и использовать.

Anton_Minsk
26.11.2008, 15:02
Значит так.
Тут в умах путаница чрезвычайная. А в описании конфигурации всё подробно описано:
Овен мастер, когда опрашивает прибор, делает это по 1 переменной за раз, и выводит в три переменные своего статуса адрес, хеш и результат. Если в ответе прибора код исключительной ситуации (например обрыв датчика), то в статусе мастера для этой переменной появляется соответствующий код, который можно дешифровать и использовать.
Золотые слова! Все так и обстоит,именно это я и пытаюсь сказать ,
а слова Кирила
"Last error и last adress не имеют отношения к датчикам. Это переменные, отображающие режим работы сети, и соответственно ее обрыв, если таковой случился. Информации о датчиках они не несут."
мне непонятны, что вы хотели этим сказать, Кирилл?

Kirill
26.11.2008, 17:35
Золотые слова! Все так и обстоит,именно это я и пытаюсь сказать ,
а слова Кирила
"Last error и last adress не имеют отношения к датчикам. Это переменные, отображающие режим работы сети, и соответственно ее обрыв, если таковой случился. Информации о датчиках они не несут."
мне непонятны, что вы хотели этим сказать, Кирилл?

В общем, МВА достаточно хитро отвечает ПЛК при обрыве датчика ( и других нештатных ситуациях со входом). На данном этапе отработка этих сигналов производится через last error, а не через само значение с выбранного канала МВА. Ровно по этому decode float не выдает сигналов об ошибке.
Постараемся привести это в соответствие в новой версии прошивки для ПЛК.

Anton_Minsk
27.11.2008, 10:30
В общем, МВА достаточно хитро отвечает ПЛК при обрыве датчика ( и других нештатных ситуациях со входом). На данном этапе отработка этих сигналов производится через last error, а не через само значение с выбранного канала МВА. Ровно по этому decode float не выдает сигналов об ошибке.
Постараемся привести это в соответствие в новой версии прошивки для ПЛК.

Понимание достигнуто, всем спасибо за помощь:)

Назаров Александр
29.11.2009, 13:49
В общем, МВА достаточно хитро отвечает ПЛК при обрыве датчика ( и других нештатных ситуациях со входом). На данном этапе отработка этих сигналов производится через last error, а не через само значение с выбранного канала МВА. Ровно по этому decode float не выдает сигналов об ошибке.
Постараемся привести это в соответствие в новой версии прошивки для ПЛК.
Тема поднималась год назад, а воз и ныне там!
Проблемы с выводом ошибок через decode float по прежнему осталась для МВА. Не проще ли в стандартный OWEN_MVA8 ввести дополнительный регистр СТАТУСА для каждого канала и дополнить decode float дополнительным входом?

ivkomstas1
03.11.2014, 02:11
МВА8 ошибки датчиков
Тут в умах путаница чрезвычайная. А в описании конфигурации всё подробно описано:
Овен мастер, когда опрашивает прибор, делает это по 1 переменной за раз, и выводит в три переменные своего статуса адрес, хеш и результат. Если в ответе прибора код исключительной ситуации (например обрыв датчика), то в статусе мастера для этой переменной появляется соответствующий код, который можно дешифровать и использовать.
IF(ad=144 )THEN
IF( err>0) THEN
ton1(in:=TRUE);
IF (ton1.Q) THEN
pressure:=0;
END_IF
ELSE
ton1(in:=FALSE);
END_IF
fl:=pressure;
END_IF

ad 144 - выловил опытным путем.(у меня это третий вход датчика 4-20 ма.)
err это код ошибки который выставляет протокол во время адреса 144
ton1 - это фильтр на 1.5 сек. у него задержка (чтобы исключить иногда вваливающиеся ошибки)

lara197a
03.11.2014, 10:31
не нужно там таймер ставить.
при опросе следующего входа адрес и код ошибки изменятся.
нужно счетчик ставить.
к примеру несколько раз подряд, при опросе входа получаем ошибку, то счетчик переполняется и диагностируем обрыв.