PDA

Просмотр полной версии : MasterScada Проблема визуализации



Alexandr
25.07.2007, 15:36
Здравствуйте.

Создаю в MasterScada проект визуализации технологической линии (т.е. только отображение, без управления), с отображением выходов все понятно, изобразил в виде индикаторов мнемонических.
Но возникла такая задача: есть 2 концевика(выходы), между ними движется тележка (т.е. концевики отображают крайние левое и правое положение тележки). Необходимо, чтобы когда тележка съезжает с левого концевика (т.е. начинает движение вправо) и пока не наедет на правый концевик, должна гореть индикация "движение вправо"(стрелка, картинка, не важно что), и наоборот для "движение влево".
Так вот проблема в том, что я не пойму как определить проподание сигнала (т.е. именно проподание сигнала, а не его отсутствие). У меня получается, когда тележка находится посередине, то горят обе стрелки, а надо, чтобы только одна.

Если можете подскажите в деталях (какие ФБ лучше для этого использовать, и главное как их использовать), я только начинаю использовать Скаду, потому не взыщите.

P.S.: Уважаемый модератор, просьба, если я создал тему не в том разделе - не удаляйте а перенесите ее, плз.

Заранее спасибо.

Rand0m
26.07.2007, 09:32
можно попробовать фб триггер, триггер включается 1 конечником и выключается конечником 2, и уже выходы триггеров на стрелки.

например так

Alexandr
27.07.2007, 10:08
Приветствую Rand0m.
Спасибо, что решили помочь. Ваш пример делает не совсем то. Т.е. он выдает "команду на смену сигнала" при включении какого-то концевика, а надо наоборот, т.е. сигнал с концевика пропал (на втором концевике его соответственно нет, т.к. тележка едет 3-5 сек.), и через 3-5 секунд должен загореться второй концевик (тележка наехала на него) и соответственно должна потухнуть стрелка "движение к этому концевику".

Я не знаю, может Триггеры можно связать с "Событиями", не могу разоьбраться.

Serg_g
30.07.2007, 15:18
К сожаленю, у меня нет МастерСКАДА, но вообще поиск фронта вкл\выкл можно сделать так (мнемоника Сименс):

\\*************************************
// М5.1 - сигнал что остояние контакта изменилось
// M5.2 - вход стал в 1 из 0
// M5.3 - вход стал в 0 из 1
\\ М5.2 и М5.3 =1 только 1 скан программы
\\ А - лог. И
\\ Х - лог. Исключающее ИЛИ
\\AN - лог. И-НЕ
\\S - RS триггер - вход SET
\\R - RS триггер - вход RESET
\\ I - вход
\\ M - биты памяти внутренние

A I 0.0
X M 5.0
= M 5.1

A I 0.0
A M 5.1
= M 5.2

AN I 0.0
A M 5.1
= M 5.3

A I 0.0
S M 5.0
AN I 0.0
R M 5.0

\\*************************

Если у Вас тележки идет от стенки к стенке, то можно просто ловить срез сигала концевика 1, и его на триггер Set, а фронт концевика 2 на Reset, и наоборот.
Так будет работать, если тележка остается на концевике до обраного движения.

Alexandr
30.07.2007, 16:23
можно просто ловить срез сигала концевика 1, и его на триггер Set, а фронт концевика 2 на Reset, и наоборот.
Да, это я и хочу, но проблема: как ловить срез(пропадание) сигнала? Если можете приведите пример.

Serg_g
01.08.2007, 14:39
как ловить срез(пропадание) сигнала?
приведенный ранее код ловит фронт и срез сигнала, а также его изменение.
я попробую объяснить алгоритм приведенной программы. т.к. я не занаю методов мастерскада, но думаю, что там все аналогично, то смотрите:

\\ ловим на входе I 0.0 состояние, какое есть
\\ и делаем Xor меткой M 5.0. предварительно м5.0 должна быть =0.
\\ результат кидаем в м5.1.
\\таким образом, получается, что если вход не равен м5.0, то м5.1=1,
\\ иначе =0
A I 0.0
X M 5.0
= M 5.1

\\ теперь сравниваем вход и м5.1. если они =1, то м5.2=1 иначе =0.
\\ это зачит, что I 0.0 изменилось (1>0 или 0>1, это пок не известно)
\\ и сразу смотрим, чего на I 0.0 = если 1 то ставим м5.2 в 1
A I 0.0
A M 5.1
= M 5.2

\\ а если I 0.0 не 1 (т.е. 0), то ставим м5.3 в 1
An I 0.0
A M 5.1
= M 5.3

\\ а тепрь шаманство - если I 0.0=1 то делаем м5.0=1
A I 0.0
S M 5.0
\\ а если 0, то м5.0 в 0
An I 0.0
R M 5.0

\\ теперь мы имеем для входа I 0.0: если м5.2=1 , то было включение датчика, если м5.3=1 - то отключение. состояние м5.2 и м5.3 =1 только до конца текущего цикла программы! т.о после этого учаска кода надо например м5.3 подать на вход S Rs триггера, выход которого зажгет символ "вправо", а на его R вход подать сигнал со 2 датчика.

то-же самое надо проделать для 2 датчика, напрмер I 0.1, и переписать код с учетом новых меток (например, м6.0, 6.1, 6.2, 6.3). тогда на еще один триггер надо завсти м5.3 и I 0.1, а его выход на символ "влево".


вообще, фронт\срез ловится так: нужно запомнить старое состояние входа, и сравнить с новым - в каждом цикле. если старое=новое, то ничего нет (не важно, вкл или выкл). а если не равны, то значит сигнал изменился (!), и тогда смотрим, что еально на входе сечас: если 1, то было включение, а если 0 - то выключение. и делаем что хотим.
а после этого обязательно нужно в старое состояние записать значение нового. и на следующий раз оно будет как старое. таким образом, получим импульс длиной 1 цикл (скан) программы, в течении которого его надо успеть обработать.

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

Alexandr
02.08.2007, 09:44
Serg_g, спасибо.

нужно запомнить старое состояние входа, и сравнить с новым
хорошая идея, буду пробовать.

Alexandr
09.08.2007, 11:55
Приветствую Народ.

Решил я свою задачу. Хочу поделиться с вами как.
Использовал стандартный блок ЗАДНИЙ ФРОНТ и ТРИГГЕР (по одному элементу на концевик). Если бы описание в Хелпе соответствовало действительности, то можно было бы обойтись одним ФРОНТОМ, а так + триггер.
ЗАДНИЙ ФРОНТ работает так: при пропадании сигнала - на выход подается импульс заданной длины (по времени), но это в справке.
На саможе деле он работает иначе: при пропадании сигнала через заданное время подается на выход импульс.
Прилагаю пример, демонстрирующий решение: