Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программное управление технологическим оборудованием

.pdf
Скачиваний:
1
Добавлен:
29.11.2025
Размер:
11.79 Mб
Скачать

Функции вывода строк puts () и printf()

Функции puts ( ) и printf () используют функцию put char ( ) для вывода посимвольно строки в порт R8232, назначенным последним. Предположим, у насесть определение строки, предназначенной для вывода через последовательный интерфейс:

Вызов функции puts ( ) для вывода этой строки выглядит как puts(s);. Функция pr intf ( ) несколько сложнее, поскольку позволяет применить

форматированный вывод. Она имеет следующий синтаксис вызова:

В выводимой строке обычно используются спецификации форматирования значений переменных, переданных в качестве параметров. Каждая такая спецификация начинается со знака “%”, после которого следуют обозначения параметров форматирования:

211

Количество спецификаций должно совпадать с количеством переменных. При этом первая встретившаяся спецификация соответствует первой переменной в списке, вторая - второй и т.д.

В случае вывода числовых значений сразу же после знака “%” может быть указано количество символов и формат для отображения чисел, например:

Примеры использования спецификаций форматирования:

Функции ввода строк gets () и scanf()

Функции gets ( ) и scanf ( ) выполняют действия, обратный функциям puts () и printf ( ) : считывают посимвольно строку через назначенный послед-

ним последовательный интерфейс.

Рассмотрим пример использования функций gets () и puts ( ) для микроконтроллеров PIC ( см.листинг).

Функция scanf ( ) считывает из вх0дного потока значения в формате, определенном в первом параметре, и сохраняет их в переменных, адреса которых переданы ей в качестве последующих параметров. Спецификации форматирования для этой функции такие же, как и для printf ( ) . Обычно функция scanf ( ) используется в nape с printf

212

Как уже было отмечено ранее, директивы препроцессора, по сути, не являются составной частью языка С, а используются для подстановки коца в текст программы. Препроцессор - это особая программа, которая выполняет предварительную обработку данных до начала компиляции. Рассмотрим стандартные директивы препроцессора, а также директивы, характерные для компилятора CCS-PICC.

Директива #include

Выше, в разделе “Структуры программы на С” уже упоминалась самая распространенная директива #include, которая используется фактически во всех программах для включения в текст программы заголовочных файлов (с определениями), имеющий расширение .1'1, или файлов .с (не содержащих функцию main())

Эта директива может использоваться в двух формах:

Если имя файла заключено между знаками “<” и “>”, то он считается частью стандартной библиотеки, поставляемой вместе с компилятором. Если же имя файла заключено в двойные кавычки, то считается, что он расположен в той же папке, что и файл с исх0дным кодом.

Директива #define

Директива #define указывает препроцессору на необх0димость выполнить п0дстановку в тексте программы определенной последовательности символовдругой последовательностью. Формат директивы:

В директиве #define могут использоваться параметры, благодаря чему она становится очень мощный и гибким инструментом, позволяющим заменять один простой текстовый элемент сложным выражением. Такие подстановки называют макросами.

213

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

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

Напоминает вызов функции, Однако это не функция - компилятор получит от препроцессора последнюю строку в следующем вице.

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

Есть и еще одно отличие, особенно важное при программировании микроконтроллеров, - при использовании макросов, в отличие от функций, ничего не помещается в стек, что позволяет сэкономить оперативную память.

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

Перечислим некоторые правила использования директивы #de fine:

при создании комментариев в строке с #define всегда используется комментарий вида

следует помнить, что конец строки - это конец #define, и весь текст слева заменить текст справа;

для преобразования параметра макроса в текстовую строку можно указать перед ним символ “#”, например:

для конкатенации двух параметров можно воспользоваться оператором например:

для переноса текста подстановки на другую строку используется символ обратной косой “\”, например:

для отмены определения используется директива #unde f, например:

214

Многие микроконтроллеры отличаются лишь некоторыми параметрами, количеством выводов, размером памяти и размещением регистров. Это позволяет создавать на языке С программный код для всего модельного ряла.` Однако для этого следует каким-то образом заменить те параметры, которые отличаются у разных моцелей. Для таких целей используются директивы условной компиляции

Синтаксис для директивы #ifdef

Если имя макроса определено в программе, то компилируется первая последовательность операторов, в противном случае - вторая последовательность (ветка #else может и отсутствовать).

Пример использования (для компилятора CCS-PICC):

Синтаксис для директивы #ifnde f

B данном случае, в отличие от директивы #ifde f, первая последовательность операторов выполняется в том случае, если имя макроса в программе не определено.

Для условной компиляции можно также воспользоваться директивами #if, elif. Их синтаксис:

Эта конструкция работает аналогично условному оператору if “else. Компилятор оценивает выражения после #if и #elif до тех пор, пока Одно из них не даст в результате TRUE, после чего в текст программы подставляется соответствующая последовательность операторов. Если оба выражения дают

215

FALSE, то подставляется последовательность операторов после директивы #else (если она присутствует).

Допустим, для передачи и приема данных через UART y абстрактного микроконтроллера SomeМіс16 используются выводы 12 и 13, y микроконтроллера SomeMic8 - выводы 6 и 14, а у SomeМіс4 - выводы 1 и 2. Тогда мы можем создать заголовочный файл SomeMic . h и включить в него следующие директивы.

Теперь, если программный проект будет построен на микроконтроллере SomeМіс8, то в заголовочный файл следует поместить следующий текст.

Встретив директиву #ifnde f, препроцессор включит B текст программы define SomeMicX == 8 и #include <SomeMic.h>. Поскольку после этого эле-

мент SomeMicX получит значение, равное 8, то любая повторная обработка директивы #ifndef не приведет к дублированию в выходном тексте соответствующей информации. Другими словами, с0держимое заголовочного файла SomeMic.h будет помещено в исходный код файлов, использующих заголовочный файл с ifndef, только один раз.

Использование директивы #ifndef с последующими директивами #de fine и include - стандартный прием, позволяющий избежать дублирования информации из заголовочных файлов в исходном коде проекта. Если этого не сделать, то при дублировании компилятор обычно выдает множество сообщений об ошибках, связанных с многократным объявлением переменных.

Директива #error

Директива #еггог используется сон:.іестно с директивами условной компиляции. Встретив ее, компилятор сгенерирует сообщение об ошибке, указанное справа от директивы (см. пример в предыдущем подразделе).

Директивы, характерные для компилятора CCS-PICC

Компилятор CCS-PICC поддерживает множество встроенных, нестандартных директив. Рассмотрим некоторые из них.

Директива #bit

216

Директива препроцессора #bit используется для получения доступа к отдельным разрядам регистров или переменных. Ее синтаксис:

где x - константа, определяющая регистр, или переменная; у - константа от 0

до 7. Например, следующим образом переменная TOIF объявляется как разряд 2 регистра по адресу 0x08:

Пример для разряда переменной:

Директива #byte

Директива #byte имеет следующий синтаксис:

где X - имя переменной или константы.

Если идентификатор - это уже объявленное ранее имя переменной, то компилятор помещает эту переменную по адресу Х, B противном случае компилятор создает новую переменную и помещает ее по адресу Х как 8- разрядное целое число. В обоих случаях в ячейку памяти с адресом Х могут быть помещены любые другие переменные. Фактически, если Х - имя переменной, то ей будет соответствовать тот же адрес в памяти, что и для объявленного идентификатора:

Директива #case

Директива препроцессора #case указывает компилятору быть чувствительным к регистру символов. По умолчанию, компилятор CCS-PICC не чувствителен к регистру символов.

217

4.SCADA-СИСТЕМЫ

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

АСУТП и диспетчерское управление

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

Первый этап отражает внедрение систем автоматического регулирования (САР). Объектами управления на этом этапе являются отдельные параметры, установки, агрегаты. Решение задач стабилизации, программного управления, слежения переходит от человека к САР. У человека появляются функции расчета задания и параметров настройки регуляторов.

Второй этап - автоматизация технологических процессов. Объектом управления становится рассредоточенная в пространстве система. С помощью систем автоматического управления (САУ) реализуются все более сложные законы управления, решаются задачи оптимального и адаптивного управления, проводится идентификация объекта и состояния системы. Характерной особенностью этого этапа является внедрение систем телемеханики в управление технологическими процессами. Человек все больше отдаляется от объекта управления, между объектом и диспетчером выстраивается целый ряд измерительных систем, исполнительных механизмов, средств телемеханики, мнемосхем и других средств отображения информации (СОИ).

Третий этап - автоматизация систем управления технологическими процессами - характеризуется внедрением в управление технологическими процессами вычислительной техники. Вначале - применение микропроцессоров, использование на отдельных фазах управления вычислительных систем; затем - активное развитие человеко-машинных систем управления, инженерной психологии, методов и моделей исследования операций и, наконец, - диспетчерское управление на основе автоматических информационных систем сбора данных и современных вычислительных комплексов.

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

218

имеющими вспомогательный характер или относящимися к другому уровню управления. Диспетчер в многоуровневой автоматизированной системе управления технологическими процессами получает информацию с монитора ЭВМ или с электронной системы отображения информации и воздействует на объекты, находящиеся от него на значительном расстоянии, с помощью телекоммуникационных систем, контроллеров, интеллектуальных исполнительных механизмов. Основой, необходимым условием эффективной реализации диспетчерского управления, имеющего ярко выраженный динамический характер, становится работа с информацией, т.е. процесс сбора, передачи, обработки, отображения, представления информации.

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

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

Статистика говорит, что за тридцать лет (с начала 60-х до конца 80-х годов XX века) число учтенных аварий удваивалось примерно каждые десять лет. В результате анализа большинства аварий и происшествий на всех видах транспорта, в промышленности и энергетике были получены интересные данные. В 60-х годах ошибка человека была первоначальной причиной аварий лишь в 20% случаев, тогда как к концу 80-х доля «человеческого фактора» стала приближаться к 80%.

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

Концепция SCADA (Supervisory Control And Data Acquisition - диспетчерское управление и сбор данных) предопределена всем ходом развития систем управления и результатами научно-технического прогресса. Применение SCADA-технологий позволяет достичь высокого уровня автоматизации в решении задач разработки систем управления, сбора, обработки, передачи, хранения и отображения информации.

Дружественность человеко-машинного интерфейса (HMI/MMI -

Humain/Man Machine Interface), предоставляемого SCADA-системами, полнота и наглядность представляемой на экране информации, доступность «рычагов»

219

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

Внастоящее время SCADA является основным и наиболее перспективным методом автоматизированного управления сложными динамическими системами (процессами).

Управление технологическими процессами на основе систем SCADA стало осуществляться в передовых западных странах в 80-е годы. Область их применения охватывает сложные объекты электро- и водоснабжения, химические, нефтехимические и нефтеперерабатывающие производства, железнодорожный транспорт, транспорт нефти и газа и др.

ВРоссии диспетчерское управление технологическими процессами опиралось, главным образом, на опыт оперативно-диспетчерского персонала. Переход к управлению на основе SCADA-систем стал осуществляться позднее.

Ктрудностям освоения в России новой информационной технологии - SCADAсистем - относятся как отсутствие эксплуатационного опыта, так и недостаток информации о различных SCADA-системах. В мире насчитываются не один десяток компаний, активно занимающихся разработкой и внедрением SCADAсистем. Каждая SCADA-система - это ноу-хау компании, и поэтому информация о той или иной системе не столь обширна.

Большое значение при внедрении современных систем диспетчерского управления имеет решение следующих задач:

• выбор SCADA-системы (исходя из требований и особенностей технологического процесса);

• кадровое сопровождение.

Выбор SCADA-системы представляет собой достаточно трудную задачу, аналогичную принятию решений в условиях многокритериальности, усложненную невозможностью количественной оценки ряда критериев из-за недостатка информации. Подготовка специалистов по разработке и эксплуатации систем управления на базе программного обеспечения SCADA осуществляется на специализированных курсах различных фирм, курсах повышения квалификации. В настоящее время в учебные планы ряда технических университетов начали вводиться дисциплины, связанные с изучением SCADA-систем. Однако специальная литература по SCADAсистемам отсутствует, имеются лишь отдельные статьи и рекламные проспекты.

Компоненты систем контроля и управления и их назначение

Многие проекты автоматизированных систем контроля и управления (СКУ) для большого спектра областей применения позволяют выделить обобщенную схему их реализации, представленную на рис.4. 1.

220

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]