| ||||||
МЕНЮ
| Приемно-адаптерный прибор пожарной сигнализацииp align="left"> Само письмо представляет собой обычный файл, содержащий текст письма и специальный заголовок, в котором указано, от ко-го письмо направлено, кому предназначено, какая тема письма и дата отправления. Автоматизировать данный процесс несложно при наличии программного обеспечения обмена данными по сети на компьютерах.ЗАКЛЮЧЕНИЕ В результате разработки приемно-адаптерного прибора пожарной мною проанализирован отечественный и зарубежный опыт раннего обнаружения пожара при помощи автоматических систем пожарной сигнализации, основные технические решения в этой области, перспективы развития, пути оптимизации и повышения надежности работы систем пожарной сигнализации. В данной работе в качестве одного из вариантов решения проблемы раннего обнаружения пожара в рамках концепции создания АСУ МЧС Беларуси предложен проект приемно-адаптерного прибора пожарной сигнализации. При его использовании достигается: Повышение эффективности использования установок автоматического пожаротушения и сигнализации; Сокращение времени реагирования оперативного персонала на экстремальную информацию; Ведение бланка протоколов событий; Улучшение социальных условий труда. На программном уровне обеспечивается документирование информации о загораниях и техническом состоянии системы пожарной сигнализации, ведется банк протоколов текущих событий, осуществляется дистанционное управление приемно-контрольным прибором, и пуском АУП. Возможна автоматизация контроля состояния установок автоматического пожаротушения. Адаптер прост и удобен в эксплуатации, в определенной степени сможет составить конкуренцию зарубежным приборам. Необходимо глубже проработать вопрос об универсальности подключения прибора к различным типам ПКП. Несомненно, его применение на объектах хозяйствования даст положительный эффект в улучшении информативности в системе МЧС, а следовательно и повышении пожарной безопасности. Массовое внедрение системы в жилых домах, квартирах, дачах, общежитиях, гостиницах, промышленных предприятиях и других помещениях с постоянным проживанием людей и пребыванием персонала позволит существенно сократить число погибающих (уменьшение времени обнаружения, прибытия), а в сочетании с комплексом других профилактических мер либо исключить их, либо свести к минимуму. ЛИТЕРАТУРА ГОСТ 12.1.004-91. Пожарная безопасность. Общие требования. ГОСТ 12.3.046 Установки пожаротушения автоматические. Общие требования. Касаткин А.И. Профессиональное программирование на языке СИ. Управление ресурсами: Справочное пособие. - Мн.: Выш. Шк., 1992. Малешин В.Г. Аппаратно-программные комплексы систем автоматического контроля и управления процессами пожаротушения, пожарной сигнализации//Пожарная безопасность. Материалы первой республиканской научно-практической конференции, -Мн.; 1994г. Нилов В.А. Технические средства охранно-пожарной сигнализации.; НОУ «Такир», -М., 1998г. Панель охранно-пожарная «Control Equipment». Техническое описание. Пожарная безопасность. Специализированный каталог. - М.: «Гротек», 2000г. Пожарная сигнализация. Современные устройства пожарной сигнализации. Проектирование систем безопасности на основе компьютерных технологий.; «Гротеск», -М, 1998г. Пожарно-охранный извещатель «Apollo XP95». Техническое описание. Пульт приемно-контрольный ППК-2. Паспорт еу2.407.003 ПС. Руководство по архитектуре IBM PC/AT. под ред. М.Л.Махрхасина.; ООО «Консул», -Мн., 1993г. СНиП 2.04.09-84 Пожарная автоматика. Собурь В.А. Установки автоматической пожарной сигнализации: Справочник. Вып. 1-й - М.: Спецтехника, 1999. Современные средства пожарной и пожарно-охранной сигнализации.; -М, 1990г. СТБ 11.16.01-98 Системы пожарной сигнализации. Юлин В.А., Булатова И.Р. Приглашение к СИ. - Мн.: Выш. Шк., 1990. ?????????? 1// ====================================================================== // = Базовая программа работы с последовательным портом COMi. // = Обмен с использованием прерываний // ====================================================================== #include <conio.h> #include <iostream.h> #include <stdio.h> #include <dos.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <process.h> #define COM 2 // задается номер порта 1-COMi; 2-COM2 // дальнейший код справедлив для машин класса AT #define INTRS 13-COM #define m_speed 2 // множитель задает скорость передачи // 1-9600 // 2-19200 и т.д. // 6-57600 // 12-115200 #define cbuf 2000 // размер буфера данных #ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif #define rgmask 16/COM //маска в регистре маски прерываний #define byte_sync 33 #define byte_pream 85 int IMR=0x21; // регистр маски прерываний int base,IER,IIR,LCR,LSR,MSR,MCR,LSB,MSB; // регистры контроллера // последовательного интерфейса char fl_d=0; // флаг устанавливается если принят байт // если=0 то буфер пуст char overb=0; // флаг устанавливается если буфер переполнен char area[cbuf]; // буфер данных int head=0,teil=0; // указатели головы и хвоста char count0=0; // help count char exiterr=0; //номер ошибки при приеме // exiterr=0 - ошибок нет // exiterr=1 - ошибка приема // exiterr=2 - ошибка по тайм-ауту // exiterr=3 - cбой в приеме: передано неверное //число байт // exiterr=4 - сбой при приeмe или переполнение //буфера char errcode=0; // код ошибки void interrupt obrcom(__CPPARGS); /* interrupt prototype */ void interrupt (*oldfunc)(__CPPARGS); /* interrupt function pointer */ void nevid(void); //делает курсор невидимым void initrs(void); //инициализация COM порта void init(void); //инициализация переменных void exitp(void); //!!! необходимо вызывать перед выходом из программы int trans(char); //передача байта через СОМ порт void deside(void); //обработка данных void signal(void); //звуковой сигнал void outinfo(void); //вывод информации на экран void reseterr(void); //сброс ошибок RS232 void instvect(void); //Замена вектора прерываний COMi void restorevect(void); //Восстановление старого обработчика C void incteil(void); //Увеличение указателя хвоста void err(char *); //Выход по ошибке void Transb(char); // посылка байта с сервисом int Transb_hiden(char); // Не выдает сообщения об ошибках void clearbof(void); // очистка буфера данных void definit(void); // определяет работоспособность с той стороны void clearbofkey(void); // очистка буфера клавиатуры void pusk(void); struct k_win // координаты окна { int x0,y0,x1,y1,lastx,lasty; } wmain,wmes; //======================= void nevid(void) //невидимый курсор { asm{ push cx push ax mov ah,01 mov ch,20H mov cl,0 int 10H pop ax pop cx } } // =========== инициализация переменных ==================== void init(void) { int i; wmain.x0=1; wmain.y0=1; wmain.x1=80; wmain.y1=16; wmes.x0=1; wmes.y0=wmain.y1+2; wmes.x1=80; wmes.y1=25; wmain.lastx=wmain.lasty=wmes.lastx=wmes.lasty=1; exiterr=0; } //============ инициализация последовательного порта =========== void initrs(void) { asm { push es push bx mov bx,COM dec bx shl bx,1 mov ax,40H //вычислить базовый адрес mov es,ax mov dx,es:[bx] mov base,dx pop bx pop es } IER=base+1; IIR=base+2; LCR=base+3; MCR=base+4; LSR=base+5; MSR=base+6; LSB=base; MSB=base+1; disable(); instvect(); // установить обработчик outportb(IMR,(inportb(IMR)&(255-rgmask))); // разрешить прерывание outportb(IER,5); //разрешить прерывания по доступности данных и по ошибке outportb(LCR,(inportb(LCR)|0x80)); // доступ к делителю частоты outportb(LSB,12/m_speed); // 1843200/(x*16)=y бит/c outportb(MSB,0); outportb(LCR,27); // установить параметры : // длина слова обмена 8 бит + контроль четности + DLAB=0 outportb(MCR,(8)); // ;rts=0 ;dtr=0 // сбросить условия возникновения прерываний //outportb(base,0); inportb(base); inportb(MSR); inportb(LSR); enable(); } //=========== звуковой сигнал ================== void signal(void) { sound(700); delay(200); nosound(); } // чтение LSR - сброс ошибок void reseterr(void) { inportb(LSR); } char foi=0; // ================= передача байта 'dm' в канал связи ========== int trans(char dm) { inlsr: asm { mov dx,base add dx,5 in al,dx //прочитать LSR test al,00011110B // ошибка ? jnz toer test al,1 jnz indata test al,32 // Передатчик освобожден ? jz inlsr sub dx,5 mov al,dm out dx,al } return 0; toer: reseterr(); return -1; indata: return 1; } void instvect(void) // замена вектора прерывания { oldfunc = _dos_getvect(INTRS); _dos_setvect(INTRS,obrcom); } // восстановление старого вектора void restorevect(void) { /* restore to original interrupt routine */ _dos_setvect(INTRS,oldfunc); } char d; //=========== прием данных не используя прерываний ============= int priem(void) { char clt; int i=0; do { clt=inportb(LSR); if ((clt&30)!=0) { errcode=clt; reseterr(); return -1; } // байт принят ? if (clt&1) { d=inportb(base); return 0; } i++; } while (i!=0); return 1; } // новый обработчик прерывания от COMi void interrupt obrcom(__CPPARGS) { char p; p=((inportb(IIR)>>1)&3); switch (p) // определить тип прерывания { case 0: // изменение линии состояния устройства с той стороны inportb(MSR); break; case 1: // прерывание от передатчика break; case 3: // по ошибке errcode=inportb(LSR); inportb(base); break; case 2: // доступность данных { area[head++]=inportb(base); //записать байт в буфер if (head==cbuf) head=0; if (head==teil) overb=1; // отметить если голова догнала // хвост fl_d=1; // отметить заполнение буфера break; }; default: // неизвестное прерывание errcode=128; } enfin: // завершить прерывание asm { mov al,20H out 20H,al } } // очищает буфер данных void clearbof(void) { while (fl_d) incteil(); } void clearbofkey(void) { while (kbhit()) getch(); } // Выход по ошибке void err(char *mes) { exitp(); clearbofkey(); printf("%s\n",mes); exit(0); } // Увеличение указателя хвоста void incteil(void) { if (teil==(cbuf-1)) teil=0; else teil++; asm cli; if (head==teil) fl_d=0; // если буфер пуст asm sti; } // посылка байта с ожиданием и с очищением буфера // от байта который был послан void Transb(char CC) { int li,opf,hp; li=1; opf=0; do // цикл посылки и ожидания освобождения передатчика { hp=trans(CC); switch (hp) { case 0: opf=1; break; case 1: li++; hp=inportb(base); break; case -1: { printf("Ошибка при передаче\n"); reseterr(); break;} } if (li==0) printf("Тайм-аут при передаче\n"); } while (!opf); } // посылка байта с ожиданием и с очищением буфера // от байта который был послан // Не выдает сообщения об ошибках int Transb_hiden(char CC) { int li,opf,hp; li=0; opf=0; do // цикл посылки и ожидания освобождения передатчика { hp=trans(CC); switch (hp) { case 0: opf=1; break; case 1: { //доступность данных li++; inportb(base); reseterr; break; }; case -1: return -1; //err("Ошибка при передаче"); break; } if (li==100) return 1; //err("Тайм-аут при передаче"); } while (opf==0); // цикл ожидания приема байта - того что был послан li=0; while (fl_d==0) { if (++li==0) return 2; //err("Тайм-аут Не принято ни 1 символа"); } if (area[teil]!=CC) return 3; //err("Не принято то что послано"); incteil(); return 0; } void priembig(void) { int a; a=priem(); switch (a) { case 0: printf("Принято %d\n",d); break; case 1: printf("Тайм-аут\n"); break; case -1: printf("ErorCode=%d\n",errcode); inportb(base); } } #define pi 3.1416 // Возвращает главное значение ARCTAN [0..2*pi] double mARCTAN(double z_sin,double z_cos) { double ang; if (z_sin==0) { if (z_cos<0) return (pi/2.0); else return (1.5*pi); } ang=-atan(z_cos/z_sin); if (z_sin<0) ang+=pi; if (ang<0) ang+=2*pi; return ang; } char getsym(void) { char a; a=area[teil]; incteil(); return a; } //--------------------------------- void exitp(void) //!!! необходимо вызывать перед выходом из программы rgmask)); // запретить прерывание enable(); int get_size(void) // возвращает число байт в буфере { int i; if ( (i=(head-teil))<0 ) i+=cbuf; return i; } //===== отобразить информацию ================== void outinfo(void) { char a; char str1[40]; while ( (get_size()>=1) & (!kbhit()) ) { printf(" %X",(int)getsym()); if (errcode!=0) { printf("ErrCode=%d\n",errcode); errcode=0; } } } struct dostime_t w,w1; double at,bt; void fix_time(void) // фиксирует системное время во внутреней переменной { _dos_gettime(&w); at=(double)(w.hour*360000+w.minute*6000+w.second*100+(double)w.hsecond); } double get_time(void) // возвращает время прошедшее с момента последнего // фиксирования { _dos_gettime(&w1); bt=(double)(w1.hour*360000+w1.minute*6000+w1.second*100+(double)w1.hsecond); bt-=at; return bt;} int wait(int x) { fix_time(); while (get_size()<x) { if (get_time()>(double)(x*4)) return 0; } return 1;} #define Esc 27 #define sym_S 83 #define sym_W 87 #define sym_Z 90 #define sym_A 65 //==================================== void main(void) { char hpl,hph,ch; char mas[100]; int j,i,jh; long li; int cos,sin,sh,am; double sr; // printf("my_dt=%7.4f \n",(mARCTAN(14927.0,-28113.0)/pi*2000)); // return ; init(); initrs(); clrscr(); Transb(85); Transb(6); Transb(0); while (!kbhit()) // { Transb(85); delay(100); } outinfo(); me: errcode=0; clearbofkey(); exitp(); } Аннотация научной работы Девиз: "Не отступать и не сдаваться!" Приемно-адаптерный прибор пожарной сигнализации.УДК 614.842.4 КИИ МЧС Республики Беларусь.2000 год.Объём работы: 44 с.Количество приложений: 3Количество иллюстраций: 3Количество таблиц: 2Источников литературы: 16.Характеристика работы.1. Цель: Обеспечение возможности автоматизированной компьютерной обработки информации систем пожарной сигнализации. 2. Методы: анализ технических решений, опытно-конструкторская проработка, программирование.Основные результаты: разработан проект конструкции приемно-адаптерного прибора пожарной сигнализации и программа информационного обмена. Наличие документа об использовании научных результатов: да.подпись автора ______________СВЕДЕНИЯоб авторе и научном руководителе работы,представленной под девизом: «Не отступать и не сдаваться!» АВТОР НАУЧНЫЙ РУКОВОДИТЕЛЬ
1. Приемно-адаптерный прибор пожарной сигнализации. 2. 45 3. УДК 614.842. 4. 2 5. нет. 6. да. 7. нет. 8. нет. 9. Пожарная автоматика. Пожарная сигнализация. Приемно-контрольное оборужование. Автор _____________Научный руководитель _____________ |
ИНТЕРЕСНОЕ | ||||
|