Страница 2 из 5 ПерваяПервая 1234 ... ПоследняяПоследняя
Показано с 11 по 20 из 48

Тема: Вопросы по программированию в CoDeSys

  1. #11

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    странно что вы пишете на St Plc_prg ,а подпрограмму на Sfc ,обычно делают все наоборот.
    Ну у меня всё было сначала на ST, потом я не знал как в ST делается нужная мне временная задержка между активацией в TRUE выходов и по этому переписал подпрограмму на SFC.

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    можно использовать оператор Case ,и вызывать подпрограмму с определенного "шага",по событию (кнопка) делается переход на другой "шаг",где вызова подпрограммы нет.
    к примеру Case PUSK.Step2 ? (PUSK написана на SFC)

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    чтобы при повторном вызове подпрограммы не было "косяков" с переменными в начале их "сбрасывают" (0,false).
    хотя как это делается в Sfc точно не знаю.
    Но при вызове подпрограмма по любому будет выполнятся с начала,а ветвление будет в зависимости от того,что вы написали(или нарисовали).
    Не начинается сначала (((, продолжается с места остановки ....... Надо с флагами что то сделать, вернее с SFCInit или SFCReset, но я что то с ними совссем не могу разобраться( Не получается с помощью них сбрасывать. Скорее всего я какой то нюанс упустил.

  2. #12

    По умолчанию

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    To Magiccat:
    Пока Вы не усвоите основных правил бесполезно рекомендовать...
    ПРОГРАММА НЕ СТОИТ НИ В ОДНОЙ ПОДПРОГРАММЕ...
    За цикл - 1-2 мс контроллер успевает просчитать всю программу, не зависимо на SFC или ST она написана. Записывает результаты и опять начинает обсчет заново.
    ну я просто так для удобства называю, не знаю как это называется у вас. я, кажется, понял что вы пытаетесь мне объяснить, и я уже переделал то что вы говорили, и внутренние циклы убрал =) . остались небольшие проблемы, я бы сказал с синтаксисом.... вот я их и спрашиваю...

  3. #13
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,695

    По умолчанию

    Почитайте описание ST в руководстве.
    Синтаксис и ресурсы похожи на язык Delphi(Paskal).
    CASE Prog_state OF
    100: ... Операторы
    200:Pusk();
    300:...Операторы
    Переменная Prog_state-целочисленного типа , меняете ее в программе , в зависимости от ее значения будет выполнятся "кусок"программы.

  4. #14

    По умолчанию

    вопрос в силе (( не найду ответа (((

    у меня Plc_prg на St, а из неё происходит вызов Sfc. в определённый момент може потребоваться (при нажатии кнопки) вернуться в основную программу из Sfc (прервать выполнение алгоритма).

    вопрос: как при повторном вызове Sfc (при соблюдении условия для её вызова) сделать чтобы она продолжилась не с места прерывания, а с начала.
    Последний раз редактировалось MagicCat; 15.02.2010 в 18:51.

  5. #15

    По умолчанию

    1. НИКАК. Ну не стоит контроллер в подпрограмме - ну хоть ты тресни... и по этому возвращать его ни откуда не нужно - он сам каждый цикл возвращается, добровольно так сказать... Можно по какому то условию просто не передавать управление этой подпрограмме (не вызывать её)...
    if not button then
    prg1();
    end_if;
    2. Вы все правильно поняли с Флагами - надо просто с ними разобраться - у меня руки не доходили...

  6. #16

    По умолчанию

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    1. НИКАК. Ну не стоит контроллер в подпрограмме - ну хоть ты тресни... и по этому возвращать его ни откуда не нужно - он сам каждый цикл возвращается, добровольно так сказать... Можно по какому то условию просто не передавать управление этой подпрограмме (не вызывать её)...
    if not button then
    prg1();
    end_if;
    ок. не вызывать не получется, потому что она в этот момент уже вызвана. какую метку поставить в Sfc, чтобы перейти в Plc_prg ? (чтобы не выполнять оставшийся код Sfc) Пробывал просто Plc_prg; писать но тогда возникает рекурсия...
    Последний раз редактировалось MagicCat; 15.02.2010 в 19:04.

  7. #17

    По умолчанию

    не работают флаги :-(

  8. #18

    По умолчанию

    Еще раз.
    Давайте четко разделим программу, и работу с флагами в SFC.
    1. Работа программы:
    По умолчанию системой исполнения в ПЛК выполняется основная программа. То есть для программы a:=a+1; как будет работать ПЛК:
    Система исполнения смотрит состояние переменных в области ввода. Передает управление программе. Программа выполняется один раз с верху в низ. То есть a будет равно 1. Далее система исполнения записывает значение переменной а (если указано) в область выходов.
    Опять возвращается к входам, опрашивает их, передает управление основной программе... a равно 2. Заканчивается выполнении программы - записываем результат.
    С этим вопросы?
    Теперь добавляем подпрограмму b:=b+2;
    Отбрасываем запись входов и выходов.
    Первый цикл...
    идем с верху по приложенному проекту:
    считаем один раз а. а=1
    видим вызов подпрограммы переходим к ней.
    считаем один раз b. b=2
    выходим из подпрограммы в основную.
    Видим что программа закончилась и идем в начало.
    И так постоянно.
    Теперь просто представьте, что у Вас подпрограмма не на st а на SFC.
    Идем по основной, переходим в подпрограмму - смотрим какой шаг на SFC активный. Один раз выполняем активный шаг, и автоматически возвращаемся в основную программу. Без всяких флагов.
    Вложения Вложения

  9. #19
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,695

    По умолчанию

    Цитата Сообщение от MagicCat Посмотреть сообщение
    не работают флаги :-(
    На сайте codesys.ru есть много статей по программированию на SFC.
    Прежде чем бросаться в бой с топором в руках надо сначала теорию подготовить. Тады и флаги заработают.

  10. #20

    По умолчанию

    решил проблему, переписав всё на язык ST. Спасибо Sergey666 за помощь и разьяснения.

    Николаев Андрей, так же вам благодарен за разьяснения. Спасибо всем кто откликнулся.

    Теперь я уже дописываю свою программу, получилось не так просто, как выглядело на первый взгляд. Простой, на перый взгляд, алгоритм в реализации на CoDeSys оказался достаточно сложным. Если ещё возникнут вопросы то буду их задавать в этой же теме. Ещё раз всем кто откликнулся огромное спасибо.

Страница 2 из 5 ПерваяПервая 1234 ... ПоследняяПоследняя

Ваши права

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