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

C++빌더 Q&A
C++Builder Programming Q&A
[74651] Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ
정성훈.해미 [sage5nor] 746 읽음    2017-11-14 16:44
문자열 처리에서는  0x00이 들어가면 거기가 문자열 끝이로 인식하여
이후 데이터는 안나옵니다만

char 배열에 그냥 값을 넣는 것은 무관한 부분입니다.

제가 보기엔 msg에 값이 안들어가는게 아니고
msg 배열에 들어간 데이터를 전송하는
Send 함수 내부가 잘못 코딩 되었을 가능성이 큽니다.

Send 함수 인자 받는 형태로 봐서는
원하는 데이터가 잘 나가야 정상입니다.

DWORD len 인자가 있다는 것은
함수 내부가 문자열 처리가 아니고

길이만큼 데이터를 강제로
보내는 방식으로 되어 있는게 맞으니까요.

CExTempCtrl::Send(int PortNo, BYTE *Msg, DWORD len) 함수 내부에서
시리얼 함수를 호출하는 부분이 잘못 되었을 것입니다.

보통 시리얼 전송 함수는 문자열 인자만 받아서 보내는 함수와
(예,     PutString(const AnsiString S) )
데이터 포인터와 길이를 받아서 보내는 함수가 존재합니다.
(예,     PutBlock(const void *Block, Word Len) )

Send 함수 내부에서
BYTE *Msg, DWORD len 를 그대로 시리얼 함수중에 같은 형태로 된 함수를
이용하여 보내면 될 것입니다.





입문자 님이 쓰신 글 :
:



:
: 안녕하세요. 수고가 많으십니다.
:
: 다름이 아니라..
:
: 시스템.
: Windows XP
: C++ Builder 6.0
:
: ///소스 코드...
:     char msg[32], msg1[32];
:     DWORD dwIndex = 0;
:     AnsiString szData;
:
:     ZeroMemory(msg, 32);
:     //국번..
:     msg[dwIndex++] = wChNo;
:
:     //명령어 코드..
:     msg[dwIndex++] = wCodeNo;
:
:     //설정값 주소지..
:     wData.wData = wAddr;
:     msg[dwIndex++] = wData.byData[1];
:     msg[dwIndex++] = wData.byData[0];
:
:     //데이터 갯수..
:     msg[dwIndex++] = 0x00;
:     msg[dwIndex++] = 0x01;
:
:     //Check Sum CRC16..
:     wData.wData = GetCheckSum_CRC16(msg, dwIndex);
:     msg[dwIndex++] = wData.byData[0];
:     msg[dwIndex++] = wData.byData[1];
:
: 이부분이 중요...!
:     Send(m_nPortNum, msg, ++dwIndex);
:
: 함수 원형..
: bool CExTempCtrl::Send(int PortNo, BYTE *Msg, DWORD len)
:
: msg : "0x01 0x04 0x03 0xE8 0x00 0x01 0xB1 0xBA" <--요걸 그대로 복사하고 싶습니다...
:
: 문제는 중간에 " msg[dwIndex++] = 0x00; " 이값이 꼭 들어가야 하는데..
:
: 값이 포인터 변수로 복사 될때에 0x00 앞의 값(msg : "0x01 0x04 0x03 0xE8")만 전달이 됩니다...ㅜ
:
: 이 값을 전체적으로 전달 할수 있는 방법 없을까요 ?
: 문자열 복사를 해도 0x00 값 앞의 값만 복사가 됩니다...크흑..
:
: 도와주십쇼~~~
:
:

+ -

관련 글 리스트
74650 시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 입문자 770 2017/11/14
74651     Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 746 2017/11/14
74652         Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 입문자 702 2017/11/14
74655             Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 738 2017/11/14
74653             (추가) Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 789 2017/11/14
74656                 감사합니다. 입문자 684 2017/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.