День добрый!
У меня есть вопрос на с которым вожусь уже достаточно долго!
Очень нужна помощь.
Вопрос заключается в следующем:
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)"
Данная ошибка возникает постоянно при использовании подпрограмм не важно какой они сложности.
Если же не использовать в моем проекте подпрограммы то , все работает отлично!
Очень надеюсь на вашу помощь!
заранее Спасибо!
Основы Step7 Microwin
Re: Обучаем новичка программированию ПЛК
Симулятор S7-200 испанского разработчика не поддерживает подпрограммы. Нужно либо отказаться от этой мертвой затеи, либо как-то перестроить структуру программы, убрав подпрограммы.
Этот симулятор является практически единственным доступным симулятором. Родного симулятора не существует.
Этот симулятор является практически единственным доступным симулятором. Родного симулятора не существует.
Re: Обучаем новичка программированию ПЛК
Спасибо большое теперь все стало на свои места.Михайло писал(а):Симулятор S7-200 испанского разработчика не поддерживает подпрограммы. Нужно либо отказаться от этой мертвой затеи, либо как-то перестроить структуру программы, убрав подпрограммы.
Этот симулятор является практически единственным доступным симулятором. Родного симулятора не существует.
Подскажите еще один момент, который касается подпрограмм:
Если верить руководству , то на время выполнения подпрограммы , основная программа приостанавливается.
Так ли это ?
Подпрограммы в S7-200 как я полагаю , все равно, что макросы в Zelio Logic ?
Re: Обучаем новичка программированию ПЛК
Не совсем. Система команд ПЛК такова, что в программе никогда образуются замкнутые циклы (которые в обычных микропроцессорах и средах разработки образовывались за счет команд перехода jump, goto, циклов for-next, while, repeat). Отсутствие замкнутых циклов в программе приводит к тому, что тело основной программы, а также тела подпрограмм в ПЛК выполняются за доли секунды. Это означает, что выполнение программы происходит по следующей схеме:m-n-tihiy писал(а):Подскажите еще один момент, который касается подпрограмм:
Если верить руководству , то на время выполнения подпрограммы , основная программа приостанавливается.
Так ли это ?
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 не отключаются, так как они хранятся в памяти, а память нужна, что помнить (такая вот банальность ). Чтобы их обнулить, нужно сбросить их командой сброса или другим способом.
Еще одно примечание: нельзя управлять в одновременно исполняющихся основной программе и подпрограммах одними и теми же выходами (катушками). В противном случае такой выход или катушка просто примет значение, вычисленное в последней подпрограмме цикла.
Re: Обучаем новичка программированию ПЛК
Подскажите пожалуйста!!!
Ситуация :
1) Simatic s7-200 с модулем ввода вывода;
2) Используется 24 входа и 19 выходов
3)Программа - алгоритм авр для подстанции с 4 вводами и 5 секционными выключателями.
Под все это дела готова программа, которую следует проверить , нюанс заключается в следующем после подачи выходных команд на управляемое оборудования, будет обратная связь на входа , для контроля выполнения комады.
Оборудование на которым будет происходить управление это 9 силовых выключателей.
Вопрос следующий, как лучше проверить работу контроллера?
Или посоветуйте способы ( альтернативные программы ).
Проверка на месте отпадает и вариант собрать альтернативную схему на реле тоже так как потребуется достаточное количество промежуточных реле.
За ранее спасибо !
Ситуация :
1) Simatic s7-200 с модулем ввода вывода;
2) Используется 24 входа и 19 выходов
3)Программа - алгоритм авр для подстанции с 4 вводами и 5 секционными выключателями.
Под все это дела готова программа, которую следует проверить , нюанс заключается в следующем после подачи выходных команд на управляемое оборудования, будет обратная связь на входа , для контроля выполнения комады.
Оборудование на которым будет происходить управление это 9 силовых выключателей.
Вопрос следующий, как лучше проверить работу контроллера?
Или посоветуйте способы ( альтернативные программы ).
Проверка на месте отпадает и вариант собрать альтернативную схему на реле тоже так как потребуется достаточное количество промежуточных реле.
За ранее спасибо !
Re: Обучаем новичка программированию ПЛК
Можно набрать аналогичную программу в другой среде разработки и запустить там эмулятор. Поищите, например, бесплатный Winproladder для контроллеров Fatek. Мне показалось, что среда и сам контроллер похож на S7-200.
Re: Обучаем новичка программированию ПЛК
Премного благодарен )
А что если s7-plcsim?
А что если s7-plcsim?
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Обучаем новичка программированию ПЛК
Делаю так. Отлаживаю программу на живом контроллере. Имею для этого специальный, но можно и снять с оборудования (клеммники съемные, это не долго). Меняю в таблице символов адреса входов I на адреса меркеров M. Теперь можно в режиме отладки спокойно устанавливать / сбрасывать "входа".m-n-tihiy писал(а):Подскажите пожалуйста!!!
Для имитации работы датчиков можно в том же контроллере написать подпрограммку, которая при включении выхода сбрасывала и устанавливала определенные "датчики" с выдержкой времени 3-10 с. Таким образом делается модель объекта.
Но лучшие результаты достигаются, если использовать картинку для наглядности. Сейчас использую как правило WinCC Flexible, а раньше демо версию SCADA Genesis-32 (ограничение максимальное количество тэгов 30, и время непрерывной работы час - потом надо перезапустить). Рисую на экране мнемосхему, рисую анимацию: установленные выхода, входа меняют цвет. Датчики можно сделать в виде тумблеров и легко переключать состояние, эмитируя работу.
Сейчас, когда панель - типовое решение, то таки картинки рисую для наладочных экранов. Чтобы сразу было видно всю картину: что работает, что не работает.
Ну и способы программирования ранее уже должны быть обкатаны и не вызывать сомнения в работоспособности. Отладка в лаборатории - способ устранения опечаток.
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Обучаем новичка программированию ПЛК
Среды разработки разные - между собой не совместимые. Придется вручную набирать программу для отладки. Это долго и нудно.m-n-tihiy писал(а):А что если s7-plcsim?
Или использовать дорогие контроллеры и удобные среды программирования, либо тестировать дешевые контроллеры живьем. Хотя для отработки навыков эмулятора все равно мало. Имею живой контроллер S-300 CPU314-2PD для экспериментов .
Re: Обучаем новичка программированию ПЛК
День добрый , специалисты и новички ! =)
У меня очередной вопрос , с которым сейчас разбираюсь:
"Локальные и Глобальные переменные в s7-200"
Суть в следующем:
1) Слова с руководства : "Память переменных доступна глобально, тогда как память локальных данных
доступна локально. Глобальная доступность означает, что к адресу в этой области памяти
можно обратиться из любой организационной единицы программы (из основной
программы, подпрограммы или подпрограмм обработки прерываний)."
2) Как я понимаю , если в основной программе используется адрес переменной , допустим V0.0 то, если это же адрес будет использован в подпрограмме тогда, значения в обоих случаях будут одинаковы?
Или же подпрограмма не имеет доступ к переменным основной программы и тогда можно использовать одинаковые адреса памяти переменных для основной программы и ее подпрограммы ?
Рассудите =)
У меня очередной вопрос , с которым сейчас разбираюсь:
"Локальные и Глобальные переменные в s7-200"
Суть в следующем:
1) Слова с руководства : "Память переменных доступна глобально, тогда как память локальных данных
доступна локально. Глобальная доступность означает, что к адресу в этой области памяти
можно обратиться из любой организационной единицы программы (из основной
программы, подпрограммы или подпрограмм обработки прерываний)."
2) Как я понимаю , если в основной программе используется адрес переменной , допустим V0.0 то, если это же адрес будет использован в подпрограмме тогда, значения в обоих случаях будут одинаковы?
Или же подпрограмма не имеет доступ к переменным основной программы и тогда можно использовать одинаковые адреса памяти переменных для основной программы и ее подпрограммы ?
Рассудите =)
Re: Обучаем новичка программированию ПЛК
Все гораздо банальнее. Для всех организационных блоков (POU) память общая и при попытке чтения из нее в разных частях программы будет один и тот же результат. Это глобальные переменные. Ячейки памяти I, M, V,Q и т.д. - это глобальные переменные и они не могут быть локальными.m-n-tihiy писал(а):2) Как я понимаю , если в основной программе используется адрес переменной , допустим V0.0 то, если это же адрес будет использован в подпрограмме тогда, значения в обоих случаях будут одинаковы?
Или же подпрограмма не имеет доступ к переменным основной программы и тогда можно использовать одинаковые адреса памяти переменных для основной программы и ее подпрограммы ?
Локальные переменные - это как бы обычные глобальные переменные, у которых просто напросто ограничен уровень доступа при попытке чтения из разных частей программы. Все так хитро устроено, что Вы даже не сможете написать программу, которая бы обрабатывала локальные переменные, которые в данном месте имеют запрет доступа. Также нужно понимать, что несколько локальных переменных в разных POU могут иметь одинаковое имя и при этом конфликта никакого не будет, просто это будут разные ячейки памяти. Например, можно в двух блоках создать локальную переменную #Temp и там будут храниться разные значения - без проблем, путаницы тоже не будет, так как каждый блок "видит" свою локальную переменную и никак не "видит" переменную с таким же именем в соседнем блоке.
Логично, что глобальные же переменные не могут иметь одинаковые имена - это прямой конфликт.
P.S. POU (организационные блоки программы) - это программы, функции FC и функциональные блоки FB.
Re: Обучаем новичка программированию ПЛК
А что касается таймеров?Михайло писал(а): P.S. POU (организационные блоки программы) - это программы, функции FC и функциональные блоки FB.
Могут ли они иметь одинаковые имена ? Или ситуация такая же как с глобальными ячейками памяти , M,V, итд
Re: Обучаем новичка программированию ПЛК
Таймеры и счетчики также являются глобальными. Если честно, никогда не пытался создавать "локальные таймеры". Такие можно создать?
Re: Обучаем новичка программированию ПЛК
Вы абсолютно правы , таких (локальных) таймеров нет , хотя , хорошо было бы иметь)
А по сути , таймер есть таймер и он управляется уже битами с ячеек памяти , которые в свою очередь имеют границу доступа)
Но все же , если иметь два таймера с одинаковыми обозначениями , что тогда произойдет ?
Дело в том , что если два таймера с одинаковыми именами то, выход для них можно назначить только общий , а команды на
запуск будут разными )
в общем все довольно интересно.
А вот следом вопрос, для меня пока не до конца ясно следующие :
Управление различными логическими элементами в основном осуществляется битами , есть ли наглядный пример, пусть даже на
словах , где например на вход таймера подается байт ну или слово .
Как вы понимаете этого в руководстве нет )
Или же все эти размерности в основном нужны для обмена информацией ?
Изучаю simatic и прочие программируемые реле не так давно - вот и вопросов море =)
А по сути , таймер есть таймер и он управляется уже битами с ячеек памяти , которые в свою очередь имеют границу доступа)
Но все же , если иметь два таймера с одинаковыми обозначениями , что тогда произойдет ?
Дело в том , что если два таймера с одинаковыми именами то, выход для них можно назначить только общий , а команды на
запуск будут разными )
в общем все довольно интересно.
А вот следом вопрос, для меня пока не до конца ясно следующие :
Управление различными логическими элементами в основном осуществляется битами , есть ли наглядный пример, пусть даже на
словах , где например на вход таймера подается байт ну или слово .
Как вы понимаете этого в руководстве нет )
Или же все эти размерности в основном нужны для обмена информацией ?
Изучаю simatic и прочие программируемые реле не так давно - вот и вопросов море =)
Основы Step7
Ну и вот очередной вопрос =)
Применение стека в программировании ПЛК , как он работает мне в целом понятно , хотелось бы понять его применение с преимуществами и недостатками , характерными для него ?)
Применение стека в программировании ПЛК , как он работает мне в целом понятно , хотелось бы понять его применение с преимуществами и недостатками , характерными для него ?)
Re: Обучаем новичка программированию ПЛК
Это касается не только таймеров. Любая глобальная переменная может быть одновременно изменена в двух и более частях программы. Самое страшное, что в одном месте программы в ячейку памяти может записываться нуль, а в другом месте - единица. Это не приводит напрямую к какой-то фатальной ошибке, так как актуальным значением будет результат самой последней операции записи в ячейку, однако может реально взорвать мозг программиста (типа "я тут записываю нуль, а он реально не записывается..."). В 99% случаев катушка (или другая операция записи в память) должна производиться в одном месте программы, дабы не было разрывов шаблона.m-n-tihiy писал(а):Но все же , если иметь два таймера с одинаковыми обозначениями , что тогда произойдет ?
Дело в том , что если два таймера с одинаковыми именами то, выход для них можно назначить только общий , а команды на
запуск будут разными )
Программируемый логический контроллер заточен на задачи логического управления, хотя в общем-то задачи с целочисленными типами, с числами типа REAL он также успешно решает. Особенностью процессора ПЛК является тот факт, что почти каждая операция (хоть с дискретным сигналом, хоть с аналоговым) управляется логическим сигналом EN (enable, разрешить). Если вход EN активен, то операция выполняется, если EN неактивен, то операция пропускается. На вход EN можно подать только данные логического типа bool.m-n-tihiy писал(а):Управление различными логическими элементами в основном осуществляется битами , есть ли наглядный пример, пусть даже на словах , где например на вход таймера подается байт ну или слово .
Как вы понимаете этого в руководстве нет )
Или же все эти размерности в основном нужны для обмена информацией ?
У операций могут быть другие управляющие входы навроде IN (input, вход), R (reset, сброс) и т.д. Они также являются дискретными и на них нельзя подать данные типа byte или word. В общем типы данных несовместимы между собой. Чтобы совместить их между собой могут применяться команды конвертации типа (data type conversion), например, байт можно конвертировать в слово, либо использовать какую-либо операцию преобразования, например, чтобы сконвертировать байт в бит, можно применить операцию сравнения (компаратор)...
Надеюсь ответил на Ваш вопрос.
Re: Обучаем новичка программированию ПЛК
Мне кажется, применение стека в реальных задачах не имеет особого обоснования. Это имеется в виду работа со временными переменными (TEMPORARY)?m-n-tihiy писал(а):Ну и вот очередной вопрос =)
Применение стека в программировании ПЛК , как он работает мне в целом понятно , хотелось бы понять его применение с преимуществами и недостатками , характерными для него ?)
Re: Обучаем новичка программированию ПЛК
Не совсем =)Михайло писал(а): Надеюсь ответил на Ваш вопрос.
Все, что вы написали мне понятно)
Но вот в чем вопрос , возможно в первый раз сформулировал не особо точно:
Где применяются слова , двойные слова ?
Они состоят из байтов , байты в свою очередь из битов и как раз сами биты могут иметь значения типа BOOL,
Так вот в программе в основном задают адреса битов тех или иных переменных, можно ли по средствам применения байтов существенно сократить программу)
Обрежте если же я чего то, не понимаю )))
Хотя у меня сейчас такое представление , что формирования в слова в основном нужно для обмена информацией?
Re: Обучаем новичка программированию ПЛК
Да действительно, просто руководство очень часто оперирует этим термином при разъяснение написания программ на STL )Михайло писал(а): Мне кажется, применение стека в реальных задачах не имеет особого обоснования. Это имеется в виду работа со временными переменными (TEMPORARY)?
Благодарю Вас за ваши ответы! =)
Re: Обучаем новичка программированию ПЛК
m-n-tihiy писал(а):Где применяются слова , двойные слова ?
Обмен информацией по сетевому интерфейсу, да. Здесь применяются байты и слова, состоящие из отдельных что-то значащих битов. Но это не единственное применение.m-n-tihiy писал(а):Хотя у меня сейчас такое представление , что формирования в слова в основном нужно для обмена информацией?
Помимо хранения в байтах, слова и двойных словах бинарных/логических данных применяется еще целочисленное представление, например, в байте можно хранить число от 0 до 255, а в слове - от 0 до 65535. Таким числом может быть номер экрана на панели оператора или количество произведенной продукции за смену. Эти числа можно складывать, вычитать, умножать, делить и т.д. В этом случае возможность разделения байт и слов на отдельные биты сохраняется, однако особого смысла уже, как правило, не имеет.
Более того, помимо хранения целочисленных данных, ПЛК, которые помощнее чем простые программируемые реле, умеют хранить в двойных словах (32 бита) вещественные числа (тип REAL). Вещественные числа - это числа с плавающей запятой, например, 3,1415 или -0,625. Также доступны операции сложения, вычитания, умножения, деления, возведения в степень, радикалы, логарифмы, синусы, косинусы и т.д.
Это тоже часто применяется в автоматизации!
Может и можно, но нужно ли? От программы требуется удобство ее чтения и анализа, а объем памяти у ПЛК не так уж и ограничен...m-n-tihiy писал(а):Так вот в программе в основном задают адреса битов тех или иных переменных, можно ли по средствам применения байтов существенно сократить программу)
Если речь идет про основы IL/STL, то мне на ум приходит только такая штука, которая называется "результат логической операции" (RLO), иногда употребляют термин "аккумулятор" (ACCU). Это действительно базовые понятия в языке IL и эти вещи сильно напоминают понятие "стек" в программировании, и "временные переменные" (temporary variables) они тоже напоминают...m-n-tihiy писал(а):Да действительно, просто руководство очень часто оперирует этим термином при разъяснение написания программ на STL )Михайло писал(а): Мне кажется, применение стека в реальных задачах не имеет особого обоснования. Это имеется в виду работа со временными переменными (TEMPORARY)?