Вход

Просмотр полной версии : ип320 и квитирование аварий



jjj
15.12.2010, 10:30
есть ИП320 (мастер rs232) и плк154.
собираю аварии в 0 регистр. Задействовал список тревог на ИП320. При возникновении аварий на панели всплывает список аварий и при нажатии кнопки "esc" прячется. Все бы хорошо было, но при возникновении аварии, ПЛК еще включает звуковую сигнализацию.
Вопрос: можно ли определить на ПЛК, что на ип320 нажата кнопка "esc" в "штатном" аварийном окне, для квитирования аварии или просто для того чтобы заткнуть звук? Или без своего окна для аварий не обойтись?

Валенок
15.12.2010, 11:48
в "штатном" - нет.

Илья Кареткин
15.12.2010, 12:27
здравствуйте.
и так, квитирования на ип320 - нет - пока бит весит, может его отключить только контроллер. обычно на панели делаются 2кнопки (сброс аварии и отключение звука), они привязываются к 2м различным битам в плк, которые являются одним из условий - по вашей логике-выключения звука и сброса авария впринципе..

Илья Кареткин
15.12.2010, 12:29
в "штатном" - нет.
квитирования аварии, именно -как сброса бита нет в штатном режиме любой панели.
квитирование - это "да спасибо, я увидел-приму меры или ждем пока не пропадёт", как на сп270.

jjj
15.12.2010, 13:17
то есть реализовать квитирование и (или) отключение звука без своего окна аварий не получится? и при этом нужно будет задействовать регистры интерактивного контроля на ип320 ("авт. смена экрана" и "текущий № экрана")?

jjj
15.12.2010, 13:49
Если городить свое окно аварий, то как туда добавлять строки с авариями?
Потому как у меня одновременно может быть и 16 аварий одновременно. В одном окне умещается 4 строки. Получается мне нужно будет создавать 4 окна аварий? Нужно будет думать чтобы выскакивало нужное окно при определенной аварии еще перемещаться между окнами. Возни много.
Когда есть чудесное штатное окно с авариями. И осталось только чтобы при нажатии на "esc" взвелся или сбросился определенный бит определенного регистра. Или чтобы была возможность вставить в штатное аварийное окно - кнопочку или чтобы только настроить кнопочку.Вообще, на мой взгляд, в дата панель просится регистр слово состояния панели. откуда можно было бы считывать и (состояние или ошибки связи) и код нажатия клавиши.

Crusash
15.12.2010, 17:00
Потому как у меня одновременно может быть и 16 аварий одновременно. В одном окне умещается 4 строки. Получается мне нужно будет создавать 4 окна аварий? ..

Реализовать всё это можно и в одном экране, спасает динамический текст. Я делаю три строки с динамическим текстом, заполнены они одинакова со списком всех возможных аварий(у мну двадцать аварий, но может быть и мноооого больше). В процедуре обработки экрана аварии смотрю какие аварии и вывожу на экран требуемую надпись, если аварий больше трёх клавишами UP и DOWN можно скролить список...
сдесь же реализованно квитирование аварий и отключение сигнализации..

DARNER
15.12.2010, 17:50
Реализовать всё это можно и в одном экране, спасает динамический текст. Я делаю три строки с динамическим текстом, заполнены они одинакова со списком всех возможных аварий(у мну двадцать аварий, но может быть и мноооого больше). В процедуре обработки экрана аварии смотрю какие аварии и вывожу на экран требуемую надпись, если аварий больше трёх клавишами UP и DOWN можно скролить список...
сдесь же реализованно квитирование аварий и отключение сигнализации..

поделитесь пожалуйста примерчиком ващей реализации.

Crusash
15.12.2010, 18:42
поделитесь пожалуйста примерчиком ващей реализации.

чесно говоря времени мало для реализации примера, щас вырву из контекста без особых коментариев...
функция proc_error: обработки аварии:


error_panel:=error_panel OR Mashina.dw_error;(*битовая маска ошибок*)
IF NOT(alarm_list) THEN(*инициализация экрана ошибок*)
alarm_list:=TRUE;
b_kvota:=FALSE;
n_Reg:=1;
i_bit_error:=0;
print_err;(*собираем в масив ошибки*)
(*сбрасываем биты кнопок панэльки*)
b_ENT:=FALSE;
b_ESC:=FALSE;
b_Up:=FALSE;
b_DOWN:=FALSE;
ELSE
IF b_ENT THEN(*отключаем сирену*)
b_kvota:=TRUE;
b_ENT:=FALSE;
END_IF
IF b_ESC THEN(*квитируем*)
IF Mashina.dw_error=0 THEN
lister:=last_list;(*если нет ошибок, выключаем экран аварии*)
END_IF
error_panel:=0;
alarm_list:=FALSE;
b_kvota:=TRUE;
b_ESC:=FALSE;
b_ENT:=FALSE;
END_IF
IF b_UP THEN(листаем список вверх*)
b_UP:=FALSE;
IF i_bit_error>0 THEN
i_bit_error:=i_bit_error-1;
END_IF
print_err;
END_IF
IF b_DOWN THEN(*листаем список вниз*)
b_down:=FALSE;
IF i_bit_error < n_bit_error THEN
i_bit_error: =i_bit_error+1;
ELSE
i_bit_error:=0;
END_IF
print_err;
IF mas_reg[1]=0 THEN
i_bit_error:=0;
print_err;
END_IF
END_IF
END_IF
(*записываем в регистры панели номера ошибок *)
Reg1:=mas_Reg[1];
Reg2:=mas_Reg[2];
Reg3:=mas_Reg[3];

метод print_err функции proc_error,
выделяет из битовой маски ошибок взведёные биты и записывает их номера в массив.


n_Reg:=1;
SysMemSet(ADR(mas_reg[1]),0,12);
REPEAT
b_bit_error:=EXTRACT(X:=error_panel,n:=i_bit_error );
IF b_bit_error THEN
mas_reg[n_Reg]:=i_bit_error+1;
i_bit_error:=i_bit_error+1;
n_Reg:=n_Reg+1;
ELSE
i_bit_error:=i_bit_error+1;
END_IF
UNTIL NOT(i_bit_error<n_bit_error) OR n_Reg>3
END_REPEAT
IF NOT(i_bit_error<n_bit_error) THEN
i_bit_error:=0;
END_IF


както так, позже, будет время, попробую подготовить и выложить пример с конфигурацией панельки...