Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 25

Тема: Как программировать вложенные SFC

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию Как программировать вложенные SFC

    Как программировать вложенные SFC программы?
    Т.е. в основной SFC программе шаги состоят из своих программ на SFC.
    У меня либо не рабоет, либо флаги размножаются.
    Есть к кого нибудь пример?


    Вроде разобрался сам.
    Вопрос разработчикам:
    У меня получился SFC стандартный sfc шаг с входным и выходным действием (E и Х).
    Компилятор этого не заметил, программа работает некорректно - это плохо.
    Последний раз редактировалось Антон; 30.01.2008 в 08:38.

  2. #2

    По умолчанию

    В чем проблема - в шаге могут быть и три действия одновременно (выход, выход, выполнение)?

  3. #3

    По умолчанию Пример вложенного SFC

    При запуске проекта в контроллере, контроллер начинает один раз в минуту выключать реле. Я так понимаю проблема с вложенными SFC в блоке INIT.

    И ДАЖЕ В РЕЖИМЕ СТОП!!!!!


    После запуска один маркер остается в самом блоке INIT (при этом шаги внутри INIT не выполняются) , а другой маркер идет дальше.
    Если после шага INIT поставить переход TRUE, то один маркер остается внутри INIT на шаге pink1, а другой продолжает свое движение.
    Можно писать программы с вложенными SFC? КАК?
    Если нет то как переделать проект, т.к. убрать модуль INIT и вставить новый среда не позволяет.
    Теперь весь проект переписывать, что-бы небыло вложений?

    Проект прилагается.
    Вложения Вложения
    Последний раз редактировалось Антон; 31.01.2008 в 09:26.

  4. #4

    По умолчанию

    Цитата Сообщение от Антон Посмотреть сообщение
    При запуске проекта в контроллере, контроллер начинает один раз в минуту выключать реле. Я так понимаю проблема с вложенными SFC в блоке INIT.

    И ДАЖЕ В РЕЖИМЕ СТОП!!!!!


    После запуска один маркер остается в самом блоке INIT (при этом шаги внутри INIT не выполняются) , а другой маркер идет дальше.
    Если после шага INIT поставить переход TRUE, то один маркер остается внутри INIT на шаге pink1, а другой продолжает свое движение.
    Можно писать программы с вложенными SFC? КАК?
    Если нет то как переделать проект, т.к. убрать модуль INIT и вставить новый среда не позволяет.
    Теперь весь проект переписывать, что-бы небыло вложений?

    Проект прилагается.
    Настойчиво рекомендую убрать из Init все. Он должен быть пустой. Для очистки инит используйте контекстное меню - Clear Action Transition. Вложенные SFC писать можно, но нужно понимать как они работают. Иначе говоря - SFC POU вызывает action в моменты получения маркера на состояние. Соотвественно вход- 1 раз, выход- 1 раз и Выполнение - пока нет выхода в след состояние. Если есть выход, то вложенная SFC перестает выполняться, но ее выполнение начнется с того же состояния в котором она находилась. Для сброса SFC POU используйте SFCInit - входную переменную (или SFCReset). Подробно см справку по SFC

    Н_е и_с_п_о_л_ь_з_у_й_т_е стандартные SFC action и Codesys action в одном проекте.

    Насчет щелканья реле - где щелкает - на МВУ или на ПЛК??? Если на МВУ посмотрите что последний раз было записано ШИМ.

  5. #5

    По умолчанию

    Прочитал и мне чуть плохо не стало.
    Разработчикам нужно сделать документ "Отличия работы в CoDeSys v.2.3.8.1 от того что написано в документе "Руководство пользователя
    по программированию ПЛК в CoDeSys 2.3" в следующем виде:
    Стр. документа, абзац такой-то, читать так-то.

    Цитата Сообщение от Малышев Олег Посмотреть сообщение
    Настойчиво рекомендую убрать из Init все. Он должен быть пустой.
    Сделаю, хотя этого нет в руководстве.
    Цитата Сообщение от Малышев Олег Посмотреть сообщение
    Вложенные SFC писать можно, но нужно понимать как они работают. Иначе говоря - SFC POU вызывает action в моменты получения маркера на состояние. Соотвественно вход- 1 раз, выход- 1 раз и Выполнение - пока нет выхода в след состояние. Если есть выход, то вложенная SFC перестает выполняться, но ее выполнение начнется с того же состояния в котором она находилась.
    Как сделать чтобы вложенная SFC выполнялась до конца, а затем шаг (в котором эта SFC записана) передавал маркер дальше?
    Я уже по разному комбинировал, не получается.
    В комплекте с CoDeSys нет ни одного примера с вложенными SFC.
    Пример плз.


    Цитата Сообщение от Малышев Олег Посмотреть сообщение
    Н_е и_с_п_о_л_ь_з_у_й_т_е стандартные SFC action и Codesys action в одном проекте.
    Codesys action это вы имеете ввиду упрощенный SFC шаг?
    А почему?
    Ведь шаг INIT - это упрощенный шаг, а если дальше добавить стандартный, то уже получится смесь разных шагов.
    Опять же в документации написано что можно использовать.
    Кстати. Если в стандартный шаг добавить входное и выходное действие (E и Х) то какой шаг получится?

    Тогда лучше полностью переходить на стандартные шаги и действия на SFC?
    Если действие написано на SFC, то после своего выполнения маркер оно не куда не передает? Чем его нужно заканчивать?

    Цитата Сообщение от Малышев Олег Посмотреть сообщение
    Насчет щелканья реле - где щелкает - на МВУ или на ПЛК??? Если на МВУ посмотрите что последний раз было записано ШИМ.
    В ПЛК реле первого канала.
    Запусьтите проект ради интереса. МВУ и МВА можно не подключать, панель тоже по идее не должна влиять.
    Это ошибки компилятора ввиду вышеприведенных ограничений?
    Последний раз редактировалось Антон; 31.01.2008 в 11:28.

  6. #6

    По умолчанию

    Цитата Сообщение от Антон Посмотреть сообщение
    Прочитал и мне чуть плохо не стало.
    Разработчикам нужно сделать документ "Отличия работы в CoDeSys v.2.3.8.1 от того что написано в документе "Руководство пользователя
    по программированию ПЛК в CoDeSys 2.3" в следующем виде:
    Стр. документа, абзац такой-то, читать так-то.
    Руководства порой отличаются от жизни... Понятно, что ядро CoDeSys в ПЛК мы не меняли...
    [QUOTE=Антон;6945]

    Сделаю, хотя этого нет в руководстве.

    Как сделать чтобы вложенная SFC выполнялась до конца, а затем шаг (в котором эта SFC записана) передавал маркер дальше?
    Цитата Сообщение от Антон Посмотреть сообщение

    Я уже по разному комбинировал, не получается.
    В комплекте с CoDeSys нет ни одного примера с вложенными SFC.
    Пример плз.
    Пример приложен.

    Цитата Сообщение от Антон Посмотреть сообщение
    Codesys action это вы имеете ввиду упрощенный SFC шаг?
    А почему?
    Ведь шаг INIT - это упрощенный шаг, а если дальше добавить стандартный, то уже получится смесь разных шагов.
    Извините - не так выразился - не используйте IEC steps одновременно с упрощенными.

    Шаги и действия - это разные вещи.
    Цитата Сообщение от Антон Посмотреть сообщение

    Опять же в документации написано что можно использовать.
    Кстати. Если в стандартный шаг добавить входное и выходное действие (E и Х) то какой шаг получится?

    Тогда лучше полностью переходить на стандартные шаги и действия на SFC?
    Если действие написано на SFC, то после своего выполнения маркер оно не куда не передает? Чем его нужно заканчивать?


    В ПЛК реле первого канала.
    Запусьтите проект ради интереса. МВУ и МВА можно не подключать, панель тоже по идее не должна влиять.
    Это ошибки компилятора ввиду вышеприведенных ограничений?
    PLC Browser ->PLCInfo
    Вложения Вложения
    • Тип файла: rar tsе.rar (2.7 Кб, Просмотров: 22)

  7. #7

    По умолчанию Щелкает реле

    Вот пример программы.
    При работе выкл реле первого канала с периодичностью 5 секунд.
    Что это за мистическое время?
    А оказывается это период архивации.
    При удалении файла реле перестает щелкать.
    Видимо возникает переполнение.


    P.S. Архиватор почему-то работает в режиме полного стирания-записи файла, а не в режиме сдвига.

    Быстро дорабатываете модуль архивации иначе меня уволят и я буду проситься к вам на работу тестировщиком
    Вложения Вложения
    • Тип файла: rar test3.rar (36.3 Кб, Просмотров: 20)
    Последний раз редактировалось Антон; 31.01.2008 в 14:11.

  8. #8

    По умолчанию

    Уважаемый Антон!
    Посмотрел Ваши проекты...
    У вас 3 проблемы:
    1. Программа внутри цикла ПЛК выполняется 4 мс при выставленном цикле ПЛК в 1 мс. В результате на внутренние нужды ПЛК остаётся чрезвычайно мало времени и происходит подтормаживание при всех операция. Необходимо оптимизировать Ваше приложение и разбить работу на более маленькие части с использованием Task Manager.
    2. В проекте 3 архиватора, запись в каждом осуществляется в текстовом режиме, причем размер файлов во всех 3-х выставлен в 32 тысячи записей (а каждая запись - не менее 30 байт примерно). Т.о. суммарный размер файлов архиватора ~3 МБайт + размер проекта ПЛК, что в сумме превосходит весь размер диска.
    3. Для работы в режиме архиватора со сдвигом, для сдвига модуль архиватора требует размер свободного ОЗУ = 1/2 размера сдвигаемого файла, т.е. 512 кБайт - столько в ПЛК не осталось, в результате архиватор переходит в запасной режим и работает стирая старый файл.
    К тому-же, если модулю архивации придётся записать 512 кБайт во Flash, то это вызовет задержку, т.к. размер очереди кэша на запись составляет чуть более 30 кБайт, а при её переполнении запись начинает производится непосредственно во Flash, а не кэшируется и не производится в фоновом режиме.

    Рекомендации:
    1. Прооптимизировать программу.
    2. Использовать Task Manager (Welcome на наш семинар)
    3. Уменьшить размер файлов в архиваторе.

  9. #9

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Уважаемый Антон!
    Посмотрел Ваши проекты...
    У вас 3 проблемы:
    1. Программа внутри цикла ПЛК выполняется 4 мс при выставленном цикле ПЛК в 1 мс. В результате на внутренние нужды ПЛК остаётся чрезвычайно мало времени и происходит подтормаживание при всех операция. Необходимо оптимизировать Ваше приложение и разбить работу на более маленькие части с использованием Task Manager.
    Раньше у меня было время цикла 40 мс (связано с джитером аналогового выхода) и были те-же проблемы (зависания обмена с МВА).
    Мне надоели тормоза при отладке и я задал 1 мс.

    А если задать 0 мс?
    Сколько нужно задать чтобы не было никаких проблем?

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    2. В проекте 3 архиватора, запись в каждом осуществляется в текстовом режиме, причем размер файлов во всех 3-х выставлен в 32 тысячи записей (а каждая запись - не менее 30 байт примерно). Т.о. суммарный размер файлов архиватора ~3 МБайт + размер проекта ПЛК, что в сумме превосходит весь размер диска.
    Проблемы начинаются при размерах файлов около 200 кб.
    Я пробовал делать в архиве по времени 100 записей, проблема не исчезала (зависания обмена с МВА).
    Более того: через несколько перезаписей архива в него начали писаться одни нули. СОВЕТУЮ проверить этот факт.
    При зависании обмена с МВА я стер архивный файл. И через примерно одну минуту связь с МВА восстановилась.

    А в приведенном проекте файл тоже был примерно 200 кб, когда начало щелкать реле. После стирания файла реле перестало щелкать.

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    3. Для работы в режиме архиватора со сдвигом, для сдвига модуль архиватора требует размер свободного ОЗУ = 1/2 размера сдвигаемого файла, т.е. 512 кБайт - столько в ПЛК не осталось, в результате архиватор переходит в запасной режим и работает стирая старый файл.
    К тому-же, если модулю архивации придётся записать 512 кБайт во Flash, то это вызовет задержку, т.к. размер очереди кэша на запись составляет чуть более 30 кБайт, а при её переполнении запись начинает производится непосредственно во Flash, а не кэшируется и не производится в фоновом режиме.
    Очень интересно. В паспорте на ПЛК написано что ОЗУ составляет 8 Мб.
    Хотите сказать что проект в 80кб использует более 7 Мб ОЗУ ?
    Как это можно посмотреть?
    И опять таки даже при задании 32000 записей при глюках файлы состовляли не более 300 кб каждый. Самый длинный был 4600 строк.

    Рекомендации:
    1. Прооптимизировать программу.

    Зачем? И так проблем хватает. Мне и 100 мс вполне достаточно, но хочется быстрой отладки/загрузки.

    2. Использовать Task Manager (Welcome на наш семинар)

    Лучше уж вы к нам (Пока нет возможности)

    3. Уменьшить размер файлов в архиваторе.

    Куда уж меньше. (см. выше)

  10. #10

    По умолчанию

    Начнем с конца.
    1.При работе в текстовом режиме архиватор считает размер файла не в байтах, а в записях, т.е. как Вы говорите 4600 строк - это 1/7 от заданного Вами же размера. Т.о. сдвиг просто еще не включался, рановато.

    2. Если Вы выставляете цикл ПЛК 1 мс, а реально Ваша программа настолько велика, что выполняется 4 мс, то происходит следующее - начинается цикл, он длится в 4 раза чем задано, после окончания цикла должны проходить операции обслуживания, в т.ч. и обмена с МВА и пр.
    Но, т.к. следующий цикл и так уже запоздал на 3 мс, ПЛК выделяет на обслуживание очень мало времени, несколько мкс, и за этот период операции обмена с входами/выходами, работа мастеров и пр. не успевает полностью произойти. Из-за этого и возникают проблемы с обменом.
    Придется либо оптимизировать программу, либо разбивать её на мелкие подпрограммы, к-е по отдельности выполняются меньше цикла ПЛК, либо увеличить цикл ПЛК, в Вашем случае рекомендую 6 мс, а лучше 10.

    3. Про память - 8МБайт, в которых расположен собственно код ядра, ОЗУ для внутренних переменных, кэш на чтение и запись, буфера для последовательных интерфейсов, Ethernet и сокетов, куча для модулей расширения и функций работы с памятью самого CoDesys, 2 Мбайта для кода проекта, 128 кБ для оперативной памяти проекта и много много чего другого. В результате остаётся не так уж и много...

    4. Про архивирование - чем больше файл, тем больше ресурсов времени он требует на обработку. Соответственно при каждой записи архиватор должен открыть файл, перейти в его конец, записать, синхронизировать кэш и пр. операции обслуживания. Время на эти операции растет пропорционально размеру файла. На некотором объеме это время становиться недопустимо большим. И размер файла был сознательно ограничен 32000 байт в бинарном режиме. В текстовом режиме такое ограничение наложить невозможно, т.к. размер записи может варьироваться в очень широких пределах.

    Та же проблема с большими файлами в архиваторе приводит к щелканию реле. В ПЛК есть защита от зависания центрального процессора и если в течении 250 мс процессор не подтвердит свою работоспособность, послав посылку в нижний микропроцессор, он переведёт выхода в безопасное состояние. При работе с большими файлами возможны такие задержки.
    Поэтому рекомендую уменьшить размеры архивов до 20-30 кБайт и проблемы исчезнут.

    P.S. При работе с файлами из самой среды СoDesys также следует за 1 цикл ПЛК не читать свыше 30-50 кБайт и не записывать свыше 20-30 кБайт.

    Проблемы с выводом в архив нулей мы проверим.

    P.S. также рекомендую увеличить время ожидания ответа от МВА до 50 мс
    Последний раз редактировалось Филоненко Владислав; 31.01.2008 в 20:52.

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

Ваши права

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