Заготовка для создания экспертных систем АСУ ТП |
08.08.2007 Сергей Иванчиков |
Часто возникает потребность автоматизировать технологический процесс, проведение экспериментов в лаборатории, модернизировать существующую схему управления технологическим процессом и т. п. При подборе аппаратных и программных средств, цена системы взлетает до сумм, минимум в сотни тысяч рублей. Данная статья рассказывает о создании систем автоматики при минимальных финансовых затратах. Общая цена комплекса, с учетом цены персонального компьютера, составляет около 25 тысяч рублей.
Обобщенная блок - схема устройства управления показана на рисунке 1.
Входные сигналы (аналоговые или дискретные) поступают на входные каналы устройства ввода – вывода. Устройство ввода – вывода преобразует входные сигналы в цифровой код. После этого устройство ввода – вывода пересылает цифровой код, по каналу связи в компьютер. В компьютере происходит обработка поступившей информации, специальной программой. В программе могут быть реализованы различные алгоритмы обработки информации. После обработки данных программой, цифровой код засылается в выходные каналы устройства ввода – вывода.
Для решения задач автоматизации, устройство ввода – вывода разбито на три логических блока:
Количество входных аналоговых сигналов в одном модуле устройства - 40.
Блок схема системы разбитая на 3 блока показана на рисунке 2.
К компьютеру можно подключить до трех устройств дискретного ввода – вывода и до шести устройств ввода аналоговых сигналов.
В качестве устройства ввода в компьютер аналоговых сигналов применяется преобразователь аналоговых сигналов в цифровой код (АЦП). Модуль АЦП преобразования, производимый российской фирмы "Reallab"(www.rlda.ru, город Таганрог):
Внешний вид устройства показан на рисунке 3.
Структурная схема модуля АЦП показана на рисунке 4.
Питание устройства осуществляется от выносного блока с действующим значением выходного переменного напряжения 24 вольта, 50 герц и мощностью 3 ватта.
Для измерения напряжения входы устройства подключаются к измеряемой цепи, соединив предварительно их "земли". Входной коммутатор системы позволяет с интервалом 0,28 мс переключать АЦП с одного канала на другой. Таким образом, каждый из каналов опрашивается с частотой 88,8 герц.
Для измерения температуры с помощью терморезисторов к прибору подключаются терморезисторы 22 кОм с помощью специального кабеля. Ток возбуждения для терморезисторов задается резисторами, смонтированными в разъеме кабеля.
Воспользовавшись тем, что известен формат данных поступающих от модуля АЦП, написан программный код позволяющий работать данной программе в операционной системе Линукс.
Для работы с последовательным портом в операционной системе Линукс, существует компонент, совместимый с компилятором FPC. Компонент называется Synaser, является кроссплатформенным и хорошо документированным.
Устройство ввода дискретных сигналов работает по следующему принципу: коммутатор последовательно подключает по пять входных каналов к порту ввода ввода компьютера, рисунок 5. После этого компьютер считывает значения установленные на порту ввода в компьютер и выдает сигнал коммутатору подключить следующие пять каналов. В параллельном порту Centronic, для чтения доступны пять бит по адресу 379, в шестнадцатеричной системе счисления.
В качестве коммутатора была выбрана микросхема К561КП2, которая представляет собой 8 - канальный мультиплексор.
При использовании в качестве коммутатора пяти микросхем К561КП2, получается 40 входных каналов дискретного ввода.
Управление считываемым каналом осуществляется двоичным кодом, подаваемым на выводы управления A, B, C. Для этого используется три линии связи. Чтобы уменьшить количество необходимых линий связи с компьютером до двух, между управляющей линией связи компьютера и мультиплексором устанавливается двоичный счетчик. В качестве двоичного счетчика используется микросхема К561ИЕ11.
При подаче высокого уровня на вход +1, счетчик производит сложение последовательности импульсов (входного числа), подаваемых на тактовый вход С, с числом, записанным в счетчике. При подаче низкого уровня на вход +1, счетчиком производится вычитание из числа, записанного в счетчике, последовательности импульсов (входного числа). Запись числа во все триггеры происходит параллельно через входы D при подаче на вход Е высокого уровня. Установка всех разрядов счетчика в нулевое состояние производится путем подачи на вход R высокого уровня, причем вход R имеет абсолютный приоритет по отношению к любому другому входу. Переключение триггеров в счетчике происходит по положительному фронту.
На рисунке 6 показано мультиплексирование восьми входных линий в одну выходную линию.
Логика работы схемы изображенной на рисунке 6, следующая: подается импульс "установка нуля", подачей логической единицы на вход R, двоичного счетчика выполненного на микросхеме DD1, все разряды счетчика устанавливаются в нулевое состояние. двоичный код 0000 подается на управляющие входы мультиплексора, выполненного на микросхеме DD2. Мультиплексор подключает канал 0 на выходной канал микросхемы. Компьютер считывает состояние канала, и выдает импульс "установка канала". Двоичный счетчик производит сложение и выставляет на своих выводах код 0001. Мультиплексор подключает к своему выходному каналу, первый входной канал. Компьютер считывает состояние канала и выдает импульс "установка канала". Когда счет доходит до восьмого канала подается импульс "установка нуля" и все повторяется сначала.
Импульс "установка нуля" играет роль не только установки нуля для счетчика, но также является импульсом синхронизации. Если произойдет сбой при счете импульсов, то каналы будут считываться неправильно только на одном цикле. При подаче импульса "установка нуля" правильность считывания восстановится. Обработку ошибочного считывания можно учитывать в программном обеспечении. Например учитывать большее из трех импульсов.
На рисунке 7 показана диаграмма импульсов "установка нуля" и "установка канала".
При разработке программного обеспечения следует учитывать, что операционная система Линукс, не является системой реального времени.
Устройство вывода дискретных сигналов работает по следующему принципу: коммутатор поочередно вырабатывает высокий логический уровень для каждой группы каналов, в которую записываются определенные программой управления значения. Для записи в параллельном порте Centronic доступен байт, находящийся по адресу 378(H).
Блок – схема устройства вывода дискретных сигналов показана на рисунке 8.
У выходных каналов устройства вывода дискретной информации существует два устойчивых состояния – включено и выключено. Для выходных каналов в качестве запоминающих элементов применяются обычные триггеры.
Входы триггера подразделяются на информационные и вспомогательные (управляющие). Сигналы, поступающие на информационные входы, управляют состоянием триггера. Сигналы на вспомогательных входах используются для предварительной установки триггера в требуемое состояние и синхронизации. Вспомогательные входы могут использоваться и в качестве информационных. Число входов триггера зависит от его структуры и назначения.
В качестве запоминающих элементов для выходных каналов, представляется наиболее удобным использовать D – триггеры.
D – триггер, или триггер задержки, имеет один информационный вход (D – вход) и вход для синхронизации С. Основное назначение D – триггера это задержка сигнала, поданного на вход D (рисунок 9).
Логика работы следующая: если подать на вход триггера С логический ноль (рисунок 2), то логический уровень Q останется неизменным при любом логическом уровне на входе D. Если на вход С подать логическую единицу, то логический уровень на выходе Q будет соответствовать логическому уровню подаваемому на вход D. Если при логической единице на входе С, подать на вход D необходимый логический уровень и после этого подать на вход С низкий логический уровень, то на выходе Q запомнится состояние входа D. Изменения на входе D не будут влиять на состояние выхода Q. Именно на этом принципе работает устройство вывода дискретных сигналов.
Для использования в схеме выбрана микросхема К561ТМ3, которая представляет собой четыре D – триггера типа "защелка" с прямыми и инверсными выходами и статическим управлением записью. Имеются два входа стробирования: вход синхронизации С и вход управления полярностью.
Для управления группами каналов используются те же сигналы, что и в устройстве ввода дискретной информации. Для подачи разрешения на вход С триггера используется двоично-десятичный дешифратор на микросхеме К561ИД1.
Микросхема К561ИД1 предназначена для преобразования двоично – десятичного кода в десятичный. Микросхема имеет четыре двоичных входа и 10 выходов. Каждой из 10 комбинаций сигналов на входах соответствует появление напряжения высокого уровня на одном из выходов, при этом на остальных 9 выходах – низкий уровень напряжения. Высокий уровень напряжения на входе 11 (разряд D8) запрещает дешифрацию на выходах 0 – 7. На рисунке 10 показано подключение коммутатора с двумя группами каналов.
Логика работы схемы представленной на рисунке 3 следующая:
Дойдя до 8 группы подается импульс "установка нуля" и все повторяется сначала.
Между действиями "запись" и "установка" существует пауза длительностью примерно 2-3 микросекунды. При управлении магнитными пускателями эта пауза несущественна.
Диаграмма работы устройства вывода дискретных сигналов показана на рисунке 11.
В качестве выходных каскадов устройства вывода дискретной информации используются транзисторные электронные ключи на основе электромеханических реле (рисунок 12).
Резистор R1 имеет такое значение, чтобы ток протекающий через него не превышал максимально допустимый выходной ток для микросхемы К561ТМ3. Диод VD1 защищает транзистор VT1 от пробоя при выключении. Светодиод VD2 служит световой сигнализацией включения транзисторного ключа.
При включении питания триггеры установлены в неопределенном состоянии, то есть на выходе может находится как логическая единица, так и логический ноль. Логическая единица на выходе устройства приведет к несанкционированному включению канала. Для того чтобы обойти эту проблему используется устройство (сторожевой таймер), которое будет запрещать выдачу сигналов устройством вывода дискретных сигналов при не запущенной программе управления.
Сторожевой таймер должен запрещать выдачу сигналов при неработающей программе управления. А также должен запретить выдачу сигналов при зависании программы управления, или при ее выключении. В течении времени около 0,5 секунды сторожевой таймер не должен включать запрет (из-за латентности операционных систем).
В качестве управляющего сигнала для сторожевого таймера используется меандр частотой 125 Герц.
Сторожевой таймер может быть выполнен на элементах цифровой логики или на аналоговых элементах.
Наиболее простым путем представляется создание такого таймера на основе конденсатора и транзистора (рисунок 13).
Выходной каскад порта LPT имеет внутренне сопротивление 470 ом. Конденсатор С1 (рисунок 6) отфильтровывает высокие частоты (выше 600 Герц). Конденсатор С2 отфильтровывает низкие частоты (менее 10 Герц). Выпрямитель выполненный на диодах VD1 и VD2, через резистор R1 заряжает конденсатор С3, который разряжается через резистор R3 и через переход база – эмиттер транзистора VT1. Ток протекающий через базу транзистора VT1 вызывает его открывание. При открытом транзисторе VT1 закрывается транзистор VT2 и открывается транзистор VT3. Открытый транзистор VT3 разрешает протекание тока через переход база – эмиттер транзисторного ключа (рисунок 14).
При запуске программы управления начинает вырабатываться меандр.
При исчезновении меандра, конденсатор С3 разряжается через резистор R3 и в конечном итоге вызывает закрытие транзистора VT3. Ток через переход база - эмиттер транзистора электронного ключа не протекает.
Программа управления аппаратно – программным комплексом представляет собой заготовку. В заготовке реализованы связи с устройством ввода аналоговой информации, устройством ввода дискретной информации и устройством вывода дискретной информации.
Программа включает в себя две важных части – ядро и пространство правил (рисунок 15).
Связь ядра с пространством правил осуществляется через три глобально определенных массива:
Ядро программы исполняется отдельно от пространства правил. Имеется в виду то, что в одном адресном пространстве программы, выполняется несколько раздельно работающих программ (потоков).
Ядро программы состоит из трех раздельно запущенных потоков (рисунок 16):
Блок – схема потока ввода – вывода дискретной информации показана на рисунке 17.
В операционной системе Линукс все является файлом, поэтому для записи в параллельный порт по адресу 378(H), байта информации, нужно открыть файл /dev/port для чтения – записи, сместиться от начала файла в позицию 378(H), записать байт, закрыть файл. Такие же операции проделываются и для чтения из порта, с той лишь разницей, что смещение будет на величину 379(H) и операцию записи нужно заменить на операцию чтения.
Операции прямой записи – чтения в порты ввода – вывода операционной системы Линукс, требует привилегий суперпользователя. Для обхода этой проблемы в операционной системе Линукс, необходимо настроить программу sudo. Sudo позволяет запускать программы с правами суперпользователя. Запускать программу управления в операционной системе Линукс необходимо с помощью скрипта, который будет состоять всего из одной строчки, например: sudo ./programm.
Блок – схема работы потока ввода цифровой информации показана на рисунке 18.
Поток вывода визуальной информации выводит отладочную информацию о состоянии входных – выходных дискретных каналов на отдельную форму. Форма с отладочной информацией по умолчанию для просмотра не доступна. Для большей стабильности работы системы в целом, поток вывода визуальной информации имеет наименьший приоритет.
На форме с отладочной информацией реализована возможность моделирования работы системы (рисунок 19).
Белым цветом показаны включенные каналы дискретного вывода, коричневым показаны выключенные каналы. Для входных каналов, белым цветом также показаны замкнутые каналы, а коричневым разомкнутым. Моделирование осуществляется следующим способом: устанавливается галочка - "моделирование" (при этом прекращается считывание входных каналов), после этого по щелчку мышки состояние канала меняется на противоположное. Даже такое простое средство моделирования, позволяет выявить примерно 85% ошибок, на этапе написания правил системы.
Последовательность работы программы управления при запуске следующая:
После этого программа работает на основе системных событий.
Для работы программы должна быть написана система правил, которые должны подчиняться следующим требованиям:
Для удобочитаемости правил можно составить таблицу соответствий, в которой будут записаны соответствия номера канала в программе, реальному физическому воздействию, например: х[1] – конечный выключатель исходного положения однострунного ножа, х[2] – контакт фотоглаза однострунного ножа, y[1] - пускатель двигателя однострунного ножа и так далее.
Правило удобнее записывать для выходного канала, с подробным комментарием, например:
//запуск двигателя однострунного резака if x[1] <> 0 // перекрыт фотоглаз однострунного резака then y[1]:=0;
Сложные правила удобнее записывать с комментарием в каждой строчке, например:
//остановка двигателя однострунного ножа if (x[1] = 0) // фотоглаз однострунного открыт and (x[2] = 0) //не нажат конечник исходного положения then y[1] := 0;
Обработку правил можно организовать по какому либо системному событию, например событию таймера программы – onTimer. Периодичность обработки правил при этом, будет зависеть от частоты срабатывания таймера программы. Или, можно организовать обработку правил в отдельном потоке.
Для хранения настроек, результатов работы программы удобно пользоваться простыми текстовыми файлами. Класс TStringList включает в себя многие необходимые функции для работы со строками, включая сохранение содержимого в файл и чтение из файла.
Интерфейс пользователя "рисуется" с помощью визуальных компонентов, например в виде схемы технологического процесса, либо в виде приборов управления технологическим процессом, либо используется какая то другая компоновка пользовательского интерфейса.
Работоспособность программной заготовки была проверена в операционных системах: Мандрива 2007 c ядром 2.6.17, ASPLinux 11 с ядром 2.6.12, ASPLinux 10 c ядром 2.6.9.
Внешний вид программной заготовки показан на рисунке 20. В качестве примера на форме показаны 64 выходных канала (при использовании двух портов LPT). Программа собиралась в Mandriva Linux 2007, с использованием fpc2.0.4, Lazarus 0.9.22, GTK2.
На базе данной заготовки были реализованы следующие проекты:
Схемы и исходный код программной заготовки приведены в приложениях: