ЖУРНАЛ СТА №1/1999

c 21-дюймовыми мониторами промыш- ленного исполнения, предназначенные для работы в графическом режиме, и рабочие станции AWS-825 фирмы Advantech, работающие в режиме тер- минала. Для визуализации использует- ся графический интерфейс Photon microGUI, а также инструментальная среда для автоматизированного про- ектирования систем контроля и уп- равления RTWin. На рис. 2 отображены основные компоненты и взаимосвязи системы АИС. Конечно же, схема не отражает четких границ АИС, да их и не сущест- вует. Например, считать ли драйвер съема показаний прибора MERAV де- тищем АИС только на том основании, что никто более не пользуется его ус- лугами? Кроме того, изображенное распределение по узлам сети не явля- ется чем-то обязательным и на деле неоднократно варьировалось в основ- ном по техническим соображениям. Итак, отталкиваясь от рис. 2, хочу заострить внимание на блоке «Сервис АИС» и потоках информации, замыка- ющихся на нем. Программное обеспечение АИС Сервис АИС представляет собой комплекс программ (процессов), запу- скаемых на одном узле и взаимодейст- вующих через об- щую разделяемую память (рис. 3). Само название «Сервис» определя- ется характером функций данного комплекса. В самом деле, получая и обрабатывая первичные данные, он создает и содержит в порядке некий базисный набор данных, передает их на хранение в базу данных, а так- же предоставляет информацию сво- им клиентам по первому требова- нию, оказывая тем самым информа- ционные услуги. В общей памяти, помимо всевозмож- ных рабочих массивов взаимодействия и конфигурации, содержится также как бы информационный снимок стана, состоящий из набора блоков (каналов) данных (пример 1). Каждый модуль Сер- виса, выполняя свои узкие функции, обновляет соответствующие данные этих каналов или использует их другим образом (рис. 3). Запускает, выгружает, перезапускает и контролирует модули головная про- грамма, выполняющая также передачу информационных каналов всем жела- ющим клиентам. Диагностика и про- токолирование всех этих мероприя- тий отображается на информацион- ном экране Сервиса АИС (рис. 4). Первичные данные попадают в Сер- вис двумя путями: либо принимаются от драйверов по их инициативе, либо считываются из разделяемой памяти драйвера по логике прикладного ал- горитма. Передачу же базисной информации из Сервиса по различиям в протоколах можно разделить на четыре группы. 1.Передача базисного данного по фак- ту его возникновения (событию) в ба- зу данных. 2. Передача по событию определен- ному адресату (Тепловой модели наг- ревательной печи, например). 3.Ответ на запрос определенного дан- ного или управляющего воздействия. 4.Передача зарегистрированному кли- енту группы каналов. Существует, правда, и пятый путь (пятая колонна?) получения данных из Сервиса, совершенно беспрото- кольный, — считывание непосредст- венно из разделяемой памяти. Я лич- но применяю этот путь в различных исследовательских целях. Опаснее здесь другое — ведь так можно и запи- сать. Данная возможность использует- ся при аварийном восстановлении информации, например. И от этого, по сути, несанкционированного до- ступа защиты нет. Впрочем, среди привилегированных пользователей, могущих сотворить такое, ни «чайни- ков», ни хулиганов тоже нет. Передача в Базу данных осуществ- ляется по цепочке, представленной на рис. 5. Этим и ограничусь, поскольку де- тальное описание заслуживает от- дельной статьи. Кроме того, такой ме- тод передачи в базу применяется у нас ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ МЕТАЛЛУРГИЯ 76 1/99 /* Номера и флаги каналов */ #define CHAN_TIME 0 #define F_CHAN_TIME (0x00000001L<<CHAN_TIME) #define CHAN_DAT 1 #define F_CHAN_DAT (0x00000001L<<CHAN_DAT) /* Структура общего блока памяти */ struct COMMON_AIS { /* Матрица обмена CHANS — Количество каналов CLIENTS — Максимальное количество клиентов */ char matrix[CHANS][CLIENTS]; /* Данные каналов */ struct chan_TIME { char time[10]; /* текущее время */ char date[20]; /* текущая дата */ char num_br; /* номер бригады */ } chan_time; struct chan_DAT { /* канал сигналов и датчиков */ char status[100]; } chan_dat; }; /* Структура буфера обмена Сервис� лиент */ struct bsend { struct d_head { /* заголовок */ short type; short subtype; short client; long maska; long flags; } head; char data[sizeof(struct chan_TIME)+ sizeof(struct chan_DAT)]; }; Пример 1. Описание данных для обеспечения передачи Сервис-клиент Рис. 4. Информационный экран Сервиса АИС

RkJQdWJsaXNoZXIy MTQ4NjUy