Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: пошаговое выполнение Sfc-программы

  1. #1
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию пошаговое выполнение Sfc-программы

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

    Есть прогамма на SFC. В ней есть какое-то количество шагов в том смысле, как их определяет сам язык SFC. Но можно выделить и некое количество шагов (я их называю "фазами"), остановка на которых что-то значат для пользователя.
    В нормальном режиме работы программа прокручивает свои шаги (среди которых и фазы), все чики-пики. Теперь я хочу организовать пошаговый (отладочный) режим - когда некий тумблер переключается в состояние ПОШАГОВО (у нас это какой-то дискретный вход _bStpStp). Как только тумблер щелкнул, я хочу, чтобы переходы между шагами выполнялисть теперь по прежним правилам, но с одной оговоркой:

    те шаги, которые я считаю фазами (т.е. некоторые шаги на мой выбор) переходят дальше при дополнительном условии, что во время активности данного шага была нажата кнопка ШАГ (еще один вход _bStep).

    Я тут накручиваю варианты, аж вспотел. Все ужасно. Как бы сделать красиво? Куда впихнуть ловлю нажатия ШАГ, как сбрасывать этот флаг, когда шаг сделан и мы стоим на следующем шаге?

    Использую шаги по МЭК.

    Спасибо!

  2. #2

    По умолчанию мой вариант

    извини что по тексту комментариев нет, просто не смог придумать что комментировать :-)
    Вложения Вложения
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  3. #3
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Спасибо, начинаю вкуривать твой пример. Есть НИПАНЯТКИ.

    Добавлено: пропускайте это, если спешите. Читайте следующий пост.

    Итак, у тебя 3 идентичных (не МЭК) шага, в которых на входе стопится таймер и сбрасывается разрешение следующего шага blnNextStep.
    Хорошо. Таймер нужен только для того, чтобы показать, как в автомате программа сама будет скакать зайчиком. Верно? Я могу вместо проверки
    TON_Delay.Q AND NOT blnStepWork
    поставить нечто свое вместо TON_Delay.Q

    В теле шага таймер запускается (я так ин е понял, зачем его стопить, но ЩАС подойдем до этого)

    А в переходах между шагами ты поставил параллельные ветви. Я читал про параллельность, а додуматься не смог, что и переходы бывают параллельными, сдуру писал всегда горбатые выражения через OR. Хотя, по сути это одно и то же. Или нет?

    Итак, переход происходит либо по таймеру, если сброшен признак пошаоговости, либо по условию:

    blnNextStep AND blnStepWork

    Вроде бы тоже ясно. Единственное, что я хочу: переходы в пошаговом режиме происходят по прежним условиям, к которым дополнительно добавлено условие РАЗРЕШИТЬ ОДИН ШАГ.
    То есть, верно ли будет добавить во вторую ветвь переходов проверку
    TON_Delay.Q AND
    чтобы было по-моему?
    Тогда, ИМХО, и стопить таймер в Entry Action не нужно. Так?

    Видишь, ты не знал, что комментировать. Ответь на все мои знаки вопроса - вот и наговоришься

    Но теперь главное. Допустим, все это я верно понял (я и сам могу проверить, но то все было цветочки). А вот как именно связать blnNextStep с кнопкой?

    Не смейся, пожалуйста. Либо МЭК от упрощенного CoDeSys сильно отличаются, либо у меня лыжи не едут. Смотри.
    Я ставлю на кнопку триггер R_TRIGGER и взвожу его по перепаду. Выход триггера будет коротким? Один цикл, если я правильно понимаю. Этот самый выход я перемножаю с тем, что у тебя названо blnStepWork и запускаю на S-вход RS-триггера. Теперь я знаю, что нажатие на кнопку ШАГ вызовет установку RS-триггера в пошаговом режиме. Ура. А сбрасывать его когда? Тут пошли размышлизмы:
    Считаю, что каждое нажатие кнопки ШАГ произойдет где-то в середине шага (т.е. не непосредственно в момент входа в шаг). Поэтому в Entry Action каждого шага я поднимаю R-вход триггера, сбрасывая его и само разрешение перехода по шагу. А где-то чуть позже (хоть на такт) мне нужно этот R-вход деактивировать. И именно это не получается! Ставлю действие, например, с идентификатором
    L T#2000ms
    в котором R-вход сбрасывается. А он не сбрасывается.
    Ну, и другие варианты тоже не пашут.
    Т.е., возвращаюсь из своих путаных якобы пояснений к простому вопросу:

    как связать переменную blnNextStep с нажатием кнопки?
    Последний раз редактировалось drvlas; 29.10.2010 в 10:27.

  4. #4
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от drvlas Посмотреть сообщение
    Т.е., возвращаюсь из своих путаных якобы пояснений к простому вопросу:

    как связать переменную blnNextStep с нажатием кнопки?
    Прилагаю свое проектик, мож проще будет понять поток сознания

    Вот в этом варианте действие ReleaseReset не активизируется на 2 секунды, как ожидалось. Оно вообще не активизируется!
    Прошу учесть, что само это действие мне до лампочки. Мне бы bRes передернуть в начале шага. А еще правильнее - bOneStep связать с нажатием по входу _bStep правильным образом.
    Вложения Вложения
    Последний раз редактировалось drvlas; 29.10.2010 в 10:25.

  5. #5

    По умолчанию

    1. Итак, у тебя 3 идентичных (не МЭК) шага, в которых на входе стопится таймер и сбрасывается разрешение следующего шага blnNextStep.
    Хорошо. Таймер нужен только для того, чтобы показать, как в автомате программа сама будет скакать зайчиком. Верно?
    - совершенно верно :-)

    2. Я могу вместо проверки TON_Delay.Q AND NOT blnStepWork поставить нечто свое вместо TON_Delay.Q?
    - конечно этоже уже Ваша программа :-)

    3. А в переходах между шагами ты поставил параллельные ветви. Я читал про параллельность, а додуматься не смог, что и переходы бывают параллельными, сдуру писал всегда горбатые выражения через OR. Хотя, по сути это одно и то же. Или нет?
    - конечно это одно и тоже, правда иногда так не красиво :-)

    4. Вроде бы тоже ясно. Единственное, что я хочу: переходы в пошаговом режиме происходят по прежним условиям, к которым дополнительно добавлено условие РАЗРЕШИТЬ ОДИН ШАГ. То есть, верно ли будет добавить во вторую ветвь переходов проверку TON_Delay.Q AND чтобы было по-моему?
    - конечно это будет верно, только не забудь про скобочки в нужных местах :-)

    5. Но теперь главное. Допустим, все это я верно понял (я и сам могу проверить, но то все было цветочки). А вот как именно связать blnNextStep с кнопкой?
    - предположим что кнопка перехода в следующий шаг подключена на третий вход ПЛК100. Тогда войти в ПЛК-конфигурацию и перед «АТ %IX0.0.2: BOOL» дважды щелкнуть мышкой и ввести имя переменой blnNextStep

    во вложении я подправил объявление переменных.
    и добавил ещё пример работы в SFC
    Вложения Вложения
    Последний раз редактировалось Gans; 29.10.2010 в 21:34. Причина: вложение доложил
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  6. #6
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от Gans Посмотреть сообщение
    5. А вот как именно связать blnNextStep с кнопкой?
    - предположим что кнопка перехода в следующий шаг подключена на третий вход ПЛК100. Тогда войти в ПЛК-конфигурацию и перед «АТ %IX0.0.2: BOOL» дважды щелкнуть мышкой и ввести имя переменой blnNextStep
    Нет, уважаемый Учитель. Ты не понял моего вопроса. Связывать имена переменным, которые отражают состояние дискретных входов, это пол-дела. Спасибо за указание, что это нужно делать в одном месте - в данном случае в Конфигураторе входов. Будем так и делать.

    Но вопрос был в другом: на этот самый вход подается сигнал с кнопки ШАГ. И мне нужно, чтобы в режиме _bStpStp по нажатию кнопки _bStep (ШАГ) выполнился ОДИН переход из одного шага в другой, после чего контроллер ждет отпускания кнопки ШАГ и следующего нажатия. Или отпускание может быть и раньше, тогда процесс ждет просто следующего нажатия.
    Т.е., включили потенциально вход _bStpStp:=TRUE и после этого каждое нжатие ШАГ позволяло сдвинуться с текущего активного шага на следующий (если там еще и свои условия перехода выполняются, но это уже детали).

    Безуспешно пытаясь наваять такое, я сделал по входу _bStep триггер Q_Step (в том числе) и тут вычитал, что такой триггер по входу можно объявить и в Конфигураторе ПЛК. А там еще одна засада, описанная в ветке о подавлении дребезга. То отдельная песня. Но ответ на вопрос здесь - как вообще словить разовое нажатие ШАГ, перейти и ждать следующего нажатия? - пока не дан.
    Можно вообще отвлечься от моей реализации. Просто - прога на SFC и необходимость шагать от внешней кнопки. Все.

  7. #7

    По умолчанию

    точки прерывания не помогут?

  8. #8
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    нет, я поясню точнее. речь идет не об отладке проги с остановами, а о нормальной работе в таргет-девайсе, в ходе которой разработчик (т.е. я) заложил 2 режима:

    - автоматический
    - пошаговый

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

  9. #9

    По умолчанию

    Про CoDeSys со временем очень понравится, и чем дальше тем больше!!!
    Я тут накидал что смог понять из пожеланий + добавил кнопку «Стоп» (на 8-ой вход ПЛК100). Для симуляции программы необходимо в ПЛК-конфигурации изменять состояние входов.
    Вложения Вложения
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  10. #10
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от Gans Посмотреть сообщение
    Про CoDeSys со временем очень понравится, и чем дальше тем больше!!!
    Надеюсь!

    По твоему решению. Работает, йидрить его налево! Не пойму, как, но таки да.

    Пробую разобраться. Пока вижу только, что ты в интересующих меня (для остановки) шагах во входном действии ЗАПУСКАЕШЬ экземпляр функционального блока. Вот этого я не делал! Я и сейчас с трудом осознаю, что же это такое: в действии stpService имеется вызов этого FB, на его входах вполне определенные сигналы, и вдруг бац! - в шаге sptWork1 мы видим снова запуск этого же блока с совершенно произвольными значениями сигналов на входах. Как-то это в голову не лезет...

    А в другой ветке вопрос по счетчику (я на нем альтернативный способ пошаговости придумал, может быть интересно) - посмотри, плз, что там не так!

Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

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