Главная страница

Диссертация на соискание ученой степени кандидата технических наук Владимирский государственный университет


Скачать 6.36 Mb.
НазваниеДиссертация на соискание ученой степени кандидата технических наук Владимирский государственный университет
Анкорzashchita-informatsii-v-telekommunikatsiyakh-asu-tp-khimicheskoi-promyshlennosti
Дата12.04.2023
Размер6.36 Mb.
Формат файлаdoc
Имя файлаzashchita-informatsii-v-telekommunikatsiyakh-asu-tp-khimicheskoi.doc
ТипДиссертация
#1055613
страница24 из 25
1   ...   17   18   19   20   21   22   23   24   25

ac/dc *24b/sa

+24B

-*■ KOHTpOlintf


idc/dc +24вла


=22св


ас® с +24bsa



KOHTppfb

Краны Датч-*и





AC/DC HI OB/2,SA


acidc +1108)12,»


dc/dc +24вла

+1108







АСФС - LWRI401, LWRJH80 DC.BC - F-MPU?5t

Рисунок 3.1. Типовая схема распределения электропитания в НТК «ПХВ-1»

Защитное заземление

Контур защитного заземления ПТК «ПХВ-1» соединяется по типу с глухозаземленной нейтралью для основного оборудования, расположенного на базовой площадке, и по типу с изолированной нейтралью для периферийных площадок. Контур защитного заземления с сопротивлением растеканию тока не более 4 Ом объединяется с рабочим заземлением на уровне распределительных коробок либо составляет общее рабочее заземление.

Типовая схема заземления шкафного оборудования в ПТК «ПХВ-1» представлена на Рисунок 3.2

.
Защитные барьеры

Защита цепей питания, измерительных и информационных каналов ПТК «ПХВ-1» от электромагнитных помех, перенапряжений, вторичных проявлений грозовых токов и возникновение искры во взрывоопасной зоне осуществляется защитными барьерами искробезопасности.

Для защиты цепей питания, измерительных и информационных каналов от вторичных воздействий молний в шкафах автоматики применяются грозозащитные барьеры (ГЗБ).

Для защиты измерительных каналов, находящихся во взрывоопасной зоне, применяются датчики во взрывобезопасном исполнении (Ехс1), а в шкафах автоматики преобразователи со встроенными искробезопасными барьерами (ИББ).






- кпеммник земл,"ьсй 2 - клеммник про^од-ш 3- &ыключатегь^отс(.ит 4 - шина оаземлешя 5- несздейетвоеанныйгроеод 6 - изолированный регъе


Рисунок 3.2. Пример заземления шкафного оборудования ПТК «ПХВ-1»


Примечание.

КЗЗ - контур г-аицггного заземпа-мя


РАСПРЕДЕЛИТЕЛЬНЫМ ЩИТ


ШКАФ ШШ

Блоки питания и преобразователи со встроенными ИББ устанавливаться в шкафу автоматики на рельсе или металлоконструкции, которые соединяются с контуром защитного заземления с помощью заземляющего проводника сопротивлением не более 1 Ом

.
Шкафное оборудование

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

Шкафы ПТК «ПХВ-1» подразделяются на три типа по функциональному назначению:

  • шкаф фронтального контроллера напольный;

  • шкаф автоматики напольный;

  • шкаф автоматики настенный.

По конструктивному назначению шкафы ПТК подразделяются на два

типа:

  • шкаф напольный типа DK7771 фирмы RITTAL;

  • шкаф настенный типа АЕ1260 фирмы RITTAL.

Блок аварийного останова

Система безопасности рабочего персонала и эксплуатационного оборудования распределенных АСУ ТП базируется на применении блока экстренного аварийного останова (БЭАО). БЭАО ПТК «ПХВ-1» является распределенным аппаратным устройством, который включает следующие узлы:

  • пульт БЭАО;

  • основной управляющий и исполнительный (релейный) узел распределенной схемы БЭАО в шкафу цехового контроллера или отдельном шкафу контроллера БЭАО;

  • контроллер БЭАО;

  • узел управляющих и исполнительных реле в шкафу локального контроллера узла подключения (УП);

  • узел управляющих и исполнительных реле в шкафу локального контроллера общестанционных замеров и кранов (ОЗК);

  • узел управляющих и исполнительных реле в шкафу локального контроллера блока подготовки сырья (БПС);

  • кроссовый узел в шкафу локального контроллера аппаратов воздушного охлаждения (ABO);

  • кроссовый узел в системе автоматического управления напыляющими агрегатами САУ НА;

  • коммутационные цепи БЭАО.

  • БЭАО функционирует в 2-х режимах:

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

  • аварийный останов цеха, выполняемый программно-аппаратным способом по алгоритмам с учетом всех условий и технологических зависимостей.

Аварийный останов инициализируется по команде оператора с пульта БЭАО или АРМ при возникновении аварийных ситуаций, таких как пожар на станции, превышение температуры сырья в котле, выход за пределы уставок на секущем кране, пропадание основного электропитания, обрыв собственных обеих резервных цепей БЭАО. Исходя из последней посылки, проектирование БЭАО одна из самых ответственных задач в проекте ПТК «ПХВ-1».

Документация

Для ПТК «ПХВ-1» разрабатывается и предоставляется пользователю следующая документация:

Общесистемная документация:

  • общее описание ПТК (ПД);

  • инструкция по эксплуатации КТС (ИЭ);

  • руководство по системной поддержке (ИЭ);

  • описание программного обеспечения (ПА);

  • ведомость машинных носителей информации.

    1. На фронтальные и локальные ПЛК:

  • сборочный чертёж (СБ);

  • схема электрическая принципиальная (ЭЗ);

  • таблица соединений (ТЭ4);

  • таблица подключения ( ТЭ5);

  • ведомость покупных изделий (ВП);

  • ведомость ЗИП;

  • паспорт (ПС);

  • ведомость эксплуатационных документов (ВЭ);

  • руководство по эксплуатации (РЭ);

  • руководство программиста (РП);

  • перечень элементов ПЭЗ.

  1. На АРМ:

  • Руководство пользователя (ИЗ);

  • Чертежи видеокадров (ИЗ);

  • Описание программного обеспечения.

Документация оформляется в соответствии с требованиями ЕСКД и ЕСПД. На составные компоненты импортного производства пользователю предоставляется эксплуатационная документация на русском языке. На ПТК «ПХВ-1» выпущены и действуют технические условия.

ПРИЛОЖЕНИЕ 7

Код основного модуля программы MODBUS_MASTER

//******************************************************************************

//******************************** MODBUS MASTER ******************************* //******************************************************************************

iinclude "comport.h" iinclude "crclrc.h" ttinclude "modbus.h" ttinclude ttinclude

#ifdef WIN32 /************** секция WINDOWS ****************/

ttdefine usleep(delay) Sleep(delay/1000)

#endif

#include iinclude #include

unsigned char _mod_buffer[260];

unsigned char _mod_ascii_buffer[MAX_ASCII_BUF];

enum DebugDataType{ DATA_DEC, DATA_HEX, DATA_OCT, DATA_BIN, DATA_FLOAT

};

int __mod__debugType = DATA_HEX; // глобальные переменные

int __mod_debugState = MOD_DEBUG_OFF; // управление выполнением

int _mod_protocol_type = MODBUS_DEFAULT; // программы

//struct timeb _mod_ResponseTime; // время записи в устройство и время ответа операции MODBUS

long _mod_responseTime; // время ответа в миллисекундах

//float _mod_charPS = 0; // 1/(( baud rate ) / ( длина в битах )) //

// function pointers - используются когда установлен режим DEBUG или ASCII int (*_mod_procSendDataToDevice)(unsigned char devNum, unsigned char command, unsigned int count) = _mod_SendDataToDeviceRTU;

int (*_mod_procGetDataFromDevice)(unsigned char devNum, unsigned char **data, unsigned long *count) = _mod_GetDataFromDeviceRTU;

int (*_mod_procRecieveData)(unsigned short *crcRet, int *exErrorCode) = _mod_RecieveData;

int (*_mod_procTransmitData)(int count) = _mod_TransmitData;

/*int (*_mod_procRecieveDataASCII)(unsigned short *crcRet, int *exErrorCode) = _mod_RecieveDataASCII;

int (*_mod_procTransmitDataASCII)(int count) = _mod_TransmitDataASCII;*/ //

// Сканирование сети MODBUS

int ScanModBus(LPMODBUSDEVICE device) {

register int i=MAX_DEVICE_COUNT,j=0; unsigned char *dataPtr;

unsigned long nCount;

int dbgType = GetModBusDebugType();

int dbgState = GetModBusDebugState();

// Запрет операции отладки функции IO до начала сканирования

// if (dbgState == MOD_DEBUG_ON) // ModBusDebugEnable(0,0);

printf("%d\n", dbgState) ;

while(—i){// Сканирование всей сети MODBUS функцией 0x11

if (SendDataToDevice(i,0x11,0) != SUCCESSFUL) continue; if (GetDataFromDevice(i, SdataPtr, SnCount) == SUCCESSFUL) { device[j].devAddr = i; device[j].devID = *(dataPtr + 3);

}

usleep(50000);

}

// Выполнение операции отладки, если она разрешена

// if (dbgState == MOD_DEBUG_ON) // ModBusDebugEnable(1,dbgType);

return j;

}

/ / Получить идентификатор устройства

int GetDevicelD(unsigned char devNum, LPMODBUSDEVICE device) {

register int res;

unsigned char *dataPtr;

unsigned long nCount;

int dbgType = GetModBusDebugType();

int dbgState = GetModBusDebugState();

// Запрет операции отладки функции IO до начала сканирования

// if (dbgState == MOD_DEBUG_ON) // ModBusDebugEnable(0,0);

/ / Посылаем функцию 0x11 для получения информации об устройстве SendDataToDevice(devNum,0x11,0);

if ((res = GetDataFromDevice(devNum,SdataPtr,SnCount)) == SUCCESSFUL){ / / Полученные данные записываем в структуру device->devAddr = devNum; device->devID = *(dataPtr + 3);

}

usleep(50000);

// Выполнение операции отладки, если она разрешена

// if (dbgState == MOD_DEBUG_ON) / / ModBusDebugEnable(1, dbgType);

return res;

}

/ / Проверка на наличие устройства с номером devNum в списке найденных устройств

int IsDevicelnList(unsigned char devNum,LPMODBUSDEVICE device,int devCount) (

register int i = devCount, j=0; while(i—){

if (devNum==device[j].devAddr) return 0;

}

return -1;

}

/ / Чтение дискретных выходов устройства

int ReadDiscreteOut(unsigned char devNum, unsigned long startAddr, unsigned long count,

unsigned char **data, unsigned long *nBytes)

{

register int res; unsigned char *dataPtr; unsigned long nCount;

unsigned short *ptr = (unsigned short *)GetDataPtr();

*ptr = EndianSwap (startAddr) ; // Переставим старшие и младшие байты

*(ptr+1) = EndianSwap (count) ; // адреса и счетчика

/ / Пошлем данные устройству

if ((res = SendDataToDevice(devNum,0x01,4))!=SUCCESSFUL) return res; / / Считаем данные из устройства

if ((res = GetDataFromDevice(devNum, SdataPtr, SnCount)) !=SUCCESSFUL) return

res;

*data = dataPtr+3; // data - Содержит битовый ряд с положением дискретных

выходов каналов

*nBytes = * (dataPtr+2) ; // - Количество значащих бит в полученном массиве return res;

}

// Не удалось проверить, т.к. функция не работает в ПКЦ12

int ReadDiagnostic(unsigned char devNum,unsigned short *value) {

register int res;

unsigned char *dataPtr = GetDataPtr(); unsigned long nCount; *dataPtr = 0x00; *(dataPtr+1) = 0x02; *(dataPtr+2) = 0x00; *(dataPtr+3) = 0x00; // *ptr = 0x0002; // *(ptr+1) = 0x0000;

if ((res = SendDataToDevice(devNum,0x08,4))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum,SdataPtr,&nCount))!=SUCCESSFUL) return

res;

*value = EndianSwap(*((unsigned short *)(dataPtr+4))); return res;

}

// He удалось проверить, т.к. функция не работает в ПКЦ12

int ClearDiagnostic(unsigned char devNum) {

register int res;

unsigned char *dataPtr = GetDataPtr(); unsigned long nCount; *dataPtr = 0x00; *(dataPtr+1) = 0x01; *(dataPtr+2) = OxFF; *(dataPtr+3) = 0x00; // *ptr = 0x0002; // *(ptr+1) = 0x0000;

if ((res = SendDataToDevice(devNum,0x08,4))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum,SdataPtr,SnCount))!=SUCCESSFUL) return

res;

return res;

}

// Чтение группы регистров устройства / / Параметры:

// devNum - номер устройства на шине MODBUS // startAddr - начальный адрес регистра устройства // count - количество регистров подлежащих прочтению // data - возвращается указатель на прочитанные данные // nRegs - количество прочитанных регистров

int ReadRegisters(unsigned char devNum, unsigned long startAddr, unsigned long count,

unsigned short **data, unsigned long *nRegs)

{

register int res; unsigned char *dataPtr; unsigned long nCount;

unsigned short *ptr = (unsigned short *)GetDataPtr(); *ptr = EndianSwap(startAddr); *(ptr+l) = EndianSwap(count);

if ((res = SendDataToDevice(devNum,0x03,4))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum,SdataPtr,SnCount))!=SUCCESSFUL) return

res ;

ptr = (unsigned short *)(dataPtr+3); *data = ptr;

*nRegs = (*(dataPtr+2)) » 1; /* i=*nRegs; do{

*ptr = EndianSwap(*ptr); ptr++; }while(—i);*/ return res;

}

// Чтение группы 32-х разрядных регистров устройства / / Параметры:

// devNum - номер устройства на шине MODBUS

// startAddr - начальный адрес регистра устройства

// count - количество регистров подлежащих прочтению

// data - возвращается указатель на прочитанные данные

// nRegs - количество прочитанных регистров

int ReadRegisters32(unsigned char devNum, unsigned long startAddr, unsigned

long count,

unsigned long **data, unsigned long *nRegs)

{

register int res; unsigned char *dataPtr; unsigned long nCount;

unsigned short *ptr = (unsigned short *)GetDataPtr(); *ptr = EndianSwap(startAddr); *(ptr+l) = EndianSwap (count«l ) ;

if ((res = SendDataToDevice(devNum,0x03,4))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum,SdataPtr,SnCount))!=SUCCESSFUL) return

res;

ptr = (unsigned short *)(dataPtr+3); *data = (unsigned long *)ptr; *nRegs = (*(dataPtr+2)) >> 2; /* i=*nRegs; do {

*ptr = EndianSwap(*ptr); *(ptr+l) = EndianSwap(*(ptr+l)); ptr+=2;

}while(—i);*/ return res;

}
1   ...   17   18   19   20   21   22   23   24   25


написать администратору сайта