SECS/GEM 및 테스트 자동화 시장 선도기업, AI 비전 및 스마트 팩토리 솔루션

사용자 정의 S9F* 메세지를 보내는 방법

SECS-II (E5) 에 정의된 형식의 메시지는 XCom 이 자동발송 하나 SEMI 표준 형식이 아닌
사용자정의 S9 계열 메시지를 사용하는 경우 아래 방식으로 프로그래밍 합니다.
사용자 정의 S9F* 메시지
1) XCom Configuration tool 에서 S9 계열 메시지를 정의 합니다.
2) XCom Configuration tool 에서 S9 계열 Automatic reply 를 false 로 설정합니다.
3) OnSecsEventXCom 이벤트 정보를 기준으로 사용자가 직접 S9F* 메시지를 매뉴얼로 코딩한후 전송 합니다.

OnSecsEventXCom 를 사용해서 S9F* 메시지를 매뉴얼로 만드는 방법은 아래와 같습니다.
void CEqSampleDlg::OnSecsEventXCom( short nEventId long lParam )
{
char szMsg[256];

short nDevId_Err, nS_Err, nF_Err, nWBit_Err;
long lSysByte_Err;
short nDevId;
long lMsgId, lSysByte;
short baBody[10];
int nResult;

if( nEventId == 203 ) { // T3 timeout...
}
else if( nEventId == 102 ) {//? NOT_SELECTED...
}
else if( nEventId == 101 ) {//? NOT_CONNECTED...
}
else if( nEventId == 103 ) {//? SELECTED...
}
else if(nEventId == 221) {// Unknown Device ID...
nResult = m_XCom.GetInvalidMsgInfo(lParam &nDevId_Err &nS_Err &nF_Err
&lSysByte_Err &nWBit_Err);
baBody[0] = HIBYTE(nDevId_Err);
baBody[1] = LOBYTE(nDevId_Err);
baBody[2] = (BYTE)((nWBit_Err == 0) ? (nS_Err) : (nS_Err + 0x80));
baBody[3] = (BYTE)nF_Err;
baBody[4] = baBody[5] = 0;
baBody[6] = HIBYTE(HIWORD(lSysByte_Err));
baBody[7] = LOBYTE(HIWORD(lSysByte_Err));
baBody[8] = HIBYTE(LOWORD(lSysByte_Err));
baBody[9] = LOBYTE(LOWORD(lSysByte_Err));

nDevId = atoi(m_cmbDevice.GetBuffer(2));
lSysByte = lSysByte_Err;
m_XCom.MakeSecsMsg(&lMsgId nDevId 9 1 lSysByte);
m_XCom.SetBinaryItem((lMsgId, (short *)baBody 10);
nResult = m_XCom.Send(lMsgId);
if(nResult >= 0) {
}
else { }
}
else if(nEventId == 222) {// Unknown Stream...

nResult = m_XCom.GetInvalidMsgInfo(lParam, &nDevId_Err &nS_Err &nF_Err
&lSysByte_Err &nWBit_Err);
baBody[0] = HIBYTE(nDevId_Err);
baBody[1] = LOBYTE(nDevId_Err);
baBody[2] = (BYTE)((nWBit_Err == 0) ? (nS_Err) : (nS_Err + 0x80));
baBody[3] = (BYTE)nF_Err;
baBody[4] = baBody[5] = 0;
baBody[6] = HIBYTE(HIWORD(lSysByte_Err));
baBody[7] = LOBYTE(HIWORD(lSysByte_Err));
baBody[8] = HIBYTE(LOWORD(lSysByte_Err));
baBody[9] = LOBYTE(LOWORD(lSysByte_Err));

nDevId = atoi(m_cmbDevice.GetBuffer(2));
lSysByte = lSysByte_Err;
m_XCom.MakeSecsMsg(&lMsgId nDevId 9 3 lSysByte);
m_XCom.SetBinaryItem(lMsgId, (short *)baBody, 10);?
nResult = m_XCom.Send(lMsgId);
if(nResult >= 0) {
}
else {
}
else {
}
}

주의사항
MHEAD : S9F1,S9F3,S9F5,S9F7 Msg는 상대측에서 보낸 Msg가 문제가 발생했을 경우
보내는 Msg이므로 MHEAD에 문제가 발생한 Header를 그대로 담아 보내야 합니다.
S9F1 : Unrecognized Device ID
S9F3 : Unrecognized Stream
S9F5 : Unrecognized Function
S9F7 : illegal Data
S9F9 : Transaction Timeout
S9F11 : Data Too Long
S9F13 : Conversation Timeout (XCom 지원 않음)