Simatic s7 1200 программа для программирования
Программное обеспечение SIMATIC для создания программ, используемых в программируемых логических контроллерах на языках программирования контактный план, функциональный план или список операторов для станций SIMATIC S7-300/400. Основы SIMATIC STEP 7. Наиболее важные экранные диалоговые окна и процедуры, практические упражнения.
Обзор программирования с помощью STEP 7.
Знакомство с продуктом и установка программного обеспечения, основы проектирования структуры программы, запуск и функционирование, сборка и редактирование проекта, определение символов, создание блоков и библиотек, логических блоков. Создание исходных файлов на STL, управление и наблюдение за переменными. Установление соединения и настройка CPU, отладка, диагностика.
Использование коммуникационных процессоров SIMATIC NET (PROFIBUS CP) для связи по SIMATIC NET PROFIBUS на полевом уровне. Производительность и область применения коммуникационных служб. Конфигурирование CP с помощью конфигурационного программного обеспечения NCM S7. Программирование коммуникационных интерфейсов для пользовательской программы
“PROJECT ETHERNET” Примеры STEP 7 для Ethernet CP, связь по интерфейсу SEND/RECEIVE между станциями S7. Связь по интерфейсу SEND/RECEIVE между станциями S7 и S5.
Обзор конфигурирования аппаратуры и проектирование соединений с помощью программного обеспечения STEP 7. Поддержка при отображении структуры аппаратного обеспечения в форме проекта STEP 7, организация обмена данными между системами автоматизации.
Установка оборудования ( Монтаж). Органы управления S7-200 (CPU 212). Подключение устройства. Схема учебного устройства. Схема подключения S7-200 (CPU 212). Запуск STEP 7-Micro/WIN
CPU S7–200. Модули расширения S7–200. Пакет для программирования STEP 7-Micro/WIN. Возможности обмена данными. Индикаторные панели. Первые шаги. Подключение CPU S7–200. Создание программы-примера. Загрузка программы-примера
Использование коммуникационного процессора CP 243-1.Информация о том, как эксплуатировать данный коммуникационный процессор, подключенный через Industrial Ethernet (IE).
Основные функции аппаратного и программного обеспечения S7–300.
Общие технические данные. Источники питания. Цифровые модули. Принципы обработки аналоговых величин. Представление аналоговых величин аналоговых модулей. Аналоговые модули. Другие сигнальные модули. Интерфейсные модули. Повторитель RS 485. Наборы параметров сигнальных модулей. Диагностические данные сигнальных модулей
Путеводитель по документации S7-300. Элементы управления и индикации. Обмен данными. Концепция памяти. Времена цикла и реакции. Общие технические данные. Технические данные CPU 31xC. Технические данные CPU31x 8.
Давно хотел рассказать про тонкости программирования обмена по протоколу Modbus RTU в случае, когда контроллер (в нашем случае S7-1214) выступает RTU Master'ом. Недавно меня попросили помочь с обменом между ПЛК и частотным преобразователем Sinamics V20, ну и почему бы не написать заодно заметку, постаравшись приблизить решение задачи к боевым условиям.
Собственно говоря, сами немцы эту тему давно осветили:
Смотрите этот пример, он сделан очень толково, с визуализацией, диалогами и квестами и возможностью расширить прикладную программу до опроса множества ПЧ V20 по нескольким интерфейсам (S7-1200 позволяет установить в свою корзину до 4 портов RS-485/422). Пример сделан очень хорошо и очень педантично. Вопросов коммуникаций по протоколу Modbus TCP я уже касался ранее, они есть на Хабре.
Поэтому некоторые нюансы я повторно объяснять не буду, просто сразу напишу, как стоит делать правильно и удобно с моей точки зрения конкретно в случае опроса V20. Первоначальная настройка преобразователя частоты описана в документации, в том числе и в сопутствующей документации к вышеуказанному примеру. Вынесем лишь важные для нас пункты в качестве вводных.
Адрес подчиненного устройства модбас в сети: 1
Регистры хранения подчиненного устройства для чтения:
40110 ZSW «Слово состояния»
40111 HIW «Текущая скорость»
Регистры хранения для записи:
40100 STW «Слово управления»
40101 HSW «Задание скорости»
Параметр частотника «Telegram off time (ms)» P2014[0] рекомендую оставить по умолчанию, равным в 2000 мс (2 секунды), хоть пример и рекомендует снизить эту величину до 130 мс. Конкретно к протоколу Modbus это замечание не относится, разумеется, просто у меня при таймауте в 130 мс, ПЧ терял связь и выдавал ошибку Fault 72.
С частотником разобрались. Теперь о моей конфигурации ПЛК. Это S7-1214 с коммуникационным модулем 1241 под RS-485/422:
Среда программирования Step 7 V15.1 Update 4, версия прошивки CPU — 4.3.
Итак, приступим. Для опроса подчиненных устройств с контроллера Simatic нам необходимо применить два функциональных блока: Modbus_Comm_Load (единовременно, только для конфигурации коммуникационного процессора) и Modbus_Master (циклически для чтения и/или записи регистров/катушек). Поэтому в программе экземпляр FB Modbus_Comm_Load у нас будет встречаться только один раз, а экземпляр Modbus_Master — несколько раз, но с разными входными параметрами, в зависимости от адреса подчиненного устройства, типа читаемых данных и их количества, а так же направления передачи данных (чтение или запись). Обращаю ваше внимание, что для одного коммуникационного процессора (а их в системе может быть очень много) у вас не может быть больше одного экземпляра каждого блока данных.
С моей точки зрения весь обмен удобнее завернуть в один внешний функциональный блок, а сам блок, с учетом необходимости разбирать данные, реализовать на текстовом языке SCL. Поэтому создаем в проекте функциональный блок с именем ModbusMasterV20 на языке SCL. Сразу после создания открываем его свойства и снимаем настройку «оптимизированный доступ», т.е. используем стандартный доступ. Личный опыт показал, что использование оптимизированного доступа рано или поздно приведет к ошибкам работы блока Modbus_Master и невозможности обмена. Это связано с порядком, в котором переменные идут в объявленной структуре данных, при стандартном доступе порядок соответствует заданному в программе, при оптимизированном — система сама «раскидывает» переменные, как сочтет нужным.
Объявляем следующие входные переменные
Init (Bool) — инициализация коммуникационного процессора, ее необходимо выполнить один раз перед началом обмена
PORT (PORT) — аппаратный идентификатор коммуникационного процессора
BAUD (UDINT) — скорость обмена по порту
STOP_BITS (USINT) — количество стоповых бит «кадра»
PARITY (USINT) — четность, где 0 — нет четности, 1 — odd, нечет, 2 — even, чет
В статической области переменных так же прописываем переменную с именем Step и типом UInt, она отвечает за «номер опроса» или «шаг работы алгоритма»
Так же в статической области объявляем экземпляры ФБ для работы по протоколу Modbus RTU
Строки программы, отвечающие за инициализацию обмена.
По флагу инициализации выставляем номер шага 1. Следующие строчки очень важны для работы
Тут мы задаем значения статических переменных экземпляра ФБ Modbus_Comm_Load, которые отвечают за «физику» передачи. Не понимаю, почему немцы поместили эти важные конфигурационные параметры в статическую область, а не в область входов. Дело в том, что они (переменные) все описаны во встроенной справке. Беда лишь в том, что большинство ленивых жоп новичков до этого пункта справку не читает, а потом тратят несколько часов, а то и дней, пока не найдут ответ. А справка-то, вот она:
Переменная MODE отвечает за режим, в котором будет работать коммуникационный процессор. Как видно из справки, для RS-485 надо явно выставить 4. Значение по умолчанию 0, от этого большинство ошибок у программистов.
STOP_BITS — количество стоповых бит.
Далее следует вызов блока настройки коммуникационного интерфейса Modbus_Comm_Load. Про параметр PORT (аппаратный идентификатор) будет рассказано чуть ниже. Параметры BAUD и PARITY — скорость и четность — приходят на вход «внешнего» блока данных, куда мы и завернули весь обмен. А вот параметр MB_DB интересен. На этот вход надо подать структуру типа P2P_MB_BASE, которая находится в области статических переменных экземпляра функционального блока Modbus_Master. Этот экземпляр в нашем «большом» функциональном блоке уже объявлен, привожу скриншот:
Следующая часть: функциональный блок приступает к циклическому обмену.
Я сразу «заворачиваю» обмен в CASE, чтобы не переписывать код в дальнейшем, но пока мы ограничимся чтением слова состояния и скорости ПЧ, т.е. прочитаем два регистра хранения.
Давайте посмотрим на вызов блока Modbus Master повнимательнее:
MB_ADDR — адрес подчиненного устройства Modbus RTU. В моем случае адрес частотника = 1.
MODE — направление передачи данных, 0 — чтение, 1 — запись
DATA_ADDR — адрес интересуемых нас данных. В моем случае необходимо прочитать два регистра хранения (поэтому первая цифра 4), начиная со 110го. В протоколе Modbus (что RTU, что TCP) очень часто возникает путаница в понятиях «адрес» и «номер». И очень часто производитель оборудования эту путаницу добавляет в свою систему. Вот смотрите. Мы должны прочитать 2 регистра, начиная с адреса 40110. Для чтения регистров хранения в протоколе Modbus используется функция с номером 3. Именно 3 будет передаваться в телеграмме Modbus. А в качестве адреса в телеграмме будет передаваться не 40110, а 109. Связано это с тем, что код функции уже содержит описание области данных. А в самой телеграмме мы передаем не адрес, а номер требуемого регистра или катушки. И эта нумерация идет не с единицы, а с нуля. Сейчас я работаю именно с адресами и режимом (чтении или запись), поэтому мне достаточно указать то, что я нашел в документации. Если же в вашем устройстве будет указано «входной регистр номер 0 содержит текущий статус устройства», то вам на вход DATA_ADDR необходимо будет подать 30001. Так же имейте в виду, что из-за частой путаницы с номерами и адресами, иногда эта адресация съезжает на «единицу», поэтому не бойтесь экспериментировать. Если вместо полезных данных по запросу 16ого регистра вам прилетает полная чехарда, не имеющая ничего общего с документацией, прочитайте 15ый регистр. Не помогло? Опрашивайте 17ый. Более подробно с материалом необходимо ознакомиться опять же во встроенной справке.
DATA_LEN — количество читаемых регистров, их 2
DATA_PTR — указатель на область памяти, куда необходимо «положить» результат чтения регистров. Собственно, это те данные, которые мы прочитали и необходимо подсказать функциональному блоку, куда эти данные надо записать. С моей точки зрения самый удобный способ в этом случае — это объявить в области STAT неименованную структуру должного размера. Поля структуры мы объявляем, в зависимости от самих читаемых данных, ведь это могут быть и наборы бит, и вещественные числа (расположенные в двух соседних регистрах). И нам еще повезет, если порядок байт в слове и слов в двойных словах контроллера и подчиненного устройства совпадут, иначе нам еще потребуется осуществить сдвиги байт/слов.
В данном случае я счел уместным объявить структуру из двух слов и скормить ее на вход FB:
ZSW — слово состояния (так оно называется в документации на ПЧ)
HIW — скорость вращения двигателя
После вызова блока мастера, необходимо проанализировать успех или неуспех его выполнения. В принципе, на этом скриншоте в комментариях уже все написано:
В случае успешного чтения необходимо полученные сырые данные как-то разобрать или переложить в другую область, и перейти к следующему опросу (у нас пока только один опрос, так что мы остаемся на шаге №1). При ошибке чтения данных минимальный разумный ход — выставить где-нибудь флаг недостоверности и перейти к другому опросу.
Пока оставляем прием данных без обработки, компилируем и грузим программу, смотрим на результат. Кстати, обращаю еще внимание на один факт. Поскольку мы работаем, завернув системные вызовы в свой функциональный блок, то любое изменение «своего» ФБ с последующей загрузкой ПЛК, будет нарушать обмен в связи с переинициализацией экземпляра нашего ФБ. Например, будет уходить в ноль значение «шага обмена». Да и внутренние статические переменные коммуникационных вызовов тоже пострадают. Самый простой способ — стоп и старт контроллера. В боевом проекте это опасно, поэтому там на вход Init я бы подал еще одну переменную и поднимал ее самостоятельно после изменений в коммуникациях. Пока же боремся с остановом обмена простым стоп-стартом ПЛК.
Добавляем вызов нашего функционального блока в OB1 и грузим CPU:
Переменная FirstScan имеет значение «истина» при первом цикле выполнения программы OB. Она назначается операционной системой ПЛК автоматически, ее применение настраивается в свойствах CPU.
Port. Это значение смотрим в проекте Step 7, аппаратная конфигурация:
Остальные параметры касаются скорости, четности и количества стоповых бит. Загружаем контроллер и смотрим, что нам приходит в ответ на единственный циклический запрос, открыв экземпляр нашего ФБ:
В слове состояния что-то есть, скорость равна нулю. Открываем документацию и смотрим состав слова состояния ZSW:
Low enabled в примечаниях означает инверсию. К примеру, бит №15, перегрузка частотника, возникает, когда этот бит равен 0, а в нормальном состоянии приходит значение 1. Посмотрим на это слово состояния в watch table и посмотрим, какие его биты выставлены, а какие — нет, оценим общее состояние ПЧ:
Тут нам везет, порядок байт в словах совпадают. Если вкратце, то видно, что ПЧ не готов, не включен, и сейчас активен сигнал аварии (fault, бит №3).
Далее я попытался разложить слово состояния в биты состояния, заменив WORD на структуру из бит, но что-то явно пошло не так.
Если посмотреть внимательно, то в таком представлении нулевой и первый байты явно не на своих местах. В общем, вопрос порядка следования информации в зависимости от того или иного представления — он всегда важный и требует вдумчивости. Получил на этом этапе облом, я решаю вернуться к хранению внутри нашего ФБ только сырых данных, а удобочитаемый для человека формат представления информации перенести куда-нибудь во внешний глобальный блок. Добавляю в проект блок данных DataV20:
После чего задумываюсь, убираю из имен переменных окончание Inv и дописываю функциональный блок:
Теперь в глобальном блоке данных у нас находятся статусные биты преобразователя частоты без какой-либо инверсии:
Думаю, что сразу в блок данных надо вписать переменную типа Real, которая будет содержать текущие обороты двигателя. Текущие обороты приходят от ПЧ в виде определенного численного кода, и мы вольны трактовать этот код, как нам удобнее. Допустим, что хочу трактовать этот код, как Герцы, поданные на двигатель.
Пока не будем пересчитывать коды в физические величины и перейдем к следующему шагу — к записи слова управления и задания частоты. Вернемся к обработке текущей скорости чуть позже.
Обратимся к документации и посмотрим состав слова управления частотным преобразователем:
Знаете, мне, откровенно говоря, лень писать все эти переменные в глобальном интерфейсном блоке данных. В моей практике управление простыми технологическими процессами с применением преобразователей частоты ограничивалось командами включить, квитировать аварию и дать задание скорости. Поэтому, пойдем на поводу моей лени и в блоке данных V20Data пропишем всего лишь бит включить, бит квитировать и задание частоты в формате Real.
Изменю алгоритм на шаге №1, при успешном или неуспешном завершении опроса сделаю переход на шаг №2.
Добавим еще локальную структуру ФБ, которая содержит слово управления и слово задания скорости:
Дорабатываю программу обмена. Не забываем, что при изменении переменных функционального блока, после загрузки изменений в ПЛК происходит его переинициализация, посему надо выполнять стоп/старт CPU.
Параметры функционального блока модбас в данном случае отличаются от первого вызова. Разумеется, у нас тут другой адрес регистра. А так же отличается режим (MODE), он равен 1, так как в данном случае данные не читаются с частотника, а записываются в него. Разумеется, указатель на область данных так же другой.
Обратите внимание, что некоторые биты слова управления я принудительно выставляю в истину, другие — в ложь. Всего два бита управления (включить и квитировать) доступны для внешней программы. Необходимое значение бит управления я вычитал в документации примера. Разумеется, это указано и в документации на сам преобразователь частоты. Изучая исходный пример, я обратил внимание, что если частотнику отдавать «пустое» (все биты выставлены в ноль) слово управления, то это подчиненное устройство модбас возвращает ошибку Invalid data. Однако, в этом примере я пробовал слать полностью «пустое» слово управления, и V20 принимал его. Однако, некоторые биты управления, все равно, должны быть установлены. К примеру, если снять бит «Control by PLC», то запускаться ПЧ не будет. RTFM, как говорится!
Теперь пора перейти к регистру, который отвечает за задание скорости (ну и сразу же к регистру, который отображает текущую скорость). Из исходного примера я понял, что этот регистр меняет свое значение в пределах от 0 до 16384. Это же мельком нашел и в документации. Пока не будем делать никаких переводов величин, и зададим ПЧ максимальную скорость жестко прямо в программном коде.
Откроем наш блок данных DataV20 и выставим команду «пуск»:
V20 запустился и работает, судя по индикации своего экранчика, на максимальной скорости, т.е. на 50 Гц. Давайте посмотрим еще сырые данные его скорости, которые приходит по modbus.
Значит, пришло время доработать шаг №1 обмена (перевести коды скорости в герцы), ну и шаг №2 в части обратного преобразования, герцы в численное значение задания скорости. «Математика» самая простая, без проверок на достоверность и выход за диапазон, хотя все это не помешает.
После загрузки изменений откроем блок данных DataV20 и поуправляем частотником из него.
Даем задание 25 Гц, даем пуск и наблюдаем за появлением сигнала Running и текущей скоростью.
Все регистры, которые можно считать с V20, описаны в документе по ссылке.
Судя по описанию регистров, есть и другие способы управления, но нас сейчас интересует не это. В моей практике с преобразователей частоты еще частенько просили считать ток(и), напряжение(я), мощность, детализацию ошибок и т.д. Давайте последуем этой старой-доброй традиции и считаем дополнительно вот эти параметры, а так же переведем их в понятное представление:
Параметры, разумеется, могут быть любыми, но предположим, что заказчику очень хочется именно эти. Я не буду подробно описывать процесс программирования и сразу покажу результат.
В принципе, мотор маленький, крутится без нагрузки, поэтому значения похожи на достоверные. Тем не менее, задача стоит в демонстрации считывания данных, поэтому будем считать наличие хоть каких-либо «цифры» за огромный технологический прорыв. Итак, вы уже заметили, что я добавил читаемые параметры в блок данных DataV20. Дополнительно был доработан функциональный блок коммуникаций:
Читаются (mode = 0) четыре регистра хранения по адресу 40025. Результат помещается во внутренний статический массив [0..4] of WORD. Далее эти слова переводятся в формат Real и помещаются во внешний блок данных в результате несложных преобразований.
Ну, и напоследок остается проанализировать качество связи. Ведь не зря же на каждом шаге после выполнения ФБ Modbus_Master смотрю его флаги DONE или Error (кстати, эти флаги имеют значение «истина» только на протяжении одного вызова после успешного или неуспешного выполнения запросы, в остальное время — ложь). Для этого я объявил массив из булевых переменных
Массив размерностью три, по количеству запросов Modbus. Соответственно, если на шине будет 10 частотников, по три запроса к каждому, то размерность этого массива, как и количество «шагов» алгоритма, будет равно 30. Ну, и в конце каждого опроса, при анализе флагов, наконец, прописываем присвоение флагам значения.
Будем считать, что частотник стабильно обменивается информацией с ПЛК, когда все три запроса к нему выполнены успешно. Поэтому самая последняя строчка нашего функционального блока будет такой (предварительно добавим булевую переменную Connected в блоке данных DataV20):
В этой статье показаны основы работы с ПЛК SIMATIC S7-200 фирмы SIEMENS. Рассмотрены вопросы конфигурирования GKR? соответствия периферии областям памяти, существующие симуляторы. Также напишем первую программу и проверим ее функционирование на симуляторе.
Итак приступим. Будем считать что ПКЛ смонтирован и к нему подключено питание. А также подключен кабель PPI. Для программирования, загрузки и отладки контроллера необходимо установить пакет STEP 7 MicroWin.
Настройка оборудования
Запускаем MicroWin. В открывшемся окне нажимаем Set PG/PC interface.
Выбираем PC/PPI cable.
Нажимаем Properties и на вкладке LocalConnection выбираем номер com порта на который установлен второй конец кабеля (для кабеля PPI – USB номер виртуального com порта).
Закрываем вкладку. В основном окне MicroWin выбираем Communications.
Ставим галочку «search all baud rates» и справа нажимаем «double click to refresh».
В процессе поиска должен появиться контроллер.
Выбираем его и нажимаем OK.
Теперь соединение с ПЛК установлено и можем управлять им переводя его в разные режимы работы, залить в него программу, скачать из него программу, отлаживать программу в реальном времени и т.д.
Теоретические основы
Теперь коротко расскажу как работает ПЛК. Сначала считываются все входа и переносятся в так называемую область отображения входов. Потом идет цикл выполнения программы с обработкой эти вводов, выполнением каких либо математических операций и формированием по результату выполнения области отображения выходов. И в самом конце происходит перенос из области отображения выходов на реальные выходные регистры. После этого цикл повторяется. Из этого следует, что если в процессе выполнения программы происходит например включение какого либо выхода в состояние единицы, а следующие за этим инструкции переводят его в 0, то состояние входа не измениться в процессе выполнения программы. В этом главное отличие ПЛК от микроконтроллеров где воздействие на выхода осуществляется непосредственно внутри цикла программы записью значения в регистр выходов.
Программа выполняется в основном цикле OB1.
В процессе выполнения программы могут запускаться соответствующие подпрограммы и вызываться различные функции. Также в процесс выполнения программы может вызываться настроенное ранее прерывание, после выполнения которого продолжиться выполнение основного цикла.
Память в ПЛК делиться на области отображения дискретных входов (обозначается латинской буквой I), дискретных выходов (обозначается буквой Q), аналоговых входов (обозначается буквами AIW), аналоговых выходов (отображается буквами AQW). Аналоговые входа имеют выход размерности 16 бит и соответственно формат «слово» WORD. Если вход специализированный (например под термосопротивление или термопару) то выход будет иметь значение температуры с десятыми долями градуса Цельсия (например аналоговый вход под Pt100 AIW10 и температура на датчике 36.6 С то AIW = 366). С дискретными входами и выходами можно общаться как побитно (например I0.0) означает дискретный вход I0 бит 0), так и побайтно (например IB2). Аналогично и дискретными выходами. Важно заметить, что выхода можно не только устанавливать но и опрашивать.
Существует меркерная память, она сохраняет свои значения при пропадании питания, (обозначается буквой М) например M0.0 MB2 MW4 MD6. Есть так называемые системные меркеры (обозначаются SM), в них хранятся всяческие системные данные доступные для пользователя (об этом будет ниже). B обычная память (отображаемая буквой V) например VB0, VD4, VW10. Также существуют аккумуляторы для хранения промежуточных результатов при вычислении они имеют разрядность 32 бита и обозначаются AC0, AC1, AC2, AC3.
Память разбивается на биты, байты (VB) - 8 бит, слова (VW) - 16 бит, двойные слова (VD).
Математически операции выполняются на числами со следующими разрядностями.
Integer 16 бит от -32768 до +32767
Double integer 32 бита от -2147483648 до +2147483647
Real 32 бита от -1.175495E-38 до -3.402823E+38
Первая программа
Напишем простую программу опрашивающую дискретный вход и устанавливающий дискретный выход.
В главном окне MicroWin нажимаем View -> Ladder (это означает что писать мы будем на языке LAD).
Выбираем OB1 (основной цикл программы) и дважды по нему щелкаем.
В панели слева выбираем Instruction -> Bit Logic и два раза щелкаем по значку -||- Normaly open
(это так называемы нормально разомкнутый контакт, что означает что он замкнется и пропустит сигнал дальше если его состояние равно «1». В появившемся над контактом поле со знаками вопроса
вписываем I0.0 и нажимаем Enter, что означает мы опрашиваем дискретный вход I0.0. Опять слева из меню Instruction -> Bit Logic выбираем Output
и щелкаем два раза. В появившемся над выходом поле со знаками вопроса вписываем Q0.0 (число под оператором установки или сброса бита соответствует числу сбрасываемых или устанавливаемых битов в этом байте начиная с указанного, например если написать снизу 1 то установиться только указанный бит и так далее) и нажимаем Enter, что означает мы устанавливаем дискретный выход Q0.0.
Все простейшая программа готова. Нажимаем compile All.
В нижней статусной строке видим, что размер кода 20 байт, ошибок и предупреждений нет.
В открывшемся окне нажимаем Download. Произойдет заливка программы и окно закроется. Переводим контроллер в состояние RUN
Теперь если подать на вход I0.0 +24В то на выходе Q0.0 появиться +24В. Состояние входов выходов также отображается на светодиодах контроллера.
Теперь краткое отступление для тех кто хочет попробовать работать с ПЛК но не имеет его. Существуют два симулятора S7-200.
S7200SIM от SUNLiGHT software -
позволяет посредством виртуального моста com – com устанавливать связь MicroWin с эмулятором ПЛК. Не поддерживает аналоговые входа выхода. Проект похоже мертв.
текущая версия 3.0. Не работает напрямую с MicroWin но позволяет загружать программу через awl файлы. Поддерживает аналоговые входа выхода. Просмотр состояния программы.
Вот как выглядит наша программа при работе в контроллере.
В MicroWin нажимаем File - > Export. Даем имя файлу например 1 и нажимаем сохранить.
Запускаем симулятор S7_200.
Нажимаем Program -> Load Program. Оставляем галочку logic block и нажимаем Accept.
В открывшемся окне выбираем наш файл и нажимаем открыть.
Нажимаем PLC -> RUN.
Теперь если мы передвинем крайний левый тумблер вверх то сработает выход Q0.0.
Отлично, наша программа работает.
Опять небольшое отступление. Как определить по каким адресам находятся входа и выхода? Это очень просто.
Во первых можно просто посчитать их следующим образом. Все входа сгруппированы побайтно, поэтому предположим что ПЛК (без модулей расширения) содержит в себе 16 дискретных входов, 8 дискретных выходов, 2 аналоговых входа и 1 аналоговый выход. Они будут иметь адреса I0.0 - I0.7 и I1.0 - I1.7. Дискретные выходные Q0.0 - Q0.7. Аналоговые входные AIW0 и AIW2 (так как занимают по два байта каждый). Аналоговый выход AQW0. Теперь если мы добавим модуль расширения с 16 дискретными входами и 16 дискретными выходами. Они автоматически получат адреса I2.0-I2.7 I3.0 - I3.7. Выхода Q1.0-Q1.7 Q2.0 - Q2.7 т.е. адресация увеличивается линейно по байту на каждые 8 дискретных входов выходов, начиная с 0 в ПЛК. Аналоговые увеличивают адресацию по словно (через один) начиная с 0 в ПЛК.
Можно посмотреть присвоенные входам выходам адреса в ПЛК из MicroWin. Для этого в MicroWin нажимаем PLC -> information
В таблице видим, что CPU у нас 226 имеет 24 дискретных входа начиная с I0.0 и 16 выходов начиная с Q0.0
Идем дальше. Естественно при программировании ПЛК с большим объемом входных выходных сигналов и сложной математикой работать с абсолютными адресами сложно. Символьная адресация тут тоже возможна. В MicroWin нажимаем Symbol Table.
В открывшемся окне
Вбиваем в поле address абсолютный адрес, в поле symbol символьное имя, в поле comment комментарий который тоже можно включить на отображение. Наименование вкладки можно изменить. Можно также добавить новую вкладку для удобства группировки дискретных входов выходов, аналоговых, результатов математических вычислений и т.д.
Возвращаемся в OB1 и видим, что появилась табличка под кодом с сопоставлением символьного имени и абсолютного адреса. (если не отображается то нажать View -> Symbol Information Table.
Но в коде все по прежнему. Нажимаем Viev -> Symbol Table -> Apply Symbol to Project.
Вот теперь все отлично.
Вернемся в Symbol Table. Я рассказывал выше о специальных системных меркерах. Чтобы не лазить каждый раз в help я всегда проделываю следующие действия. Правой кнопкой мыши вызывается меню Insert -> S7-200 Symbol Table
Появляется вкладка S7-200 Symbols. Если прочитать комментарии то видно что системные меркеры содержат много полезного. Например бит SM0.1 First_Scan_On – выполняется только при первом цикле после включения питания. Это часто используется для загрузки первоначальных данных. Например в программе мы используем переменную по адресу VW0 для сравнения дальше в программе с аналоговым входом. Причем эта переменная будет потом доступна для изменения (типовая уставка аварийного значения).При этом мы хотим загрузить в нее какое либо первоначальное значение. Тогда код будет выглядеть так
В переменную VW0 загрузиться значение 789 при первом цикле программы и в дальнейшем это значение будет доступно для изменения.
Часто используется системный меркер SM0.0 Always ON – используется для подключения математических операций и загрузки в регистр в языке LAD. Пример
Две ошибки. По правилам языка LAD перед подобными операциями должна стоять инструкция опроса контакта, а так как этот должен быть всегда замкнут то используют системный меркер SM0.0
Теперь без ошибок.
Еще два интересных меркера SM0.4 SM0.5 – один переключается с периодом 1 секунда а второй с периодом 1 минута. На их базе можно реализовать цикличное выполнение какой либо подпрограммы или например простую мигалку. В OB1 набираем код
Экспортируем в awl. Загружаем в симулятор s7_200. Переключаем ПЛК в RUN и видим что выход Q0.1 переключается каждые 0,5 секунды.
Интересны и иногда полезны еще два специальных меркера SMW24 и SMW26 – они содержат минимальное и максимальное время выполнения цикла программы OB1 в миллисекундах.
В следующей статье рассмотрим основные операции выполняемые над входами выходами и аналоговыми данными. Рассмотрим конфигурирование и использование таймеров и счетчиков, а также создание и работу с функциями.
Отвлечемся немного от программирования и поговорим про контроллеры, для которых собственно и пишутся программы — в частности про Siemens SIMATIC S7-1200, их особенности, аппаратные средства, добавление аппаратной конфигурации в Tia Portal.
Контроллеры данного семейства являются, пожалуй, наиболее востребованными из всей линейки SIMATIC, благодаря своей универсальности, функционалу и приемлемой цене. Конечно, по своим возможностям, они уступают SIMATIC S7-1500, но здесь решающую роль играет цена — у S7-1200 она на порядок ниже. А для большинства задач их функциональных возможностей вполне достаточно.
S7-1200 поддерживают все версии Tia Portal, включая Lite — упрощенную версию, работающую только с контроллерами данного семейства.
Контроллер S7-1200 имеет модульную структуру, представляющую набор различных компонентов.
Центральный процессор CPU
Основой всей системы является процессорный модуль CPU (Central Processing Unit), который отвечает непосредственно за обработку, хранение данных, выполнение программы. Данное семейство представлено 5 моделями центральных процессоров, различающихся производительностью, количеством входов-выходов, объемом памяти. Кроме того, эти модели имеют несколько различных модификаций — DC/DC/RLY с напряжением питания = 24 В, дискретными входами = 24 В, дискретными выходами релейного типа, DC/DC/DC с напряжением питания = 24 В, дискретными входами и дискретными выходами 24 В на основе транзисторных ключей, AC/DC/RLY с напряжением питания
115/230 В, дискретными входами 24 В, дискретными выходами релейного типа.
Также их отличительной особенностью является возможность подключения определенного количества дополнительных сигнальных модулей. Так например CPU 1211 не поддерживает такую возможность, для CPU 1212 таких модулей может быть только 2, а для остальных моделей — 8.
Для каждой модели CPU характерно наличие встроенного PROFINET интерфейса, используемого для программирования, диагностики, коммуникации с HMI панелями и другими устройствами, но опять же разные модели имеют различное количество портов. CPU 1215 и CPU 1217 имеют на борту 2-х портовый коммутатор.
Стоит отметить наличие у всех моделей процессоров встроенного Web-сервера, позволяющего просматривать различную информацию о подключенном контроллере с помощью ПК или смартфона, через обычный Web-браузер.
Стандартные HTML страницы отображают следующую информацию об устройстве:
Еще стоит отметить из особенностей процессорных модулей наличие слота для карт памяти (SIMATIC Memory Card).
Можно задействовать ее в качестве внешней загрузочной памяти для процессорного модуля, для обновления встроенного программного обеспечения, для копирования программ во внутреннюю память устройства. Кстати, S7-1500 не имеют встроенной загрузочной памяти и без Memory Card не работают.
Сигнальные модули SM
Для расширения возможностей процессора применяются сигнальные модули (SM — Signal Modules) и сигнальные платы (SB — Signal Boards). Они позволяют задействовать в случае необходимости дополнительные дискретные (DI, DQ) и аналоговые (AI, AQ) входа и выхода.
Также есть сигнальные модули измерения температуры, специально для подключения термопар и термосопротивлений. В частности это модуль SM 1231 Thermocouple для термопар и SM 1231 RTD для термосопротивлений.
Кроме того, могут быть задействованы технологические модули SM 1278 4xIO-Link Master, работающие и как сигнальный модуль, и как коммуникационный. Каждый модуль позволяет подключить до 4 устройств IO Link.
Для работы с тензометрическими датчиками в системах взвешивания, измерения силы и прочих измерительных задачах применяются модули SIWAREX WP231. В отличии от всех предыдущих модулей, он имеет возможность работать как с CPU по стандартной внутренней шине, так и без него, например с HMI панелями, через Ethernet (Modbus TCP/IP) или RS 485 (Modbus RTU). У модуля SIWAREX имеется собственное ПО для настройки и обслуживания SIWATOOL V7, но при этом он может быть легко интегрирован в Tia Portal.
Коммуникационные модули CM
Коммуникационные модули (CM — Communications Modules ) и коммуникационные процессоры (CP — Communications Processors) существенно расширяют возможности контроллера в построении промышленных сетей.
Линейка коммуникационных устройств включает в себя ряд модулей, обеспечивающих обмен данными по сетям:
- Модули CM1242-5 (slave) и CM 1243-5 (master) позволяют использовать контроллеры в сетях PROFIBUS DP для построения систем распределенного ввода-вывода. Для S7-1200 возможно подключение до трех таких модулей. Каждый модуль, в свою очередь, способен обслуживать до 32 ведомых DP-устройств (в качестве ведомых DP могут выступать частотные преобразователи, распределительные станции ET-200, контроллеры S7, другие различные устройства).
- Модули CM 1241 и платы CB 1241 обеспечивают обмен данными через PtP (Point-to-Point) соединение на основе интерфейсов RS-232 или RS-485 и с поддержкой протоколов Modbus RTU и ASCII, а также USS (Протокол обмена данными между контроллером и приводами серий MICROMASTER и SINAMICS).
- Модули CM 1243-2 используются для подключения контроллеров S7-1200 к сетям AS-Interface (Actuator Sensor Interface) в качестве ведущего сетевого устройства. Позволяют подключить к контроллеру до 62 ведомых устройств в сети ASI.
- Процессоры CP 1242 и 1243 позволяют интегрировать S7-1200 в системы телеуправления и поддерживают обмен данными через мобильные беспроводные сети GSM и LTE.
Подключение модулей контроллера
Подключение модулей между собой осуществляется по внутренней шине. Сделано, кстати, очень удобно — достаточно установить процессор на DIN рейку, снять крышку соединителя, установить сигнальный модуль и перевести шинный соединитель в положение влево. И все, сигнальный модуль с процессором надежно зафиксированы между собой.
Также легко соединяются и коммуникационные модули, только шинный соединитель у них не выдвижной и соединять их с процессором удобно до установки на DIN рейку.
Все сигнальные модули подключаются к процессору с правой стороны, а коммуникационные — с левой, а вот сигнальные и коммуникационные платы устанавливаются одинаково — в отсек на фронтальной части процессора. В этот же отсек возможна установка батарейной платы — BB (Battery Board), для резервирования часов реального времени CPU от перебоев в питании.
Добавление S7 1200 в проект Tia Portal
После создания проекта в STEP 7 необходимо добавить наш контроллер в конфигураторе устройств. Делается это на вкладке Devices&networks — Add new Devices
Здесь нам представлены все доступные в данной версии программы модели CPU. Выбираем нашу модель CPU 1214C DC/DC/Rly и в раскрывающемся списке находим серийный номер процессора. Справа мы видим его описание, версию, вверху можно ввести имя устройства, которое будет отображаться в проекте. Нажимаем кнопку Add .
Если по каким-то причинам вы не можете точно идентифицировать свою модель, то можно выбрать в списке Unspecified CPU 1200 (Неопределенный CPU). Tia Portal сам должен определить вашу модель, главное чтобы контроллер был подключен к компьютеру.
В рабочей области открывшегося окна появится изображение выбранного нами CPU. Что мне например нравится, визуально сделано все реалистично.
На вкладке Properties можно сконфигурировать различные параметры нашего контроллера — IP адрес, по умолчанию он не задан, поведение цифровых и аналоговых выходов, когда ЦПУ находится в режиме STOP, быстродействующих счетчиков (HSC), генераторов последовательных импульсов (PTO) и широтно-импульсной модуляции (PWM), поведение контроллера при запуске системы, время цикла и многие другие параметры.
Далее, если это необходимо, добавляем модули расширения. Делается это простым перетаскиванием модуля из каталога Hardware catalog на рабочую область.
Таким образом, мы добавили все необходимые модули контроллера в проект. Наша аппаратная конфигурация готова, можно переходить к программной части, но это уже отдельная история.
Читайте также: