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

Тема: Вопросы по поиску правильной архитектуры приложения.

  1. #11

    По умолчанию

    Цитата Сообщение от Alex19 Посмотреть сообщение
    Идея была в том, чтобы свалиться в прерывание и перейти в начало программы.
    Ради интереса потом гляну возможно ли это.
    Так не работает.
    Дело, например, в том, что помимо вашей программы, ПЛК выполняет обработку сети (ethernet, 485 и т.п.).
    Если вы собрались занимать вообще всё процессорное время, то кто будет отвечать по сети?

    Поэтому, цикл "1мс" существует специально для того, чтобы ПЛК мог выполнять свои задачи.
    Например, пользовательская программа "вычислить 10 if'ов" занимает 0.1мс, а всё остальное время 0.9мс прошивка ПЛК использует для своих нужд (сеть экран вот это всё).

    В общем "тут принято", без прерываний, и у всех работает (если правильно помню, то обрабатывают более 30 модулей, и цикл не превышает 2мс)

  2. #12

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Так не работает.
    Дело, например, в том, что помимо вашей программы, ПЛК выполняет обработку сети (ethernet, 485 и т.п.).
    Если вы собрались занимать вообще всё процессорное время, то кто будет отвечать по сети?

    Поэтому, цикл "1мс" существует специально для того, чтобы ПЛК мог выполнять свои задачи.
    Например, пользовательская программа "вычислить 10 if'ов" занимает 0.1мс, а всё остальное время 0.9мс прошивка ПЛК использует для своих нужд (сеть экран вот это всё).
    Да и сама моя идея, была не правильная, погорячился.

    Самый верный подход, как мне кажется, это прерывание, в котом задаем переменную, а дальше, только в ответственных участках кода проверяем ее. Тогда все будет логично и правильно, надо только понять как происходит передача управления. В станке предусмотрено еще 2 уровня защиты, оба механических, на случай ошибок или выхода ПЛК из строя.

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

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    В общем "тут принято", без прерываний, и у всех работает (если правильно помню, то обрабатывают более 30 модулей, и цикл не превышает 2мс)
    Вы зародили сомнения, в моем решении.

    У Вас больше опыта с ПЛК, но мой предыдущий опыт (с обычными микроконтроллерами), говорит, что решить такую задачу в ПЛК без прерываний не возможно. Попробую разобраться с прерываниями, тогда все станет на свои места.

  3. #13
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,823

    По умолчанию

    Цитата Сообщение от Alex19 Посмотреть сообщение
    Да и сама моя идея, была не правильная, погорячился.

    Самый верный подход, как мне кажется, это прерывание, в котом задаем переменную, а дальше, только в ответственных участках кода проверяем ее. Тогда все будет логично и правильно, надо только понять как происходит передача управления. В станке предусмотрено еще 2 уровня защиты, оба механических, на случай ошибок или выхода ПЛК из строя.

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


    Вы зародили сомнения, в моем решении.

    У Вас больше опыта с ПЛК, но мой предыдущий опыт (с обычными микроконтроллерами), говорит, что решить такую задачу в ПЛК без прерываний не возможно. Попробую разобраться с прерываниями, тогда все станет на свои места.
    Придется расстаться с опытом с обычными микроконтроллерами. Нету в ПЛК прерываний, и работает он с физическими входами и выходами не так, как обычный микроконтроллер.
    Рабочий цикл ПЛК.
    1. Опрос физических входов
    2. Сохранение образа состояния входов
    3. Выполнение программы, при этом используются именно образ входов. Если в программе используются выходы ПЛК, то изменение их состояния происходит не на физ. выходах а в их образе.
    4. Запись образа выходов на физические выходы ПЛК
    5. Выполнение служебных задач.
    Далее все повторяется
    Станок постоянно опрашивает один из входов контролера и если на нем появляется логический 0, станок должен остановится. При этом не важно в каком режиме работает данный станок, в каком шаге и т.д., он должен выполнить определенные действия в зависимости от шага автомата (отключить какое-то оборудования) и остановиться. А в автоматическом режиме, при появлении на данном входе 1, должен продолжить из места остановки.

    Как мне видится решение данной проблемы.
    1. Перед каждым шагом в условии if проверяем функцию. Функция проверяет вход, а если требуется остановка выполняет определенные действия (отключает какое-то оборудование) в зависимости от шага автомата.
    Все просто, но минус если шагов сотни, то каждый раз прописывать if, ужасно не удобно.
    Все очень просто и без прерываний.
    Ясно, что для конечного автомата нужно использовать CASE.
    Но вот вместо IF для каждого шага нужно вынести этот IF за пределы CASE, например перед ним.
    И так остановка станка по условию появления 0 на определенном входе ПЛК это тоже некоторое состояние автомата. И его просто нужно описать в CASE. А во внешнем IF/ELSE, который перед CASE, проверять состояние входа ПЛК и если нужно выполнить стоп, то запомнить текущее состояние переменной CASE и присвоить ей номер состояния отработки остановки станка.
    При появлении на входе ПЛК сигнала о продолжении работы, во внешнем IF/ELSE присвоить переменной CASE ранее сохраненное значение. И работа станка возобновиться из места остановки.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #14
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,823

    По умолчанию

    Вот маленький пример, который демонстрирует выше сказанное
    Код:
    PROGRAM PLC_PRG
    VAR
    	state: INT;
    	Pusk: BOOL;
    	A: INT;
    	B: INT;
    	PAUSA: BOOL;
    	old_state: INT;
    	C: INT;
    	D: INT;
    END_VAR
    F PAUSA AND state<>999 THEN
    	old_state:=state;
    	state:=999;
    END_IF
    
    CASE state OF
    0:
    	IF Pusk THEN state:=1; END_IF
    1:
    	A:=A+1;
    	C:=A;
    	IF A >=100 THEN state:=2; END_IF
    2:
    	B:=B+1;
    	D:=B;
    	IF B >=150 THEN state:=3; END_IF
    3:
    	A:=A-1;
    	C:=A;
    	IF A = 0 THEN state:=4; END_IF
    4:
    	B:=B-1;
    	D:=B;
    	IF B =0 THEN state:=1; END_IF
    999:
    	C:=0;
    	D:=0;
    	IF NOT PAUSA THEN
    	state:=old_state;
    	END_IF
    END_CASE
    Скрытый текст:


    Чтобы понять разницу между ПЛК и микроконтроллером просто поставьте точку останова и пройдите программу по шагам.
    Скрытый текст:

    И сразу станет понятно, что программа не останавливается внутри CASE для какого-либо состояния до начала следующего цикла, а обрабатываются все строки программы до конца и в следующем цикле программа всегда начинается с первой строчки кода, а не внутри CASE.
    Поэтому можно во внешнем IF поменять значение переменной для CASE и СASE начнется с нового состояния, а не с текущего.
    Вложения Вложения
    Последний раз редактировалось petera; 29.09.2016 в 12:48.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #15
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    У Вас больше опыта с ПЛК, но мой предыдущий опыт (с обычными микроконтроллерами), говорит, что решить такую задачу в ПЛК без прерываний не возможно. Попробую разобраться с прерываниями, тогда все станет на свои места.
    Какую задачу? Остановить станок по входу? Ну я решал без всяких прерываний, например. Если ПЛК по вашим расчётам не может сделать этого достаточно быстро - решайте другими средствами, делов-то.

    Программа ПЛК это функция входов, оперативной памяти и таймера. Прерывания сильно эту картину ломают. Если будете ими пользоваться, то делайте в них только самое необходимое, не надо строить на них основную часть логики.

  6. #16
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Для станка программу пишут в ладере, без всяких условий иф и кассе.
    Эти условия вас приведут к нехорошим вещам, т.к. нужно следить за окончанием выполнения операций внутри них.
    таймеры к примеру и т.п.
    Пишется отдельно для каждой операции ФБ
    внутри него строка начинается с контакта АУ, другая РУ.
    Если не контакт не включен строка далее ПЛК не проверяется.
    Строки будут почти одинаковые.
    При отладке и поиске неисправностей оч. удобно, что все в одном месте.
    В плсипрг просто последовательно записываются эти блоки.
    Прерывания используются только для скоростных операций.
    Насколько Овен подойдет вашей задачи, смотрите сами.

  7. #17

    По умолчанию

    Извините за паузу, только освободился на работе.

    Конечно, я понимал, что Владимир скорее всего прав, учитывая его опыт.
    Но меня смутило это видео, которое вечером постараюсь повторить и пройтись по нему отладчиком.


    Потом petera, подтвердил, выше сказанное Владимиром .
    Цитата Сообщение от petera Посмотреть сообщение
    Придется расстаться с опытом с обычными микроконтроллерами. Нету в ПЛК прерываний, и работает он с физическими входами и выходами не так, как обычный микроконтроллер.
    Рабочий цикл ПЛК.
    1. Опрос физических входов
    2. Сохранение образа состояния входов
    3. Выполнение программы, при этом используются именно образ входов. Если в программе используются выходы ПЛК, то изменение их состояния происходит не на физ. выходах а в их образе.
    4. Запись образа выходов на физические выходы ПЛК
    5. Выполнение служебных задач.
    Далее все повторяется
    Спасибо за подробное пояснение.

    Цитата Сообщение от petera Посмотреть сообщение
    Все очень просто и без прерываний.
    Ясно, что для конечного автомата нужно использовать CASE.
    Но вот вместо IF для каждого шага нужно вынести этот IF за пределы CASE, например перед ним.
    И так остановка станка по условию появления 0 на определенном входе ПЛК это тоже некоторое состояние автомата. И его просто нужно описать в CASE. А во внешнем IF/ELSE, который перед CASE, проверять состояние входа ПЛК и если нужно выполнить стоп, то запомнить текущее состояние переменной CASE и присвоить ей номер состояния отработки остановки станка.
    При появлении на входе ПЛК сигнала о продолжении работы, во внешнем IF/ELSE присвоить переменной CASE ранее сохраненное значение. И работа станка возобновиться из места остановки.
    Большое спасибо за подробное описание с кодом и видео.
    Саму схему представлял себе примерно так же, но вот разницы между ПЛК и контролером пока не увидел. Мы так же идем в цикле while, цикл за циклом с верху вниз, разумеется если нет прерываний, которые могут сломать это поведение.

    Цитата Сообщение от Yegor Посмотреть сообщение
    Какую задачу? Остановить станок по входу? Ну я решал без всяких прерываний, например. Если ПЛК по вашим расчётам не может сделать этого достаточно быстро - решайте другими средствами, делов-то.

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

    Но выходит, что это единственно правильная/возможная схема работы.
    Учитывая что Вы все предлагаете делать именно так.
    Последний раз редактировалось Alex19; 29.09.2016 в 16:49. Причина: Исправление

  8. #18

    По умолчанию

    Цитата Сообщение от lara197a Посмотреть сообщение
    Для станка программу пишут в ладере, без всяких условий иф и кассе.
    Эти условия вас приведут к нехорошим вещам, т.к. нужно следить за окончанием выполнения операций внутри них.
    таймеры к примеру и т.п.
    Пишется отдельно для каждой операции ФБ
    внутри него строка начинается с контакта АУ, другая РУ.
    Если не контакт не включен строка далее ПЛК не проверяется.
    Строки будут почти одинаковые.
    При отладке и поиске неисправностей оч. удобно, что все в одном месте.
    В плсипрг просто последовательно записываются эти блоки.
    Прерывания используются только для скоростных операций.
    Насколько Овен подойдет вашей задачи, смотрите сами.
    Что такое ладер?

    Мне требуется ПЛК из-за его надежности.
    Поэтому буду стараться изменить свое мышление.

  9. #19
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Что такое ладер?
    Ladder Logic. Язык, который заставляет применять ПЛК строго по их назначению =)

    Да именно, остановить станок, безопасность операторов.
    По идее он должен успеть, но такой подход мне показался не правильным.
    Электромеханикой делайте в обход контроллера. Это ж безопасность, ё-маё. Мы для одной большой печки не поленились вообще режим "без контроллера" сделать, чтобы деталь в печке спасти можно было. А когда людей спасать требуется, тут точно надо делать так, чтобы оно не могло не сработать.
    Последний раз редактировалось Yegor; 29.09.2016 в 17:12.

  10. #20

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Вам 5 мс погоду делают или нет? Что это за вход вообще и что за станок?
    Да, погоды не сделает.
    Но я хотел понять, как вообще это делают.

    Что касается станка, это термопластавтомат.
    У которого еще до электронной защиты, есть механические. Это плата, которая агрегирует разные входы, начиная от защитных шиберов, кончая датчиками уровня, температуры масла и так далее.
    Последний раз редактировалось Alex19; 29.09.2016 в 17:10. Причина: Исправление

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

Похожие темы

  1. Выбор правильной конфигурации
    от maxsus в разделе Подбор Оборудования
    Ответов: 3
    Последнее сообщение: 07.09.2015, 16:39
  2. Друзья , нужна помощь в подключении и правильной работе МПР51
    от Виктор Иванов в разделе Эксплуатация
    Ответов: 11
    Последнее сообщение: 24.07.2015, 14:47
  3. ПЛК 304 автозапуск приложения
    от Шевцов Игорь в разделе ПЛК3хх
    Ответов: 24
    Последнее сообщение: 06.03.2015, 12:07
  4. Поделитесь опытом по поиску Заказчиков
    от dmm в разделе Трёп (Курилка)
    Ответов: 16
    Последнее сообщение: 11.12.2011, 23:21
  5. вопрос по выбору архитектуры
    от Kraft в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 09.02.2010, 07:11

Ваши права

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