CASE STATE OF
ST_INIT_UMN_STATE: (* инициализация модуля *)
IF( LockDevice( UNM_MODULE ) = 1 ) THEN
state := ST_BEGIN_WAIT_STATE;
ELSE
state := ST_ERROR_COMM;
END_IF;
ST_BEGIN_WAIT_STATE: (* запуск цикла приема *)
(* error := ER_NOT_ERROR; *)
n_wr := 0;
n_rd := 0;
rbflags^ := 0;
state := ST_WAIT_CMD_STATE;
ST_WAIT_CMD_STATE: (* прием команды *)
rbdata :=GetByte(UNM_MODULE);
IF( rbdata > 0 ) THEN
rbflags := rbdata+1;
IF( ( rbflags^ AND E_OVR ) <> 0 OR (* переполнение *)
( rbflags^ AND E_FRM ) <> 0 OR (* формат *)
( rbflags^ AND E_PRT ) <> 0 ) THEN (* четность *)
error := ER_COMM_ERROR;
state := ST_ERROR_COMM;
ELSE
rbbyte := rbdata;
mb_request[n_rd] := rbbyte^;
mb_flags[n_rd] := rbflags^;
n_rd := n_rd+1;
END_IF;
ELSE
IF( ( rbflags^ AND F_FRM ) <> 0 ) THEN (* конец сообщения *)
state := ST_CRC_R;
END_IF;
END_IF;
ST_CRC_R: (* проверка контрольной суммы CRC *)




Ответить с цитированием