Q&A

  • 시리얼에서 시간보고 싶어요
RS-232에서 다음의 데이터를 수신하려는데 어떻하면 되는지 모르겠군요

부탁합니다....



나오는 데이터 형식은 11Byte이고요

STX - 0x02 1Byte

LEN - 0x06 1Byte

DATA - 2Byte(시)+ 2Byte(분)+2Byte(초)

MSB -> LSB순으로 ASCII 코드로 변환

CRC - CRC16 2Byte

MSB->LSB순으로

EXT - 0x03 1Byte



나오는 샘플데이터 형식은



현재시각이 12시34분30초일때

0x02|0x06|0x31|0x32|0x33|0x34|0x33|0x30|crc hi|crc lo|0x03|

이렇거든요.....

Memo에 시간이 수신되어 표시하고 싶은데 부탁드립니다................





procedure TMainForm.CommPortDriverReceiveData(Sender: TObject;

DataPtr: Pointer; DataSize: Integer);

var p: pchar;

s: string;

begin

// Get current line

if RxMemo.Lines.Count <> 0 then

s := RxMemo.Lines[RxMemo.Lines.Count-1]

else

s := '';

// Parse incoming text

p := DataPtr;

while DataSize > 0 do

begin

case p^ of

#10:; // LF

#13: // CR - cursor to next line

begin

if RxMemo.Lines.Count <> 0 then

RxMemo.Lines[RxMemo.Lines.Count-1] := s

else

RxMemo.Lines.Add( s );

RxMemo.Lines.Add( '' );

s := '';

end;

#8: // Backspace - delete last char

delete( s, length(s), 1 );

else // Any other char - add it to the current line

s := s + p^;

end;

dec( DataSize );

inc( p );

end;

// If current line isn't empty

if (s<>'') then

if RxMemo.Lines.Count <> 0 then

// Update current line

RxMemo.Lines[RxMemo.Lines.Count-1] := s

else

// New line - add it

RxMemo.Lines.Add( s );

RxMemo.Update;

end;

0  COMMENTS