PDA

Просмотр полной версии : датчик давления пд100



Vitorgan
31.07.2016, 20:04
Добрый день, помогите решить проблему. Есть 2 датчика установленных в магистрали мазута, оба при остывании мазута, или же при холодном старте оборудования, показывают отрицательные значения -0,2 и циклично каждые 2 секунды вылетает ошибка обрыва датчика, значение меняется на "-32768". Как только мазут прогревается и становиться текучим, оба датчика работают правильно.

Woolfy
01.08.2016, 05:42
Может, попробовать блокировать обработку сигнала датчика в режиме СТОП и на время прогрева?

CEkip
01.08.2016, 06:35
смотря какой вторичный прибор. если это все на контроллер идет, то проблем не вижу вообще...

Vitorgan
01.08.2016, 10:16
Да понятное дело, что программно как угодно обойти можно, я думал может вообще от этой ошибки датчика избавиться можно.

Ryzhij
01.08.2016, 15:14
И это можно, но дороже - организуйте обогрев мест установки датчиков.

Сергей0308
01.08.2016, 15:36
Добрый день, помогите решить проблему. Есть 2 датчика установленных в магистрали мазута, оба при остывании мазута, или же при холодном старте оборудования, показывают отрицательные значения -0,2 и циклично каждые 2 секунды вылетает ошибка обрыва датчика, значение меняется на "-32768". Как только мазут прогревается и становиться текучим, оба датчика работают правильно.

Если, как Вы пишите датчик не зависает(у нас зависал, но овен писал, что этот косяк поправили), то в контроллере "настраивайте" чтобы обрыв показывал при меньшем токе(например <3,5 мА)! Если простых путей не ищете, можно прокладку поставить в виде ПР и ограничить минимальный ток на уровне 4 мА! Хотя мне непонятно почему это не делает производитель датчиков!

CEkip
01.08.2016, 16:44
Да понятное дело, что программно как угодно обойти можно, я думал может вообще от этой ошибки датчика избавиться можно.

Это не ошибка датчика!!! Это особенность тех.процесса

Vitorgan
12.08.2016, 17:14
Если, как Вы пишите датчик не зависает(у нас зависал, но овен писал, что этот косяк поправили), то в контроллере "настраивайте" чтобы обрыв показывал при меньшем токе(например <3,5 мА)! Если простых путей не ищете, можно прокладку поставить в виде ПР и ограничить минимальный ток на уровне 4 мА! Хотя мне непонятно почему это не делает производитель датчиков!

А где в контроллере настраивать показ при меньшем токе? я же максимум что могу изменить это пару настроек в конфигураторе, а дальше модуль выдает уже не в 4-20 а в давлении. Или вы предлагаете считывать с 8АС ток?

petera
13.08.2016, 04:10
А где в контроллере настраивать показ при меньшем токе? я же максимум что могу изменить это пару настроек в конфигураторе, а дальше модуль выдает уже не в 4-20 а в давлении. Или вы предлагаете считывать с 8АС ток?

Читать руководство на модуль нужно внимательно!
25797 http://www.owen.ru/forum/attachment.php?attachmentid=11963&d=1392751579
Кроме значения физ.величины из модуля ОБЯЗАТЕЛЬНО нужно читать статус результата измерения и обрабатывать в программе оба значения

Эдуард_Н
13.08.2016, 09:40
Кроме значения физ.величины из модуля ОБЯЗАТЕЛЬНО нужно читать статус результата измерения и обрабатывать в программе оба значения

А как понять, что связь с модулем действительно есть? Где взять эту переменную?

Vitorgan
14.08.2016, 16:53
Читать руководство на модуль нужно внимательно!
25797 http://www.owen.ru/forum/attachment.php?attachmentid=11963&d=1392751579
Кроме значения физ.величины из модуля ОБЯЗАТЕЛЬНО нужно читать статус результата измерения и обрабатывать в программе оба значения

Да читаю я ее с первого же дня, только из за остывания топлива создается вакум, который и уносит показания ниже 4 мА, мне сказали что можно изменить показ обрыва при изменении на меньший ток. Вот об этом то я и спрашиваю, а руководство уже выучил)

petera
15.08.2016, 15:21
1. Берёте из модуля оба значения iRD и SRD
2. Делаете ФБ

UNCTION_BLOCK DECODE_Err
VAR_INPUT
iRD: INT; (*Датчик*)
SRD: WORD;
END_VAR
VAR_OUTPUT
Rezultat: INT; (*Результат*)
Cod_Err: BYTE; (*Код ошибки измерения*)
Err: BOOL; (*Наличее ошибки измерения*)
END_VAR
VAR
END_VAR

IF SRD <>0 THEN
Err:=TRUE; (*Установить ошибку измерений*)
CASE SRD OF
16#F000: Cod_Err:=1; (*Результаты измерения не верны*)
16#F006: Cod_Err:=2; (*Данные не готовы*)
16#F007: Cod_Err:=3; (*Датчик отключен*)
16#F00A: Cod_Err:=4; (*Измеренное значение слишком велико*)
16#F00B: Cod_Err:=5; (*Измеренное значение слишком мало*)
16#F00D: Cod_Err:=6; (*Обрыв датчика*)
16#F00F: Cod_Err:=7; (*Некорректный калибровочный коэффициент *)
END_CASE
ELSE
Err:=FALSE;
Cod_Err:=0; (*Нет ошибок измерений*)
END_IF
IF iRD<0 OR Err THEN Rezultat:=0;
ELSE Rezultat:=iRD;
END_IF
3. На вход ФБ подаёте оба сигнала
25813
4. На выходе Rezultat будут или правильные значения или 0 пока мазут не прогрелся.
Это значение (Rezultat) используете в программе вместо iRD
5. Дополнительно получаете коды ошибок.

Эдуард_Н
15.08.2016, 19:09
Почему "Cod_Err: BYTE; (*Код ошибки измерения*)" сделан BYTE, а не WORD или INT?

petera
15.08.2016, 20:23
Почему "Cod_Err: BYTE; (*Код ошибки измерения*)" сделан BYTE, а не WORD или INT?

Если Вам нравится WORD или INT, то сделайте Cod_Err таковыми, я не возражаю.:)

Vitorgan
15.08.2016, 23:12
petera, спасибо большое, примерно так сейчас и сделано. Думал можно решить до захода в скаду или плк, на уровне настройки конфигуратора мв110. Единственное что в вашем и моем исполнение не нравится, это то что статус дает динамизацию на мнемосхеме, что то типа мигания значения, когда с датчиком не лады. Понимаю что это все обходится программно ( например не определять, пока не прогреется), просто левой пяткой правое ухо... А за помощь всем спасибо.

petera
16.08.2016, 04:02
petera, спасибо большое, примерно так сейчас и сделано. Думал можно решить до захода в скаду или плк, на уровне настройки конфигуратора мв110. Единственное что в вашем и моем исполнение не нравится, это то что статус дает динамизацию на мнемосхеме, что то типа мигания значения, когда с датчиком не лады. Понимаю что это все обходится программно ( например не определять, пока не прогреется), просто левой пяткой правое ухо... А за помощь всем спасибо.

Тогда попробуйте вариант

FUNCTION_BLOCK DECODE_Err
VAR_INPUT
iRD: INT; (*Датчик*)
SRD: WORD;
END_VAR
VAR_OUTPUT
Rezultat: INT; (*Результат*)
Cod_Err: BYTE; (*Код ошибки измерения*)
Err: BOOL; (*Наличие ошибки измерения*)
END_VAR
VAR
TMP: INT; (*Значение до ошибки*)
END_VAR

IF SRD <>0 THEN
Err:=TRUE; (*Установить ошибку измерений*)
CASE SRD OF
16#F000: Cod_Err:=1; (*Результаты измерения не верны*)
16#F006: Cod_Err:=2; (*Данные не готовы*)
16#F007: Cod_Err:=3; (*Датчик отключен*)
16#F00A: Cod_Err:=4; (*Измеренное значение слишком велико*)
16#F00B: Cod_Err:=5; (*Измеренное значение слишком мало*)
16#F00D: Cod_Err:=6; (*Обрыв датчика*)
16#F00F: Cod_Err:=7; (*Некорректный калибровочный коэффициент *)
END_CASE
ELSE
Err:=FALSE;
Cod_Err:=0; (*Нет ошибок измерений*)
END_IF

IF NOT (iRD<0 OR Err) THEN TMP:=iRD;
END_IF
Rezultat:=TMP;
в момент ошибки измерения выход Rezultat имеет последнее правильное(достоверное) значение, а не фиксированное =0. Т.е. ФБ замораживает последнее достоверное значение.
Это позволяет игнорировать одиночные ошибки измерения, не "мельтешить" цифрами на HMI и не бросать PID в крайние положения.
Ну а факт действительного отказа датчика можно сделать через разумную задержку сигнала "Err" с выхода данного ФБ и предпринять нужные действия (вкл. сигнализацию, перевести механизмы в безопасное состояние, и т.д.)

Аналогичный ФБ для аналогового входа ПЛК http://www.owen.ru/forum/showthread.php?t=22397&p=183061&viewfull=1#post183061

Эдуард_Н
02.09.2016, 10:46
1. Берёте из модуля оба значения iRD и SRD
2. Делаете ФБ

UNCTION_BLOCK DECODE_Err
VAR_INPUT
iRD: INT; (*Датчик*)
SRD: WORD;
END_VAR
VAR_OUTPUT
Rezultat: INT; (*Результат*)
Cod_Err: BYTE; (*Код ошибки измерения*)
Err: BOOL; (*Наличее ошибки измерения*)
END_VAR
VAR
END_VAR

IF SRD <>0 THEN
Err:=TRUE; (*Установить ошибку измерений*)
CASE SRD OF
16#F000: Cod_Err:=1; (*Результаты измерения не верны*)
16#F006: Cod_Err:=2; (*Данные не готовы*)
16#F007: Cod_Err:=3; (*Датчик отключен*)
16#F00A: Cod_Err:=4; (*Измеренное значение слишком велико*)
16#F00B: Cod_Err:=5; (*Измеренное значение слишком мало*)
16#F00D: Cod_Err:=6; (*Обрыв датчика*)
16#F00F: Cod_Err:=7; (*Некорректный калибровочный коэффициент *)
END_CASE
ELSE
Err:=FALSE;
Cod_Err:=0; (*Нет ошибок измерений*)
END_IF
IF iRD<0 OR Err THEN Rezultat:=0;
ELSE Rezultat:=iRD;
END_IF
3. На вход ФБ подаёте оба сигнала
25813
4. На выходе Rezultat будут или правильные значения или 0 пока мазут не прогрелся.
Это значение (Rezultat) используете в программе вместо iRD
5. Дополнительно получаете коды ошибок.

Можете в этом блоке добавить булевые выхода на каждую ошибку?

petera
02.09.2016, 12:48
Можете в этом блоке добавить булевые выхода на каждую ошибку?
http://www.owen.ru/forum/attachment.php?attachmentid=16915&d=1425224217
Да, уж...
Неужели самому семь строчек добавить сложно?
http://www.owen.ru/forum/attachment.php?attachmentid=11962&d=1392751544

FUNCTION_BLOCK DECODE_ErrExt
VAR_INPUT
iRD: INT; (*Датчик*)
SRD: WORD;
END_VAR
VAR_OUTPUT
Rezultat: INT; (*Результат*)
Cod_Err: BYTE; (*Код ошибки измерения*)
Err: BOOL; (*Наличие ошибки измерения*)
Err1: BOOL;
Err2: BOOL;
Err3: BOOL;
Err4: BOOL;
Err5: BOOL;
Err6: BOOL;
Err7: BOOL;
END_VAR
VAR
TMP: INT; (*Значение до ошибки*)
END_VAR

IF SRD <>0 THEN
Err:=TRUE; (*Установить ошибку измерений*)
CASE SRD OF
16#F000: Cod_Err:=1; (*Результаты измерения не верны*)
16#F006: Cod_Err:=2; (*Данные не готовы*)
16#F007: Cod_Err:=3; (*Датчик отключен*)
16#F00A: Cod_Err:=4; (*Измеренное значение слишком велико*)
16#F00B: Cod_Err:=5; (*Измеренное значение слишком мало*)
16#F00D: Cod_Err:=6; (*Обрыв датчика*)
16#F00F: Cod_Err:=7; (*Некорректный калибровочный коэффициент *)
END_CASE
ELSE
Err:=FALSE;
Cod_Err:=0; (*Нет ошибок измерений*)
END_IF
Err1:=Cod_Err = 1;
Err2:=Cod_Err = 2;
Err3:=Cod_Err = 3;
Err4:=Cod_Err = 4;
Err5:=Cod_Err = 5;
Err6:=Cod_Err = 6;
Err7:=Cod_Err = 7;

26136

Эдуард_Н
02.09.2016, 13:20
Спасибо.

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

petera
02.09.2016, 13:52
Спасибо.

В ST не очень понимаю, полдня экспериментировал.:confused:
оказалось так просто.

Не ужели ни с каким языком программирования не сталкивались? Например с Бэйсиком?

В примере, для выражения
Err2:=Cod_Err = 2;
У переменной "Err2" тип BOOL, т.е. она может принимать только два значения TRUE или FALSE.
Часть, которая "Cod_Err = 2" не что иное, как логическая операция сравнения на равенство двух величин. Результатом ее будет
TRUE, если Cod_Err равен 2
FALSE, если Cod_Err неравен 2
Вот этот результат и прививается (операнд :=) переменной Err2

Эдуард_Н
02.09.2016, 14:26
С Бэйсиком работал.
Делал как у Вас в ФБ, только думал, что надо добавлять IF или ещё что ни будь в этом роде. Оказалось ничего не надо.
Ещё раз спасибо.

pashenkarozhkov89
05.09.2016, 10:03
Интересно. Спасибо, пригодиться

SuperChu
03.12.2016, 12:54
Добрый день. Подскажите какие бобышки и переходники использовали для 141- х датчиков. Надо ли для таких сенсоров ставить вентили для отключения от среды?