Просмотр полной версии : датчик давления пд100
Vitorgan
31.07.2016, 20:04
Добрый день, помогите решить проблему. Есть 2 датчика установленных в магистрали мазута, оба при остывании мазута, или же при холодном старте оборудования, показывают отрицательные значения -0,2 и циклично каждые 2 секунды вылетает ошибка обрыва датчика, значение меняется на "-32768". Как только мазут прогревается и становиться текучим, оба датчика работают правильно.
Может, попробовать блокировать обработку сигнала датчика в режиме СТОП и на время прогрева?
смотря какой вторичный прибор. если это все на контроллер идет, то проблем не вижу вообще...
Vitorgan
01.08.2016, 10:16
Да понятное дело, что программно как угодно обойти можно, я думал может вообще от этой ошибки датчика избавиться можно.
И это можно, но дороже - организуйте обогрев мест установки датчиков.
Сергей0308
01.08.2016, 15:36
Добрый день, помогите решить проблему. Есть 2 датчика установленных в магистрали мазута, оба при остывании мазута, или же при холодном старте оборудования, показывают отрицательные значения -0,2 и циклично каждые 2 секунды вылетает ошибка обрыва датчика, значение меняется на "-32768". Как только мазут прогревается и становиться текучим, оба датчика работают правильно.
Если, как Вы пишите датчик не зависает(у нас зависал, но овен писал, что этот косяк поправили), то в контроллере "настраивайте" чтобы обрыв показывал при меньшем токе(например <3,5 мА)! Если простых путей не ищете, можно прокладку поставить в виде ПР и ограничить минимальный ток на уровне 4 мА! Хотя мне непонятно почему это не делает производитель датчиков!
Да понятное дело, что программно как угодно обойти можно, я думал может вообще от этой ошибки датчика избавиться можно.
Это не ошибка датчика!!! Это особенность тех.процесса
Vitorgan
12.08.2016, 17:14
Если, как Вы пишите датчик не зависает(у нас зависал, но овен писал, что этот косяк поправили), то в контроллере "настраивайте" чтобы обрыв показывал при меньшем токе(например <3,5 мА)! Если простых путей не ищете, можно прокладку поставить в виде ПР и ограничить минимальный ток на уровне 4 мА! Хотя мне непонятно почему это не делает производитель датчиков!
А где в контроллере настраивать показ при меньшем токе? я же максимум что могу изменить это пару настроек в конфигураторе, а дальше модуль выдает уже не в 4-20 а в давлении. Или вы предлагаете считывать с 8АС ток?
А где в контроллере настраивать показ при меньшем токе? я же максимум что могу изменить это пару настроек в конфигураторе, а дальше модуль выдает уже не в 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 мА, мне сказали что можно изменить показ обрыва при изменении на меньший ток. Вот об этом то я и спрашиваю, а руководство уже выучил)
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?
Почему "Cod_Err: BYTE; (*Код ошибки измерения*)" сделан BYTE, а не WORD или INT?
Если Вам нравится WORD или INT, то сделайте Cod_Err таковыми, я не возражаю.:)
Vitorgan
15.08.2016, 23:12
petera, спасибо большое, примерно так сейчас и сделано. Думал можно решить до захода в скаду или плк, на уровне настройки конфигуратора мв110. Единственное что в вашем и моем исполнение не нравится, это то что статус дает динамизацию на мнемосхеме, что то типа мигания значения, когда с датчиком не лады. Понимаю что это все обходится программно ( например не определять, пока не прогреется), просто левой пяткой правое ухо... А за помощь всем спасибо.
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. Дополнительно получаете коды ошибок.
Можете в этом блоке добавить булевые выхода на каждую ошибку?
Можете в этом блоке добавить булевые выхода на каждую ошибку?
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:
оказалось так просто.
Спасибо.
В 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- х датчиков. Надо ли для таких сенсоров ставить вентили для отключения от среды?
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot