12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 1. machine state
- typedef enum eEN_CLIENT_MACHINE_STATE
- {
- /* common */
- CT_IDLE = 1,
- CT_LOGIN,
- CT_SECTION,
- CT_CLOSE,
-
- /* sender */
- CT_LOCAL_COMMAND,
- CT_CLIENT_COMMAND,
-
- /* receiver */
- CT_LOGIN_WAIT,
- CT_FRED_WAIT,
- CT_LOCAL_WAIT,
- CT_CLIENT_WAIT
- } EN_CLIENT_MACHINE_STATE;
- 2. machine state cycle
-
- CT_IDLE (초기상태)
- CT_LOGIN (제어기로부터 AI_Initiate 명령을 수신한 경우 또는 CT_IDLE 상태에서 타임아웃)
- CT_LOGIN_WAIT (제어기로 AI_Login 명령을 전송한 후)
- CT_IDLE (CT_LOGIN_WAIT 상태에서 응답 타임아웃 시간일때)
- CT_CLOSE (CT_LOGIN_WAIT 상태에서 응답 타임아웃 시간과 재전송 횟수 이상일때)
- CT_SECTION (제어기로 부터 AI_Login 응답으로 Accept를 수신한 경우)
- CT_IDLE (제어기로 부터 AI_Login 응답으로 Reject를 수신한 경우)
- 2.1 각 상태별 상태전이 단계
- CT_IDLE
- - CT_CLOSE (로그인 요청후 응답이 없이 재시도횠수가 지났을 경우)
- - CT_LOGIN (로그인 요청후 응답이 로그인 대기 시간보다 클 경우)
- CT_LOGIN
- - CT_LOGIN_WAIT (제어기로 로그인 요청을 전송 한 후 - AI_Login)
- - CT_CLOSE (제어기로 로그인 요청을 재시도 횟수보다 요청하지 못한 경우)
- CT_SECTION
- - CT_CLOSE (*WatchDogTimer가 타임아웃 된 경우)
- - CT_FRED_WAIT (+제어기로 부터 마지막으로 수신한 시각이 MaxHeartbeatTime/3 보다 큰경우 AI_FrED 명령 전송 성공)
- - CT_CLOSE (+제어기로 부터 마지막으로 수신한 시각이 MaxHeartbeatTime/3 보다 큰경우 AI_FrED 명령 전송 실패 - 재시도횟수 초과)
- - CT_LOCAL_COMMAND (-마지막 정보 수집시각이 수집주기 보다 큰경우: 상태정보 요청 플래그 초기화)
- - CT_LOCAL_COMMAND (-마지막 정보 수집시각이 수집주기 보다 작은경우)
- CT_CLOSE
- - Terminate
- CT_LOCAL_COMMAND
- - CT_CLIENT_COMMAND (상태정보 요청 플래그 확인결과 요청할 필요가 없는 경우)
- - CT_LOCAL_WAIT (상태정보 요청 플래그 확인결과 상태정보 요청이 성공한 경우)
- - CT_CLOSE (상태정보 요청 플래그 확인결과 상태정보 요청이 실패하고 재시도 횟수를 초과한 경우)
- CT_CLIENT_COMMAND
- - CT_CLIENT_WAIT (운영단말의 요청이 있는 경우 해당 요청을 제어기로 전송 성공한 경우 - VMS Client 모듈에서는 해당사항 없음)
- - CT_CLOSE (운영단말의 요청이 있는 경우 해당 요청이 실패하고 재시도 횟수를 초과한 경우 - VMS Client 모듈에서는 해당사항 없음)
- - CT_SECTION (운영단말의 요청이 없는 경우 - VMS Client 모듈에서는 항상 이상태로 변경됨)
- CT_LOGIN_WAIT
- - CT_IDLE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패)
- - CT_CLOSE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패 && 재시도 횟수 초과)
- CT_FRED_WAIT
- - CT_SECTION (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패)
- - CT_CLOSE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패 && 재시도 횟수 초과)
- CT_LOCAL_WAIT
- - CT_LOCAL_COMMAND (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패)
- - CT_CLOSE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패 && 재시도 횟수 초과)
- CT_CLIENT_WAIT
- - CT_CLIENT_COMMAND (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패)
- - CT_CLOSE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패 && 재시도 횟수 초과)
- 2.2 제어기 송수신에 따른 상태 전이
- CT_LOGIN_WAIT
- - CT_SECTION (송수신 성공)
- - CT_IDLE (송수신 실패)
- CT_FRED_WAIT
- - CT_SECTION (송수신 성공/실패와 상관 없음)
- CT_LOCAL_WAIT
- - CT_CLIENT_COMMAND (송수신 성공)
- - CT_LOCAL_COMMAND (송수신 실패)
- CT_CLIENT_WAIT
- - CT_SECTION (송수신 성공)
- - CT_CLIENT_COMMAND (송수신 실패)
- ProcessCommand
- - AI_FrED 에서 arg 가 NULL 로 넘어오는데 함수호출에서 사용하고 있음(메모리 오류 확인 필요)
|