Sensor — обработка аналогового датчика
Sensor подключает аналоговый датчик к программе и выдаёт понятное показание: температуру, давление, уровень. Например, ток 4–20 мА превращается в давление 0–10 бар. Компонент также сообщает об ошибке датчика и сглаживает колебания показаний.
Подключите датчик к Sensor один раз, затем используйте его показание в регуляторах и других компонентах. Sensor проверяет сам датчик и его электрический сигнал. Такие условия, как «давление воды слишком низкое», задаются отдельно по полученному показанию.
Состав и связи
В компонент входят обработка датчика и фильтр измерения. Подключите исходный вход один раз, затем используйте готовое измерение и ошибку во всех нужных узлах.
Первое подключение
Заполняйте пример в таблице «Параметры» (Params) добавленного компонента. Как добавить компонент и где искать настройки.
Перед генерацией выберите вариант работы с MetaLab: добавить готовые сценарии или пока отключить их создание.
Рассмотрим датчик давления PT101: выход 4–20 мА соответствует давлению 0–10 бар. В примере аналоговый модуль передаёт код 0–27648 для электрической шкалы 0–20 мА.
1. Подключите канал датчика
| Сигнал | Назначение |
|---|---|
AI_PT101 |
Текущее значение канала, приведённое к REAL |
AI_PT101_bError |
Ошибка аналогового канала от модуля ввода; TRUE означает неисправность |
Подключите исходное измерение к Sensor один раз. Дальше используйте результаты Sensor, включая признак ошибки.
2. Заполните основные параметры
| Параметр | Значение для примера |
|---|---|
SensId |
PT101 |
SensComment |
Давление подачи |
SensParent |
CabinetController_Inst |
Raw |
AI_PT101 |
ChErr |
AI_PT101_bError |
SensRawMin / SensRawMax |
0 / 27648 |
SensEVMin / SensEVMax |
0.0 / 20.0 |
SensEVUnits |
мА |
SensFVXMin / SensFVXMax |
4.0 / 20.0 |
SensFVYMin / SensFVYMax |
0.0 / 10.0 |
SensFVUnits |
бар |
Остальные параметры пока оставьте начальными. От CabinetController датчик получает общий сброс ошибок.
3. Разделите шкалу модуля и шкалу датчика
| Преобразование | Входная шкала | Выходная шкала |
|---|---|---|
| Код модуля → электрический сигнал | 0–27648 | 0–20 мА |
| Электрический сигнал → давление | 4–20 мА | 0–10 бар |
Здесь нужны две шкалы. Первая описывает аналоговый модуль: какому току соответствует его числовой код. Вторая описывает датчик: какому давлению соответствует этот ток.
В примере модуль выдаёт 0–27648 для тока 0–20 мА. Если ваш модуль выдаёт те же коды для 4–20 мА, укажите SensEVMin = 4.0 и SensEVMax = 20.0. Границы кода берите из настройки своего модуля, а диапазон давления — из паспорта датчика.
4. Используйте результаты
| Результат | Назначение |
|---|---|
PT101_SensFilter_Inst.out_fY |
Сглаженное давление для алгоритма |
PT101_Sensor_Inst.out_bError |
Признак ошибки измерения |
PT101_Sensor_Inst.out_fEV |
Электрический сигнал в мА для диагностики |
Компоненты PID, PIDD, TwoStep и ThreeStep подключаются к Sensor по ID PT101. Они используют сглаженное измерение и проверяют ошибку датчика.
5. Как это будет работать
| Сигнал исправного датчика | Давление до сглаживания |
|---|---|
| 4 мА | 0 бар |
| 12 мА | 5 бар |
| 20 мА | 10 бар |
По умолчанию сглаживание использует три отсчёта с периодом 1 секунда. После изменения входа сглаженное давление постепенно принимает новое значение.
Если ток упадёт ниже 3 мА, превысит 21 мА или появится ошибка канала, Sensor сформирует ошибку. Эти диагностические границы и задержки можно изменить в настройках. При начальных настройках после устранения причины ошибка снимается автоматически.
Преобразование и корректировка измерения
Показание проходит несколько шагов:
- Число от аналогового модуля переводится в ток или напряжение.
- Ток или напряжение переводится в температуру, давление или другую измеряемую величину.
- При необходимости значение корректируется коэффициентом
SensKи добавкойSensAdd. - При ошибке или слишком низком электрическом сигнале вместо показания берётся заранее заданное число.
- Результат усредняется, чтобы показания меньше колебались.
Обозначение EV означает электрическую величину — например, ток в мА. FV означает физическую величину — например, давление в барах.
Коэффициент и добавка
После пересчёта шкал значение умножается на SensK, затем к нему прибавляется SensAdd. Например, при исходном результате 5 бар, коэффициенте 1 и добавке 0,1 бар получается 5,1 бар.
SensFVLimit = true ограничивает результат второго пересчёта границами физической шкалы. Коэффициент и добавка применяются после этого ограничения.
Что показывать при слишком низком сигнале и ошибке
SensEVZP задаёт нижнюю точку электрического сигнала, а SensFVZP — число, которое нужно показывать ниже этой точки. Например, ниже 4 мА можно показывать 0 бар. Этот пересчёт выполняется сразу, без ожидания задержки аварии.
В примере с датчиком 4–20 мА при 3,5 мА измерение станет равным 0 бар, но ошибка нижней границы ещё не возникнет: её порог — 3 мА. При зафиксированной ошибке также используется SensFVZP.
Число, выбранное на случай ошибки, тоже проходит сглаживание. Поэтому после ошибки показание некоторое время может сохранять часть прежнего значения. Чтобы понять, можно ли ему доверять, вместе с показанием используйте сигнал out_bError.
Готовое значение без пересчёта шкал
Если на вход уже приходит готовая температура или давление, укажите SensEnScale = false. Тогда пересчёта двух шкал не будет: компонент возьмёт значение Raw, умножит его на коэффициент и прибавит поправку.
В этом случае проверьте пороги ошибки и точку нуля: они сравниваются уже с готовым показанием. Например, начальная точка нуля 4.0 не подходит для температуры, которая бывает ниже 4 °C. Если проверка этих границ не нужна, выключите её через SensLimitBypass.
Ошибки, задержки и сброс
Sensor контролирует две независимые причины:
| Причина | Условие | Задержка |
|---|---|---|
| Ошибка канала | ChErr = TRUE |
SensChannelErrorFilterTime, с |
| Нарушение электрического диапазона | Сигнал ниже SensEVLL или выше SensEVHH |
SensLimitFilterTime, с |
Ошибка появляется, если причина не исчезла за время задержки. Ровно на нижней или верхней границе ошибки нет — значение должно выйти за неё. При задержке 0 проверка срабатывает без ожидания.
При SensAutoReset = true ошибка исчезает сама, когда датчик снова исправен. При false нужно сначала устранить причину, затем подать общий сброс от SensParent.out_bFaultReset. Сброс не отменяет неисправность, которая ещё присутствует.
Шунты
| Настройка | Что отключает |
|---|---|
SensChannelBypass |
Контроль входного признака ошибки канала |
SensLimitBypass |
Контроль нижней и верхней электрических границ |
Каждую из двух проверок можно отключить отдельно. Если автоматический сброс выключен, одного включения шунта недостаточно, чтобы убрать уже появившуюся ошибку: нужен также сброс. При включённом автосбросе она исчезнет после включения соответствующего шунта.
Сглаживание
Фильтр усредняет последние отсчёты физического значения. Период задаётся в секундах, количество отсчётов — целым числом.
Для усреднения задайте количество от 2 до 10. При количестве 1, 0, отрицательном значении или значении больше 10 фильтр передаёт вход без сглаживания. Период 0 обновляет усреднение каждый цикл программы.
При первом запуске фильтр заполняет историю текущим значением, поэтому первое показание не усредняется с искусственными нулями.
Параметры компонента — Params
Обозначение и вход
| Параметр | По умолчанию | Назначение |
|---|---|---|
$Sensor |
Датчик аналоговый |
Название группы параметров |
SensId |
_ID_ |
ID датчика. Для PT101 создаются PT101_Sensor_Inst и PT101_SensFilter_Inst |
Raw |
_IN_ |
Исходное значение аналогового канала типа REAL |
SensComment |
Комментарий |
Название измерения |
SensParent |
CabinetController_Inst |
Родительский компонент, предоставляющий сброс out_bFaultReset |
ChErr |
FALSE |
Входной признак ошибки канала. При отсутствии отдельной диагностики оставьте FALSE |
Шкалы и корректировка
Параметры шкал задают начальные значения соответствующих настроек Conf.
| Параметр | По умолчанию | Назначение |
|---|---|---|
SensRawMin |
0 |
Нижний код шкалы аналогового модуля |
SensRawMax |
27648 |
Верхний код шкалы аналогового модуля |
SensEVMin |
0.0 |
Электрическая величина, соответствующая нижнему коду |
SensEVMax |
20.0 |
Электрическая величина, соответствующая верхнему коду |
SensEVUnits |
мА |
Обозначение единиц электрической величины |
SensEVZP |
4.0 |
Электрический порог, ниже которого используется замещающее значение |
SensFVZP |
0.0 |
Замещающее физическое значение при ошибке и ниже точки нуля |
SensFVXMin |
4.0 |
Электрический сигнал для нижней точки физической шкалы |
SensFVXMax |
20.0 |
Электрический сигнал для верхней точки физической шкалы |
SensFVYMin |
0.0 |
Нижняя точка физической шкалы |
SensFVYMax |
100.0 |
Верхняя точка физической шкалы |
SensFVUnits |
% |
Обозначение единиц физической величины |
SensFVLimit |
false |
Ограничение результата пересчёта физической шкалой |
SensEnScale |
true |
Включение двух пересчётов: код → электрическая величина → физическая величина |
SensK |
1.0 |
Коэффициент корректировки физического значения |
SensAdd |
0.0 |
Добавка к физическому значению после умножения на коэффициент |
Обозначения единиц не меняют расчёт. Численные границы задаются отдельно. Нижняя и верхняя границы каждой входной шкалы должны различаться.
Диагностика и сглаживание
| Параметр | По умолчанию | Назначение |
|---|---|---|
SensChannelBypass |
false |
Начальное состояние шунта ошибки канала |
SensChannelErrorFilterTime |
0 |
Начальная задержка фиксации ошибки канала, с |
SensEVLL |
3.0 |
Нижняя аварийная граница электрического сигнала |
SensEVHH |
21.0 |
Верхняя аварийная граница электрического сигнала |
SensLimitBypass |
false |
Начальное состояние шунта электрических границ |
SensLimitFilterTime |
0 |
Начальная задержка фиксации нарушения электрических границ, с |
SensAutoReset |
true |
Автоматическое снятие ошибки после устранения причины |
SensFilterPeriod |
1 |
Начальный период обновления фильтра, с |
SensFilterCount |
3 |
Начальное количество отсчётов для усреднения |
Собственные настройки Sensor создаются по SensId. Отдельного параметра для общего набора настроек нескольких датчиков нет.
Настройки во время работы — Conf
Полные имена приведены для SensId = PT101. В столбце начальных значений показаны значения исходного компонента. Они заменяются значениями Params при подготовке проекта: например, в описанном подключении верхняя физическая граница будет 10 бар.
Шкалы и корректировка
| Настройка | Тип | Начальное значение | Назначение |
|---|---|---|---|
Conf.PT101_Sensor_fRawMin |
REAL |
0 |
Нижняя граница кода канала |
Conf.PT101_Sensor_fRawMax |
REAL |
27648 |
Верхняя граница кода канала |
Conf.PT101_Sensor_EV_fMin |
REAL |
0.0 |
Нижняя граница электрической шкалы модуля |
Conf.PT101_Sensor_EV_fMax |
REAL |
20.0 |
Верхняя граница электрической шкалы модуля |
Conf.PT101_Sensor_EV_fZP |
REAL |
4.0 |
Электрическая точка нуля |
Conf.PT101_Sensor_FV_fZP |
REAL |
0.0 |
Замещающее физическое значение |
Conf.PT101_Sensor_FV_fXMin |
REAL |
4.0 |
Электрическая точка нижней границы измерения |
Conf.PT101_Sensor_FV_fXMax |
REAL |
20.0 |
Электрическая точка верхней границы измерения |
Conf.PT101_Sensor_FV_fYMin |
REAL |
0.0 |
Нижняя граница физической шкалы |
Conf.PT101_Sensor_FV_fYMax |
REAL |
100.0 |
Верхняя граница физической шкалы |
Conf.PT101_Sensor_FV_bLimit |
BOOL |
false |
Ограничение результата второй шкалой |
Conf.PT101_Sensor_bEnableScale |
BOOL |
true |
Включение пересчёта шкал |
Conf.PT101_Sensor_fK |
REAL |
1.0 |
Коэффициент корректировки |
Conf.PT101_Sensor_fAdd |
REAL |
0.0 |
Добавка в единицах физической величины |
Диагностика и сглаживание
| Настройка | Тип | Начальное значение | Назначение |
|---|---|---|---|
Conf.PT101_Sensor_EV_fLL |
REAL |
3.0 |
Нижняя аварийная электрическая граница |
Conf.PT101_Sensor_EV_fHH |
REAL |
21.0 |
Верхняя аварийная электрическая граница |
Conf.PT101_Sensor_EV_bLimitBypass |
BOOL |
false |
Шунт контроля электрических границ |
Conf.PT101_Sensor_Channel_bErrorBypass |
BOOL |
false |
Шунт ошибки канала |
Conf.PT101_Sensor_Channel_diErrorFilterTime |
DINT |
0 |
Задержка ошибки канала, с |
Conf.PT101_Sensor_EV_diLimitFilterTime |
DINT |
0 |
Задержка нарушения электрических границ, с |
Conf.PT101_SensFilter_diPeriod |
DINT |
1 |
Период обновления сглаживания, с |
Conf.PT101_SensFilter_iCount |
INT |
3 |
Количество отсчётов для среднего значения |
Калибровка
При калибровке вы показываете компоненту, какой ток или напряжение датчик фактически выдаёт на известном нижнем и верхнем значении. Эти измеренные числа становятся границами пересчёта.
- Подайте сигнал, соответствующий известному нижнему значению физической величины, и дождитесь устойчивого показания.
- Установите команду калибровки нижней точки.
- Подайте сигнал для известного верхнего значения и установите команду калибровки верхней точки.
| Переменная | Тип | Действие |
|---|---|---|
View.PT101_Sensor_Inst_inout_bCalibrateFV_fXMin |
BOOL |
Установить TRUE: текущая электрическая величина записывается в Conf.PT101_Sensor_FV_fXMin |
View.PT101_Sensor_Inst_inout_bCalibrateFV_fXMax |
BOOL |
Установить TRUE: текущая электрическая величина записывается в Conf.PT101_Sensor_FV_fXMax |
После обработки компонент снимает команду. Физические границы fYMin и fYMax задаются отдельно и при калибровке не меняются.
Например, для нижней физической точки 0 бар измеренный ток оказался равен 4,02 мА. Калибровка нижней точки запишет 4,02 мА в fXMin, и эта электрическая величина будет соответствовать 0 бар.
Выходы компонента
| Результат для примера | Тип | Назначение |
|---|---|---|
PT101_Sensor_Inst.out_fEV |
REAL |
Электрическая величина после пересчёта кода канала |
PT101_Sensor_Inst.out_fFV |
REAL |
Физическая величина после корректировки и возможного замещения, до сглаживания |
PT101_SensFilter_Inst.out_fY |
REAL |
Сглаженная физическая величина |
PT101_Sensor_Inst.out_bError |
BOOL |
Общая ошибка датчика |
PT101_Sensor_Inst.out_Channel_bError |
BOOL |
Зафиксирована ошибка канала |
PT101_Sensor_Inst.out_FV_bError |
BOOL |
Зафиксировано нарушение электрической границы |
PT101_Sensor_Inst.out_FV_bLL |
BOOL |
Зафиксировано нарушение нижней электрической границы |
PT101_Sensor_Inst.out_FV_bHH |
BOOL |
Зафиксировано нарушение верхней электрической границы |
Для обычного регулирования используйте PT101_SensFilter_Inst.out_fY вместе с PT101_Sensor_Inst.out_bError. Если один датчик нужен нескольким компонентам, передавайте им эти же результаты.
Перед генерацией
Если сейчас нужна только программа, откройте у этого компонента область «Экспорт MetaLab» и удалите заполненные строки в своём проекте. После этого можно генерировать без сценариев.
Если будете выполнять виртуальную наладку, оставьте экспорт и импортируйте в раздел MetaLab следующие компоненты из полного архива MetaKit:
| Компонент MetaLab | Файл в архиве MetaKit |
|---|---|
Sensor |
MetaLab/Lib Scenarios/Sensor.yaml |
Один шаблон достаточно добавить один раз, даже если он нужен нескольким механизмам. Сохраните указанные имена: по ним MetaPlatform находит нужный сценарий. Сами значения для механизмов будут подставлены при генерации.
При заполненном экспорте отсутствие шаблона остановит генерацию. Этот шаг нужен для MetaCore, CODESYS 3.5 и Siemens TIA Portal; для CODESYS 2.3 сценарии MetaLab не создаются.