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
[74655] Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ
정성훈.해미 [sage5nor] 3516 읽음    2017-11-14 17:38
sio_write 함수를
sio_putb 함수로 바꿔 보실레요?


입문자 님이 쓰신 글 :
:  먼저 답변 달아주신점 무한히 감사드립니다..
:
: ////////////////////////////////////////////////////////////////////
: Send 함수 내부 구조
: bool CExTempCtrl::Send(int PortNo, BYTE *Msg, DWORD len)
: {
:     if(g_bTempRunComm)
:     {
:         if(WaitComm()==false)
:         {
:             return false;
:         }
:     }
:     g_bTempRunComm = true;
:
:     EnterCriticalSection(&m_csTemp);
:
:     g_bTempNewMsg  = false;
:
:     int ret = sio_write(PortNo, (char*)Msg, len);
:
:     LeaveCriticalSection(&m_csTemp);
:
:     if (ret < 0)  { g_bTempRunComm = false; return false;}
:
: //    if(WaitReturn()==false)
: //        return false;
:
:     g_bTempRunComm = false;
:     return true;
: }
: ////////////////////////////////////////////////////////////////////
: 위에 처럼 바로 전송하게 되어있습니다.
: Pcomm 라이브러리 사용중에 있구요.
:
:
: 디버그 인스펙터 이용해서 함수 값이 어떻게 들어있는지 캡쳐해서 파일을 올렸습니다.
: 흑....
:
:
:
: 정성훈.해미 님이 쓰신 글 :
: : 문자열 처리에서는  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 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 입문자 3597 2017/11/14
74651     Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 4043 2017/11/14
74652         Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 입문자 3542 2017/11/14
74655             Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 3516 2017/11/14
74653             (추가) Re:Re:Re:시리얼 통신 BYTE 변수 복사 질문 있습니다. 돠와줍쇼ㅜ,.ㅠ 정성훈.해미 3675 2017/11/14
74656                 감사합니다. 입문자 3336 2017/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.