Показано с 1 по 8 из 8

Тема: MasterScada Проблема визуализации

  1. #1

    По умолчанию MasterScada Проблема визуализации

    Здравствуйте.

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

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

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

    Заранее спасибо.
    Последний раз редактировалось Alexandr; 25.07.2007 в 15:40.

  2. #2
    Пользователь
    Регистрация
    20.07.2007
    Адрес
    Киров
    Сообщений
    152

    По умолчанию

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

    например так
    Вложения Вложения

  3. #3

    По умолчанию

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

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

  4. #4
    Serg_g
    Гость

    По умолчанию поиск фронта сигнала

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

    \\*************************************
    // М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, и наоборот.
    Так будет работать, если тележка остается на концевике до обраного движения.

  5. #5

    По умолчанию

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

  6. #6
    Serg_g
    Гость

    Post

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

    \\ ловим на входе 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 цикл (скан) программы, в течении которого его надо успеть обработать.

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

  7. #7

    По умолчанию

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

  8. #8

    По умолчанию

    Приветствую Народ.

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

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •