Основы Step7 Microwin

Инженерное программное обеспечение
m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Основы Step7 Microwin

Сообщение m-n-tihiy »

День добрый!
У меня есть вопрос на с которым вожусь уже достаточно долго!
Очень нужна помощь.
Вопрос заключается в следующем:
Simatic s7-200 написал для него программу в состав, которой входит одна подпрограмма.
В симуляторе с данной моей программой нельзя перевести виртуальный ПЛК в режим RUN , всегда возникает следующая ошибка :

" Parameter error exists in the program,
for the selected CPU.
The PLC is positioned in STOP
Instruction: = L63.7 (или L60.0)"

Данная ошибка возникает постоянно при использовании подпрограмм не важно какой они сложности.
Если же не использовать в моем проекте подпрограммы то , все работает отлично!

Очень надеюсь на вашу помощь!
заранее Спасибо!

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК

Сообщение Михайло »

Симулятор S7-200 испанского разработчика не поддерживает подпрограммы. Нужно либо отказаться от этой мертвой затеи, либо как-то перестроить структуру программы, убрав подпрограммы.
Этот симулятор является практически единственным доступным симулятором. Родного симулятора не существует.

m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Re: Обучаем новичка программированию ПЛК

Сообщение m-n-tihiy »

Михайло писал(а):Симулятор S7-200 испанского разработчика не поддерживает подпрограммы. Нужно либо отказаться от этой мертвой затеи, либо как-то перестроить структуру программы, убрав подпрограммы.
Этот симулятор является практически единственным доступным симулятором. Родного симулятора не существует.
Спасибо большое теперь все стало на свои места.

Подскажите еще один момент, который касается подпрограмм:
Если верить руководству , то на время выполнения подпрограммы , основная программа приостанавливается.
Так ли это ?
Подпрограммы в S7-200 как я полагаю , все равно, что макросы в Zelio Logic ?

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК

Сообщение Михайло »

m-n-tihiy писал(а):Подскажите еще один момент, который касается подпрограмм:
Если верить руководству , то на время выполнения подпрограммы , основная программа приостанавливается.
Так ли это ?
Не совсем. Система команд ПЛК такова, что в программе никогда образуются замкнутые циклы (которые в обычных микропроцессорах и средах разработки образовывались за счет команд перехода jump, goto, циклов for-next, while, repeat). Отсутствие замкнутых циклов в программе приводит к тому, что тело основной программы, а также тела подпрограмм в ПЛК выполняются за доли секунды. Это означает, что выполнение программы происходит по следующей схеме:
MAIN_PROG (25 мс)
PODPROG1 (50 мс)
MAIN_PROG (25 мс)
PODPROG1 (50 мс)
MAIN_PROG (25 мс)
PODPROG1 (50 мс)
MAIN_PROG (25 мс)
PODPROG1 (50 мс)
MAIN_PROG (25 мс)
PODPROG1 (50 мс)
PODPROG2 (15 мс; * начало выполняться условие запуска подпрограммы PODPROG2)
MAIN_PROG (25 мс)
PODPROG1 (50 мс)
PODPROG2 (15 мс)
MAIN_PROG (25 мс)
PODPROG1 (50 мс)
PODPROG2 (15 мс)
MAIN_PROG (25 мс)
PODPROG1 (50 мс)
PODPROG2 (15 мс)
...
И так далее.

В общем получается, что основная программа и подпрограммы выполняются практически параллельно (человеческий мозг неспособен заметить, что основная подпрограмма не выполняется в течение 50 мс, пока выполняется подпрограмма PODPROG1).
Ну и важное примечание: при окончании выполнения основной программы или подпрограммы маркеры M, выходы Q не отключаются, так как они хранятся в памяти, а память нужна, что помнить (такая вот банальность :) ). Чтобы их обнулить, нужно сбросить их командой сброса или другим способом.
Еще одно примечание: нельзя управлять в одновременно исполняющихся основной программе и подпрограммах одними и теми же выходами (катушками). В противном случае такой выход или катушка просто примет значение, вычисленное в последней подпрограмме цикла.

m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Re: Обучаем новичка программированию ПЛК

Сообщение m-n-tihiy »

Подскажите пожалуйста!!!
Ситуация :
1) Simatic s7-200 с модулем ввода вывода;
2) Используется 24 входа и 19 выходов
3)Программа - алгоритм авр для подстанции с 4 вводами и 5 секционными выключателями.
Под все это дела готова программа, которую следует проверить , нюанс заключается в следующем после подачи выходных команд на управляемое оборудования, будет обратная связь на входа , для контроля выполнения комады.
Оборудование на которым будет происходить управление это 9 силовых выключателей.
Вопрос следующий, как лучше проверить работу контроллера?
Или посоветуйте способы ( альтернативные программы ).
Проверка на месте отпадает и вариант собрать альтернативную схему на реле тоже так как потребуется достаточное количество промежуточных реле.
За ранее спасибо !

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК

Сообщение Михайло »

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

m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Re: Обучаем новичка программированию ПЛК

Сообщение m-n-tihiy »

Премного благодарен )
А что если s7-plcsim?

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Обучаем новичка программированию ПЛК

Сообщение Автоматизатор »

m-n-tihiy писал(а):Подскажите пожалуйста!!!
Делаю так. Отлаживаю программу на живом контроллере. Имею для этого специальный, но можно и снять с оборудования (клеммники съемные, это не долго). Меняю в таблице символов адреса входов I на адреса меркеров M. Теперь можно в режиме отладки спокойно устанавливать / сбрасывать "входа".

Для имитации работы датчиков можно в том же контроллере написать подпрограммку, которая при включении выхода сбрасывала и устанавливала определенные "датчики" с выдержкой времени 3-10 с. Таким образом делается модель объекта.

Но лучшие результаты достигаются, если использовать картинку для наглядности. Сейчас использую как правило WinCC Flexible, а раньше демо версию SCADA Genesis-32 (ограничение максимальное количество тэгов 30, и время непрерывной работы час - потом надо перезапустить). Рисую на экране мнемосхему, рисую анимацию: установленные выхода, входа меняют цвет. Датчики можно сделать в виде тумблеров и легко переключать состояние, эмитируя работу.

Сейчас, когда панель - типовое решение, то таки картинки рисую для наладочных экранов. Чтобы сразу было видно всю картину: что работает, что не работает.

Ну и способы программирования ранее уже должны быть обкатаны и не вызывать сомнения в работоспособности. Отладка в лаборатории - способ устранения опечаток.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Обучаем новичка программированию ПЛК

Сообщение Автоматизатор »

m-n-tihiy писал(а):А что если s7-plcsim?
Среды разработки разные - между собой не совместимые. Придется вручную набирать программу для отладки. Это долго и нудно.

Или использовать дорогие контроллеры и удобные среды программирования, либо тестировать дешевые контроллеры живьем. Хотя для отработки навыков эмулятора все равно мало. Имею живой контроллер S-300 CPU314-2PD для экспериментов :) .

m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Re: Обучаем новичка программированию ПЛК

Сообщение m-n-tihiy »

День добрый , специалисты и новички ! =)
У меня очередной вопрос , с которым сейчас разбираюсь:
"Локальные и Глобальные переменные в s7-200"
Суть в следующем:
1) Слова с руководства : "Память переменных доступна глобально, тогда как память локальных данных
доступна локально. Глобальная доступность означает, что к адресу в этой области памяти
можно обратиться из любой организационной единицы программы (из основной
программы, подпрограммы или подпрограмм обработки прерываний)."
2) Как я понимаю , если в основной программе используется адрес переменной , допустим V0.0 то, если это же адрес будет использован в подпрограмме тогда, значения в обоих случаях будут одинаковы?
Или же подпрограмма не имеет доступ к переменным основной программы и тогда можно использовать одинаковые адреса памяти переменных для основной программы и ее подпрограммы ?

Рассудите =)

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК

Сообщение Михайло »

m-n-tihiy писал(а):2) Как я понимаю , если в основной программе используется адрес переменной , допустим V0.0 то, если это же адрес будет использован в подпрограмме тогда, значения в обоих случаях будут одинаковы?
Или же подпрограмма не имеет доступ к переменным основной программы и тогда можно использовать одинаковые адреса памяти переменных для основной программы и ее подпрограммы ?
Все гораздо банальнее. Для всех организационных блоков (POU) память общая и при попытке чтения из нее в разных частях программы будет один и тот же результат. Это глобальные переменные. Ячейки памяти I, M, V,Q и т.д. - это глобальные переменные и они не могут быть локальными.
Локальные переменные - это как бы обычные глобальные переменные, у которых просто напросто ограничен уровень доступа при попытке чтения из разных частей программы. Все так хитро устроено, что Вы даже не сможете написать программу, которая бы обрабатывала локальные переменные, которые в данном месте имеют запрет доступа. Также нужно понимать, что несколько локальных переменных в разных POU могут иметь одинаковое имя и при этом конфликта никакого не будет, просто это будут разные ячейки памяти. Например, можно в двух блоках создать локальную переменную #Temp и там будут храниться разные значения - без проблем, путаницы тоже не будет, так как каждый блок "видит" свою локальную переменную и никак не "видит" переменную с таким же именем в соседнем блоке.
Логично, что глобальные же переменные не могут иметь одинаковые имена - это прямой конфликт.

P.S. POU (организационные блоки программы) - это программы, функции FC и функциональные блоки FB.

m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Re: Обучаем новичка программированию ПЛК

Сообщение m-n-tihiy »

Михайло писал(а): P.S. POU (организационные блоки программы) - это программы, функции FC и функциональные блоки FB.
А что касается таймеров?
Могут ли они иметь одинаковые имена ? Или ситуация такая же как с глобальными ячейками памяти , M,V, итд

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК

Сообщение Михайло »

Таймеры и счетчики также являются глобальными. Если честно, никогда не пытался создавать "локальные таймеры". Такие можно создать? :)

m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Re: Обучаем новичка программированию ПЛК

Сообщение m-n-tihiy »

Вы абсолютно правы , таких (локальных) таймеров нет , хотя , хорошо было бы иметь)
А по сути , таймер есть таймер и он управляется уже битами с ячеек памяти , которые в свою очередь имеют границу доступа)
Но все же , если иметь два таймера с одинаковыми обозначениями , что тогда произойдет ?
Дело в том , что если два таймера с одинаковыми именами то, выход для них можно назначить только общий , а команды на
запуск будут разными )
в общем все довольно интересно.
А вот следом вопрос, для меня пока не до конца ясно следующие :
Управление различными логическими элементами в основном осуществляется битами , есть ли наглядный пример, пусть даже на
словах , где например на вход таймера подается байт ну или слово .
Как вы понимаете этого в руководстве нет )
Или же все эти размерности в основном нужны для обмена информацией ?
Изучаю simatic и прочие программируемые реле не так давно - вот и вопросов море =)

m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Основы Step7

Сообщение m-n-tihiy »

Ну и вот очередной вопрос =)
Применение стека в программировании ПЛК , как он работает мне в целом понятно , хотелось бы понять его применение с преимуществами и недостатками , характерными для него ?)

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК

Сообщение Михайло »

m-n-tihiy писал(а):Но все же , если иметь два таймера с одинаковыми обозначениями , что тогда произойдет ?
Дело в том , что если два таймера с одинаковыми именами то, выход для них можно назначить только общий , а команды на
запуск будут разными )
Это касается не только таймеров. Любая глобальная переменная может быть одновременно изменена в двух и более частях программы. Самое страшное, что в одном месте программы в ячейку памяти может записываться нуль, а в другом месте - единица. Это не приводит напрямую к какой-то фатальной ошибке, так как актуальным значением будет результат самой последней операции записи в ячейку, однако может реально взорвать мозг программиста (типа "я тут записываю нуль, а он реально не записывается..."). В 99% случаев катушка (или другая операция записи в память) должна производиться в одном месте программы, дабы не было разрывов шаблона.
m-n-tihiy писал(а):Управление различными логическими элементами в основном осуществляется битами , есть ли наглядный пример, пусть даже на словах , где например на вход таймера подается байт ну или слово .
Как вы понимаете этого в руководстве нет )
Или же все эти размерности в основном нужны для обмена информацией ?
Программируемый логический контроллер заточен на задачи логического управления, хотя в общем-то задачи с целочисленными типами, с числами типа REAL он также успешно решает. Особенностью процессора ПЛК является тот факт, что почти каждая операция (хоть с дискретным сигналом, хоть с аналоговым) управляется логическим сигналом EN (enable, разрешить). Если вход EN активен, то операция выполняется, если EN неактивен, то операция пропускается. На вход EN можно подать только данные логического типа bool.
У операций могут быть другие управляющие входы навроде IN (input, вход), R (reset, сброс) и т.д. Они также являются дискретными и на них нельзя подать данные типа byte или word. В общем типы данных несовместимы между собой. Чтобы совместить их между собой могут применяться команды конвертации типа (data type conversion), например, байт можно конвертировать в слово, либо использовать какую-либо операцию преобразования, например, чтобы сконвертировать байт в бит, можно применить операцию сравнения (компаратор)...
Надеюсь ответил на Ваш вопрос.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК

Сообщение Михайло »

m-n-tihiy писал(а):Ну и вот очередной вопрос =)
Применение стека в программировании ПЛК , как он работает мне в целом понятно , хотелось бы понять его применение с преимуществами и недостатками , характерными для него ?)
Мне кажется, применение стека в реальных задачах не имеет особого обоснования. Это имеется в виду работа со временными переменными (TEMPORARY)?

m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Re: Обучаем новичка программированию ПЛК

Сообщение m-n-tihiy »

Михайло писал(а): Надеюсь ответил на Ваш вопрос.
Не совсем =)
Все, что вы написали мне понятно)
Но вот в чем вопрос , возможно в первый раз сформулировал не особо точно:
Где применяются слова , двойные слова ?
Они состоят из байтов , байты в свою очередь из битов и как раз сами биты могут иметь значения типа BOOL,
Так вот в программе в основном задают адреса битов тех или иных переменных, можно ли по средствам применения байтов существенно сократить программу)
Обрежте если же я чего то, не понимаю )))
Хотя у меня сейчас такое представление , что формирования в слова в основном нужно для обмена информацией?

m-n-tihiy
Дилетант
Сообщения: 16
Зарегистрирован: 24 дек 2012, 09:24

Re: Обучаем новичка программированию ПЛК

Сообщение m-n-tihiy »

Михайло писал(а): Мне кажется, применение стека в реальных задачах не имеет особого обоснования. Это имеется в виду работа со временными переменными (TEMPORARY)?
Да действительно, просто руководство очень часто оперирует этим термином при разъяснение написания программ на STL )
Благодарю Вас за ваши ответы! =)

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК

Сообщение Михайло »

m-n-tihiy писал(а):Где применяются слова , двойные слова ?
m-n-tihiy писал(а):Хотя у меня сейчас такое представление , что формирования в слова в основном нужно для обмена информацией?
Обмен информацией по сетевому интерфейсу, да. Здесь применяются байты и слова, состоящие из отдельных что-то значащих битов. Но это не единственное применение.
Помимо хранения в байтах, слова и двойных словах бинарных/логических данных применяется еще целочисленное представление, например, в байте можно хранить число от 0 до 255, а в слове - от 0 до 65535. Таким числом может быть номер экрана на панели оператора или количество произведенной продукции за смену. Эти числа можно складывать, вычитать, умножать, делить и т.д. В этом случае возможность разделения байт и слов на отдельные биты сохраняется, однако особого смысла уже, как правило, не имеет.
Более того, помимо хранения целочисленных данных, ПЛК, которые помощнее чем простые программируемые реле, умеют хранить в двойных словах (32 бита) вещественные числа (тип REAL). Вещественные числа - это числа с плавающей запятой, например, 3,1415 или -0,625. Также доступны операции сложения, вычитания, умножения, деления, возведения в степень, радикалы, логарифмы, синусы, косинусы и т.д.
Это тоже часто применяется в автоматизации!
m-n-tihiy писал(а):Так вот в программе в основном задают адреса битов тех или иных переменных, можно ли по средствам применения байтов существенно сократить программу)
Может и можно, но нужно ли? От программы требуется удобство ее чтения и анализа, а объем памяти у ПЛК не так уж и ограничен...
m-n-tihiy писал(а):
Михайло писал(а): Мне кажется, применение стека в реальных задачах не имеет особого обоснования. Это имеется в виду работа со временными переменными (TEMPORARY)?
Да действительно, просто руководство очень часто оперирует этим термином при разъяснение написания программ на STL )
Если речь идет про основы IL/STL, то мне на ум приходит только такая штука, которая называется "результат логической операции" (RLO), иногда употребляют термин "аккумулятор" (ACCU). Это действительно базовые понятия в языке IL и эти вещи сильно напоминают понятие "стек" в программировании, и "временные переменные" (temporary variables) они тоже напоминают...

Ответить