Главная Магазин Статьи FAQ Скачать Контакты
 
 

 

Система диспетчеризации. Программирование. Бесплатный обучающий видео курс.


В этой серии роликов, мы с Вами научимся создавать системы диспетчеризации, без применения каких-либо специализированных программных пакетов. Систему диспетчеризации можно написать в любой удобной для Вас среде. Для примера, мы напишем её в Borland Builder. Рекомендуем сначала просмотреть до конца все представленные здесь видеоролики, потом скачать здесь исходники системы диспетчеризации, которую мы создавали в этих роликах, и разобраться в ней детальнее. Естественно, до запуска этого примера, у вас должен уже быть установлен PLC-LAB-Manager и создана в нём показанная в ролике конфигурация виртуальной сети. Это очень простые действия, но если у Вас всё-же возникнут вопросы, пишите нам, мы Вам обязательно ответим, электронная почта указана внизу страницы.

Устанавливайте высокое разрешение видео (HD720).

Часть 1.Система диспетчеризации. Создание виртуальной конфигурации сети
Часть 2.Система диспетчеризации. Создание определений для байтового доступа, прописывание функций этажных контроллеров CP403
Часть 3.Система диспетчеризации. Создание определений для битового доступа, прописывание управления этажными клапанами
Часть 4.Система диспетчеризации. Создание структур для побитного доступа
Часть 5.Система диспетчеризации. Вентиляторы дымоудаления, управление и индикация. Контроллер CP403.
Часть 6.Система диспетчеризации. Визуализация и управление повысительными противопожарными насосами. Контроллер CP403.
Часть 7.Система диспетчеризации. Диспетчеризация распредустройства здания. Изменение напряжений и токов. Контроллер CP1006.
Часть 8.Система диспетчеризации. Диспетчеризация ворот и роллет. Светозвуковая сигнализация, автоматический запуск насосов и вентиляторов.
Часть 9.Система диспетчеризации. ОРС Сервер

 

Далее идут текстовые сценарии каждой части.

Часть 1.Создание виртуальной конфигурации сети

В программе PLC-LAB-Manager, предусмотрена возможность полноценного моделирования систем диспетчеризации ещё до приобретения оборудования.
Программа позволяет создавать виртуальные конфигурации и оболочки визуализации и управления для дальнейшего использовании на реальном оборудовании.
Для примера создадим виртуальную конфигурацию, состоящую из пяти контроллеров СР403, установленных на пяти этажах здания, они собирают данные о состоянии противопожарных датчиков, кнопок включения противопожарных насосов, ручного запуска дымоудаления. Кроме этого, к выходам этих пяти контроллеров, подключено управление клапанами дымоудаления, установленными на этажах, контроллера СР1006 установленного в распредустройстве здания, этот контроллер собирает данные о потребляемых зданием токах по дум вводам и десяти отходящим линиям, контроллера СР1003, управляющего воротами и ролетами первого этажа, ещё один контроллер CP403 установлен в шкаф управления  вентиляторами на чердаке, и ещё один контроллер СР403 установлен в шкафу управления противопожарными насосами. Создадим такую конфигурацию. Добавим необходимые виртуальные контроллеры в систему.
Есть возможность просматривать регистры виртуальных контроллеров, в виде таблиц, либо в режиме симулятора. Этот режим позволяет изменять параметры входов-выходов и отслеживать взаимосвязи между состоянием входов и состоянием соответствующих им регистров.
Итак, после добавления в систему виртуальных контроллеров, мы готовы к созданию оболочки управления для этой системы. После того, как мы создадим все алгоритмы в памяти компьютера, мы сможем просто заменить виртуальные контроллеры на реальные. И система будет работать на реальном оборудовании так-же, как на модели.
Итак приступим. Для примера, будем разрабатывать оболочку визуализации в программе Borland Builder 6. Хотя использовать можно любую другую удобную пользователю среду программирования. Всё управление системой происходит через два файла, отображаемых в память. Это универсальный механизм операционной системы, с которым может работать любая созданная пользователем программа. Создадим новый проект с одной формой. Добавим небольшой код, для получения доступа к файлам отображаемым в память и приступим к написанию самого алгоритма визуализации/управления.
Пять этажных контроллеров имеют по десять шлейфов, которые подключены ко входам измерения сопротивления. Если суммарное сопротивление шлейфа составляет 1кОм – это дежурный режим, называемый «Норма», это значит что шлейф с рабочем состоянии. Нет ни обрыва ни КЗ, в конце шлейфа установлен резистор 1 кОм. Если начинается пожар, к этому сопротивлению добавляются сопротивления резисторов датчиков. Если сработал один датчик – значит шлей находится в режиме «Авария», если сработало два датчика в этом шлейфе – значит начался пожар. Одиннадцатый и двенадцатый входы контролируют положение клапанов дымоудаления. Для примера, будем считать, что в нормальном дежурном состоянии, сопротивление шлейфа должно быть 1кОм, при открытии одного или более клапанов дымоудаления, подключенных к этому шлейфу, сопротивление шлейфа изменится на любое другое состояние.  К тринадцатому входу подключен шлейф кнопок ручного запуска системы дымоудаления. Для удобства примем 1 кОм нормальным сопротивлением шлейфа, а любое другое значение, кроме КЗ и обрыва – признаком нажатия кнопки. К четырнадцатому входу этажного контроллера, подключен шлейф кнопок ручного запуска противопожарных насосов. Состояния шлейфа, примем как у шлейфа кнопок ручного запуска дымоудаления. Разместим на форме необходимые элементы управления и отображения, и пропишем их функции в тексте программы.

Часть 2.Создание определений для байтового доступа, прописывание функций этажных контроллеров CP403

В предыдущем ролике мы начали создавать систему диспетчеризации объекта состоящую из 9ти контроллеров разного назначения. В этой серии мы продолжим начатое. Для начала введем несколько определений, которые позволят нам упростить исходный код. Для начала пропишем прямое обращение к шлейфам а не ко входным регистрам контроллера.
Потом исправим тот код, что у нас уже есть. Здесь мы признаём все десять шлейфов находящимися в дежурном режиме, только если все они находятся в режиме «Норма».
Далее прописываем отработку кнопок ручного включения дымоудаления и противопожарных насосов. Далее – отработку состояний клапанов дымоудаления. Как мы договорились считать для упрощения, состояние клапанов отображается как «Закрыты», только если оба шлейфа состояния клапанов дымоудаления находятся в состоянии «Норма», т.е. их сопротивление примерно равно 1кОм. Если хотя бы один из этих двух шлейфов находится в другом состоянии – будем считать клапаны открытыми. Это конечно сильно упрощенная ситуация, у нас есть возможность отслеживать и другие состояния этих шлейфов, но для упрощения примера пока оставим так. Кроме этого, нам неплохо бы узнать, что какой-то из первых десяти шлейфов контроллера первого этажа, перешел в состояние «Пожар». Пропишем и эту обработку. Причем, сделаем так, чтобы при появлении сигнала о пожаре на любом из этих десяти шлейфов, результирующее состояние по всему этажу будет «Пожар».
Проверим всё написанное, убедимся что всё работает правильно.
Далее масштабируем то что мы уже написали на все пять этажей, т.е. для пяти первых контроллеров CP403 и проверим работоспособность сделанного.

Часть 3.Создание определений для битового доступа, прописывание управления этажными клапанами

В этом ролике, мы будем продолжать написание системы диспетчеризации, начатое нами в предыдущих двух сериях. Давайте пропишем управление клапанами дымоудаления, которые подключены к нашим пяти этажным контроллерам. Информацию о состоянии этих клапанов, мы уже получаем по шлейфам 11,12, а вот управления ими ещё нет. Пусть наши клапаны будут запитаны от релейных выходов X1, X2. Причем клапаны будут одностороннего действия. Т.е. закрывают их вручную взводя открывающую пружину, а открываются они, когда на обмотку защелки подаётся напряжение. У клапанов есть блокировочные контакты, снимающие напряжение с обмотки защелки, поэтому, в целях повышения надежности и общего упрощения, мы не будем снимать напряжение управления с клапана. Можно конечно отследить момент открытия клапана и снять напряжение управления после его открытия, но в этом примере позволим себе такое упрощение. Итак, поводом для открытия клапана, у нас могут быть, либо пожар, либо тестирование клапана в ходе регламентных работ по проверке оборудования. Добавим на форму необходимые кнопки и пропишем нужные функции в тексте программы.
У нас уже есть определение дающее доступ к группам выходным реле побайтно, добавим несколько новых определений, для удобства работы с выходными реле побитно. Первое определение будет возвращать бит состояния выходного реле. В нем нужно будет указывать адрес контроллера в сети ( от 1 до 254 ) и номер выходного реле начиная от нуля. Ноль – это первое реле, один – второе и так далее. Второе определение, даст возможность записывать один бит, для управления одним реле. В нем также указывается адрес контроллера, номер реле и записываемое значение – ноль либо единица. Обращаю ваше внимание, что первое определение работает с файлов, в котором отображается именно фактическое состояние выходных реле. Т.е. если мы уже дали команду на включение выходного реле, но оно по какой-то причине всё ещё не включилось, мы будем знать, что оно в действительности пока ещё не включено. Данные об изменении состояния реле, у нас появятся только после того, как команда на включение реле будет принята предназначенным для неё контроллером, и после этого, ведущий контроллер получит от него информацию о фактическом состоянии выходных реле. Т.е. если в информационной магистрали есть какие либо проблемы, то мы будем это видеть по отсутствию переключения реле при подаче команды на переключение. Итак, поместим на форму пару элементов чекбокс, и пропишем их регулярную перерисовку в подпрограмме таймера, а также при изменении значения чекбокса пользователем, пусть у нас изменяется состояние выходных реле на противоположное. Кроме того, организуем принудительное включение этих двух выходных реле, при пожаре на первом этаже. Добавим этот код и проверим его работоспособность.

Часть 4.Создание структур для побитного доступа

В этой части мы продолжим создание нашей системы диспетчеризации.
Сделаем нашу работу ещё более удобной, заменив определения для работы с регистрами входов и выходов.
Данные в файлах отображаемых в память у нас чётко структурированы, потому, мы имеем возможность обращаться к ним, как к элементам массива структур. Введем компилятору команду побайтного выравнивания, и создадим структуру таблицы присутствия контроллеров в сети. Для автоматизации работы задействуем возможности Excel.
Начиная с адреса 600, у нас размещена таблица контроллеров, находящихся он-лайн. Это 32 байта, либо 16 слов, либо 256 последовательных бит, каждый из которых указывает на присутствие или отсутствие контроллера в сети. Создадим на это место указатель битового одномерного массива, для доступа к каждому биту.
Начиная с адреса 10000, у нас размещены 256 блоков по 256 байт, отображающих информацию о состоянии каждого из контроллеров сети. Создадим новые структуры и массивы на их основе, для доступа к каждому из элементов этого пространства памяти.. Пропишем в структурах поименно все 400 возможных дискретных входа, все 400 возможных выходных реле, все 35 возможных входных регистров и 35 регистров хранения. Будем использовать указатели. Указатель на массив структур присвоим со смещением к точке начала данных контроллеров, размещенных в файлах отображаемых в память. Теперь у нас есть возможность обращаться на прямую к каждому биту входа-выхода, или регистру без использования прежних определений. Инструментарий среды разработки, сразу же подхватывает созданные нами новые структуры, и предлагает подсказки при написании кода.
Для проверки, заменим старый способ обращения на новый.
Сделаем то-же самое для структуры отвечающей за запись во второй фал отображаемый в память.
Немного упорядочим форму и пропишем управление клапанами для остальных этажей.

Часть 5.Вентиляторы дымоудаления, управление и индикация. Контроллер CP403.

В этой части мы продолжим создание нашей системы диспетчеризации.
Сделаем нашу работу ещё более удобной, заменив определения для работы с регистрами входов и выходов.
Данные в файлах отображаемых в память у нас чётко структурированы, потому, мы имеем возможность обращаться к ним, как к элементам массива структур. Введем компилятору команду побайтного выравнивания, и создадим структуру таблицы присутствия контроллеров в сети. Для автоматизации работы задействуем возможности Excel.
Начиная с адреса 600, у нас размещена таблица контроллеров, находящихся он-лайн. Это 32 байта, либо 16 слов, либо 256 последовательных бит, каждый из которых указывает на присутствие или отсутствие контроллера в сети. Создадим на это место указатель битового одномерного массива, для доступа к каждому биту.
Начиная с адреса 10000, у нас размещены 256 блоков по 256 байт, отображающих информацию о состоянии каждого из контроллеров сети. Создадим новые структуры и массивы на их основе, для доступа к каждому из элементов этого пространства памяти.. Пропишем в структурах поименно все 400 возможных дискретных входа, все 400 возможных выходных реле, все 35 возможных входных регистров и 35 регистров хранения. Будем использовать указатели. Указатель на массив структур присвоим со смещением к точке начала данных контроллеров, размещенных в файлах отображаемых в память. Теперь у нас есть возможность обращаться на прямую к каждому биту входа-выхода, или регистру без использования прежних определений. Инструментарий среды разработки, сразу же подхватывает созданные нами новые структуры, и предлагает подсказки при написании кода.
Для проверки, заменим старый способ обращения на новый.
Сделаем то-же самое для структуры отвечающей за запись во второй фал отображаемый в память.
Немного упорядочим форму и пропишем управление клапанами для остальных этажей.

Часть 6.Визуализация и управление повысительными противопожарными насосами. Контроллер CP403.

В этой части мы добавим управление повысительными насосами, установленными в насосной. Ими управляет контроллер с адресом 9. Его тип – CP403.
Задействованы дискретные входы и выходы контроллера.
Ко входу номер один, подключено реле контроля фаз, на вводе в шкаф. Если питающее напряжение в норме – на этом входе будет единица, если нет – ноль.
Ко второму и третьему входам подключен контроль режима управления насосами номер 1 и номер два соответственно. Если насос переведён в режим ручного управления, на входе будет ноль. Если управление автоматическое – то единица.
К четвертому и пятому входам подключен допконтакт пускателей насосов 1 и 2 соответственно. Это позволит контролировать включение пускателей насосов. Альтернативно, к этим входам может быть подключен электроконтактный дифференциальный манометрический датчик, установленный на насосе. В таком случае, контроль включения насоса будет наиболее полным.
К шестому входу, подключен датчик давления после насосов. Если давление в магистрали в норме, на этом входе будет единица, если не в норме – то ноль.
К восьмому входу, подключен датчик открытия шкафа управления насосами. Если по какой-то причине шкаф будет вскрыт, мы об этом узнаем.
Добавим в подпрограмму таймера следующие строки.
В процедурах обработки чекбоксов, добавим код включения выходных реле контроллера для управления насосами.
Кроме это добавим две строки, для обновления чекбоксов включения насосов в подпрограмме таймера. Протестируем работоспособность всех входов и выходов.
 

Часть 7.Диспетчеризация распредустройства здания. Изменение напряжений и токов. Контроллер CP1006.

В этой части мы добавим индикацию данных собранных в распредустройстве здания. Там у нас установлен контроллер CP1006  с адресом 6. К шести входам измерения напряжения подключены ффодные фазы двух вводов здания. К двум первым входам измерения тока, подключены трансформаторы тока, установленные фазах А обоих вводов. Ещё к семи входам измерения тока, подключены трансформаторы тока, установленные на отходящих линиях. Контроллер передаёт данные об измеренных напряжениях в вольтах, об измеренных тока – в миллиамперах. Добавим строки для отображения вводных напряжений , при этом добавим изменение цвета текста, при выходе напряжения за нормальные пределы. Также добавим строки шкалирования данных об измеренных токах, в соответствии с коэффициентами трансформации измерительных трансформаторов тока. Кроме того, введем изменение цвета текста при превышении предела. Кроме этого, добавим автоматический подсчет суммы токов по отходящим линиям.
Протестируем добавленные функции.

Часть 8.Диспетчеризация ворот и роллет. Светозвуковая сигнализация, автоматический запуск насосов и вентиляторов.

В этой части мы добавим управление и индикацию состояния ворот и роллет на первом этаже. Ими управляет контроллер CP1003 с адресом 7, имеющий 32 дискретных входа и 20 релейных выходов. На входы подключены датчики положения ворот и роллет, к выходным реле – электроприводы управления воротами и роллетами. Кроме этого, к выходному реле 19, подключена светозвуковая сигнализация об аварии,  к 20му – о пожаре. Эти реле должно включиться, если у нас авария или пожар. И не выключаться до возвращения системы с дежурный режим и сброса системы. Для сброса введем на форму специальную кнопку. Кроме того, введем две переменных, одна будет сигнализировать об общем аварийном состоянии системы, вторая о пожаре. В процедуре запуска программы, этим переменным будет присваиваться нулевое значение. Если в процессе работы системы этим переменным будет присвоено другое значение, сделаем так, чтобы повторное обнуление этих переменных было возможно только при нажатии на кнопку сброса системы, либо при перезагрузке программы. Если какой-либо агрегат находится не в нормальном режиме, должен появляться сигнал об аварии.
Открытие клапанов дымоудаления при возникновении пожара мы уже прописали раньше, теперь добавим и автоматический запуск вентиляторов дымоудаления. Кроме того, вентиляторы должны включаться при нажатии кнопку ручного запуска дымоудаления на этаже. Открываться будут только клапаны того этажа, где нажата кнопка ручного пуска, либо произошел пожар. Кроме этого, пропишем запуск противопожарных насосов при нажатии любой кнопки пуска противопожарных насосов на любом этаже. Причем сначала будем запускать первый насос, а второй, резервный, будем запускать только если первый насос не создал в магистрали необходимое давление.  Добавим в текст программы следующие строки, и протестируем добавленные функции.