Checksum 을 검색해보니 아래와 같은 예가 나왔는데 어찌 사용을 해야할지모르겠습니다.
펑션으로 사용을 할생각이었는데 타입도 어찌 주어야 할지 모르겠습니다.
보내려는 데이타는
STX+'1H|^&||DPC|Sender|111 Canfield Ave^Randolph^NJ^07869||(201)927-2828|N81|Receiver||P|1|'+formatdatetime('yyyymmddhhmmss',now)+CR+ETX+'51'+CR+LF)
이구요.
고수님들 예제로 사용방법 좀 답변바랍니다... 답답하네요.
보낼테이터나 갯수같은것도 어찌 지정하는지 자세히 알려주시면 더욱 도움이 되겠습니다.
감사합니다.
______________________________________________________________________________
[송신쪽]
var
checkbyte : Byte;
begin
checkbyte := 0;
for i:=1 to 전체 보낼 데이터 갯수 do
begin
checkbyte := checkbyte xor 보낼 데이터;
end;
데이터 포맷대로 데이터 보냄.
checkbyte 데이터 보냄.
[수신쪽]
var
checkbyte : Byte;
begin
checkbyte := 0;
while TRUE do
begin
데이터 수신
checkbyte := checkbyte xor 수신된 데이터;
if 수신된 데이터가 CRLF면 break;
end;
한 바이트 데이터 수신
if checkbyte = 한 바이트 수신된 데이터 then 정상수신
else 데이터 깨짐이나 비정상 수신
아래 코드에서 약간 이해가 안가는 부분이 있는데, 수신측에서 데이터의 전송이 완료되었다는 것을 ETX 값을 읽어서 검사하게 되는데, 좀 다르군요. ^^
너무 광범위한 설명을 요구하는 질문이네요. 음...
어떤 데이터를 보낼지 알고 있으므로(STX와 ETX 사이의 데이터), 그 보낼 문자열에 대한 길이를 구하고(Length 함수를 이용), 보낼 데이터의 길이 만큼 체크 섬을 계산하여 구합니다. 그런 후에 데이터를 전송하고, 마지막에 체크 섬값을 보낸후, 수신측에서 송신측에서 행한 동작을 반복하여, 송신측에서 보낸 체크 섬 값과 수신측에서 받은 데이터(여기서 실제 데이터는 STX와 ETX 사이이므로 길이를 알 수 있죠)로 생성한 체크 섬 값이 같은지 비교하여, 같으면 올바로 수신된 것이고, 틀리면 잘못 수신된 것이겠죠.