Разработка верхнего уровня Информационной Системы Университета
Order;
временный массив объявлений содержит объявления принятых от пользователя
или администратора, но не успевших обработаться системой.
4.2. Прием сообщений от нижнего уровня
Любое сообщение, полученное от нижнего уровня, поступает во входной
буфер.
После приема сообщения генерируется прерывание, которое вызывает
процедуру Datas_up. Задача данной процедуры состоит в обработке сообщения и
заполнения массива "Входящих сообщений". Массив представляет собой
следующую структуру данных представленную в таблице 1.
Таблица 1 - Структура массива входящих сообщений
|Переменная |Тип переменной |
|Номер устройства |Integer |
|Тип сообщения |Integer |
|Ошибка |Integer |
|Ответ |Integer |
|Номер объявления |Integer |
|Идентификатор присутствия |Boolean 0-нет 1-есть |
Для каждого устройства существует свой массив.
Переменные "Тип сообщения", "Ошибка", "Ответ", "Номер объявления"
заполняется в зависимости от типа сообщения. "Номер устройства" это не что
иное, как адрес источника. Также проверяется "Контрольная сумма" принятого
сообщения и переменная "Идентификатор присутствия" принимает логическое
значение истина.
Процедура Control постоянно проверяет переменную "Идентификатор
присутстви" . Как только данная переменная принимает значение истина,
процедура проверяет "Тип сообщени". В зависимости от "Типа сообщения"
Control выполняет следующие действия :
"Тип сообщения" = 01.
Control вызывает процедуру Order с параметром "Номер устройств". Order
проверяет по "Динамической модел", чем в данный момент должно заниматься
это устройство. Если устройство должно выводить некоторое сообщение, то
Order формирует сообщение с "Типом сообщения" = 02 и помещает его в массив
исходящих сообщений. Если устройство не должно ни чего делать, то Order
также формирует сообщение с "Типом сообщения" = 02 но поле "Текст"
остается пустым.
"Тип сообщения" = 02.
Если переменная "Ошибка" = 0, то Control обнуляет все переменные в
массиве исходящих сообщений. "Массив исходящих объявлений" обнуляются.
Если "Ошибка" =1, переменная "Повтор" в массиве исходящих сообщений
принимает значение = 1 и время = 60.
После массив входящих объявлений обнуляется.
"Тип сообщения" = 03.
Если переменная "Ответ" = 0, то переменная "Занят" в "Динамической
модели" принимает значение 0.
Если переменная "Ответ" =1, то переменная "Занят" в "Динамической
модели" принимает значение =1 и переменная "Номер объявления" в
"Динамической модели" = "Номер объявления" в массиве входящих сообщений.
После массивы входящих и исходящих объявлений обнуляются.
"Тип сообщения" = 04.
Переменная "Повтор" в массиве исходящих сообщений принимает значение =
1 и время = 60.
"Массив входящих объявлений" обнуляется.
4.3. Отправка сообщений на нижний уровень
Для отправки сообщения на нижний уровень системы служит процедура
Datas_down, которая постоянно проверяет значения переменных "Идентификатор
присутствия" в массиве исходящих сообщений. Если данная переменная имеет
значение истина, то Datas_down формирует пакет в зависимости от "Типа
сообщения" и помещает его в выходной буфер.
"Массив исходящих сообщений" имеет следующую структуру данных
представленную в таблице 2.
Таблица 2 - Структура массива исходящих сообщений
|Переменная |Тип переменной |
|Номер устройства |Integer |
|Тип сообщения |Integer |
|Текст объявления |String |
|Номер объявления |Integer |
|Идентификатор присутствия |Boolean 0-нет 1-есть |
|Повтор |Integer принимает значения 0,1 или 2|
|Время |Integer принимает значения от 60 до |
| |0 |
Для каждого устройства существует свой массив.
Если пришло время вывода объявления находящегося в массиве не
опубликованных объявлений, то процедура Control формирует сообщение с
"Типом сообщения" 02. Формирование сообщения происходит путем считывания
данных из массива неопубликованных объявлений и заполнение массива
исходящих сообщений. Переменной "Повтор" в массиве исходящих сообщений
присваивается значение = 0, а переменной "Время" значение = 60. Также
переменной "Идентификатор присутствия" присваивается значение истина.
4.4. Другие функции выполняемые в системе
В системе могут быть случаи, когда устройство нижнего уровня не
отвечает на запросы. Чтобы распознать данные устройства и впредь к ним не
обращаться следует контролировать все пакеты уходящие на нижний уровень.
Данную функцию выполняет процедура Waiting. После того как система
сформировала сообщение и записала его в массив исходящих сообщений,
процедура Waiting начинает каждую секунду уменьшать значение переменной
"Время" в массиве исходящих сообщений, от 60 до 0. Как только значение
достигло 0, происходит проверка переменной "Повтор". Если данная переменная
< 3, то ее значение увеличивается на 1 и значение "Время" = 60. В случае
если переменная "Повтор" достигло значения = 3, то Waiting обнуляет массив
исходящих сообщений и делает соответствующую пометку в массиве не
работающих устройств.
Обработкой поступивших сообщений занимается процедура Processing. Она
берет поступившие сообщения из временного массива объявлений, обрабатывает
их и добавляет в массив всех объявлений находящийся на диске. В случае если
пользователь или администратор системы выбрали устройство, которое помечено
как неработающее, Processing формирует сообщение с типом сообщения = 06 для
удаленного пользователя или выводит его на экран для администратора
системы. Далее данная процедура просматривает объявления в массиве всех
объявлений, и если подошло время, для вывода объявления, помещает данное
объявление в массив неопубликованных объявлений.
При отправки сообщения с "типом сообщения" = 06, Processing проверяет
устройства, которые выбрал "Клиент". Устройства, на которые клиент хочет
передать свое объявление представляет собой 2 байтное число (см. рис. 3).
Кодирование устройств
2-х байтная строка устройств
|0 |0 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |
Рис. 3
По битам, которые помечены 1, процедура определяет номера устройств
выбранных клиентом, сравнивает их с массивом устройств. Если устройство на
которое необходимо вывести объявление является не работоспособным, то в
соответствующие биты переменной "Не работающие устройства" массива
исходящих сообщений клиенту принимают значение истинно, т.е. = 1. После
этого объявление исправляется и посылается в массив неопубликованных
объявлений и записывается на диск.
4.5. Администрирующие функции системы
Во время работы ИСУ человек исполняющий функции администратора
способен внести некоторые коррективы в функционирование системы. В
частности в его задачу входит изменение, дополнение и удаление
пользователей в системе, проводить контроль функционирования устройств
нижнего уровня, подключение и отключение данных устройств, оформление
объявления с самым высоким приоритетом вывода. Только администратор может
получить справочную информацию о состоянии системы в любой момент времени.
За получение справки отвечает процедура Inquiry. В ее функцию входит
получение запроса от администратора системы и выдачу информации в некотором
структурированном виде. Inquiry имеет доступ ко всем информационным
массивам ИСУ хранящимся как на диске так и в оперативной памяти.
Для проведения диагностики нижнего уровня системы по заданию
администратора служит процедура Diagnostics. Она формирует сообщения на
нижний уровень системы с "Типом сообщения" = 03 и помещает его в массив
исходящих сообщений. После посылки сообщения каждому устройству нижнего
уровня Diagnostics, выдает сообщение администратору системы о том, что
информация, о функционировании системы будет выдана через 4 минуты. Т.к. в
случае неправильной работы будет автоматически осуществлены 3 запроса на
нижний уровень и ожидание ответа на каждый из них в течении 60 секунд, за
правильную работу данной функции отвечает процедура Waiting. После 4 минут
процедура Diagnostics выводит содержание массива устройств на экран
монитора. Процедура Diagnostics может выводить быструю диагностику
устройств нижнего уровня. В этом случае она не формирует сообщения на
нижний уровень, а просто выводит содержание массива устройств на экран.
Можно принудительно запретить работу некоторого устройства или добавить
новое, изменив содержание массива устройств.
Оформление заявки на подачу объявления осуществляет процедура
Application. После принятия объявления Application сохраняет его во
временном массиве объявлений.
Процедура Work_DB осуществляет полный доступ к базе данных
пользователей и позволяет редактировать, удалять и добавлять записи
пользователей.
4.6. Функции работы с клиентом
Также как и с нижним уровнем, все сообщения приходящие от "Клиента"
помещаются во входной буфер. После чего с помощью процедуры Datas_up2,
которая активизируется прерыванием, данные разбиваются и помещаются во
входящий массив сообщений клиента. Данный массив имеет следующую структуру
представленную в таблице 3.
Таблица 3 - Структура массива входящих сообщений клиента
|Переменная |Тип переменной |
|Тип сообщения |Integer |
|Текст объявления |String |
|Сетевое имя |String |
|Пароль |String |
|Контрольная сумма |Boolean 0-правильная 1-неправильная|
|Идентификатор присутствия |Boolean 0-нет 1-есть |
|Приоритет |Integer |
|Устройство |Integer |
|Адрес источника |Integer |
Все переменные заполняются в зависимости от типа сообщения, т.к.
каждый тип сообщения имеет свой формат пакета. Также вычисляется
"Контрольная сумма" принятого сообщения и переменная "Идентификатор
присутствия" принимает логическое значение истина.
Массив имеет 5 копий для сообщений принятых, но не обработанных
Interaction. Массив имеет циклическую структуру.
Всю работу по обработке сообщений клиента и ответ на них берет на
себя процедура Interaction. Она постоянно опрашивает переменную
"Идентификатор присутствия" на наличие истинного значения. Как только
данная переменна, принимает значение истинно, Interaction определяет
значение переменной "Тип сообщения" и в зависимости от ее значения
выполняет необходимые действия.
"Тип сообщения" = 05.
Interaction обращается к "Базе Данных Пользователей" (БДП) и
сравнивает имя пользователя и пароль, полученные от "Клиента". В случае
если имя пользователя существует в базе данных, и пароль совпадает,
Interaction считывает значения приоритета и формирует сообщение Клиенту с
Типом сообщения – 05. Переменная "Ошибка" в массиве исходящих сообщений
клиенту, значение 0, Сетевое имя – имя переданное "Клиентом", "Приоритет" –
приоритет из базы данных.
Если данное "Сетевое имя" не обнаружено в БДП, то процедура формирует
сообщение с "Типом сообщения" 05. В поле "Ошибка" значение 1. В поле
"Сетевое имя" значение "Гость", "Приоритет" наименьший.
Если "Сетевое имя" существует в базе данных, но пароль не совпадает с
паролем отправленным "Клиентом", то Interaction отправляет то же самое
сообщение, но в поле "Ошибка" значение 2. "Сетевое имя" также получает
значение "Гость" с наименьшим "Приоритетом".
Структура массива исходящих сообщений клиенту представлена в таблице
4.
Таблица 4 - Структура массива исходящих сообщений клиенту
|Переменная |Тип переменной |
|Тип сообщения |Integer |
|Текст |String |
|Сетевое имя |String |
|Приоритет |Integer |
|Ошибка |Integer |
|Идентификатор присутствия |Boolean 0-нет 1-есть |
|Не работающие устройства |Integer |
|Адрес приемника |Integer |
Массив имеет 5 копий для уменьшения периода ожидания во время отправки
сообщения "Клиенту".
"Тип сообщения" = 06.
При получении "Сервером" данного сообщения от "Клиента", процедура
Interaction заполняет временный массив объявлений, значение переменных
данного массива берутся из массива входящих сообщений клиента.
"Тип сообщения" = 07.
Если от "Клиента" пришло сообщение с неправильной контрольной суммой,
то "Сервер" формирует сообщение с данным "Типом сообщения", т.е. 07.
"Тип сообщения" =08.
Сообщение посылается "Клиентом" и представляет собой запрос на
описание устройств существующих в системе. Interaction считывает из массива
устройств, все значения, и формирует сообщение с "Типом сообщения" = 08.
5. Описание функционирования верхнего уровня ИСУ (Клиент)
5.1. Регистрация пользователя
Для того чтобы пользователь имел возможность отправлять объявления,
ему следует получить свой приоритет, если он зарегистрирован в системе.
Пользователь, не зарегистрированный в системе, получает "Сетевое имя"
"Гость" с наименьшим приоритетом.
При запуске "Клиентской" части системы пользователь имеет возможность
послать сообщение "Серверу" с "Типом сообщения" = 05. За получение
приоритета от сервера отвечает процедура Get_priority. Она запрашивает у
пользователя его "Сетевое имя" и "Пароль". После формирует сообщение и
посылает его "Серверу".
Get_priority позволяет пользователю получить "Сетевое имя" "Гость" и
наименьший приоритет, не устанавливая связи с "Сервером". переменная "Ок",
которая говорит о том, что пользователь имеет право отправлять сообщения
принимает значение истинно.
Для отправки сообщения "Серверу" Get_priority заполняет массив
исходящих сообщений серверу, и устанавливает переменную "Идентификатор
присутствия" в истинно. Данный массив имеет следующую структуру
представленную в таблице 5.
Таблица 5 - Структура массива исходящих сообщений серверу
|Переменная |Тип переменной |
|Тип сообщения |Integer |
|Текст объявления |String |
|Сетевое имя |String |
|Пароль |String |
|Идентификатор присутствия |Boolean 0-нет 1-есть |
|Приоритет |Integer |
|Устройства |Integer |
|Адрес источника |Integer |
Процедура Datas_down3 постоянно проверяет значение переменной
Идентификатор присутствия, если она приняла значение, истинно формирует
пакет и помещает его в выходной буфер 3.
5.2. Отправка объявления Серверу
За данную функцию отвечает процедура Send_message. Она запрашивает у
пользователя информацию о том когда, на какое устройство и какое объявление
надо вывести. Также она проверяет переменную "Ок", в случае истинного
значения пользователю разрешено отправлять объявление. После получения всех
необходимых данных процедура заполняет массив исходящих сообщений серверу с
типом сообщения = 06. И устанавливает переменную "Идентификатор
присутствия" в истинное значение.
Информацию об устройствах процедура берет из массива устройств.
Если пользователь хочет обновить свою информацию в массиве устройств,
то Send_message формирует сообщение серверу с "Типом сообщения" 08.
5.3. Прием сообщений от Сервера
Любое сообщение, пришедшее от "Сервера" помещается во "Входной
буфер3". И генерируется прерывание, которое вызывает процедуру Datas_up 3.
данная процедура разбивает принятый пакет и инициализирует переменные в
массиве входящих сообщений от сервера. Переменная "Идентификатор
присутствия" принимает значение истинно. В задачу данной процедуры
включается функция по проверке контрольной суммы принятого пакета. Если
контрольная сумма не верна, то переменная "Контрольная сумма" в массиве
входящих сообщений от сервера принимает значение истинно. "Массив входящих
сообщений от сервера" имеет следующую структуру представленную в таблице 6.
Таблица 6 - Структура массива входящих сообщений от сервера
|Переменная |Тип переменной |
|Тип сообщения |Integer |
|Текст |String |
|Сетевое имя |String |
|Приоритет |Integer |
|Ошибка |Integer |
|Идентификатор присутствия |Boolean 0-нет 1-есть |
|Не работающие устройства |Integer |
|Контрольная сумма |Boolean |
За прием сообщений отвечает процедура Get_message. Она постоянно
проверяет переменную "Идентификатор присутствия" в массиве входящих
сообщений от сервера. Если данная переменная принимает значение истинно, то
процедура проверяет значение "Тип сообщения" и в зависимости от него
выполняет определенные действия.
"Тип сообщения" = 05.
Get_message проверяет значение переменной "Ошибка" в массиве входящих
сообщений от сервера. Если "Ошибка" = 0, пользователь получает информацию о
том, что его "Сетевое имя" и "Пароль" приняты системой и ему разрешено
посылать объявления с зарегистрированным заранее приоритетом. "Ошибка" =1,
пользователь информируется о том, что его "Сетевое имя" не обнаружено в
базе данных пользователей. "Ошибка" = 2, пароль введенный пользователем не
верен. В двух последних случаях пользователю будет разрешено посылать
сообщения под "Сетевым именем" "Гость" и минимальным приоритетом.
Переменная "Ок" принимает значение истинно.
"Тип сообщения" = 06.
Если переменная "Неработающие устройства" в массиве входящих сообщений
от сервера = 0, то выводится сообщение пользователю на экран, что его
объявление было успешно принято и обработано системой.
Если данная переменная не равна 0, то вычисляется номера бинарных
единиц и по массиву устройств определяется не работающие устройства.
Выводятся данные устройства, и сообщается пользователю, что его объявление
не будет на них выведено.
"Тип сообщения" = 07.
"Сервер" сообщает клиенту, что система приняла сообщение от данного
пользователя, но контрольная сумма у принятого сообщения неправильная и
просит пользователя повторить сообщение. Get_message выводит
соответствующую информацию на экран пользователя.
"Тип сообщения" = 08.
В зависимости от переменной "Текст" в массиве входящих сообщений от
сервера процедура Get_message заполняет массив устройств. И информирует об
этом пользователя.
6. Входная и выходная информация
Вся информация, циркулирующая в системе, представляет собой некоторые
символьные выражения. Всю входную и выходную информацию можно подразделить
на информацию обеспечивающую управление, осуществляющую запрос и справочную
информацию. Входная и выходная информация группируется по типам и
представляет собой пакеты/11/, с помощью которых и осуществляется связь
между различными частями системы. В связи с тем, что в системе не должно
возникать ни каких непредсказуемых ситуаций, т.е. система должна однозначно
реагировать на все типы сообщений полученных ею, были разработаны типы
пакетов, которые имеют строгую структуру и представлены в пункте "Формат и
структура пакетов циркулирующих в системе". Были рассмотрены и определены
все возможные ситуации, возникающие в системе и на каждую ситуацию,
определено строгое поведение ИСУ.
Информация и команды, возникающая в системе, зависят от того, что
пользователь требует от ИСУ. Основная информация, получаемая от
пользователя, это текстовые объявления, которые он хочет опубликовать в
системе. В зависимости от того, на какое из устройств произойдет вывод
данного объявления, ИСУ преобразовывает его в нужный формат и выводит на
устройство вывода /12/.
Существуют различные устройства вывода. Некоторые из них представлены
на рисунке 4.
Устройства вывода
[pic]
Устройства вывода бегущая строка (см. рис. 5), позволяет выводить
строчные объявления, при выводе которых возникает иллюзия движения.
Движение осуществляется с лева на право, с некоторой установленной
скоростью.
Бегущая строка
[pic]
Текстовое табло
[pic]
Текстовое табло (см. рис. 6) позволяет выводить текст в любой части
экрана, смещать его и создавать иллюзию движения, как и бегущая строка.
Основное достоинство текстового табло - позволяет выводить большее
количество строк за единицу времени.
Графическое табло
[pic]
Графическое табло (см. рис. 7) позволяет выводить не только текстовые
сообщения но и простую графику. Формирование рисунка может происходить в
любом месте табло и зависит только от фантазии создателя объявления и от
разрешающей способности графического табло.
Помимо рассмотренных устройств, существует огромное количество
приспособлений и устройств для вывода различной информации, как
специализированной так и универсальной.
К универсальным относятся все устройства рассмотренные выше. Их
особенность заключается в том, что они могут выводить любую информацию,
поступающую на входы данных устройств. Эта особенность делает их немного
сложнее и дороже, но в тоже время позволяет использовать в полной мере все
возможности и приспосабливать их к меняющимся целям и запросам потребителя.
К специализированным устройствам вывода можно отнести устройства,
которые выводят только определенную информацию. Примером может служить
временные табло, отображающие текущее время. Табло для котировок акций,
табло процентных ставок, табло отображающие температуру, влажность. Во
время футбольных или баскетбольных матчей, специализированные табло выводят
информацию о текущем счете игры. Еще одна особенностей специализированных
устройств заключается в том, что они не требуют удаленного управления. Это
можно охарактеризовать на примере: измерение температуры воздуха,
оцифровывание этого значения и вывод его на табло, осуществляется
автоматически в самом устройстве, и не требует ни какого вмешательства из
вне.
Любое из данных устройств может быть помещено в систему. Управление
может быть централизованно. То есть информация может быть получена из
внешних источников, обработана системой и выведена на устройства вывода.
Либо как в случае со специализированными устройствами, информация может
быть получена самим устройством, им обработана и им же выведена.
7. Формат и структура пакетов, циркулирующих в ИСУ
На рисунке 8 изображен общий формат пакетов, используемых при обмене
информацией.
Формат пакета
|Заголовок|Адрес |Адрес |Тип |Текст |Контрольная|Префикс|
|пакета |источника |приемника |сообщения | |сумма |пакета |
Рис. 8
"Заголовок пакета" и "Префикс пакета" предназначен для выделения
пакета из информационного потока и синхронизации приемника и источника.
"Адрес приемника" – это адрес того устройства, которому предназначен
пакет.
"Адрес источника" – это адрес того устройства, где был создан пакет.
"Тип сообщения" – информирует приемник о структуре поля "Текст".
"Текст" – текст сообщения.
"Контрольная сумма" – служит для обнаружения ошибок при приеме пакета.
Для вычисления контрольной суммы необходимо найти сумму всех байтов полей
"Место назначения", "Адрес отправителя", "Тип сообщения" и "Сообщение".
Если полученная контрольная сумма будет совпадать с числом заголовок
пакета или префикс пакета, то ее нужно инвертировать.
Далее перечислены все типы сообщений существующих в системе.
01 – Нижний уровень информирует верхний о том, что в процессе, каких
либо сбоев информация, хранящаяся в оперативной памяти устройства нижнего
уровня, имеет неправильную контрольную сумму. Поле "Текст" имеет нулевую
длину.
02 – Если сообщение пришло от верхнего уровня, то в поле Текст первые
2 байта номер выводимого объявления, все последующее объявление, которое
следует вывести устройством нижнего уровня. Если длина поля "Текст" = 0 то
устройство ни чего не должно выводить.
Сообщение, посылаемое устройством нижнего уровня, информирует верхний
уровень о правильном приеме сообщения. Поле "Текст" имеет длину в 1 байт.
Если значение данного байта = 0, то устройство нижнего уровня правильно
приняло сообщения и приступило к его выводу. Если значение данного байта =
1, то сообщение было принято с ошибкой.
03 – Верхний уровень требует информацию о работе данного устройства
нижнего уровня. Поле "Текст" имеет нулевую длину.
Сообщение нижнего уровня является ответом за запрос верхнего уровня.
Поле "Текст" имеет длину 3 байта. Если значение первого байта = 0, то
устройство свободно, 2 и 3 байт также = 0. Если значение первого байта = 1,
устройство в данный момент выводит объявление, номер которого помещается во
второй и третий байт.
04 – Говорит о том, что было принято сообщение с неправильной
контрольной суммой и является запросом для повторной передачи сообщения.
Поле "Текст" имеет нулевую длину.
05 – Клиент посылает запрос серверу с просьбой проверить пользователя
и выслать его приоритет. Поле "Текст" состоит из 20 байт, в первых 10
байтах находиться "Сетевое имя" пользователя, во вторых 10 байтах
находиться его пароль.
Ответ "Сервера" на запрос клиента. В поле Текст 13 байт.1 байт –
ошибка, 0 - ошибки нет , 1 - не существует данного сетевого имени в базе
данных пользователя, 2 - сетевое имя обнаружено, но пароль не совпадает.
10 байт "Сетевое имя", 2 байта приоритет.
06 – "Клиент" посылает "Серверу" объявление, которое он хочет
опубликовать. Поле "Текст" 2 байта приоритет, 2 байта устройства, 2 байта
время, остальное под текст объявления.
Ответ "Cервера". Поле "Текст" из 2 байт. Если значение в данных байтах
= 0, то объявление было успешно принято и будет опубликовано. Если не = 0
то смотрится по бинарной 1 и говорит о том что данное устройство не
работоспособно.
07 – Посылается только "Сервером" и говорит о том, что было принято
сообщение с неправильной контрольной суммой и является запросом для
повторной передачи сообщения. Поле "Текст" имеет нулевую длину.
08 – "Клиент" требует список устройств и описание их. Поле "Текст"
пусто.
Сервер отвечает на запрос. Поле "Текст" – 1 байт работает или не
работает устройство, 1 байта номер устройства в массиве устройств. В данном
случае под массивом устройств понимают 2 байтное число, которое как бы
кодирует список устройств.200 байт на описание, данная структура может
повторяться столько раз, сколько устройств в системе, но не больше 16.
Данная информация находится в массиве устройств.
8. Модульная схема алгоритмов
8.1. Алгоритм процедуры (Control)
Алгоритм /13,14/ представлен на рисунках 9 - 12.
Алгоритм процедуры (Control)
Рис. 9
Данная процедура является основным звеном для связи верхнего уровня
ИСУ с нижним уровнем. В ее задачу входит обработка всех сообщений принятых
от нижнего уровня и формирование и отправка сообщений на нижний уровень.
Описание переменных присутствующих на блок схеме:
i – счетчик(Номер устройства);
id[i](вх) – "Идентификатор присутствия" по номеру записи в массиве входящих
сообщений;
id[i](вых) – "Идентификатор присутствия" по номеру записи в массиве
исходящих сообщений;
n – количество устройств нижнего уровня в ИСУ .
Рис. 10
Рис. 11
Рис. 12
8.2. Алгоритм процедуры (Order)
Данная процедура вызывается в том случае, если по каким либо причинам,
система считает, что нижний и верхний уровень действуют не синхронно. Т.е.
информация, хранящаяся в динамическом массиве верхнего уровня, не
соответствует действительности. Для того чтобы восстановить правдивую
информацию вызывается данная процедура с параметром "Номер устройства".
Order формирует пакет на нижний уровень с запросом, чем занимается данное
устройство. Если необходимо опросить все устройства нижнего уровня,
процедура вызывается в цикле с новым параметром.
Процедура вызывается с параметром:
- i – Переданный параметр ("Номер устройства").
Алгоритм представлен на рисунке 13.
Алгоритм процедуры (Order)
Рис. 13
8.3. Алгоритм процедуры перемещения данных (Datas_up)
Во входном буфере находиться принятый пакет сообщения. Его формат и
структура описаны в пункте "Формат и структура пакетов циркулирующих в
системе". Задача данной процедуры идентифицировать данный пакет, разбить
его и заполнить массив входящих сообщений.
Описание переменных присутствующих на блок схеме:
N – "Номер сообщения" (служит для заполнения массива сообщения в системе).
Алгоритм представлен на рисунке 14.
Алгоритм процедуры перемещения данных (Datas_up)
Рис. 14
8.4. Алгоритм процедуры перемещения данных (Datas_Down)
Данная процедура занимается формированием пакетов и отправкой их на
нижний уровень (см. рис. 15). Как только в массиве исходящих сообщений
появилось сообщение, которое необходимо направить на нижний уровень,
процедура формирует текстовую строку и помещает ее в выходной буфер.
Формат и структура пакетов циркулирующих в ИСУ описана в одноименном
пункте. Для простоты описания алгоритма были введены следующие обозначения:
N – Количество устройств вывода в ИСУ; 1 - "Заголовок пакета"; 2 -
"Адрес источника"; 3 - "Адрес приемника"; 4 - "Тип сообщения"; 5 - "Текст";
6 - "Контрольная сумма"; 7 - "Префикс пакета".
Алгоритм процедуры перемещения данных (Datas_Down)
Рис. 15
8.5. Алгоритм инициализации системы(Init)
Алгоритм представлен на рисунке 16.
Алгоритм инициализации системы(Init)
Рис. 16
8.6. Алгоритм процедуры ожидания (Waiting)
Алгоритм представлен на рисунке 17.
Алгоритм процедуры ожидания (Waiting)
Рис. 17
8.7. Алгоритм процедуры обработки объявлений (Processing)
Все объявления принятые системой помещаются во временный массив
объявлений. После чего с помощью процедуры Processing (см. рис. 18 - 21)
они обрабатываются и помещаются в базу данных объявлений (массив
объявлений). Также процедура выполняет одну из важнейших функций, а именно
определяет время вывода сообщения и помещает его в массив неопубликованных
объявлений. Исключает коллизии, т.е. если два разных сообщения должны быть
опубликованы в одно и тоже время, данная процедура определяет приоритеты и
принимает решение о первоочередном выводе того или иного объявления.
Переменные используемые в процедуре:
временный массив представляет собой массив записей, состоящий из 16
элементов. В каждой записи находиться два поля 1- "Номер устройства" и 2 –
"Номер объявления". Причем 1-вая строка в каждой записи содержит значение
количества объявлений, время опубликования которых наступило, но по каким
либо причинам они не были опубликованы;
J – номер временного массива;
К- номер строки;
Мах – максимальный приоритет;
МахК – строка где находится максимальный приоритет.
Алгоритм процедуры обработки объявлений (Processing)
Рис. 18
Рис. 19
Рис. 20
Рис. 21
8.8. Алгоритм процедуры взаимодействия с удаленным клиентом
(Interaction)
Алгоритм представлен на рисунках 22 - 26.
Условное обозначение:
Mas1=Массив входящих сообщений клиента;
Mas2=Массив исходящих сообщений клиенту;
Mas=Временный массив объявлений.
Алгоритм процедуры взаимодействия с удаленным клиентом (Interaction)
Рис. 22
Послать сообщение с Типом сообщения =07
Рис. 23
Обработать сообщение с Типом сообщения =05
Рис. 24
Рис. 25
Рис. 26
8.9. Алгоритм процедуры получения приоритета (Get_priority)
Алгоритм представлен на рисунке 27.
Условные обозначения:
Mas1=Массив исходящих сообщений серверу;
Страницы: 1, 2, 3, 4
|