Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[13872] Re:Re:Re:Re:Re:Re:[질문]시리얼 통신 unsigned char 질문입니다.
도사 [] 2352 읽음    2011-10-12 14:55
아 일단 해결 했습니다.

보내는 값은 올바르게 넘기지만,
컴포넌트(TComport) 내부 Lib 에서 WideChar 로 바꾸더라고요.
그래서 컴포넌트 내부 WideChar 바꾸는 부분을 AnsiChar 로 가도록 수정했습니다.
Delphi 2010 이라서 그런거 같아요.

답변 감사합니다.

라스코니 님이 쓰신 글 :
: ㅎㅎ 수고가 많으시네요.
:
: 240 같은 값은 통상의 ascii 가 아니기 때문에 아마 minicom에서 이상한 문자로 나타날 것 같네요.
: 저는 델파이는 하나도 모르지만 아래 부분을 체크하시면 어떨까 싶네요.
:
: 0. Ansichar(240)  이 hex 값으로 보았을 때 확실히 0xf0 가 되는지...
:    0x00f0 또는 0x000000f0 등이 되지는 않는지...
:    만약 0x00f0 라면 장비로 날아가는 건 '$' 'H' 'i' '?' 0x00 0xf0 이렇게 될 거고 그러면 장비에서는 무시하겠죠.
:
: 1. Cport.WriteStr(SendStr) 이 5 byte 를 확실히 보내는지 -- length를 지정하는 부분이 없어서...
:
: 2. 원격 장비는 확실히 check sum이 맞아야 반응을 한다는 가정하에서
:     SendStr[1] + SendStr[2] + SendStr[3] 이 checksum 를 계산하는 올바른 방법인지?
:
: 3. 확실히 하기 위해서 장비 데모 프로그램을 동작시킬 때 packet 모니터링하기.
:     이더넷 통신이면 wireshark 같은 걸로 모니터링 하면 편한데 시리얼은 어떨지 모르겠네요.
:     시리얼 모니터링 툴이 있다고는 들었는데..
:
:
: 도사 님이 쓰신 글 :
: : 올려주신 글 잘 보았습니다.
: :
: : 보내지는 데이타를 확인하기 위해 구성을 다시 해봤습니다.
: :
: : Delphi2010 입니다.
: :
: : var
: :         SendStr : array [0..4] of Ansichar;
: :         test : Byte;
: : begin
: :         SendStr[0] := '$';
: :         SendStr[1] := 'H';
: :         SendStr[2] := 'i';
: :         SendStr[3] := '?';
: :         SendStr[4] := Ansichar(240);  //check sum 값
: :                                             //128 까지는 정상적으로 값이 들어갑니다. 128 전송시 0x80 전송
: :         test := Byte(SendStr[4]);  //test 에 240 들어있는것 확인...
: : 
: :         Cport.WriteStr(SendStr);
: : end;
: :
: :
: : 위와 같이 구성하여 다시 전송 하였고, 값을 잘못 넣은게 아닌가 하여
: : 데이타 값까지 확인하였습니다.
: :
: : 역시 장비에서는 반응이 없고, port mornitor 에서도 예상하지 않은 값이 올라옵니다.
: : 장비의 데모프로그램에서는 정상작동 하는것을 확인하였습니다.
: :
: : 아무래도 제가 뭔가 빠뜨리거나 잘 못 생각한것 같은데, 빠트린게 있으면 확인부탁드립니다.
: :
: : 라스코니 님이 쓰신 글 :
: : : Hi? 를 아스키 코드로 해서
: : : 72 + 105 + 63 해서 240 이 되는 것이로군요.
: : : 저는 델파이에는 전혀 문외한이라 #$240 이 무슨 의미인지는 모르지만,,,
: : : 만약 ascii character를 이야기 한다면 240 번째 아스키는 정의되어 있지 않습니다.
: : : 따라서 경우에 따라서는 0 으로 들어갈 수도 있는 것으로 생각되고요.
: : :
: : : 장비쪽에서 어떻게 받는지 잘 모르겠지만 240 이란 값을 일종의 FCS(Frame Check Sequence) 로 보낸다면
: : : 240 (dec) = 0xf0 (hex), 즉 'f', '0' 식으로 보내야 할 것으로 보입니다.
: : :
: : : 240 에 대한 아스키 코드는 정의되어 있지 않다는 것을 염두해 두셔야 할 것 같네요.
: : :
: : : 도사 님이 쓰신 글 :
: : : : 앗~ 답변달아주셔서 감사합니다.
: : : :
: : : : 환경은 win7 입니다.
: : : :
: : : : var
: : : :     SendStr : AnsiString;
: : : : begin
: : : :     SendStr := '$' + 'H' + 'i' + '?' + #$240;
: : : :     Cport.WriteStr(SendStr);
: : : : end;
: : : :
: : : : 구현은 이런식으로 해놨구요.
: : : : 마지막 5번째 값은(240)은 2번째 + 3번째 + 4번째 값을 더한 값 입니다.
: : : :
: : : : 포트 모니터 프로그램으로 값을 보면
: : : : 5바이트 중 1~4번째 값은 정확하게 들어가는데, 5번째 값이 0x00 으로 들어갑니다.
: : : :
: : : : 제가 5번째 값 계산을 잘못한걸까요?
: : : : 장비에서는 unsigned Char 로 받는다고 합니다.
: : : :
: : : : TComport 4.0 버전으로 개발중입니다. write method 가 있는데,
: : : : 파라미터 타입이 PWideChar 라서, AnsiChar 로 넘기지 못하고 있습니다.(실력이 미천하여..)
: : : :
: : : : 방법을 아시거나, 잘못된 점 있으면 지적 부탁드립니다.
: : : :
: : : : 감사합니다.
: : : :
: : : :
: : : : 라스코니 님이 쓰신 글 :
: : : : : 좀 이상하네요. unsigned char 면 0 ~ 255(8 bit) 일텐데요.
: : : : : OS에 따라서 0 ~ 127(7 bit) 로 되는 경우도 있다고는 들었지만요.
: : : : :
: : : : : 환경이 어떻게 되나요?
: : : : :
: : : : :
: : : : : 도사 님이 쓰신 글 :
: : : : : : 안녕하세요..
: : : : : :
: : : : : :
: : : : : :
: : : : : : 구현하다 안되서 글올립니다.
: : : : : :
: : : : : :
: : : : : :
: : : : : : 개발환경은 Delphi 2010 이고, 통신은 RS232 TComport 로 구현하고 있습니다.
: : : : : :
: : : : : : 장비와의 통신은 STX + Data + ETX 로 총 5byte 로 구성이 되어 있습니다.
: : : : : :
: : : : : : 클라이언트에서 장비로 데이타 전송시 데이타 받는부분이 unsigned char 로 되어 있어,
: : : : : : (전송시 16진수 로 전송) char 로 값을 넘기는데,  문제는 값이 128 을 넘어가면 0(ox00) 으로
: : : : : : 넘어가는거 같더군요. (128 이하면 정상적으로 전송이 됨)
: : : : : : 128 이상일때도 정상적으로 값을 넘기는 방법이 있으면 알려주세요.
: : : : : :
: : : : : :
: : : : : : 감사합니다.

+ -

관련 글 리스트
13860 [질문]시리얼 통신 unsigned char 질문입니다. 도사 2366 2011/10/11
13862     Re:[질문]시리얼 통신 unsigned char 질문입니다. 라스코니 2279 2011/10/11
13864         Re:Re:[질문]시리얼 통신 unsigned char 질문입니다. 도사 2135 2011/10/11
13866             Re:Re:Re:[질문]시리얼 통신 unsigned char 질문입니다. 라스코니 2215 2011/10/11
13869                 Re:Re:Re:Re:[질문]시리얼 통신 unsigned char 질문입니다. 도사 2308 2011/10/12
13870                     Re:Re:Re:Re:Re:[질문]시리얼 통신 unsigned char 질문입니다. 라스코니 2128 2011/10/12
13872                         Re:Re:Re:Re:Re:Re:[질문]시리얼 통신 unsigned char 질문입니다. 도사 2352 2011/10/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.