PDA

Просмотр полной версии : управление переменными в Cfc



Лимонадный Джо
12.11.2010, 12:07
добрый день. вопрос к уважаемым знатокам.

коротко, что должна делать программа:
-имеется что-то вроде таймлиста, по которому замыкаются и размыкаются реле
-должна существовать возможность в любой момент приостановить выполнение программы на конкретном действии и замыкать/размыкать каждое реле вручную кнопками из программы

что имеется:
-таймлист,тут проблем вроде бы нет,за основу был взят светофор

проблема:
-cfc,насколько я понимаю,в запущенном состоянии "держит" значения переменных, поэтому для ручного управления во время паузы приходится останавливать выполнение программы. это работало до тех пор, пока с помощью кнопок нужно было управлять только переменными Bool.
-проблемы начались потому, что у плк150 4 дискретных выхода, мне нужно ~10, а у имеющегося мву8-р выходы замыкаются переменной Word. я сделал конвертирование Bool->word, но оно, естественно, не работает при остановке программы (если программу не останавливать, то получается наоборот- конвертирование работает, но переменные заблокированы)

вопросы:
-возможно ли в Cfc как-то "разблокировать" переменные для ручного управления, не останавливая конвертацию?
-или наоборот, не трогать Cfc, но сделать конвертацию Bool->word как-то по-человечески?
-может быть я иду неправильным путем и проблема решается по-другому?

Николаев Андрей
12.11.2010, 12:21
неправильным путем вы идете товарищ.
речь вообще об Sfc или о Cfc???
программу на Cfc останавливать не нужно.
возможность перевода в ручной режим\управление руками закладывается в сам алгоритм программы, а преобразования должны быть всегда, как вариант просто в конце программы.

с Sfc все сложнее - там надо предусматривать переход в ручной режим как параллельную\алтернативную ветвь

Лимонадный Джо
12.11.2010, 13:23
я может быть не совсем правильно вопрос смог сформулировать, вот это узкое место в программе

переменные под цифрой 1 управляются без проблем, переменные под цифрой 2- как описано выше, вызывают трудности

Николаев Андрей
13.11.2010, 11:34
я понял где у вас проблема еще с первого раза.
вы смешали в кучу "выдуманный останов" программы и в этой же программе пытаетесь преобразовывать данные... естественно ничего у вас из этого хорошего не выйдет.
пока далеко не ушли - начните переписывать программу.
1. не рекомендую использовать глобальные переменные (как то свои и сетевые входы и выходы) в подпрограммах. запутаетесь и кучу ошибок нахватаете...
2. при создании подпрограмм закладывайте ручной режим в программу (для примера). то есть если не ручной и что то - делаем то то... если ручной, то делаем только во это, а то то и то то не делаем.

а все переменные глобальные, и переменные управления подпрограммой подавайте в основной программе уже.

Лимонадный Джо
13.11.2010, 11:45
понял, спасибо, буду пробовать ковыряться дальше.

Лимонадный Джо
18.11.2010, 10:48
"2. при создании подпрограмм закладывайте ручной режим в программу (для примера). то есть если не ручной и что то - делаем то то... если ручной, то делаем только во это, а то то и то то не делаем."
Попробовал сделать альтернативную ветвь для действий (блок sfc), но проблема остается- дело в том, что мне нужно, чтобы при нажатии паузы программа останавливалась именно на данном шаге (с конкретным набором замкнутых и разомкнутых реле). А у меня получается, что даже при каких-то альтенативных ветвях мне не уйти от обозначения нужных мне выходов (у меня это обозначение происходит в блоке fbd). Таким образом, получается, что после нажатия паузы я могу управлять только теми выходами, которые не определены в шаге, во время котрого эта пауза нажата.

Кстати, а я правильно понял, что в линейке овена нет моделей с дискретными выходами, управляемыми переменными bool (как у плк), с помощью которых можно было бы расширить количество выходов плк?

Николаев Андрей
18.11.2010, 12:28
Еще раз - в ПЛК не может быть паузы. В принципе.
Если Вам необходимо останавливать программу - это делается именно программно. И больше никак.
Например выходом из блока может быть либо Ваше условие, либо программная команда pause - то есть выполняется шаг, а выход из него - сложное условие:
a>b or pause

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

В линейке ОВЕН все дискретные модули могут управляться BOOL (кроме МВУ8 - у него могут быть установлены аналоговые выходы). Просто для удобства записи и для сокращения обмена они собраны в 8-16 бит. Посмотрите пример связи с МДВВ по протоколу ModBus, все станет понятнее.

Лимонадный Джо
18.11.2010, 12:53
Еще раз - в ПЛК не может быть паузы. В принципе.
Если Вам необходимо останавливать программу - это делается именно программно. И больше никак.
Например выходом из блока может быть либо Ваше условие, либо программная команда pause
У меня это условие есть. И есть кнопка "пауза", которая является одним из условий перехода на след. шаг (переходит если кнопка не нажата)



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

Николаев Андрей
18.11.2010, 17:22
сложно...
сформулируйте абстрактную задачу с необходимыми вам режимами работы и высылайте - пример будет легче написать, или объяснить почему так нельзя, и как тогда можно :)

Лимонадный Джо
26.11.2010, 13:15
Отправил на plc at owen.ru неделю назад. Есть ..ээ.... вероятность, что мне помогут с примером?)

Проблема актуальна, а своими силами что-то не получается...

Или моя почта просто плохо работает?

Николаев Андрей
26.11.2010, 15:25
хм... должны были уже помочь... в понедельник выйду на работу - разберемся...