전광판 제어모듈인데.
델파이로 하다하다.. 어찌 해야할지. 막막해서. 올립니다.
//------------시빌더 소스입니다.
// 포멧 전송.
void __fastcall TfrmMain::txLan (char command, char *sData, int iLen)
{
char sTxData[20000];
int iLoop;
int iCnt;
unsigned char ucCrc;
sTxData[0] = 0x7e; //델파이에서는 어찌 표현해야 하느지 ㅜㅜ
sTxData[1] = 0x7e;
sTxData[2] = '0';
sTxData[3] = '1';
// 길이전송 = Command 1byte + Data iLen + CRC 1byte.
// 빅엔디안방식 = 상위바이트 + 하위바이트.
iCnt = (iLen+2) / 0x100; //델파이에서 계산해서 char로 넣는것도 어찌 할지..
sTxData[4] = iCnt;
iCnt = (iLen+2) % 0x100;
sTxData[5] = iCnt;
sTxData[6] = 'B';
// Data 카피.
memcpy(&sTxData[7], sData, iLen);
// 1byte crc 계산.
for (ucCrc=0,iLoop=0;iLoop<(iLen+7);iLoop++)
{
ucCrc = ucCrc ^ sTxData[iLoop]; //^ 애는 xor로 바꾸는게 맞는지요?
} // end of for.
// crc 저장.
sTxData[iLoop++] = ucCrc;
// send packet.
ComPort->Write(sTxData, iLoop);
}
실제로 시빌더에서. sTxData를 찍어보면
~~01\0\x19B011100502991 99222222}} 버퍼가 이리 잡히고. 전공판은 제대로 작동합니다.
프로토콜은 아래와 같습니다..
SOH 2 HEX -1BYTE : SOH [7Eh] -1BYTE : SOH [7Eh]
Msg Num 2 HEX Hi-Byte + Lo-Byte 순서 Reserved
Body+CRC갯수 2 HEX Hi-Byte + Lo-Byte 순서
Command 1 HEX COMMAND 목록
DATA N HEX -Command 목록 참조
CRC 1 HEX <<Check sum>>
-범위 : SOH ~ Data 까지 xor한 값
- ‘*’이면 CRC체크 Pass (Test용)
|