Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

Помогите решить задачу

Обсуждение вопросов, не относящихся ни к одному из других подразделов

Автор темы
ndk_63
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 31 окт 2011, 06:46
Ф.И.О.: Иван Иваныч

Помогите решить задачу

Сообщение ndk_63 » 21 апр 2012, 11:48

Есть такая задачка- Дано 100 датчиков загазованности
Необходимо обработать с них сигналы, снять 1-порог и 2-порог.
А также по сигналу 2-ого порога необходимо выдать аварийный сигнал и остановить некоторое обоорудование.
Так вот все бы ничего, но необходимо что бы оборудование останавливалось по сигналу загазованности 2-ого порога не менее чем от 2-ух датчиков загазованности???
Для обработки использую цикл:
FOR i := 1 TO 100 do if qt[i].timer.DN and not qt[i].Block then qt[i].AVAR_ZAGAZ:=1;
elsif qt[i].timer.DN and qt[i].Block then qt[i].AVAR_ZAGAZ:=0;
end_if;
END_FOR;
ТONR(qt[1].timer);
qt[1].timer.TimerEnable:= qt[1]._2;
TONR(qt[2].timer);
qt[2].timer.TimerEnable:= qt[2]._2;
TONR(qt[3].timer);
qt[3].timer.TimerEnable:= qt[3]._2;

Создал пользовательский тип данных для описания каждого датчика:qt[i]._1-первый порог;qt[i]._2-Второй порог;qt[i].Block-блокировка датчика;qt[i].AVAR_ZAGAZ-этот бит выставляется после сработки второго порога и отработки таймера;qt[i].timer-таймер проверки дребезга.

Необходимо добавить условие что если не менее у двух датчиков бит qt[].AVAR_ZAGAZ=1, что то там останавливается???
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя

DelSnos
не первый раз у нас
не первый раз у нас
Сообщения: 318
Зарегистрирован: 26 сен 2010, 09:18
Ф.И.О.: Artur Makaev
Поблагодарили: 2 раза
Контактная информация:

Re: Помогите решить задачу

Сообщение DelSnos » 21 апр 2012, 13:23

Дмитрий, я бы посоветовал Вам создать пользовательскую программу- Add-on. В качестве входных значений блока пропишите состояния ваших 2-х взаимосвязанных датчиков, в теле блока тогда будет крутиться весь ваших алгоритм связанный с этими двумя датчиками: начальные условия, обработка и сравнение, выдача сигнала на стоп чего-то. Тут вам и объектная модель заодно- ваши же 2 датчика загазованности, скорее всего, привязаны к одной и той же технологической площадке? Получается один блок- одна тех. площадка. Весьма прозрачно, наглядно и удобно при ПНРах. Да и наверху все со структурой понятно- меньше ошибок.
А от зацикливания я бы посоветовал избавиться, если, конечно, ваши газоанализаторы не многоточка- тогда просто быстрее обрабатывать данные, но лучше ручками чуть поработать и потом меньше будет проблем. Видел такие программы, где вся обработка построена через конструкцию FOR… END_FOR – очень сложно для понимания и отладки, да и сам ПЛК по этому поводу писал major faults. Во всяком случае, такой способ должен быть, как минимум оправдан.


Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 21:14
Ф.И.О.: Кузнецов Владимир Сергеевич

Re: Помогите решить задачу

Сообщение Владимир Кузнецов » 21 апр 2012, 16:15

перед блоком с проверкой порогов сбрасывать значение переменной в 0.
в блоке, при срабатывании порога увеличивать эту переменную на 1.
по выходу из блока проверить значение, если больше одного, то стоп.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2555
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 41 раз
Поблагодарили: 70 раз

Re: Помогите решить задачу

Сообщение Ryzhij » 21 апр 2012, 19:00

А что, все сто датчиков загазованности коррелированы между собой по условиям техпроцесса?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Бондарев Михаил
почётный участник форума
почётный участник форума
Сообщения: 945
Зарегистрирован: 25 июл 2008, 22:23
Ф.И.О.: Бондарев Михаил Владимирович
Поблагодарили: 1 раз

Re: Помогите решить задачу

Сообщение Бондарев Михаил » 21 апр 2012, 19:04

На мой взгляд, вам надо разделить задачи обработки аналоговых сигналов ( линеаризация(?), масштабирование, выделение порогов), задачи обработки событий ( фиксация сработки сигнала превышения порога (самоподхват)) и задачи логического управления ( сработка от неменее чем 2-х датчиков). Тогда и программа будет читататься и на ПНР будет проще.

Боюсь спросить, судя по сработке не менее чем двух датчиков, уж не ПАЗ ли вы делаете?

Аватара пользователя

Serex
авторитет
авторитет
Сообщения: 875
Зарегистрирован: 15 авг 2011, 20:36
Ф.И.О.: Пупков Сергей Викторович
Благодарил (а): 7 раз
Поблагодарили: 12 раз

Re: Помогите решить задачу

Сообщение Serex » 21 апр 2012, 19:18

Как я понял, нужно просто просуммировать все состояния аварий в цикле. Если результат больше 2-х, то останов чего-то там


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2555
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 41 раз
Поблагодарили: 70 раз

Re: Помогите решить задачу

Сообщение Ryzhij » 21 апр 2012, 19:41

Если показания не всей сотни датчиков коррелированы между собой, считать количество датчиков, превысивших свои пороговые показания, придётся по группам. В общем случае эти группы пересекаются между собой, и таких групп может быть до ста. Т.е. у каждого датчика может быть свой набор друзей-соседей. Рекомендую это выяснить у технологов и учесть в работе.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
ndk_63
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 31 окт 2011, 06:46
Ф.И.О.: Иван Иваныч

Re: Помогите решить задачу

Сообщение ndk_63 » 21 апр 2012, 20:38

DelSnos писал(а): 1.я бы посоветовал Вам создать пользовательскую программу- Add-on.
2.Тут вам и объектная модель заодно- ваши же 2 датчика загазованности, скорее всего, привязаны к одной и той же технологической площадке?
3.Во всяком случае, такой способ должен быть, как минимум оправдан.

1. По началу хотел сделать через Аддоны, но получилось бы еще неудобнее.
2.Эти два датчика привязаны к одному объекту. При срабатывании не менее двух датчиков установка будет переходить в определенный режим.
3.Способ оправдан- позиций очень много
Ryzhij писал(а):А что, все сто датчиков загазованности коррелированы между собой по условиям техпроцесса?

Да, еще раз повторюсь:- Эти датчики привязаны к одному объекту. При срабатывании не менее двух датчиков установка будет переходить в определенный режим, это условие заказчика.
Бондарев Михаил писал(а):Боюсь спросить, судя по сработке не менее чем двух датчиков, уж не ПАЗ ли вы делаете?

Да, именно, что то не так?
Владимир Кузнецов писал(а):перед блоком с проверкой порогов сбрасывать значение переменной в 0.
в блоке, при срабатывании порога увеличивать эту переменную на 1.
по выходу из блока проверить значение, если больше одного, то стоп.

Ну хоть кто то постарался помочь)))) Да мысль хорошая, но вот как описать это - вопрос.
Если в тело цикла добавить строки :If qt[i].AVAR_ZAGAZ:=1 then N:=N+1
(где N тэг тип dint,который и будет в начале равен 0 а как только пройдет авария по любому датчику N=1 и т.д.),но произойдет слудующее при сработки порога, N будет увеличиваться, нужен тригер.
Пробовал идентифицировать аварию по индексу массива i, если авария возникла то запиши в тег номер датчика(это работает) а вот как быть в случае возникновения 2-ой,3-ей,4-ой аварии этот тег перезаписывается и все?????


Автор темы
ndk_63
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 31 окт 2011, 06:46
Ф.И.О.: Иван Иваныч

Re: Помогите решить задачу

Сообщение ndk_63 » 21 апр 2012, 20:42

Serex писал(а):Как я понял, нужно просто просуммировать все состояния аварий в цикле. Если результат больше 2-х, то останов чего-то там

Ага

Аватара пользователя

Serex
авторитет
авторитет
Сообщения: 875
Зарегистрирован: 15 авг 2011, 20:36
Ф.И.О.: Пупков Сергей Викторович
Благодарил (а): 7 раз
Поблагодарили: 12 раз

Re: Помогите решить задачу

Сообщение Serex » 22 апр 2012, 09:25

ndk_63 писал(а):Пробовал идентифицировать аварию по индексу массива i, если авария возникла то запиши в тег номер датчика(это работает) а вот как быть в случае возникновения 2-ой,3-ей,4-ой аварии этот тег перезаписывается и все?????


Что-то не понял. У вас же под каждый датчик свой пользовательский тип. Т.е. обработка какие датчики сработали - это уже другая история. Вам нужно установить факт срабатывания сигнализации. Если такой факт устанавливается, то формируем сообщение на АРМ (СКАДА, что там..).
Сообщение в виде строки, к которой в цикле плюсуем номера сработавших датчиков.
С данной средой незнаком, но на других платформах у меня это не вызывает проблем.


Автор темы
ndk_63
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 31 окт 2011, 06:46
Ф.И.О.: Иван Иваныч

Re: Помогите решить задачу

Сообщение ndk_63 » 23 апр 2012, 05:21

На все датчики один и тот же пользовательский тип
ndk_63 писал(а):Создал пользовательский тип данных :qt[i]._1-первый порог;qt[i]._2-Второй порог;qt[i].Block-блокировка датчика;qt[i].AVAR_ZAGAZ-этот бит выставляется после сработки второго порога и отработки таймера;qt[i].timer-таймер проверки дребезга.

i - индекс массива который иднтифицирует номер датчика. В принципе если получится идентифицировать номера всех датчиков по которым авария сработала-задача будет решена.

Аватара пользователя

DelSnos
не первый раз у нас
не первый раз у нас
Сообщения: 318
Зарегистрирован: 26 сен 2010, 09:18
Ф.И.О.: Artur Makaev
Поблагодарили: 2 раза
Контактная информация:

Re: Помогите решить задачу

Сообщение DelSnos » 23 апр 2012, 08:55

Если всё же через циклы хотите то, однако, все равно придется ручками в теле цикла писать соответствие датчиков друг-другу, там же сравнивать и выдавать выходной сигнал в случае, если сработали два аварийных порога. Никуда от этой работы не деться, если же, конечно, положения этих двух датчиков в массиве не n и n+1, т.е. связанны между собой постоянным инкрементом. А если нет, то желанию вам не запутаться в соответствие элементов массива- наглядности то нету :)


Вернуться в «Общие вопросы»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей