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