Показано с 1 по 9 из 9

Тема: ип320 и квитирование аварий

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

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

  2. #2

    По умолчанию

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

  3. #3

    По умолчанию

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

  4. #4

    По умолчанию

    Цитата Сообщение от DARNER Посмотреть сообщение
    поделитесь пожалуйста примерчиком ващей реализации.
    чесно говоря времени мало для реализации примера, щас вырву из контекста без особых коментариев...
    функция 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
    както так, позже, будет время, попробую подготовить и выложить пример с конфигурацией панельки...

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •