7

Справедливости нет совсем? Или все таки стоит идти до конца?

Был примерно такой же случай, только мою машину эвакуировали https://pikabu.ru/story/za_nepravilno_ustanovlennyiy_znak__n...


Знак 3.27 «Остановка запрещена» с "работает эвакуатор" я тупо не увидел, высоко оно стоит, нижний край начинается от 4 метров. Забрал тачку, оплатил все и на следующий день поехал смотреть туда же, неужели я проморгал? Повторил маршрут 4 раза, и чтобы увидеть эти знаки я должен ехать на кабриолете или автомобиле с панорамной крышей. Подумал что здесь что то не так, и полез искать ГОСТы и СНиПы, потому что этих знаков тупо не видно.

Нашел ГОСТы, которые как оказалось @necromorph уже нашел. Написал обращение в ГАИ. Пригласили, попросили разъяснить. Написал на бумаге, объяснил инспектору что так знак ставить неправильно. Вчера пришел ответ..............................................

Справедливости нет совсем? Или все таки стоит идти до конца? Справедливость, Несправедливость, Суд, Бороться дальше?, Длиннопост
Справедливости нет совсем? Или все таки стоит идти до конца? Справедливость, Несправедливость, Суд, Бороться дальше?, Длиннопост
Справедливости нет совсем? Или все таки стоит идти до конца? Справедливость, Несправедливость, Суд, Бороться дальше?, Длиннопост
Справедливости нет совсем? Или все таки стоит идти до конца? Справедливость, Несправедливость, Суд, Бороться дальше?, Длиннопост
Справедливости нет совсем? Или все таки стоит идти до конца? Справедливость, Несправедливость, Суд, Бороться дальше?, Длиннопост
Справедливости нет совсем? Или все таки стоит идти до конца? Справедливость, Несправедливость, Суд, Бороться дальше?, Длиннопост
Справедливости нет совсем? Или все таки стоит идти до конца? Справедливость, Несправедливость, Суд, Бороться дальше?, Длиннопост
Справедливости нет совсем? Или все таки стоит идти до конца? Справедливость, Несправедливость, Суд, Бороться дальше?, Длиннопост

И соответственно вопросы, стоит вообще идти дальше? доказывать в суде что я не олень? а может я олень?

И как доказать что я двигался именно по описанному маршруту?

И эта кормушка так и будет приносить деньги в карман хз кого?

Предполагаю что в суде меня просто так же повертят на одном половом органе....

Показать полностью 8
12

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем

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

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

Далее открываем окно всех тегов контроллера и окно со свойствами аналогового модуля чтоб узнать адреса каналов

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост
TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

Я уже добавил тег давления, где указал тип данных и адрес канала. Так же добавляем тег - текущее положение клапана. Этот тег так же аналоговый сигнал  и он информирует нас о том на сколько процентов открыт клапан. И добавляем еще один тег. Это тег управляющего воздействия на клапан. Управляем клапаном так же сигналом 4....20 мА. Как раз для этого мы в HW поставили модуль аналогового выхода(AO).

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

Надо сказать что нам придется применить еще один функциональный блок, блок обработки в аналоговый сигнал, чтобы процент открытия клапана от 0 до 100 превращать  в сигнал 4....20 мА. (если что напишите в комментариях, объясню или сделаем новый пост)

Теперь возвращаемся непосредственно к ПИД.


Для этого открываем созданную OB32(с прошлого поста) и в Netwok добавляем стандартный блок ПИД регулирования PID_3Step

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

Перетаскиваем (Drag&Drop) блок из списка

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

И среда предлагает создать DB для функционального блока ПИД. Можете название поменять, для удобства.

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

И так же моя тупая голова забыла что есть дискретные сигналы с клапана. Когда клапан полностью закрыт, с клапана приходит дискретный сигнал о том что клапан закрыт и наоборот.

По быстрому добавлю модуль дискретных сигналов и теги

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост
TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

Добавил еще один тег "Needed_PT"- давление которое нам нужно после клапана, которое нужно удержать.

Теперь возвращаемся в OB32  и привязываем наши теги к функциональному блоку ПИД

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

Что к чему, надеюсь понятно.

По сути все готово, остается настроить ПИД при включенном контроллере.

Вот мы и добрались до коэффициентов регулятора. Обычно чтоб инженеры могли регулировать эти коэффициенты, все эти коэффициенты вывожу на панель управления. Выглядит это примерно так....

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

И теперь опишу, какие коэффициенты к каким переменным привязываются в Instanz DB функционального блока ПИД регулятора

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

Так как мы используем функциональный блок Siemens, его Data Block находится в папке System blocks. Открываем его и видим сотни переменных- входные, выходные, статистические и т.д..

Переменные input и output мы уже присоединили в блоке OB32.

Все коэффициенты находятся в static.

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост

Коэффициент пропорциональности Kp - Gain

Время интегрирования Ti - Ti

Время дифференцирования Td - Td

Время цикла - Cycle

Весовой пропорциональный коэффициент b - PWeighting

Коэф. диф. задержки (T1 = a х Td)  a - TdFiltRatio

Весовой диф. коэф. с - DWeighting

Зона нечувствительности db - InputDeadBand

TIAPortal, применяем стандартные блоки ПИД регулирования, продолжаем Программирование ПЛК Siemens, Пид регулирование, Длиннопост
Показать полностью 12
6

TIAPortal, применяем стандартные блоки ПИД регулирования

Запускаем среду (кстати, она у меня V14)

TIAPortal, применяем стандартные блоки ПИД регулирования Программирование Siemens для н, Асутп, Длиннопост

Все что вы видите, с прошлого проекта. Просто добавим ПИД регулирование.


Как всегда рассмотрим на примере.

Пример: Имеется труба по которому идет газ. На трубе установлен клапан регулирующий, и датчик давления.

TIAPortal, применяем стандартные блоки ПИД регулирования Программирование Siemens для н, Асутп, Длиннопост

Задача: Сделать ПИД регулятор в TIAPortal'е используя стандартные блоки среды и настроить его так, чтоб он держал давление на определенном нами уровне.


В мануале написано, что стандартные блоки мы не можем использовать в основном OB1, поэтому создаем свое новое OB, где время обработки цикла гораздо реже чем в основном OB1.

Сразу задаем 500 микросекунд

TIAPortal, применяем стандартные блоки ПИД регулирования Программирование Siemens для н, Асутп, Длиннопост

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

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

TIAPortal, применяем стандартные блоки ПИД регулирования Программирование Siemens для н, Асутп, Длиннопост

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

Устал, допишу чуть позже)

Показать полностью 2
11

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение...

Итак, остановились мы на содержании стандартного пакета данных отправляемый Master'ом

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Запомним еще одну нужную вещь! 1 регистр = 2 байтам!!!


И рассмотрим пакет данных отправляемый Slave'ом

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Как Вы понимаете, данные могут занимать разное количество регистров.

Все выше описанное - это стандартные пакеты!

Как Вы помните мы взяли как ведомое устройство ИРВИС....

Там все веселее)) Они (конструкторы) решили создать свою нестандартную функцию, при котором будет считываться большое количество данных.

Для решения этого вопроса мне пришлось писать в саппорт, где ребята мне объяснили что к чему и отправили документ, где все понятно описано (более ли менее)

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Исходя из данных с этой страницы, мы возвращаемся к ТИА Порталу. Нам нужно создать дата блок, где мы составим пакет данных.

В принципе вы уже поняли (надеюсь) как создавать те или иные блоки, поэтому выложу скрин уже созданного и заполненного блока.

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Я назвал блок ASK_IRVIS и структуру из байтов, значения мы переводим в 16- тиричную систему исчисления. К примеру, если откроете калькулятор и значение первой строки переведете в 10 -тичную систему, то получите адрес устройства к которму мы будем обращаться.(28 должно быть)

Если смотреть все строки то, вроде все понятно, кроме как CRC код.

CRC код сделан для того чтобы контролировать правильность, достоверность пришедшего пакета. Если CRC в конце не совпадает, то устройство тупо не отвечает.

Покажу как составлять CRC, я обычно делаю это тут https://www.lammertbies.nl/comm/info/crc-calculation.html

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

В окне просто заполняем наш пакет данных, в типе ставим Hex и жмем расчитать.

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Как вы видите мы получили наш искомый код, однако, нам придется менять старший и младший байт местами, если кто то напишет почему меняем местами, тот молодец!)

Теперь заполненный DB используем по назначению

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Buffer - наш DB, и ниже длина сообщения в байтах- их у нас вышло 8.

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

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

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Почти готово, осталось разобраться с настройками порта.

Для этого заходим в свойства модуля где находится этот порт

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Далее по картинкам покажу что менял

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост
Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Остальные настройки не трогал.

В принципе все должно работать, попробуем скомпилировать

Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост
Программируем Modbus RTU на контроллерах Siemens S1500. Продолжение... Программирование ПЛК Siemens, ModBus RTU 2 часть, Длиннопост

Ошибок нет, но проверить я тоже не могу, так как оборудование уже уехало.

Когда загрузите программу в контроллер (через ethernet кабель) и запустите контроллер, должна моргать оранжевый цветодиод на модуле, это означает что пакеты отправляются.

Там конечно еще будет много проблем, поэтому советую скачать программу Terminal и ModBus Poll и приобрести устройство ADAM -4561 или его аналоги.

На этом все, конечно все это очень поверхностно, будут вопросы- пишите, спрашивайте, с удовольствием отвечу!

Показать полностью 12
10

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством.

Итак, eaglepart написал письмо и тем самым напомнил что я когда то писал посты))

Интересуемая тема : Управление ЧП по ModBus на ТИА Портале, желательно сторонних производителей.

Тут сразу стоит отметить один момент.... когда мы работали с 6 кВ ЧП возникли проблемы со связью. Из-за мощных электромагнитных волн... или еще там чего то пропадала связь (ModBus). Включаешь оборудование, все готово к пуску... и после команды "Старт" начинала сбоить связь. Как только частотник останавливаешь, информация идет ровно. В итоге перешли на дискретные и аналоговые сигналы. Теперь конструктора заранее закладывают AI, AO, DI, DO, а если заказчик с пеной у рта требует ModBus, то и его тоже в придачу.

Так же был небольшой опыт работы с маленьким ЧП Siemens. Там связь поднимали по ModBus TCP, работало все хорошо и проблем в принципе не возникало.

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


Для примера проекта возьму текущий проект, он очень сложно мне давался)) Поднимаем связь между CPU 1511-1 PN и ИРВИС-РС4М- Ультра.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

Если посмотреть на примитивную структурную схему, то можно увидеть порнографию...

Так как каналы Siemens не сертифицированы (под российские требования) приходится приобретать устройства типа ИРВИС или УВП- 280. Датчики передают данные на эти устройства (сертифицированные)---> эти устройства производят расчет и сохраняют результаты своих вычислений в определенных областях памяти. Вот, наша первая задача считать эти данные с нужных областей памяти (регистров). Так как эти данные постоянно меняются, нам нужно считывать эти данные через определенное время. Это вторая задача. Далее нам потребуется считанные с устройства данные куда либо сохранять. это задача №3.


Наверное начнем. С картинок ТИА Портала.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

Сделал скрин установленного программного обеспечения. На всякий случай.

Про установку ПО писать надеюсь не нужно.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

Вот именно так выглядит первый пуск ТИА 14.

Нажимаем Project view в нижнем левом углу.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

В принципе тут все стандартно, создаем новый проект

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост
Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

И начинаем как всегда с настройки HardWare. Для этого выбираем Add new device

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

И тут мы видим что можем выбирать контроллеры, панели оператора, АРМ оператора, ЧП Siemens нажимая соответствующий значок.

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

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

После нашего выбора контроллера и нажатия окей появляется такое вот окно.

С левой стороны экрана у нас меню, (не знаю как оно там называется) как древо в старом Step7.

Если это меню мешает, его можно свернуть нажав треугольник. Как вы уже заметили, эти треугольники есть и снизу и с права. Снизу мы будем использовать чуть позже - это свойства объектов. Справа меню меняется (смотря что делаем). В данном случае нам ее нужно нажать чтоб открылся список модулей. Для создания связи ModBus нам потребуется модуль Point to point. А в середине у нас рабочее окно.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

Берем мышкой этот модуль и перетаскиваем его к контроллеру в 2 ячейку.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

Должно получиться что то вот такое. Вроде как можно начать программировать...

Если чего то будет не хватать, по месту доделаем. Итак в левом окне мы видим наше PLC_1, чтобы создать FB(функциональные блоки), FC(Функции), DB(блоки данных), OB(блоки обработки данных) нам нужно зайти в Program Blocks

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

Рабочее окно HW в принципе нам уже не нужно, можно закрыть, если мешает. Все открытые окна отображаются внизу.

Итак,  чтобы решить задачу 2 создаем новый блок обработку данных или добавляем...

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

В открывшемся окне выбираем циклическую обработку и задаем время. Так же выбираем язык программирования. Если честно, я перешел на SCL, однако тут используются стандартные блоки Siemens, поэтому сделаю на FBD.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

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

Для программирования нужно понимать как работает связь rs485 или modbus.

Немного теории. Допустим, у нас есть 2 устройства в сети modbus. В обязательном порядке один должен быть Master(Ведущий), а другой Slave(ведомый).

Master отправляет пакет данных в сеть, а Slave обязан ответить пакетом данных. Получается что Slave постоянно "слушает" сеть и ждет пока обратятся к нему. Master так же постоянно "слушает" сеть и как только приходит ответ- записывает пакет данных.

НО RS-485 поддерживает до 32 устройств одной сети. Поэтому у ведомых устройств всегда настраивается адрес устройства в сети.

Кроме этого, нам нужно будет настроить все устройства на одну скорость передачи данных, четность\нечетность битов, стоповые биты и всякое, но чуть позже.

Так же высока вероятность что пакеты данных могут просто смешаться , допустим Master орет на своего Slave1, Slave1 начинает ему в ответ что то говорить (и так как передаваемый объем информации, допустим,  большой то Slave1 говорит и говорит) Master орет на второго Slave2 и второй тоже начинает отвечать. И когда орут 2 Slave одновременно, Master слышит что то от первого, что то от второго и не понятно что в итоге получилось.

Приступим к программированию.

Есть 2 стандартных блока для отправки и получения пакета данных. Это Send_P2P и Resive_P2P.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

Открываем меню с правой стороны и находим там эти блоки, при перетаскивании откроется окошко, где  он спрашивает "могу я создать DB с таким названием?" жмем ОК.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

Так же вытягиваем 2 блок.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

Получаем в итоге такую картину.

Теперь нам нужно настроить оба блока что бы они корректно работали(или в принципе что бы работали)

Начнем с Send. Из выпадающего списка выберем порт, куда подключены провода(модуль который мы ставили в HW в самом начале)

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

далее самое интересное! Настраиваем Buffer. Это ножка куда из такого же списка как было чуть выше, выбираем BD в котором хранится пакет данных.

Естественно, этот блок данных с пакетом данных мы сами создадим. Только для ее создания еще немного теории.

Стандартные пакеты данных состоят из :

1) Адрес устройства к которому мы обращаемся

2) Функция - "как бы объяснить по проще..."  в зависимости от выбора функции мы выбираем что делать. Т.Е. мы можем считать данные с ведомого устройства, можем и записать какие то данные в это устройство, можем записать bit или word или же считать word или bit. Смотрите таблицу, думаю разберетесь.

Программируем Siemens (специально для @eaglepart), поднимаем ModBus  между контроллером и... другим устройством. Программирование, Siemens, Контроллер, Длиннопост

3)Адрес регистра-  Каждое устройство с modbus выходом имеет документ типа "руководство по эксплуатации" или что то такое, вот там должна быть карта регистров где мы выбираем нужный нам регистр ( которое нам нужно считать или записать) . В этом документе указан адрес регистра.

4)Количество регистров- сколько регистров содержит нужную нам инфу

5) CRC код

Продолжение следует...

Показать полностью 17
22

Программирование ПЛК Siemens. ПИД регулирование.

По просьбам заинтересованных в ПИД регуляторах в среде Step7 v5.5

Если вы хотите сделать проект с ПИД в старом Step7, то Вам придется докупать пакет и установить в вашу среду. В TIAPortal этот пакет идет как стандартный, и докупать его, соответственно не нужно. Если у Вас стоит задача с регулированием, советую работать в TIA - там можно программировать и 300, 400, 1200, 1500 серии контроллеров.

Ну, а у кого нет возможности или любите чинить двигатель через выхлопную трубу- добро пожаловать!)

Честно, у меня нет этого пакета регуляторов. Но это не проблема! Сделаем мы его сами и очень просто.

Для этого мы открываем Help при помощи клавиши F1, и ищем формулу для ПИД регулирования, который используют программисты Siemens.

Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост

Пример: Нужно регулировать расход воды в трубе. Мы задаем уставку - 150 кубов в час. Y- (предположим) частота двигателя.  Как только расход начинает уменьшатся, наш регулятор повышает частоту или наоборот уменьшает при повышении расхода. Получается, что к частоте двигателя суммируем некое дельта Y.

Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост

Дельта Y вычисляется по формуле выше)

w - установленное значение (расхода, к примеру)

x - текущее значение

Kp - Коэффициент пропорциональности

Ti - время интегрирования

Td - время дифференцирования

t - время цикла

b - весовой пропорциональный коэффициент

db - зона нечувствительности

a - коэффициент дифф. задержки

с - весовой дифф. коэфф.


Ничего страшного на самом деле нет, ее нужно просто расписать в (LAD,STL,FBD) функциональном блоке  и запустить его в OB.


В первую очередь забиваем входные переменные

Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост

Выходные переменные

Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост

И статические переменные, которые нам помогут при расписывании формулы

Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост

И поехали расписывать формулу

Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост
Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост
Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост
Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост
Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост
Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост
Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост
Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост
Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост
Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост

Итак, мы расписали на языке FBD формулы, представленные выше. Теперь в OB1 вызываем наш функциональный блок и создаем DB

Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост

Осталось запустить и проверить. Для проверки (на тот момент имелась панель оператора) в TIA WINCC нарисовал нижеследующее

Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост

Соединил окна ввода/вывода с переменными в DB

Программирование ПЛК Siemens. ПИД регулирование. Программирование Siemens, Программирование ПЛК, Пид-Регуляторы, Длиннопост

Вам придется поверить, все работает)) с помощью коэффициентов можно добиться такого уровня регулирования, какое пожелаете.

Каким будет следующий пост? переходим на TIA?

Показать полностью 16
24

Продолжение программирования Siemens. Обработка аналогового сигнала. Часть 2

Продолжение программирования Siemens. Обработка аналогового сигнала. Часть 2 Программирование ПЛК Siemens, Программирование на FBD, Аналоговая обработка сигнала, Длиннопост
Продолжение программирования Siemens. Обработка аналогового сигнала. Часть 2 Программирование ПЛК Siemens, Программирование на FBD, Аналоговая обработка сигнала, Длиннопост
Продолжение программирования Siemens. Обработка аналогового сигнала. Часть 2 Программирование ПЛК Siemens, Программирование на FBD, Аналоговая обработка сигнала, Длиннопост
Продолжение программирования Siemens. Обработка аналогового сигнала. Часть 2 Программирование ПЛК Siemens, Программирование на FBD, Аналоговая обработка сигнала, Длиннопост

В 24 и 25 нетвоках определяется короткое замыкание токовой петли. Грубо говоря, если 2 провода из датчика замкнули между собой, нам нужно об этом сообщить. И если коротыш убрали, нам нужно так же сообщить что коротыш прошел.

Продолжение программирования Siemens. Обработка аналогового сигнала. Часть 2 Программирование ПЛК Siemens, Программирование на FBD, Аналоговая обработка сигнала, Длиннопост

Таким же макаром нужно сообщить о обрыве петли и, если восстановили то, сообщить о том что нет обрыва.

Продолжение программирования Siemens. Обработка аналогового сигнала. Часть 2 Программирование ПЛК Siemens, Программирование на FBD, Аналоговая обработка сигнала, Длиннопост

Напоминаю всем, что это было только для одного датчика. Для нескольких, уже сложнее, будет позже. А на пока, давайте разбираться в этой писанине, смело задавайте вопросы- обсудим и объясним!

Показать полностью 4
15

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Нарисовано в TIA WinCC - окно настроек аналогового сигнала. Для чего мы все это делаем?

Делается это окно настроек датчика для того чтоб в случае поломки датчика, можно будет заменить другим датчиком(аналогом).

Приведу пример: у Вас имеется датчик температуры у которого диапазон измерения от -50 до +25 С и он по какой то причине выходит из строя. Вам срочно нужно поменять датчик, иначе не работает целая система. У Вас в городе точно такой датчик не продается, но есть другие(допустим с диапазоном -60.....+60). Покупаете аналог датчика- монтируете, и настраиваете его в таком окне. Задаете верхние и нижние пределы измерения и у Вас он сразу начинает показывать текущее значение (вторая строка в окне). Дальше, мы видим 4 строки (пороги) у которых есть индикация(красные и желтые квадраты), возможность активации и деактивации(квадраты белого цвета- при нажатии выставляется галочка) и возможность задать значения, при которых срабатывает индикация и выставляется соответствующий бит в DB. Аварийные и предупредительные пороги верхнего и предупредительного уровней пригодятся в дальнейшем, при программировании алгоритмов с использованием этих датчиков.

Например: Если выставился бит "верхний аварийный уровень" температуры подшипников, то отключить к чертям насосы, иначе они заклинят и беда придет.

Соответственно когда Вы меняете значения- нужно сохранить, или сохранить предыдущие значения. Для этого приделаны кнопки "Сохранить" и "Отмена" соответственно. Вроде по окну все понятно, далее алгоритм, с которым я чуть с ума не сошел на объекте.

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Кто понимает что к чему в Step7, можете пропустить- буду разжевывать для тех кто начинает. Итак, Вам нужно в окне папки "Blocks", нажать правую кнопку мыши и создать FB-функциональный блок (это уже учитывая, что Вы уже создали проект, выбрали контроллер, настроили HW). В строке Simbolic Name кратко опишите название блока, чтоб потом не перепутать.

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

После открытия блока у Вас будет что - то примерно такое, только пустое(у меня с готовым примером). Обведенное красным - это переменные, которые нужно будет заполнить. Чтоб легче было как понять нарисую вот такую фигню--->

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Таким образом, черный квадрат- это код алгоритма, в котором при необходимости Вы можете использовать временные переменные Temp, и статические переменные Static. Входные значения In- алгоритм пережевывает и выплевывает в значения Out. Поэтому нам придется создать все эти переменные, начнем с In.

Из выделенного красным- в левом окне выбираем IN. Нажимаем и выделяем IN. Теперь в правом окне заполняем "name"- название нашего переменного, "data"- тип переменной, "address"- выставится автоматически, и пишите комментарий- что это за переменная.

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

У меня входная переменная называется "ACP", тип переменной INT- так как значение переменной с датчика будет именно INT. Идем дальше...

Из выделенного красным- в левом окне выбираем OUT, только вот его заполнять в этом примере не будем- пока не нужно. Далее Static...

Давайте чтоб быстрее было, я скину скрины

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

И последнее - Temp

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Это переменные которые я использовал для алгоритма. Если хотите взять мой код алгоритма как исходный, Вам придется заполнить все эти переменные.

Итак, все это сохраняем и закрываем окно работы с функциональным блоком, чтобы сразу создать блок данных для работы с нашим функциональным блоком. Такие блоки данных называются Instance DB.

Создаем Data Block и у Вас появится следующая картина, где задаете номер своему DB и тип выбираете Instance DB и выбираете для какого FB вы создаете.

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

В итоге у Вас получится DB, при открытии которого должна получиться следующая картина

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Узнаете строки? Да, это те строки которые Вы усердно забивали в переменных функционального блока.

Напишем программу в FBD для одного датчика....

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Итак, 1 network- что мы тут делаем.... Наше входящее значение с ACP имеет тип INT, а нам нужен Real. Поэтому, используя конвертеры мы меняем тип

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

В левом окне находим конвертер I_DI и используем его в первом нетворке. К входной ножке приписываем наш ACP, а к выходной Темп который мы заранее создали в переменных Temp.

2 нетворк из DI в Real по аналогии. 

Теперь у нас есть входное значение ACP(АЦП) с тип-ом Real.

Чтобы получить значение с датчика в инженерных единицах, нам придется воспользоваться формулой --->

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Что и начинаем делать в 3 нетворке. По формуле сократили ACPmin и осталось что значение ACP делим на максимальное значение ACPmax.

Сразу оговорюсь что максимальное значение АЦП (27648) я взял из мануалов модуля, который я использую.

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

В 4 и 5 нетворке считаем остальную часть формулы

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

И в 6 нетворке получаем значение Value. Однако заказчики хотят видеть не только температуру или давление, а хотят еще и видеть само значение тока 4....20 мА. Для вычисления Value_mA используем точно такую же формулу, только вместо En_max и En_min будут максимальное и минимальное значение тока.

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Далее, при выполнении условия- если ни один бит не выставлен, то записываем 1 в байт состояния датчика.

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

В 11 нетворке производится имитация значения с датчика

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

В 12 нетворке включение верхнего предупредительного порога

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

В 13 и 14 нетворке выключаем порог

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост
Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

В 15 нетворке по аналогии включаем аварийный порог

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост
Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост
Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Далее нижний предупредительный и нижний аварийный пороги

Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост
Продолжаем программирование ПЛК Siemens. Алгоритм обработки аналогового сигнала, часть 1 Siemens, Программирование на FBD, Обработка аналогового сигнала, Длиннопост

Продолжу в следующем посте №2, не пускает больше картин))

Показать полностью 24
Отличная работа, все прочитано!