Разработка топологии программно-технического комплекса защиты автоматической системы управления и защиты реактора ВВЭР-1000
Ядерный реактор ВВЭР-1000 - водо-водяной энергетический реактор с водой под давлением, без кипения в активной зоне. Регулирование мощности, топология локальной вычислительной сети. Коррекция базы данных конфигурации. Обмен данными между ОБД и ЛВС.
Рубрика | Физика и энергетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 11.09.2011 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
1) сообщение об общем результате сравнения: «Уставки сравнились» или «Уставки не сравнились», причем первое сообщение выводится только если значения всех уставок совпали с эталонными значениями во всех трех каналах указанной ЦПС;
2) если уставки не сравнились, формируются технологические сообщения обо всех не совпавших уставках вида: <идентификатор уставки> ожидалось: <ожидаемое значение> к.1: <значение в канале 1> к.2: <значение в канале 2> к.3: <значение в канале 3>.
Передача уставок
Передача уставок от РС к ЦПС _ длительный процесс. Уставки передаются фрагментами, по некольку штук за один раз. Для передачи фрагмента уставок от РС к ЦПС, а также для возврата ответа от ЦПС к РС используются сетевая функция SendCommand().
Эта функция позволяет передавать сетевой задаче указанного вычислительного средства массив двоичных данных размером до 424 байт и получать ответ в виде кода завершения или в виде двоичного массива размером до 424 байт.
Сетевая задача ЦПС после обработки фрагмента уставок, доставленного сетевой функцией SendCommand(), возвращает двоичный ответ-структуру типа _ReturnSettings. Этот ответ функция SendCommand() транспортирует обратно, на рабочую станцию.
Поле Command зарезервировано для использования сетевой функцией SendCommand().
Поле Delay служит для сообщения рабочей станции величины задержки (количество 50-миллисекундных тактов), которую необходимо сделать перед посылкой следующего фрагмента уставок для того, чтобы ЦПС успела обработать предыдущий фрагмент уставок к моменту прихода следующего фрагмента.
Поле Data заполняется ЦПС только в режиме сравнения уставок. В этом поле возвращаются не совпавшие уставки в виде следующих одна за другой записей. Запись о каждой не совпавшей уставке, передаваемой от ЦПС к РС, совпадает по структуре с записью об эталоном значении уставки, передаваемой от РС к ЦПС (см. выше), но в качестве значения содержит не эталонное, а фактическое значение уставки в ОБД ЦПС.
Следует обратить внимание, что в ответ на прием фрагмента уставок ЦПС может вернуть рабочей станции только результат обработки предыдущего фрагмента уставок, так как обработка каждого фрагмента уставок требует нескольких 50-миллисекундных тактов работы. Тонким местом является прием результатов обработки последнего фрагмента уставок. Для того, чтобы обеспечить прием результатов обработки последнего фрагмента уставок, сетевая задача рабочей станции применяет следующий прием:
- после передачи ЦПС последнего фрагмента уставок выдерживается пауза, достаточная для того, чтобы ЦПС успела обработать все уставки из этого фрагмента;
- затем посылается пустой фрагмент (содержащий только заголовок с полем nSettings=0); пустой фрагмент не требует многотактовой обработки на ЦПС, его единственное назначение _ дать возможность ЦПС прислать результат обработки последнего фрагмента уставок.
Работа с уставками на ЦПС
ЦПС принимает от рабочей станции фрагменты уставок, передаваемые спомощью сетевой функции SendCommand(), и осуществляет их обработку. После приема каждого фрагмента уставок на рабочую станцию возвращается:
1) в режиме записи уставок:
- при возникновении какой-либо ошибки при приеме фрагмента уставок или при записи уставок _ код ошибки;
- при отсутствии ошибок _ структуру типа _ReturnSettings;
2) в режиме сравнения уставок:
- при возникновении какой-либо ошибки при приеме фрагмента уствок или при чтении текущего значения уставки _ код ошибки;
- при отсутствии ошибок _ структуру типа _ReturnSettings, в которой в поле Data записаны фактические значения всех уставок, эталонные значения которых были присланы с РС в предыдущем фрагменте уставок и не совпали с фактическими значениями в ОБД (поле Data будет пустым, если все значения совпали).
Для осуществления обработки принятого фрагмента уставок и параллельного приема следующего фрагмента уставок сетевая задача ЦПС имеет два буфера для хранения фрагментов уставок. Структуру каждого из этих буферов описывает тип _AcceptedSettings, декларированный в файле SETTINGS.H.
К моменту приема следующего фрагмента уставок на ЦПС должен быть свободен один из буферов для приема фрагментов. После записи принятого фрагмента уставок в свободный буфер сетевая задача ЦПС проверяет, свободен ли второй буфер. Для того чтобы избежать "накопления" необработанных уставок к моменту приема следующего фрагмента уставок сетевая задача должна успеть обработать все оставшиеся уставки во втором буфере и все уставки из только что принятого фрагмента. Поэтому если второй буфер к моменту приема очередного фрагмента уставок не свободен, сетевая задача ЦПС "заказывает" сетевой задаче РС задержку перед выдачей следующего фрагмента уставок. Эта задержка заказывается равной времени обработки оставшихся уставок во втором буфере плюс 1 запасной 50-миллисекундный такт. Значение этой задержки сообщается рабочей станции с помощью поля Delay структуры ответа _ReturnSettings (см. выше).
Сетевая задача ЦПС обрабатывает в 50-миллисекундном такте одну уставку из принятого фрагмента уставок. Обработка принятой уставки означает:
1) в режиме записи уставок:
- определение местоположения уставки в ОБД по ее символьному идентификатору;
- запоминание местоположения уставки и ее эталонного (принятого от РС) значения в специальном массиве подготовленных к записи уставок;
2) в режиме сравнения уставок:
- запрос фактического значения уставки по ее символьному идентификатору;
- сравнение фактического значения уставки с эталонным и, в случае насовпадения, добавление записи о не совпавшей уставке в поле UncmpData буфера, хранящего обрабатываемоый фрагмент уставок.
Обработка одной уставки занимает приблизительно 1.8 мс.
Сетевая задача ЦПС имеет буфер, служащий для хранения подготовленных к записи уставок. Записи в этом буфере имеют фиксированный размер. Структуру записи описывает тип _SettingForWrite, декларированный в файле SETTINGS.H.
Когда ЦПС принимает от РС последний фрагмент уставок или фрагмент, содержащий последние уставки текущего типа, после завершения обработки этого фрагмента в режиме записи уставок выполняется собственно запись. Запись выполняется на следующем 50-миллисекундном такте после обработки последней уставки из этого фрагмента.
Запись в ОБД 120 подготовленных к записи уставок занимает приблизительно 3.5 мс. Поскольку в режиме основной работы в ОБД ЦПС могут записываться только несколько уставок, значения которых были изменены оператором, время, которое затрачивает сетевая задача ЦПС на обработку уставок в такте основной работы, не превышает 2 мс.
Программные средства работы с уставками
Для работы с уставкими как на рабочей станции, так и на ЦПС существует класс TSettings, декларированный в файле SETTINGS.CPP. Файл SETTINGS.CPP (и соответствующий ему заголовочный файл SETTINGS.H) содержит операторы условной компиляции, определяющие тип вычислительного средства, для которого компилируется сетевая задача. Класс TSettings содержит функции работы с уставками и необходимые для работы с уставками данные.
Всем кодам ошибок, которые могут возникнуть при выполнении операций с уставками, присвоены мнемонические имена. Все они декларированы в файле SETTINGS.H и имеют префикс SET_.
Константа, определяющая максимальное количество уставок, которые могут передаваться в одном фрагменте, называется SET_IN_PACKAGE и также декларирована в файле SETTINGS.H. Она равна 10.
Сетевая задача рабочей станции оперирует единственным экземпляром объекта типа TSettings. Глобальный указатель на него декларирован как TSettings far* UstSend в файле глобальных пользовательских деклараций исполнительной системы КОРУНД FUNC\DATEARC.H.
Сетевая задача рабочей станции (а точнее функция SA_LVS30(), расположенная в файле SA_LVS.CPP) вызывает метод UstSend->SendPortion() в каждом 0-миллисекундном такте работы. Тем самым обеспечивается фоновая работа с уставками (вывод сообщений об откорректированных пользователем уставках, передача фрагментов уставок на ЦПС, прием ответа от ЦПС и пр.).
Обзор данных класса
Класс TSettings содержит данные, необходимые для:
сообщения другим программным модулям своего состояния;
поддержки указанной другими программными модулями операции над уставками;
поиска необходимой информации в файле USTAVKI.DBF;
формирования фрагментов уставок для отправки на ЦПС;
приема ответа от ЦПС.
Назначение некоторых данных класса TSettings понятно из комментариев в декларации класса. Более детальное описание назначения остальных приведено ниже.
Значение поля Func формируется при вызове другими программными модулями метода SendSettings(). Оно хранит код операции 1 (запись уставок) или 2 (сравнение уставок) в течение всей операции над уставками (длящейся всегда более одного 50-миллисекундного такта).
Поле FragNo используется для нумерации фрагментов уставок, отсылаемых ЦПС при выполнении операции над уставками. Оно хранит номер последнего отосланного фрагмента уставок. Благодаря нумерации фрагментов уставок сетевая задача ЦПС будет игнорировать повторный приход уже принятого фрагмента (что может произойти при повторе передачи из-за аппаратных сбоев в тракте ЛВС).
Поле Busy используется для блокировки повторного входа в функцию SendPortion(). Повторный вход может возникнуть в многозадачной среде исполнительной системы КОРУНД, если функция SendPortion() не успеет выполнить необходимую последовательность операций с файлом USTABKI.DBF за 50 мс.
Поле SearchNextSettings служит для хранения признака того, что функция SendPortion() за один вызов не завершила формирование фрагмента уставок для отправки ЦПС. Такая ситуация может возникнуть, когда вызвана операция передачи в ЦПС только измененных уставок. Функция SendPortion() имеет ограничение на количество записей файла USTAVKI.DBF, просматриваемых в течение одного вызова. Это сделано во избежание длительной, более 50 мс, работы данной функции, что нежелательно, т.к. ее вызовы следуют каждые 50 мс. Поэтому за один вызов она может не найти ни одной измененной уставки, либо найти их недостаточно для эффективной упаковки фрагмента уставок, и в этом случае в поле SearchNextSettings будет записано значение 1.
Поле Found используется при выполнении операции записи уставок в ОБД ЦПС. Когда обнаруживается хотя бы одна уставка, подлежащая отправке, в это поле записывается значение 1. Если после завершения поиска подлежащих отправке уставок поле Found содержит 0, в поле SendStatus записывается код, означающий «подлежащие отправке уставки не обнаружены».
Поле FoundNotEqual используется при выполнении операции сравнения уставок. Оно принимает значение 1, если обнаружена хотя бы одна не совпавшая с эталоном уставка хотя бы в одном канале ЦПС. В зависимости от этого поля при завершении операции сравнения уставок формируется обобщенное технологическое сообщение «Уставки сравнились» или «Уставки не сравнились».
Массив байтов Buffer используется для формирования фрагмента уставок. В этот же масив помещается ответ, принятый от ЦПС. Поле Head содержит указатель на начало этого буфера, приведенный к типу TSettingsHeader far*. Поля Offs и BufSize используются компонентной функцией GetRecord() для работы с буфером Buffer.
Значение поля CurPPS формируется при вызове другими программными модулями метода SendSettings. Оно хранит логический номер ЦПС, для которого выполняется операция над уставками. Значение поля UstType хранит код типа передаваемых уставок.
Поле RecBefore служит для запоминания номера записи файла USTAVKI.DBF перед началом операции над уставками и его последующего восстановления после ее завершения.
Обзор функций класса
Функция Reset() служит для приведение данных класса в исходное состояние перед началом очередной операции над уставками.
Конструктор TSettings() выполняет приведение данных класса в исходное состояние путем вызова функции Reset(). Кроме того, он запоминает в поле dbf переданный в качестве аргумента указатель на объект типа DataBase, который используется для работы с файлом USTAVKI.DBF.
Функция GetRecord() служит для поиска следующей записи в буфере Buffer, разбора ее на составные части (код типа элемента ОБД, идентификатор и значение) и их возврата вызывающей функции. Эта функция вызывается в режиме сравнения уставок при обработке ответа ЦПС.
Функция SameGroup() служит для проверки текущей записи файла USTAVKI.DBF на предмет выяснения, описывает ли она уставку для ЦПС с указанным логическим номером и с указанным типом (если указан тип 0, тип уставки в текущей записи файла считается подходящим без проведения проверки). Эта функция также может возвратить тип уставки в текущей записи файла (если указать третий аргумент при вызове). Данная функция возвращает 1, если текущая запись файла USTAVKI.DBF сответствует указаному ВС и типу уставок.
Функция SameGroup() вызывается другими функциями класса при просмотре записей об уставках, сответствующих указанному ВС и типу уставок с целью определения, что уже все такие записи в файле USTAVKI.DBF просмотрены.
Функция FindRecord() ищет в файле USTAVKI.DBF необходимую запись начиная с указанного номера записи. В случае обнаружения указанной записи функция возвращает ее номер, иначе _ значение -1.
Ее первое назначение _ поиск первой записи, описывающей уставку, подлежащую передаче указанной ЦПС. С этой целью она вызывается из функций TechMessages() и SendSettings(). При этом указывается поиск с нулевой (т.е. первой по порядку) записи, логический номер ЦПС и код типа уставок. Четвертый и пятый аргумент передаются по умолчанию и поэтому в теле функции игнорируются.
Второе назначение функции FindRecord() _ поиск в файле USTAVKI.DBF записи, описывающей уставку с указанным идентификатором для указанной ЦПС. С этой целью она вызывается из функции AcceptNotEqual() для поиска записи об уставке, значение которой в ОБД ЦПС не совпало с эталоным. При этом в качестве первого аргумента ей передается значение поля FirstRec, которое формируется функцией SendSettings() в начале операции с уставками, а код типа уставки передается нулевым и на поиск записи не влияет. Явно передаются четвертый и пятый параметры: в качестве четвертого передается строка «ID» (имя поля «Идентификатор уставки» в файле USTAVKI.DBF), а в качестве пятого _ идентификатор уставки, запись о которой необходимо найти.
Функция SendSettings() служит для инициирования процесса передачи уставок. Эта функция является интерфейсной и из других функций класса TSettings не вызывается. В качестве аргументов она принимает:
- LogNumPPS _ логический номер ЦПС, которой передаются уставки;
- UstType _ код типа уставок (0 - уставки всех типов);
- Func _ код функции (1 - запись в ОБД ЦПС, 2 - сравнение со значениями в ОБД ЦПС);
- SendAll _ признак передачи всех уставок (0 - передача только измененных).
Данная функция выполняет следующие действия:
- вызывает функцию Reset() для подготовки данных класса к началу операции с уставками;
- вызывает функцию FindRecord() для поиска первой записи, описывающей подлежащую передаче уставку, и запоминает номер найденной записи в поле FirstRecord; если запись не найдена, констатирует соответствующую ошибку и прекращает операцию над уставками;
- устанавливает поле Status в значение 2 («идет передача уставок»);
- запоминает код операции, логический номер ЦПС, тип уставок, признак отсылки всех уставок в сответствующих полях класса;
- если указана операция сравнения уставок в ОБД ЦПС с эталонными значениями _ устанавливает поле Status в значение 4 («идет подготовка к сравнению уставок»), делает в файле USTAVKI.DBF текущей запись с номером FirstRec и завершает работу;
- если указана операция записи уставок в ОБД ЦПС _ вызывает функцию SendPortion(), указывая ей в качестве аргумента признак формирования первого фрагмента уставок.
Функция FindNextSettings() служит для поиска в файле USTAVKI.DBF (начиная с текущей записи) уставок, подлежащих передаче ЦПС. Ее единственным аргументом является признак формирования первого фрагмента уставок (по умолчанию он равен 0).
На действия данной функции оказывает влияние поле SearchNextSettings. Если оно равно 0, функция формирует заголовок фрагмента уставок и сбрасывает в 0 количество уставок во фрагменте (поле класса nInFragment). В противном случае формирование предыдущего фрагмента уставок не является законченным и данная функция продолжает его формирование. Такое построение функции FindNextSetings() обусловлено тем, что эта функция имеет ограничение на количество записей файла USTAVKI.DBF, просматриваемых в течение одного вызова. Это сделано во избежание длительной, более 50 мс, работы данной функции, что нежелательно во избежание переполнения 50-миллисекундного такта работы РС. Поэтому за один вызов она может не найти ни одной подлежащей передаче на ЦПС уставки, либо найти их недостаточно для эффективной упаковки фрагмента уставок. В этом случае по завершению данной функции формирование фрагмента уставок будет не закончено, а в поле SearchNextSettings будет записано значение 1.
Функция FindNextSettings() содержит цикл просмотра записей файла USTABKI.DBF. Количество просмотренных записей хранится в переменной i. Для контроля конца файла номер текущей записи сравнивается с количеством записей в файле. Для проверки, что текущая запись соответствует указанной ЦПС и указанному типу уставок, используется описанная выше функция SameGroup().
В режиме проверки уставок в ОБД ЦПС обрабатываются все найденные записи.
В режиме записи уставок в ОБД ЦПС при сброшенном признаке SendAll обрабатываются только те записи файла USTAVKI.DBF, в которых содержимое поля CUR_VALUE не совпадает с содержимым поля NEW_VALUE, т.е. в которые пользователь ввел новое значение уставки.
В режиме записи уставок в ОБД ЦПС формирование фрагмента уставок завершается, если в нем есть хотя бы одна уставка, а в файле USTAVKI.DBF начались записи о другом типе уставок. При этом в заголовке формируемого фрагмента уставок устанавливается признак WriteNow. Благодаря этому при записи уставок на ЦПС в одном 50-миллисекундном такте не могут записываться уставки различных типов.
Обработка записи файла USTAVKI.DBF включает следующие действия:
- извлечение из поля "OBD_TYPE" кода типа элемента ОБД;
- преобразование значения, извлеченного из поля CUR_VALUE, из символьного вида в двоичный с учетом кода типа элемента ОБД;
- извлечение идентификатора уставки из поля ID;
- формирование очередной записи об уставке в буфере Buffer;
- проверка размера формируемого фрагмента уставок: если сформированная запись делает его больше максимально допустимого, сформированная запись игнорируется и ее повторное формирование автоматически переносится на следующий вызов функции FindNextSettings() (т.к. при этом не производится перемещение на следующую запись файла USTAVKI.DBF);
- проверка количества уставок в формируемом фрагменте: если оно достигло SET_IN_PACKAGE, формирование фрагмента завершается.
Функция FindNextSettings() устанавливает в заголовке формируемого фрагмента уставок признак WriteNow, если обработаны все уставки текущего типа или если сформирован последний фрагмент уставок.
Функция FindNextSettings() обеспечивает после отсылки последнего фрагмента уставок выполнение задержки, достаточной для того, чтобы ЦПС успела обработать все посланные ей уставки. Для этого в поле Delay записывается задержка величиной в SET_IN_PACKAGE+1, инкрементируется поле LastSended и после этого функция FindNextSettings() возвращает значение 2, означающее "требуется подождать перед завершающей посылкой". Благодаря этому функциия SendPortion() после отсылки последнего фрагмента уставок не будет выполнять никаких действий в течение SET_IN_PACKAGE+1 тактов. После этого функция SendPortion() вновь вызовет функцию FindNextSettings(). Она при этом не найдет больше ни одной подлежащей отправке уставки в файле USTAVKI.DBF и, проанализировав значение поля LastSended, сформирует пустой фрагмент уставок (только заголовок, в котором поле nSettings = 0). При следующевм вызове функция FindNextSettings() вернет значение 1, означающее "больше нет уставок".
Функция SendPortion() управляет выполнением операций над уставками в текущем 50-миллисекундном такте. Ее работа зависит от кода текущего состояния объекта типа TSettings, который хранится в поле Status.
При Status = 0 (успешная передача) никаких действий не выполняется.
Если Status не равен 0, функция проверяет поле result, в которое сетевая функция SendCommand() помещает код завершения посылки ЦПС фрагмента уставок. Если он равен FFFFh (операция не завершена), функция завершается. Если он не равен 0, функция SendPortion() записывает в поле Status значение 1 (передача завершена с ошибкой) и копирует поле result в поле SendStatus (для сообщения о причинах ошибки) и завершает работу.
При Status = 2 (идет передача уставок на ЦПС) функция проверяет содержимое поля Delay, и, если оно не нулевое, декрементирует его и завершает работу. Тем самым выполняется задержка отсылки следующего фрагмента уставок, которая может быть "заказана" ЦПС или установлена функцией FindNextSettings().
Если задержка истекла или не была установлена, проверяется наличие в буфере Buffer ответа ЦПС на предыдущий фрагмент уставок. Сетевая функция SendCommand() после завершения помещает в буфер Buffer ответ ЦПС, а в поле pr_return _ размер этого ответа в байтах. Если ответ принят, из его заголовка извлекается "заказанная" ЦПС задержка отсылки следующего фрагмента уставок и копируется в поле класса Delay. Вычисляемые затем значения полей MinDelay и MaxDelay используются только для печати отладочного технологического сообщения.
Затем, если текущей операцией является сравнение уставок, функция SendPortion() вызывает функцию AcceptNotEqual(). Эта функция обрабатывает присланные ЦПС текущие значения несовпавших уставок.
После этого функция SendPortion() переходит к формированию следующего фрагмента уставок и вызывает для этого описанную выше функцию FindNextSettings().
Если функция FindNextSettings() возвращает значение 2 (требуется подождать перед завершающей посылкой) или 3 (формирование фрагмента не закончено), работа функции SendPortion() на этом завершается.
Если функция FindNextSettings() возвращает 1 (послали все уставки), дальнейшие действия функции SendPortion() зависят от вида текущей операции над уставками:
- если производится сравнение уставок в ОБД ЦПС с эталонными значениями, формируется технологическое сообщение "Запрошены уставки из канала <номер канала>". Затем производится перемещение в файле USTAVKI.DBF на запись с номером FirstRec. После этого проверяется текущий номер канала ЦПС (он содержится в поле nk). Если проверены уставки во всех трех каналах ЦПС, полю Status присваивается значение 6 и работа функции завершается. В противном случае повторяется инициирование передачи уставок, но уже для следующего канала ЦПС. Для этого вызывается функция SendPortion() с признаком формирования первого фрагмента уставок;
- если производится запись уставок в ОБД ЦПС, функция проверяет, была ли отослана хотя бы одна уставка, анализируя поле Found. Если была, полю Status присваивается значение 5, если нет _ значение 1 и в поле SendStatus записывается код ошибки "нет уставок для передачи".
Если функция FindNextSettings() возвращает 0 (сформирован очередной фрагмент), производится вызов сетевой функции SendCommand() для передачи фрагмента уставок ЦПС.
При Status = 4 (идет подготовка к сравнению уставок) производится вызов функции ResetChannelValues(). Если она возвращает значение 0 (подготовлены к сравнению все уставки), полю Status присваивается значение 2 и таким образом на следующем такте будет начата передача уставок каналу 1 указанной ЦПС.
При Status = 5 (идет запрос результатов передачи уставок) производится вызов сетевой функции SendCommand() для передачи сетевой задаче текущего канала ЦПС команды "верни код завершения записи уставок". Только когда такая команда послана всем трем каналам ЦПС и получены нулевые коды завершения, констатируется успешное завершение записи уставок в ОБД ЦПС. При получении ненулевого кода завершения констатируется ошибка записи уставок в канале nk.
При Status = 6 (идет формирование технологических сообщений о не совпавших уставках) производится вызов функции NotEqualMessages(). Если она возвращает значение 0 (cформированы все сообщения), полю Status присваивается значение 0 и на этом завершается процесс сравнения уставок в ОБД ЦПС с эталонными значениями.
При Status =7 (идет формирование технологических сообщений об измененных уставках) производится вызов функции NextTechMessages(). Если она возвращает значение 0 (cформированы все сообщения), полю Status присваивается значение 0.
Функция ResetChannelValues() служит для начальной установки значений в полях VALUE_A, VALUE_B, VALUE_C файла USTAVKI.DBF, что выполняется перед проведением проверки значений уставок в ОБД ЦПС. Эта функция копирует содержимое поля CUR_VALUE в поля VALUE_A, VALUE_B, VALUE_C во всех записях, описывающих уставки ЦПС, для которой выполняется сравнение уставок. Данная функция за один вызов обрабатывает количество записей, не превышающее значение локальной переменной max. Если обработаны все записи, данная функция возвращает значение 0, иначе _ 1.
Результатом работы этой функции является то, что перед началом сравнения всем уставкам "присваивается статус" совпадающих во всех каналах ЦПС с эталонными значениями.
Функция AcceptNotEqual() служит для обработки ответа ЦПС в режиме сравнения уставок. Как уже упоминалось, ответ ЦПС имеет структуру _ReturnSettings и помещается в буфер Buffer. Размер ответа ЦПС помещается в поле pr_return. Ответ ЦПС может содержать:
только заголовок (если все уставки во фрагменте совпали с эталонными значениями);
заголовок и описатели не совпавших уставок.
В первом случае данная функция сразу завершает работу. Во втором функция входит в цикл извлечения записей из буфера и их обработки. Для извлечения каждой записи используется описанная выше функция GetRecord().
Обработка каждой записи о не совпавшей уставке производится следующим образом:
- c помощью описанной выше функции FindRecord() производится поиск в файле USTAVKI.DBF записи об этой уставке по ее идентификатору;
- производится преобразование фактического значения уставки в символьный вид с учетом признака шестнадцатиричного значения (хранящегося в поле HEX файла USTAVKI.DBF);
- производится запись фактического значения уставки в поле, соответствующее текущему номеру канала ЦПС: для канала 1 _ VALUE_A, для канала 2 _ VALUE_B, для канала 3 _ VALUE_C.
Функция NotEqualMessages() служит для формирования технологических сообщений по результатам сравнения уставок с эталонными значениями во всех трех каналах ЦПС. Данная функция производит просмотр в цикле записей об уставках для текущей ЦПС и сравнение содержимого полей VALUE_A, VALUE_B и VALUE_C с содержимым поля CUR_VALUE. Несовпадение хотя бы одного из них означает, что в соответствующем канале ЦПС значение соответствующей уставки не совпало с эталонным. При обнаружении хотя бы одного несовпадения в рассматриваемой записи функция формирует технологическое сообщение вида: <идентификатор уставки> ожидалось: <эталонное значение> к.1: <значение в канале 1> к.2: <значение в канале 2> к.3: <значение в канале 3>.
При обнаружении хотя бы одного не совпадения данная функция формирует обобщенное технологическое сообщение "Уставки не сравнились", иначе _ "Уставки сравнились".
Данная функция за один вызов обрабатывает не более 2*SET_IN_PACKAGE записей. Если обработаны все записи, данная функция возвращает значение 0, иначе _ 1.
Функция TechMessages() служит для инициирования процесса формирования технологических сообщений об измененных уставках. Эта функция является интерфейсной и из других функций класса TSettings не вызывается.
Данная функция выполняет следующие действия:
- запоминает логический номер ЦПС и тип уставок, принятые в качестве параметров, в сответствующих полях класса;
- вызывает функцию FindRecord() для поиска первой записи, соответствующей уставке указанного типа для указанной ЦПС, и запоминает номер найденной записи в поле FirstRecord; если запись не найдена, прекращает операцию;
- устанавливает поле Status в значение 7 («идет формирование сообщений об измененных уставках»);
Функция NextTechMessages() производит формирование технологических сообщений об измененных уставках. Эта функция выводит технологическое сообщение вида <идентификатор уставки> <текущее значение> <новое значение> для тех уставок, для которых в файле USTAVKI.DBF содержимое поля CUR_VALUE не совпадает с содержимым поля NEW_VALUE. Кроме того, при обнаружении измененных уставок следующего типа формируется сообщение вида: ЦПС <название ЦПС>, тип уставок <название типа уставок>.
Данная функция за один вызов обрабатывает не более 2*SET_IN_PACKAGE записей. Если обработаны все записи, данная функция возвращает значение 0, иначе _ 1.
Сетевая задача ЦПС содержит единственный объект типа TSettings. Он декларирован в файле SA_LVS.CPP следующим образом: TSettings Sets.
Сетевая задача ЦПС (а точнее функция SA_LVS32(), расположенная в файле SA_LVS.CPP) вызывает метод Sets.ProcessSettings() в каждом 50-миллисекундном такте работы. Тем самым обеспечивается работа с уставками в каждом 50-миллисекундном такте.
Метод Sets.FrameProcessor() вызывает функция ProcSZAcommand(), которая служит для обработки данных, переданных с другого ВС сетевой функцией SendCommand().
Обзор данных класса
Класс TSettings содержит данные, необходимые для:
хранения информации о собственном состоянии;
хранения принятых фрагментов уставок и описателей не совпавших при сравнении уставок;
хранения подготовленных к записи в ОБД уставок.
Поле Status хранит код ошибки, произошедшей при выполнении операции с уставками, или 0, если ошибок нет. При возникновении любой ошибки в процессе выполняемой операции над уставками эта операция прекращается. При этом поле Status запоминает код ошибки. Это поле сбрасывается в 0 только когда рабочая станция начнет новую операцию с уставками.
Поле FragNo используется для хранения номера последнего принятого от РС фрагмента уставок при выполнении текущей операции над уставками. Благодаря нумерации фрагментов уставок сетевая задача ЦПС будет игнорировать повторный приход уже принятого фрагмента (что может произойти при повторе передачи из-за аппаратных сбоев в тракте ЛВС).
Поле Buffer, являющееся массивом из двух элементов типа _AcceptedSettings, служит для хранения обрабатываемого фрагмента уставок и приема следующего фрагмента уставок. Пояснение было приведены выше, при описании работы с уставками на ЦПС.
Поле CurBuf хранит номер буфера (0 или 1), который в данный момент обрабатывается. Второй буфер, имеющий номер !CurBuf, используется для приема следующего фрагмента уставок.
Поле WriteNow является признаком, что на ближайшем такте необходимо произвести запись подготовленных уставок в ОБД. Этот признак устанавливается, если такой же признак будет установлен в заголовке фрагмента уставок, принятого от рабочей станции, а также если при обработке будет заполнен до конца массив подготовленных к записи уставок.
Массив SetReady хранит подготовленные к записи уставки (пояснение было приведены выше, при описании работы с уставками на ЦПС), а поле nSettings _ их количество. После выполнения записи уставок в ОБД поле nSettings сбрасывается в 0.
Обзор функций класса
Функция GetRecord() служит для поиска следующей записи текущем элементе массива Buffer, разбора ее на составные части (код типа элемента ОБД, идентификатор и значение) и их возврата вызывающей функции. Если достигнут конец буфера, данная функция возвращает 2, иначе _ 0. Когда из буфера извлекается последняя запись, данная функция проверяет, не установлен ли в заголовке текущего буфера признак WriteNow, и, если установлен, устанавливает в 1 поле класса WriteNow.
Функция ProcessSettings() выполняет действия с уставками на текущем 50-миллисекундном такте. В зависимости от содержимого поля WriteNow она выполняет:
- при WriteNow = 1 _ запись подготовленных уставок в ОБД с последующим сбросом значения WriteNow в 0. Битовые уставки записываются с помощью функции PutBits(), остальные копируются байтом или словом или двойными словами, в зависмости от размера;
- при WriteNow = 2 _ обработку следующей принятой уставки. Для этого вызывается функция ProcessNextSettings(). После ее выполнения проверяется, остались ли еще уставки в текущем буфере. Если текущий буфер полностью обработан, производится "переключение" текущего буфера и второго буфера путем инвертирования поля CurBuf.
При одном вызове (т.е. на одном 50-миллисекундном такте) функция ProcessSettings() выполняет или только обработку следующей уставки (что занимает не более 2 мс) или только запись подготовленных уставок в ОБД (что занимает не более 3.5 мс).
Функция ProcessNextSettings() выполняет обработку очередной принятой уставки. Для ее поиска в текущем буфере вызывается функция GetRecord(). Дальнейшие действия зависят от вида текущей операции над уставками:
- при сравнении уставок по символьному идентификатору уставки извлекается фактическое значение уставки. Для этого используется функция GetCurValue(). Затем фактическое значение побайтно сравнивается с эталонным. В случае несовпадения в поле UncmpData текущего буфера формируется следующая запись о не совпавшей уставке и соответствующим образом увеличивается значение поля UncmnSize текущего буфера;
- при записи уставок выполняется подготовка обрабатываемой уставки к записи. Для этого по символьному идентификатору уставки определяется ее местоположение в ОБД. Для этого используется функция getLocation(). Затем в массив SetReady добавляется запись об этой уставке и инкрементируется поле nSettings. Если после этого nSettings достигнет максимального количества подготовленных к записи уставок (константа SET_WRITE_ONCE), устанавливается в 1 признак WriteNow.
Функция ProcessNextSettings() может в процессе работы констатировать ошибку чтения уставки из ОБД или ошибку записи уставки в ОБД (а точнее, ошибку определения ее местоположения в ОБД). При этом соответствующий код будет записан в поле Status.
Функция FrameProcessor() выполняет обработку принятого от РС фрагмента уставок и инициирует возврат на РС результатов обработки предыдущего фрагмента уставок. Она имеет два аргумента, которые ей передает сетевая функция SendCommand():
frame _ адрес принятого массива байтов; по этому же адресу записывается ответный массив;
ReturnSize _ указатель на слово, при входе содержащее размер принятого массива в байтах, а при выходе _ размер сформированного ответа в байтах.
Ненулевое значение, возвращаемое данной функцией, транспортируется сетевой функцией SendCommand() обратно на рабочую станцию в качестве кода завершения. Тем самым обеспечивается уведомление рабочей станции об ошибке приема фрагмента уставок.
Работа данной функции начинается с проверки активности режима восстановления канала данной ЦПС (ЦПС). При активности режима восстановления хотя бы в одном канале операции с уставками запрещены и формируется соответствующий код состояния. Для проверки используются глобальные указатели ptrSy_TabSy_Mode1, ptrSy_TabSy_Mode2, ptrSy_TabSy_Mode3. Эти указатели настраиваются при запуске сетевой задачи ЦПС (ЦПС) функцией ConnectToOBD() и указывают на байтовые признаки режима восстановления в каналах, расположенны в ОБД и имеющие идентификаторы Sy_TabSy.Mode1, Sy_TabSy.Mode2, Sy_TabSy.Mode3.
Затем функция FrameProcessor() проверяет признак Restart в заголовке принятого фрагмента уставок. Если он установлен, вызывается функция Reset(), приводящая данные класса в исходное состояние. Тем самым осуществляется подготовка к началу новой операции над уставками.
После этого производятся необходимые проверки номера фрагмента уставок и наличия свободного буфера для приема. Обнаружение ошибки приводит к прекращению операции над уставками.
Принятый фрагмент копируется в свободный приемный буфер. Следует обратить внимание, что копирование принятого фрагмента в этот буфер не удаляет накопленную в его поле UncmpData информацию о не сравнившихся уставках. Если такая информация там есть (о чем свидетельствует ненулевое значение UncmpSize), то она копируется в буфер возврата данных рабочей станции и после этого соответствующим образом увеличивается значение слова по адресу ReturnSize.
Функция FrameProcessor() формирует в заголовке ответа, возвращаемого рабочей станции, требуемое значение задержки перед отсылкой следующего фрагмента уставок. необходимость и величина этой задержки обоснована выше, при описании работы с уставками на ЦПС.
3.3.3 Обмен данными между ОБД и ЛВС на вычислительных средствах типа “рабочая станция”
Вычислительные средства типа “рабочая станция” не имеют каналов резервирования и не связаны напрямую с датчиками и с исполнительными механизмами. На таких вычислительных средствах не выполняется ОМК и отсутствует штатная задача сканирования входов/выходов. Поэтому описанные выше интерфейсные вызовы сетевой задачи не используются на вычислительных средствах типа “рабочая станция”.
Как и на вычислительных средствах “ЦПС”, на вычислительных средствах типа “рабочая станция” сетевая задача функционирует в тактированном режиме с тактом 50 мс. Тактирование осуществляется посредством приема из ЛВС и соответствующей обработки кадров синхрометок, которые ЦПС выдает во все подключенные к нему ЛВС в начале каждого 50-миллисекундного такта.
Все действия, связанные с обменом данными между сетевыми буферами и ОБД, производятся один раз в каждом 50-миллисекундном такте, при обработке события “прием синхрометки из ЛВС”.
Факт приема синхрометки из ЛВС фиксируется модулями поддержки ЛВС. Это действие выполняет функция Dispetcher().
Для выполнения на вычислительных средствах типа “рабочая станция” всех действий, связанных с передачей принятых данных в ОБД и подготовкой выходных данных к выдаче, служит функция FromNetAndToNet(), расположенная в файле SA_LVS.CPP.
Функция FromNetAndToNet() выполняет следующие действия:
1) вызывает описанную ниже функцию FromNetBuffersToOBD(), реализующую передачу всех принятых из сети данных в ОБД;
2) вызывает функцию подготовки выходных данных текущего такта к выдаче в сеть SA_LVS30() (эта функция описана в п. Ошибка! Источник ссылки не найден.).
Функция FromNetBuffersToOBD() передает принятые из сети данные в ОБД без выравнивания между каналами. Она выполняет действия, которые на вычислительных средствах типа “ЦПС” и “ЦПС” реализуют функции SA_LVS31() и SA_LVS32().
В начале работы функция FromNetBuffersToOBD() вызывает функцию NextTactCNT(). Благодаря этому при передаче содержимого принятых блоков в ОБД будет использоваться обновленное (по сравнению с предыдущим тактом) эталонное значение сторожевых счетчиков сигналов.
Затем функция FromNetBuffersToOBD() присваивает значение 0 глобальному признаку forOMK и производит извлечение всех принятых данных из входных сетевых буферов и их немедленную обработку. Как и в функции SA_LVS31(), для этого производится вызов функции Dispetcher() с передачей ей в качестве аргумента кода команды “извлечение всех принятых данных из входного сетевого буфера”. Как и при вызове из функции SA_LVS31(), функция Dispetcher() для каждого принятого блока вызывает функцию TakeBlock(), однако, в отличие от вызова из функции SA_LVS31() обработку принятых данных функция TakeBlock() производят немедленно, т. к. forOMK = 0.
После этого функция FromNetBuffersToOBD() выполняет те же действия по завершению обработки принятых из сети данных, что и функция SA_LVS32():вызывает функции ResetGuards(), SwitchTBtables(), proc_zpr().
Перед завершением работы функция FromNetBuffersToOBD() производит пометку в таблице принятых на текущем такте данных всех блоков как успешно выравненных. Это действие имеет условный характер и служит для того, чтобы на следующем такте функция SA_LVS30() могла организовать дальнейшую передачу принятых транзитных блоков (если таковые описаны в ОБД рабочей станции и приняты ею на текущем такте).
Внутренние функции взаимодействия сетевой задачи с ОБД
Функция определения адреса дескриптора блока
Эта функция называется BlkDescrAddress() и расположена в файле BLOCKS.CPP. Принимает два параметра: SrcLogNum - логический номер ВС, для которого блок является собственным, и BlkLogNum - логический номер блока. Возвращает адрес дескриптора блока.
Поиск дескриптора блока производится по таблицам описания блоков, рассмотренным в [4].
Вначале данная функция ищет в главной таблице описания блоков запись, соответствующую ВС с логическим номером, равным SrcLogNum. Если такая запись найдена, функция BlkDescrAddress() извлекает из нее адрес таблицы описания блоков данного ВС. В этой таблице (которая является позиционной, т.е. номер элемента соответствует логическому номеру блока) проверяется на нуль элемент с номером BlkLogNum. Если он ненулевой, то представляет собой адрес дескриптора блока, который и возвращается функцией BlkDescrAddress().
В случае, если указанный блок не будет обнаружен в таблицах описания блоков, функция BlkDescrAddress() вернет значение NULL.
Функция ускоренного определения адреса дескриптора блока
Эта функция называется SmartBlkDescrAddress() и расположена в файле BLOCKS.CPP. Она имеет такие же параметры и возвращает такое же значение, как и функция BlkDescrAddress().
Данная функция имеет два функциональных назначения: ускоряет поиск дескриптора блока (для принимаемых в каждом такте блоков) и заполняет таблицу принятых на текущем такте блоков, используемую функцией сброса сторожевых счетчиков сигналов ResetGuards().
Функция SmartBlkDescrAddress() производит поиск в таблице принятых на предыдущем такте блоков (глобальный указатель на нее - prevTB) блока с указанными логическими номерами. Если блок найден, адрес его дескриптора берется из соответствующего поля элемента таблицы принятых на текущем такте блоков. Если не найден - адрес дескриптора блока определяется с помощью функции BlkDescrAddress().
Если указанный блок обнаружен в ОБД, данная функция регистрирует его в новом элементе таблицы принятых на текущем такте блоков.
Функция имитации содержимого блока
Эта функция называется ImitBlock() и расположена в файле BLOCKS.CPP.
Используется эта функция для реализации режима имитации на уровне блоков. Функция ImitBlock() использует глобальный массив имитации блоков _BI и количество блоков в этом массиве _nBI.
Функция производит поиск указанного блока в глобальном массиве имитации блоков. Поиск производится по логическому номеру ВС, для которого блок является собственным, и логическому номеру блока, которые извлекаются из заголовка блока. Если такой блок найден, функция возвращает адрес его имитируемого тела в массиве имитации. Причем если бит статуса блока в массиве имитации равен 0, возвращается адрес тела блока, содержащего максимальные значения составных частей, если равен 1 - адрес тела блока, содержащего минимальные значения составных частей.
Одновременно производится подсчет количества обращений к данному блоку, и если это количество не менее содержимого глобальной переменной _TactImitation, производится инвертирование бита статуса блока.
Если указанный блок не найден в массиве имитации, функция ImitBlock() возвращает тот же адрес, который был передан ей в качестве аргумента.
3.3.4 Загрузка и вызов
Загрузка и вызов сетевой задачи на ЦПС
Сетевая задача ЦПС загружаются с электронного диска ЦПС задачей сканирования входов/выходов. Способ загрузки и вызова СЗ ЦПС одинаковы.
СЗ ЦПС представляет собой автономный модуль “NT_CPS.EXE”. Этот модули именуется в дальнейшем сетевыми модулем.
Загрузочный .EXE - модуль СЗ ЦПС загружаются в ОЗУ с электронного диска с помощью обращения к штатной функции ОС ЦПС, осуществляющей загрузку .EXE-модуля в память.
Загруженный сетевой модуль нуждается в выполнении секции инициализации. Секция инициализации загружает ОБД, инициализирует сетевую задачу и настраивает ее на загруженную ОБД.
Адрес начала секции инициализации сетевого модуля совпадает с адресом начала загруженного сетевого модуля.
Секция инициализации сетевого модуля принимает в качестве аргумента логический номер данного вычислительного средства, который передается ей на регистре CX. Этот логический номер используется для определения имени файла шаблона ОБД, загружаемого секцией инициализации с электронного диска.
Для выполнения секции инициализации сетевого модуля должны быть выполнены следующие команды:
MOV CX, <ЛогНомВС>
CALL FAR <addr>,
где: <ЛогНомВС> - логический номер данного ВС; <addr> - адрес начала сетевого модуля в ОЗУ (этот адрес возвращается функцией загрузки .EXE-модуля ОС ЦПС).
Секция инициализации сетевого модуля ЦПС возвращает на регистре AX код завершения:
0 - успешное завершение процедуры инициализации;
1 - недостаточно памяти для формирования ОБД;
2 - ошибка при чтении файла шаблона ОБД;
3 - ошибка при открытии карты ОБД;
5 - файл не является шаблоном ОБД;
6 - аппаратная ошибка чтения с электронного диска;
10 - недостаточно памяти для сетевых буферов;
11 - в ОБД не найден сетевой диагностический параметр;
12..14 - ошибка инициализации КС (только для ЦПС).
Нормальная работа сетевой задачи возможна только при нулевом коде завершения секции инициализации.
После завершения секции инициализации сетевая задача готова к работе. Дальнейшее взаимодействие сетевой задачи с задачей сканирования и с прикладной задачей осуществляется с помощью вызовов через вектор программного прерывания сетевых функций (см. [4]). Обслуживание контроллеров связи сетевая задача производит путем обработки прерываний от них.
Загрузка ОБД и сетевой задачи на рабочей станции
В каждом программно-техническом комплексе существует рабочая станция ПТК и еще одна рабочая станция, называемая сервером моделирования. Сервер моделирования служит для комплексной проверки программно-технического комплекса и реализует поддержку контрольно-проверочной аппаратуры (КПА).
Оперативная база данных для любой рабочей станции загружается перед сетевой задачей и находится резидентно в памяти. В случае необходимости ОБД может быть удалена из памяти.
На рабочей станции ПТК функционирует программное обеспечение, созданное с помощью пакета операторских станций “Корунд”. Сетевая задача на рабочей станции встраивается внутрь загрузочного модуля системы “Корунд”, и ее инициализация и выдача диагностики производится средствами пакета “Корунд”.
Сетевая задача сервера моделирования оформляется в виде резидентной .EXE-программы, запускаемой после инициализации ОБД.
Загрузка резидентной ОБД
Для формирования резидентной ОБД в ОЗУ рабочей станции служит программа “OBD.EXE”.
Программа “OBD.EXE” служит для инициализации ОБД и поддержки всех функций доступа к ОБД, описанных в [4]. Кроме того, программа “OBD.EXE” поддерживает средства отладки прикладных программ, описанные в [4], а именно: имитацию на уровне блоков и имитацию на уровне сигналов.
Файл шаблона ОБД и режим имитации указываются программе “OBD.EXE” из командной строки при ее запуске.
Ниже описаны варианты запуска программы “OBD.EXE”:
1) при запуске программы “OBD.EXE” без аргументов она выдает на экран сообщение о текущем состоянии ОБД. Это может быть:
а) “ОБД в памяти не обнаружена”;
б) “ОБД уже резидентна в памяти (_segmentOBD = <адрес>)”, где <адрес> - сегментный адрес начала ОБД, указанный в шестнадцатиричном виде;
в) “ОБД инициализирована (_segmentOBD = <адрес>). Включен режим имитации приема всех входных динамических блоков (с "мигающими" значениями сигналов) от таймера, с периодом 110 мс”;
г) “ОБД инициализирована (_segmentOBD = <адрес>). Включен режим имитации содержимого блоков (с "мигающими" значениями сигналов) по приему блоков из сети (переключение значений производится по каждому 2-му приему блока из сети)”;
д) “ОБД инициализирована (_segmentOBD = 1C06h). Включен режим имитации значений сигналов в соответствии с файлом описания значений "kp_ai.sim", от таймера, с периодом 110 мс”;
2) при запуске с аргументом /? программа “OBD.EXE” выдает справку о допустимых аргументах командной строки. Эту же справку программа “OBD.EXE” выдает при обнаружении некорректных аргументов командной строки. Ниже приведен текст выдаваемой справки:
Инициализация ОБД:
obd.exe * <файл_шаблона_ОБД> [/I=Nxx | /I=Txx | /I=Sимя.sim[,xx[,[C][W]]]
где: /I - режим имитации приема динамики;
=Nxx - имитация содержимого блоков (с "мигающими" значениями сигналов) по приему блоков из сети (переключение значений производится по каждому xx-му приему блока из сети);
=Txx - имитация приема всех входных динамических блоков (с "мигающими" значениями сигналов) с периодом xx 55-миллисекундных интервалов;
=S<имя.sim>[,xx[,[C][W]]] - имитация значений сигналов в соответствии с файлом описания значений <имя.sim>, с периодом xx 55-миллисекундных интервалов (по умолчанию xx=2);
C - признак циклической имитации;
W - признак ожидания начала имитации (сигнал SIM_TAKT).
Удаление ОБД:
obd.exe -
3) при запуске с первым аргументом “*” программа “OBD.EXE” производит инициализацию ОБД. При этом остальные аргументы задаются в соответствии со справкой, приведенной выше.
При запуске программы “OBD.EXE” с первым аргументом “*” возможна выдача сообщения “ОБД уже резидентна в памяти (_segmentOBD = <адрес>)”. Повторная инициализация резидентной ОБД не производится. Если необходимо перезагрузить ОБД, необходимо вначале удалить ее из памяти (см. ниже).
Примеры вызова программы “OBD.EXE” для инициализации ОБД:
а) OBD.EXE * obd_0207.cpy;
б) OBD.EXE * obd_2001.cpy /I=T2;
в) OBD.EXE * obd_0102.cpy /I=N1;
в) OBD.EXE * obd_0102.cpy /I=Stest.sim,2,CW.
Программа “OBD.EXE” всегда выдает сообщение о результате попытки инициализации ОБД;
4) при запуске с первым аргументом “-” программа “OBD.EXE” производит удаление ОБД из памяти. При этом возможна выдача сообщения “ОБД в памяти не обнаружена”.
Программа “OBD.EXE” всегда выдает сообщение о результате попытки удаления ОБД.
Загрузка резидентной сетевой задачи
Резидентная сетевая задача используется на сервере моделирования. Резидентная сетевая задача существует в виде загрузочного модуля “LVS.EXE”.
Сетевая задача, функционирующая на сервере моделирования, поддерживает функции сканирования входов/выходов контрольно-проверочной аппаратуры. Сканирование входов/выходов КПА по умолчанию выключено, но может быть включено при запуске программы LVS.EXE.
Программа LVS.EXE может функционировать только в том случае, если в ОЗУ сервера моделирования присутствует резидентная ОБД, в противном случае будет выдано соответствующее сообщение и сетевая задача не будет запущена.
Подобные документы
Общие характеристики и конструкция тепловой части реактора ВВЭР-1000. Технологическая схема энергоблоков с реакторами, особенности системы управления и контроля. Назначение, состав и устройство тепловыделяющей сборки. Конструктивный расчет ТВЕЛ.
курсовая работа [1,4 M], добавлен 25.01.2013Конструктивные особенности водо-водяных реакторов под давлением. Предварительный, нейтронно-физический расчет "горячего" и "холодного" реактора. Температурный эффект реактивности. Моногогрупповой расчет спектра плотности потока нейтронов в активной зоне.
курсовая работа [682,7 K], добавлен 14.05.2015Профилирование расходов по тепловыделяющим сборкам активной зоны реактора ВВЭР-1000. Определение расхода теплоносителя через межкассетные зазоры и доли тепла, перетекающего в межкассетное пространство. Расчет мощности главного циркуляционного насоса.
курсовая работа [279,9 K], добавлен 08.12.2013Предназначение и конструктивные особенности ядерного энергетического реактора ВВЭР-1000. Характеристика и основные функции парогенератора реактора. Расчет горизонтального парогенератора, особенности гидравлического расчета и гидравлических потерь.
контрольная работа [185,5 K], добавлен 09.04.2012Эффективность канальных реакторов типа РБМК. Внутреннее строение реактора. Конструкция защиты от ионизирующего излучения ректора, расчет и оценка качества монтажа защиты. Измерение мощности дозы нейтронов и гамма-излучения в центральном зале АЭС.
реферат [2,3 M], добавлен 19.07.2012Составление альбома главных принципиальных технологических схем АЭС и ее вспомогательных систем. Устройство, состав оборудования и элементы двух типов атомных реакторов: ВВЭР-1000 и РБМК-1000. Характеристика технологического режима работы системы.
методичка [2,3 M], добавлен 10.09.2013Расчет активных и реактивных нагрузок на потребителей с целью проектирования электрической сети. Оценка необходимой мощности компенсирующих устройств приемной подстанции. Выбор трансформаторов проектируемой линии. Компоновка АЭС с реакторами ВВЭР-1000.
дипломная работа [521,7 K], добавлен 18.07.2014Характеристика водо-водяного энергоблока №1 реактора ВВЭР-1000 АЭС. Функции главного циркуляционного трубопровода. Обоснование и выбор СКУ элементов и узлов. Распределение температур в горячих нитках петель, стратификация теплоносителя контуров.
курсовая работа [3,1 M], добавлен 23.12.2013Основные технико-экономические показатели энергоблока атомной электростанции. Разработка типового оптимизированного и информатизированного проекта двухблочной электростанции с водо-водяным энергетическим реактором ВВЭР-1300. Управление тяжелыми авариями.
реферат [20,6 K], добавлен 29.05.2015Особенности конструкции основного и вспомогательного оборудования Ростовской атомной электрической станции, принципы его действия. Тепловая схема энергоблока АЭС, контуры циркуляции. Технические характеристики реактора ВВЭР-1000, системы парогенератора.
отчет по практике [1,5 M], добавлен 26.09.2013