Просмотр полной версии : ип320 и квитирование аварий
есть ИП320 (мастер rs232) и плк154.
собираю аварии в 0 регистр. Задействовал список тревог на ИП320. При возникновении аварий на панели всплывает список аварий и при нажатии кнопки "esc" прячется. Все бы хорошо было, но при возникновении аварии, ПЛК еще включает звуковую сигнализацию.
Вопрос: можно ли определить на ПЛК, что на ип320 нажата кнопка "esc" в "штатном" аварийном окне, для квитирования аварии или просто для того чтобы заткнуть звук? Или без своего окна для аварий не обойтись?
Илья Кареткин
15.12.2010, 12:27
здравствуйте.
и так, квитирования на ип320 - нет - пока бит весит, может его отключить только контроллер. обычно на панели делаются 2кнопки (сброс аварии и отключение звука), они привязываются к 2м различным битам в плк, которые являются одним из условий - по вашей логике-выключения звука и сброса авария впринципе..
Илья Кареткин
15.12.2010, 12:29
в "штатном" - нет.
квитирования аварии, именно -как сброса бита нет в штатном режиме любой панели.
квитирование - это "да спасибо, я увидел-приму меры или ждем пока не пропадёт", как на сп270.
то есть реализовать квитирование и (или) отключение звука без своего окна аварий не получится? и при этом нужно будет задействовать регистры интерактивного контроля на ип320 ("авт. смена экрана" и "текущий № экрана")?
Если городить свое окно аварий, то как туда добавлять строки с авариями?
Потому как у меня одновременно может быть и 16 аварий одновременно. В одном окне умещается 4 строки. Получается мне нужно будет создавать 4 окна аварий? Нужно будет думать чтобы выскакивало нужное окно при определенной аварии еще перемещаться между окнами. Возни много.
Когда есть чудесное штатное окно с авариями. И осталось только чтобы при нажатии на "esc" взвелся или сбросился определенный бит определенного регистра. Или чтобы была возможность вставить в штатное аварийное окно - кнопочку или чтобы только настроить кнопочку.Вообще, на мой взгляд, в дата панель просится регистр слово состояния панели. откуда можно было бы считывать и (состояние или ошибки связи) и код нажатия клавиши.
Потому как у меня одновременно может быть и 16 аварий одновременно. В одном окне умещается 4 строки. Получается мне нужно будет создавать 4 окна аварий? ..
Реализовать всё это можно и в одном экране, спасает динамический текст. Я делаю три строки с динамическим текстом, заполнены они одинакова со списком всех возможных аварий(у мну двадцать аварий, но может быть и мноооого больше). В процедуре обработки экрана аварии смотрю какие аварии и вывожу на экран требуемую надпись, если аварий больше трёх клавишами UP и DOWN можно скролить список...
сдесь же реализованно квитирование аварий и отключение сигнализации..
Реализовать всё это можно и в одном экране, спасает динамический текст. Я делаю три строки с динамическим текстом, заполнены они одинакова со списком всех возможных аварий(у мну двадцать аварий, но может быть и мноооого больше). В процедуре обработки экрана аварии смотрю какие аварии и вывожу на экран требуемую надпись, если аварий больше трёх клавишами UP и DOWN можно скролить список...
сдесь же реализованно квитирование аварий и отключение сигнализации..
поделитесь пожалуйста примерчиком ващей реализации.
поделитесь пожалуйста примерчиком ващей реализации.
чесно говоря времени мало для реализации примера, щас вырву из контекста без особых коментариев...
функция 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
както так, позже, будет время, попробую подготовить и выложить пример с конфигурацией панельки...
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot