1. 델파이에서 16진수는 앞에 $를 붙입니다
2. ^는 xor 맞습니다
네오 님이 쓰신 글 :
: 전광판 제어모듈인데.
:
: 델파이로 하다하다.. 어찌 해야할지. 막막해서. 올립니다.
:
:
:
: //------------시빌더 소스입니다.
: // 포멧 전송.
: 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용)
|