Просмотр полной версии : Главный цикл
Извиняюсь, если задаю глупый вопрос, однако освещен он слабо.
Как устроен главный цикл в плк?
Ну к примеру тип такого?
while(1)
{
do PLC_PRG();
}
Просто вот в чем возникло сомнение.
Есть примитивная "программа" :
LED = 255; //зажечь все светодиоды
После заливки и старта - выходит так - что светодиоды просто моргнули, но не зажглись.
Значит их значения сбросились в 0 и программа прекратила выполнение?
Вообщем довольно интересно как-там и что)
Что это за LED переменная? откуда она?
Плк итак за вас крутит цикл.
Устроенно так
1) опрос входов
2) выполнение прораммы
3) запись выходов
И так постоянно.
Хех) Ну LED - это просто переменная приатаченная к состоянию светодиодов на лицевой панели плк.
Ну скажем чтоб зажечь самый первый светодиод нужно сделать так
LED.0 =1;
И т.д. - т.е. 8-битная переменная - если зажечь все т.е. LED=b'11111111' или по десятеричной LED=255;
А вот это:
"1) опрос входов
2) выполнение прораммы
3) запись выходов"
странно.
Ибо выходит так :
Бесконечный цикл
{
Опрос входов плк
"Зажечь все светодиоды"
Запись выходов.
}
По логике - они(светодиоды) - должны загореться и все. Но они тухнут.... Значит где-то что-то их сбрасывает.
Полная программа так и выглядит:
PROGRAM PLC_PRG
VAR
END_VAR
LED = 255;
Все. Т.е. они ни где не устанавливаются в 0. По логике - зажгли -и в следующем глобальном цикле плк - зажгли еще раз(т.е. ничего не меняем) и так и далее.
Как же так? Хм.....
Что за плк?
Светодиоды вы ведь можете зажечь только если будете включать выхода так?
Так на ST
IF pusk THEN (*PUSK - bool*)
LED:=255;
END_IF
Если на CFC, то так
13259
Ну почему тогда у меня вот такая ситуация.
Если код выглядит так :
13260
То светодиоды вспыхивают и мгновенно тухнут.
А если код поправить так :
13261
Тогда при пуске - они загораются и горят. ну так то да - там же мною реализован бесконечный цикл.
Но почему не работает бесконечный цикл в первом случае?
Контролер - ПЛК73М
Признаюсь сразу - я с плк работаю впервые в жизни. Работаю уже целых 2 часа. Но в целом я хорошо знаю С++, так что вот не могу понять почему тот "автоматический бесконечный главный цикл - на деле не бесконечный"
Здесь цикл в цикле это не хорошо.
Очень надо аккуратно, потому что сидит ватч дог.
Всетаки где описана LED, в конфинураторе?
Почему бы вам не включить каждый выход отдельно и посмотреть?
О While забудьте пока что.
Угу. LED - задана в конфигурации PLC. Раздел Additional[FIX] - а именно там где пишет "Светодиоды".
13264
Насчет каждого входа.
Я даже так писал :
LED.0 = 1;
LED.1 = 0;
LED.2 = 1;
LED.3 = 0;
LED.4 = 1;
Нифига - вспыхивают и мгновенно гаснут(
Мне необходимо это понять для того чтобы двигаться далее.
1....
2. Ваше
temp := true
if temp then
led := 255
end_if
тавтология для человека программирующего вообще. Достаточно
led := 255;
Если ж хочется ровно 1 раз и все, то
if temp then
led := 255
end_if
temp := false;
Да и то, при условии
var
temp : bool := true;
2.
temp := true;
while temp do
led := 255;
end_while
Не надо ля-ля про то, что это работает как надо. Разве што только "надо" - это перезагрузка и обрыв связи.
так что вот не могу понять почему тот "автоматический бесконечный главный цикл - на деле не бесконечный"
См. внимательно
Что это за LED переменная? откуда она?
Плк итак за вас крутит цикл.
Устроенно так
1) опрос входов
2) выполнение прораммы
3) запись выходов
И так постоянно.
PS
Пока отвечал - некоторые вещи прояснились.
онлайн/старт - делаем после загрузки ?
1. фулл код приведен в посте #5.
Какой еще вам код нужен?
Как привязан - показано в посте #7
Я сам не люблю Ванг)
2. Что ж. LED = 255; - я опробовал в самом начале - прежде чем писать всякую хрень с while)
>Если ж хочется ровно 1 раз и все, то
Хочется написать LED=255; - и чтобы светодиоды горели. А не моргнув тухли.
С while - я и так знаю что такое приведет к зимней лисичке) Это было сделано для разового теста - не более.
>онлайн/старт - делаем после загрузки ?
Естественно)
Хотя..... сек...
Не, я уже сам перепугался. Пускаю. Заливаю так.
1) Компилируем
2) Online->Login
3) Run
Насчет тафтологии это я написал так, потому что не знаю что у него там дальше выполняется, если они загорелись должны были остаться, так то с вами согласен.
хз про эти светодиоды, никогда не пользовался, цепляйте лампочку на выход и играйтесь с выходом, чтобы понять.
Да нормально диоды работают. А моргают вроде при перезагрузке.
Упростим до нельзя. Весь код :
;
онлайн/подкл
онлайн/сброс заводской
онлайн/откл
проект/очистить все
онлайн/подкл
Тыркаем по led. Пишем 63. Что с диодами ?
Упростил до точки с запятой.
Сделал - онлайн - подкл - сбос заводской (контроллер не имеет программы)
онлайн - откл,
проект - очистить все, онлайн - подключить
Прописал новое значение в led 63 - enter - и ............ блинк и фсёёёёё....
.. (С) Yegor
И что значит фсёёё ? Связь есть ? Щелкните из конфигурации выходом (если есть Р)
Да сам проект воть:
https://yadi.sk/d/RPRGiBeRTBwVn
Дело в том что в debug окне - я вижу что переменная LED - устанавливается в 63 - и не меняется.
Однако светодиоды не хотят гореть))))
Сами светодиоды рабочие - т.е. от нажатий кнопок на лицевой панели - они загораются.
Может я создал переменную LED - которая только "для чтения" состояний? Ну т.е. не так задавать нид?
выходы руками из конфигурации - щелкают ?
ps
А вы уверены что вообще соединяетесь нормально (gateway с com через tcp) ?
Хех, выходы реле робят норм. Т.е. устанавливаю в 1 - слышу щелчек. Устанавливаю в 0 - слышно еще один. Т.е. отлип контакт. Значит что-то не то с светодиодами. Просто я умолчал об одной детали. Но не думаю что дело в ней. Суть в том - что изначально я не мог подключить плк к pc - пока не перепрошил его. Вернее прошивал не я - а мой отец. Но суть в том - что после прошивки он стал конектится.
Даже если подрубить либу Work_ololo.lib - и вывести на ЖКИ "Привет" - работает. Единственное что не хочет - это злые светодиоды =(
Видимо придется без них обойтись.
выходы реле робят норм. Т.е. устанавливаю в 1 - слышу щелчек.
Надеюсь - из CDS
Могу сказать что тут - как у врача, лучше ничего не умалчивать. Например могли бы быть вопросы о соответствии версии прошивки и таргетов и т.п.
А так - в сервис.
приборист
14.06.2014, 13:38
А только ли лампочки так работают?
Попробуй выходу присвоить переменную.
И в программе включить его.
Код правильный, лампочки должны гореть.
Да, к сожалению только светодиоды не работают от программы - зато весело загораются от нажатий клавиш. Ну да и фиг с ними) Я уже запилил девайс и слил заказчику. Вроде доволен.
Сам я программист - но пишу больше игры - вернее "отдельные части игр".
По сути понадобился смеситель - открывающий с разными импульсами два клапана.
Ну вроде - первый открыт 100мс, закрыт 1400мс, второй открыт 140мс, закрыт 3000мс.
Ну и чтобы все настраивалось в менюшках - с тарировкой и расчетам для каждого клапана в литрах в минуту.
В итоге :
- На подключение ПЛК к PC - ушло 2 дня (пока не прошил не было вообще связи)
- На составление алгоритма - 15 минут
- На написание программы - 60 минут (до этого в глаза не видел ST)
Сам язык мне не очень понравился((( Не знаю - возможно с непривычки после C++ и асма
Для достаточно сложного меню - это тонны повтроряющихся конструкций IF блаблабла THEN блаблабла END_IF
Решил не делать меню как советуют в книге - а запилил в монопольном режиме.
По поводу главного цикла то к примеру такого сделать без доп.флагов нельзя:
var count:int=0;
Таймер1 - на 100мс (если клапан закрыт)
Если таймер1 - то открыть клапан
Таймер2 - на 100мс (если клапан открыт)
Если таймер2 - то закрыть клапан
count:=count+1;
IF (count>100) Надпись на экране "Готово"
То надпись на экране готово - будет сразу же после старта, а не после 100 открытий/закрытий клапана. А все из-за реализации главного цикла.
Но это решилось с вводом дополнительных флагов. Так что небольшая проблема. Так что сам процесс "программирования" - заставил поверить - что и главный цикл и язык ST - позволяют пилить довольно сложные проекты в кратчайшие сроки(PS: я не про свою поделку на коленке)
Удивило что нельзя делать так :
IF (бла-бла-бла) THEN (Бла-бла-бла);
Ругается на отсутствие END_IF
Хотя для чего оно неясно. Компилятор не подхватывает видимо(
Ну язык-языком - а в целом ПЛК73 - мне понравился. Простой как тапки, неприхотлив в настройках, "сверх-быстрый" коддинг)). Надеюсь, что проживет долго в работе.
PS: А еще он песни поёт пищалкой)ыы
Забавно, посчитайте сами если цикл плк одна мс, то через сколько счетчик досчитает до ста? Практически для глаза незаметно, Ваше суммирование надо привязывать к триггеру фронта импульса открытия, тогда и будет подсчитывать работу,покрайней мере сли выдержка кода именно такая
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot