Просмотр полной версии : Вопросы по переводу алгоритма из блок-схемы в язык ST
может это не мое дело, но описывать алгоритмические последовательности на st не самый лучший вариант. нет, кончено, если очень хочется, то и на st можно все реализовать, правда мне кажется, что это не будет выглядеть оптимально/красиво.
подпрограммы в одну строку такими и останутся? в таком случае можно и без них обойтись. в остальном - на вкус и цвет...
может это не мое дело, но описывать алгоритмические последовательности на st не самый лучший вариант. нет, кончено, если очень хочется, то и на st можно все реализовать, правда мне кажется, что это не будет выглядеть оптимально/красиво.
Согласен, потому и спрашиваю, как можно структуризировать программу.
Графические языки очень не хочется использовать... Мне текст как-то намного понятнее сходу...
подпрограммы в одну строку такими и останутся? в таком случае можно и без них обойтись. в остальном - на вкус и цвет...
Нет, это очень упрощенный вариант, будет побольше строк. Иначе и не стал бы городит огород :)
написал алгоритм работы в виде блок-схемы...
Начал писать программу по алгоритму. Язык - ST. Теперь вопросы.
1. Насколько я понимаю, по алгоритму нужно реализовать машину состояний, минимизировав их количество?
Почитайте о языке SFC...по моему это под вашу задачу и мышление...
ЗЫ.. ну если очень не нравятся графические языки ;-) то почитайте о switch-программировании...
как можно структуризировать программу.
задачу управления автооператором структурировать можно, по моему мнению (также занимаюсь электрохимией в ваннах с автооператорами), используя упомянутый выше SFC. но если душа лежит к st, а к графическим жесткое отвращение - то все в ваших руках, нет ничего невозможного.
хотя если посмотреть на картинки вашей блок-схемы и сравнить с языком SFC..., то угадайте на что будут похожи картинки?)
задачу управления автооператором структурировать можно, по моему мнению (также занимаюсь электрохимией в ваннах с автооператорами), используя упомянутый выше SFC. но если душа лежит к st, а к графическим жесткое отвращение - то все в ваших руках, нет ничего невозможного.
хотя если посмотреть на картинки вашей блок-схемы и сравнить с языком SFC..., то угадайте на что будут похожи картинки?)
Да я сразу и подумал, что алгоритм очень похож на этот язык :) И не то, чтобы испытываю отвращение к графическим языкам, просто привык к тексту, как-то он понятнее для меня.
Почитайте о языке SFC...по моему это под вашу задачу и мышление...
ЗЫ.. ну если очень не нравятся графические языки ;-) то почитайте о switch-программировании...
Спасибо, почитаю. Но всё же ещё раз главный вопрос - если писать на st, то всю логику нужно будет держать в одной простыне текста, так?
Создайте нужное количество функциональных блоков (типа подпрограмм) и работайте с ними из основной программы... В документации всё это есть, а на каком языке вы будете создавать функциональные блоки - не важно...
Тогда ещё два вопроса
1. В функциональном блоке или программе, отличной от главной, можно оставаться неограниченно долго? Так, чтобы ПЛК в циклах обрабатывал лишь действия, описанные в этом блоке/программе?
2. Если можно, то как вернуться, когда нужно, в основную программу?
У меня сложилось мнение, что в функциональных блоках/программах нельзя задерживаться долго, там можно делать как можно более короткие операции (типа как прерывания в микроконтроллерах).
надо описать условия возврата в основную прогу, а потом хоть всю работу выполнять в этом ФБ
У меня сложилось мнение, что в функциональных блоках/программах нельзя задерживаться долго, там можно делать как можно более короткие операции (типа как прерывания в микроконтроллерах).
Типа того...
ВСЕ блоки обрабатываются за один цикл ПЛК... их нельзя останавливать, приостанавливать и т.п... можно только передавать параметры и получать результат... Почитайте побольше о принципах фунициклирования ПЛК...
Хотя существуют ПЛК, где довольно гибко можно работать и с внешними прерываниями, и с прерываниями по таймеру...
надо описать условия возврата в основную прогу, а потом хоть всю работу выполнять в этом ФБ
Не понимаю. Если я вызвал функциональный блок, то управление передаётся в него, это понятно. Но разве по выполнению всех строк блока управление не передаётся в основную программу? Не могли бы вы на примере моей программы показать, как оформить обработку нажатия кнопки _влево_ в виде функционального блока, передать ему управление целиком и пример условия возврата в основную программу? Спасибо заранее.
Не понимаю. Если я вызвал функциональный блок, то управление передаётся в него, это понятно. Но разве по выполнению всех строк блока управление не передаётся в основную программу?
если ФБ из одной строки вида
out:=in1+in2;
то да, надолго тут не задержишься.
если же у вас в ФБ описан алгоритм (на SFC) подготовки космического корабля к запуску в долгий полет, по окончании которого ФБ радостно рапортует о проделанной работе, то тут придется задержаться, и чтоб в случае чего прервать этот алгоритм надо описать условия преждевременного завершения
управление туда, управление сюда... если вызывается ФБ это еще не значит, что в основной программе в этот момент нельзя производить никаких действий. контроллер все равно обрабатывает весь код.
вот слабо, но на вашем примере - в каком-то ФБ идет обработка каких-либо условий и выполнение каких-либо действий. а если в этот момент произошел сбой, АО съехал с рельс (просто для примера). где будет сидеть код обработки этой ошибки, в ФБ, в основной программе? если в основной, то по вашим словам вы все управление передаете в ФБ. так можно и установку сломать. а если обработка в ФБ, то что же вы будете 1 и тот же код пихать во все ФБ?
управление туда, управление сюда... если вызывается ФБ это еще не значит, что в основной программе в этот момент нельзя производить никаких действий. контроллер все равно обрабатывает весь код.
Мне просто казалось, что в конкретный цикл контроллер обрабатывает одну задачу (если в ней идёт вызов других, то и их тоже, конечно). А далее - по условию, т.е. если одна программа, то в следующем цикле - тот же CASE, если используется несколько задач, то будет вызов задачи циклически либо по событию. Но я правильно понимаю, что в одном цикле обрабатывается только одна задача, или нет?
Но я правильно понимаю, что в одном цикле обрабатывается только одна задача, или нет?
нет. в каждом цикле ПЛК опрашивает входы, обрабатывает всю программу пользователя, записывает выходы, (передает данные по сети)
То есть обработка будет в отдельной программе, но вызываться она будет немедленно, а так как во всех задачах у меня нет длительных ожиданий чего-либо, то думаю обработка аварийной ситуации не доставит трудностей.
т.е. обработка ошибок в подпрограмме, которая вызывается только по окончании какой либо задачи? а если задача все же затянется?
нет. в каждом цикле ПЛК опрашивает входы, обрабатывает всю программу пользователя, записывает выходы, (передает данные по сети)
Так а если у меня все подпрограммы вызываются либо из основной программы, либо по внешнему событию, на основании чего ПЛК будет их обрабатывать, если они не вызываются в конкретный цикл ниоткуда?
Так а если у меня все подпрограммы вызываются либо из основной программы, либо по внешнему событию, на основании чего ПЛК будет их обрабатывать, если они не вызываются в конкретный цикл ниоткуда?
это как загадка «Слышен ли звук падающего дерева в лесу, если рядом никого нет?»:)
не вызываем - не обрабатывает. а как проверить что не обрабатывает?:)
p.s. надо сделать уточнение - под "обрабатывает всю" я имел ввиду не то, что прямо производит вычисления, действия если подпрога не вызвана, а что просто пробегается по простыне кода
под "обрабатывает всю" я имел ввиду не то, что прямо производит вычисления, действия если подпрога не вызвана, а что просто пробегается по простыне кода
А зачем это, зачем терять процессорное время, если действия и вычисления не производятся?
И, как процессор может "пробежаться" по коду, не исполняя его?
Для того, что бы не пропустить никакого изменения в переменных...и не важно входа это или регистры, таймеры или счётчики....
Алексей Дмитриев
18.04.2011, 23:22
Господа, может конечно я чего не понял, но
http://i017.radikal.ru/1104/de/bdce404a4556.jpg (http://www.radikal.ru)
Пишем на LD 14...20 цепочек и вуаля, зачем так сложно-то. Почитайте литературу по контроллерам (PLC) для начинающих.
Игорь Петров
17.05.2011, 12:46
Хорошая работа!
Используйте многозадачность для эмулятора. Обычно параллельно с рабочей программой, прямо в CoDeSys мы запускаем программу эмулирующую объект. В старые времена (до CoDeSys) делали подобные внешние эмуляторы.
кажется кусочек потерялся)
извините, у меня картинки не отображались)
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot