Диссертация на соискание ученой степени кандидата технических наук Владимирский государственный университет
Скачать 6.36 Mb.
|
/ / Чтение одного 32-х разрядного регистра устройства / / Параметры: // devNum - номер устройства на шине MODBUS // startAddr - начальный адрес регистра устройства // value - считанное из устройства значение int ReadRegister32(unsigned char devNum, unsigned long startAddr, unsigned long *value) { register int res; unsigned char *dataPtr; unsigned long nCount; unsigned short *ptr = (unsigned short *)GetDataPtr(); *ptr = EndianSwap(startAddr); *(ptr+l) = 0x0200; if ((res = SendDataToDevice(devNum,0x03,4))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum,SdataPtr,SnCount))!=SUCCESSFUL) return res; ptr = (unsigned short *)(dataPtr+3); if (*(dataPtr+2)!=4) return READ_ERROR; *ptr = EndianSwap(*ptr); *(ptr+l) = EndianSwap(*(ptr+1)); *value = *((unsigned long*)ptr); return res; } // Чтение одного 16-ти разрядного регистра устройства / / Параметры: // devNum - номер устройства на шине MODBUS // startAddr - начальный адрес регистра устройства // value - считанное из устройства значение int ReadRegisterl6(unsigned char devNum, unsigned long startAddr, unsigned short *value) { register int res; unsigned char *dataPtr; unsigned long nCount; unsigned short *ptr = (unsigned short *)GetDataPtr(); *ptr = EndianSwap(startAddr); *(ptr+1) = 0x0100; if ((res = SendDataToDevice(devNum,0x03,4))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum,SdataPtr,SnCount))!=SUCCESSFUL) return res; ptr = (unsigned short *)(dataPtr+3); if (*(dataPtr+2)!=2) return READ_ERROR; *value = EndianSwap(*ptr); return res; } / / При записи используются все те же параметры что и при чтении int WriteRegisters(unsigned char devNum, unsigned long startAddr, unsigned long count, unsigned short *data,unsigned long *regStart, unsigned long *nRegs) { register int res; unsigned char *dataPtr = GetDataPtr(); unsigned long nCount; unsigned char byteCount; unsigned short *ptr = (unsigned short *)dataPtr; *ptr = EndianSwap(startAddr); *(ptr+l) = EndianSwap(count); byteCount = (count&OxFF) *(dataPtr+4) = byteCount; ptr = (unsigned short *) (dataPtr+5); memcpy (ptr, data, counted) ; if ((res = SendDataToDevice(devNum,0x10,5 + byteCount))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum,SdataPtr,SnCount))!=SUCCESSFUL) return res; ptr = (unsigned short *)(dataPtr+2); *regStart = EndianSwap(*ptr); "nRegs = EndianSwap(*(ptr+1)); return res; } int WriteRegisterl6(unsigned char devNum, unsigned long startAddr, unsigned short value) { register int res; unsigned char *dataPtr = GetDataPtr(); unsigned long nCount; unsigned char byteCount; unsigned short *ptr = (unsigned short *)dataPtr; *ptr = EndianSwap(startAddr); *(ptr+1) = 0x0200; byteCount = 2; *(dataPtr+4) = byteCount; ptr = (unsigned short *)(dataPtr+5); *ptr = EndianSwap(value); if ((res = SendDataToDevice(devNum,0x10,5 + byteCount))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum, SdataPtr, SnCount)) !=SUCCESSFUL) return res; return res; } int WriteRegisters32(unsigned char devNum, unsigned long startAddr, unsigned long count, unsigned long *data,unsigned long *regStart, unsigned long *nRegs) { register int res; unsigned char *dataPtr = GetDataPtr(); unsigned long nCount; unsigned char byteCount; unsigned short *ptr = (unsigned short *)dataPtr; *ptr = EndianSwap(startAddr); * (ptr+1) = EndianSwap (counted) ; byteCount = ((count< *(dataPtr+4) = byteCount; ptr = (unsigned short *)(dataPtr+5); memcpy(ptr,data, count<<2) ; if ((res = SendDataToDevice(devNum,0x10,5 + byteCount))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum, SdataPtr,SnCount))!=SUCCESSFUL) return res; ptr = (unsigned short *)(dataPtr+2); *regStart = EndianSwap(*ptr); *nRegs = EndianSwap(*(ptr+1)); return res; } int WriteRegister32(unsigned char devNum, unsigned long startAddr, unsigned long value) { register int res; unsigned char *dataPtr = GetDataPtr(); unsigned long nCount; unsigned char byteCount; unsigned short *ptr = (unsigned short *)dataPtr; *ptr = EndianSwap(startAddr); *(ptr+1) = 0x0200; byteCount = 4; *(dataPtr+4) = byteCount; ptr = (unsigned short *)(dataPtr+5); *ptr = EndianSwap((unsigned short)(value & OxFFFF)); *(ptr+l) = EndianSwap((unsigned short)(value>>l6)); if ((res = SendDataToDevice(devNum,0x10,5 + byteCount))!=SUCCESSFUL) return res; if ((res = GetDataFromDevice(devNum,SdataPtr,&nCount))!=SUCCESSFUL) ret res; return res; } //********** Возвращает ответ устройства в миллисекундах ******************** //*************************************************************************** long GetResponseTime(){ return _mod_responseTime;} /у*************************************************************************** jу**************** Вывод сообщения об ошибке ******************************** //*************************************************************************** void _mod_PrintError(int err) { printf("*** MODBUS ERROR %d ***: ",err); switch(err){ 04200911472 Дерябин Александр Вячеславович 1 Защита информации в телекоммуникациях АСУ ТП химической промышленности 1 1 УГРОЗЫ ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ И УЯЗВИМОСТИ АСУ ТП 9 1.1 Телекоммуникации АСУ ТП 9 1.1.1 Типовая структура АСУ ТП 9 ¡1]]]]]] 1ЕШ ШШ В11 36 Il i 46 2 ЗАЩИТА ИНФОРМАЦИИ В АСУ ТП 63 i 398 А=я2/я, 1 ... ык (43Л) 543 А = — ■ А ; А = — ■■ АА, =—■ А 576 А = " А ^ А = " А ^ ■ ■ ■ ^ А = " А 577 М1 = --М»>М2 = --М»>-'>Мп-, = —-А 579 к. т, 843 Акт внедрения 843 printf("undefined error"); break; }ПРИЛОЖЕНИЕ S Экранный снимок программы MUDBUS MAS'Г1-К icrosoft Windows XP [Версия 5.1.2600 CO Корпорация Майкрософт, 1985-2001. C:\Docui4ents and SettingsSAnMHMHCTpaTop>cd.. C:\DocUMonts and Settings)cd.. С: \ )no dbus пав t e r. e xe modbusmaster uZ.l usage : mo dbus piaster [options] [long options] long options: COM port options: —con [port],[baudrate],[format 3,[flow] [port] - port папе _ в X I- <9600 - by default) [baudrate] — set con port baudrat e [format] - data format In special form: [XHPHS], i.e. 8N1 where [X] — number bits of data [5..81 <8 — by default> [PI - parity type: (N [S3 - number of stop bits [1,23 <1 - by default> [flow] — flow control: [none, soft, hard, both3 (none — by default) [flow] MODBUS options: —node —node - device number [0..2473 —function - select HODBUS function —rag — register index that must be read or write —data - data string that would transmit to register —byte - set byte numltar in message which point to a number —items - count of items to read —scan - perform a full MODBUS net scan for any devices —listen - listen COM port short options: -d - enable COM port debug mode, data type visualization: [dec,bin,hex.oct,float] -r - read one register of the device according the following format: b - print data as BIN - print data as OCT h - print data as HEX f — print data as float c - print data as set of chars print data as DEC by default —w - write register 32 write data to 32 bit register 16 - write data to 16 bit register raw - write raw data to port b - use in register operation big endians - use in register operation little endians if both parameters are set use half big endians {only 2 numbers) enable ASCII mode Cnot fully supported ) print device response tine listen COM port verbos eПРИЛОЖЕНИЕ 9 АКТЫ ВНЕДРЕНИЯ«Утверждаю» Генеральный директор ООО «ПСВ-Холдинг» / / 7 Д. Ю. Пунин АКТ ВНЕДРЕНИЯ Результаты исследований, полученные Дерябиным A.B. при выполнении диссертационной работы, в частности: Методики и рекомендации по обеспечению информационной безопасности каналов связи в АСУТП, а также рекомендации по выбору программных и аппаратных средств для проектирования автоматизированной системы управления технологическими процессами, соответствующих стандартам и требованиям по безопасности в химической промышленности. внедрены в 2008-2009 году на нашем новом производственном предприятии в г.Электросталь, Московской области - в АСУТП комплекса по производству поливииилхлорида и бумвинила. Методики и рекомендации позволили существенно облегчить работу проектировщиков при выборе методов и средств защиты информации. Методики позволили повысить защищенность информации и телекоммуникаций в АСУТП предприятия. Выработанные методики позволили снизить количество сбоев в технологическом процессе из-за искажения или потери информации, что положительно сказалось на качестве выпускаемой продукции . С Лохиов М. В. Семенов А. А . •и АКТ ВНЕДРЕНИЯ Результаты, полученные Дерябиным A.B. при выполнении диссертационной работы, в частности: Методики защиты телекоммуникаций АСУТП верхнего и нижнего уровней; Рекомендации по обеспечению защиты проводных и беспроводных каналов связи АСУТП и SCADA-систем; внедрены на объектах проектируемых и обслуживаемых нашим предприятием в 2008 году и будут внедряться в дальнейшем. Сергеев М. А. Главный инженер: Руководитель проектной группы: Методики показали высокую эффективность и позволили существенным образом увеличить защищенность передаваемой информации и всей системы в целом . к. т, Акт внедрения Результаты, полученные Дерябиным A.B. при выполнении диссертационной работы, в частности: Методики применения различных способов защиты информации от несанкционированного доступа в АСУТП; Рекомендации по защите телекоммуникационных и компьютерных сетей; внедрены на нашем предприятии в 2008-2009гг. Они нашли практическое применение при обмене информацией с нашими филиалами в гг. Иваново, Санкт-Петербург, Омске и т.п. Сирко С. Э. Указанные методики хороши тем, что при сравнительно небольших затратах обеспечивают высокую эффективность и не требуют специальной подготовки нашего персонала. Начальник отдела- Смушко О.Л. Начальник лаборатории (т) /* 192 |