Смекни!
smekni.com

Приемно адаптерный прибор пожарной сигнализации (стр. 6 из 7)

ЗАКЛЮЧЕНИЕ

В результате разработки приемно-адаптерного прибора пожарной мною проанализирован отечественный и зарубежный опыт раннего обнаружения пожара при помощи автоматических систем пожарной сигнализации, основные технические решения в этой области, перспективы развития, пути оптимизации и повышения надежности работы систем пожарной сигнализации. В данной работе в качестве одного из вариантов решения проблемы раннего обнаружения пожара в рамках концепции создания АСУ МЧС Беларуси предложен проект приемно-адаптерного прибора пожарной сигнализации.

При его использовании достигается:

1). Повышение эффективности использования установок автоматического пожаротушения и сигнализации;

2). Сокращение времени реагирования оперативного персонала на экстремальную информацию;

3). Ведение бланка протоколов событий;

4). Улучшение социальных условий труда.

На программном уровне обеспечивается документирование информации о загораниях и техническом состоянии системы пожарной сигнализации, ведется банк протоколов текущих событий, осуществляется дистанционное управление приемно-контрольным прибором, и пуском АУП. Возможна автоматизация контроля состояния установок автоматического пожаротушения. Адаптер прост и удобен в эксплуатации, в определенной степени сможет составить конкуренцию зарубежным приборам. Необходимо глубже проработать вопрос об универсальности подключения прибора к различным типам ПКП.

Несомненно, его применение на объектах хозяйствования даст положительный эффект в улучшении информативности в системе МЧС, а следовательно и повышении пожарной безопасности. Массовое внедрение системы в жилых домах, квартирах, дачах, общежитиях, гостиницах, промышленных предприятиях и других помещениях с постоянным проживанием людей и пребыванием персонала позволит существенно сократить число погибающих (уменьшение времени обнаружения, прибытия), а в сочетании с комплексом других профилактических мер либо исключить их, либо свести к минимуму.

ЛИТЕРАТУРА

1. ГОСТ 12.1.004-91. Пожарная безопасность. Общие требования.

2. ГОСТ 12.3.046 Установки пожаротушения автоматические. Общие требования.

3. Касаткин А.И. Профессиональное программирование на языке СИ. Управление ресурсами: Справочное пособие. – Мн.: Выш. Шк., 1992.

4. Малешин В.Г. Аппаратно-программные комплексы систем автоматического контроля и управления процессами пожаротушения, пожарной сигнализации//Пожарная безопасность. Материалы первой республиканской научно-практической конференции, -Мн.; 1994г.

5. Нилов В.А. Технические средства охранно-пожарной сигнализации.; НОУ «Такир», -М., 1998г.

6. Панель охранно-пожарная «ControlEquipment». Техническое описание.

7. Пожарная безопасность. Специализированный каталог. – М.: «Гротек», 2000г.

8. Пожарная сигнализация. Современные устройства пожарной сигнализации. Проектирование систем безопасности на основе компьютерных технологий.; «Гротеск», -М, 1998г.

9. Пожарно-охранный извещатель «ApolloXP95». Техническое описание.

10. Пульт приемно-контрольный ППК-2. Паспорт еу2.407.003 ПС.

11. Руководство по архитектуре IBMPC/AT. под ред. М.Л.Махрхасина.; ООО «Консул», -Мн., 1993г.

12. СНиП 2.04.09-84 Пожарная автоматика.

13. Собурь В.А. Установки автоматической пожарной сигнализации: Справочник. Вып. 1-й – М.: Спецтехника, 1999.

14. Современные средства пожарной и пожарно-охранной сигнализации.; -М, 1990г.

15. СТБ 11.16.01-98 Системы пожарной сигнализации.

16. Юлин В.А., Булатова И.Р. Приглашение к СИ. – Мн.: Выш. Шк.,

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; // флаг устанавливается если буфер переполнен

chararea[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); //обработка данных

voidsignal(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

popcx

}

}

// =========== инициализация переменных ====================

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;

}

//============ инициализация последовательного порта ===========

voidinitrs(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 // Передатчик освобожден ?

jzinlsr

sub dx,5

mov al,dm

out dx,al

}

return 0;

toer: reseterr(); return -1;

indata: return 1;

}

voidinstvect(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 { moval,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&bsol;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;

}

// посылка байта с ожиданием и с очищением буфера

// от байта который был послан

voidTransb(charCC)

{ 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("Ошибка при передаче&bsol;n"); reseterr(); break;}

}

if (li==0) printf("Тайм-аут при передаче&bsol;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("Не принято то что послано");