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
[12185] Re:Re:시리얼 컴포넌트 ComPort에 대한 질문입니다.(소스 첨부)
heartsim [] 1968 읽음    2001-10-30 16:54
답변 정말 감사합니다.
어느정도 도움이 많이 되었네요...

좋은 하루되세요..^^






개박살.U&I 님이 쓰신 글 :
:
: 안녕하세요? 개박살입니다.
:
: 답변이 없길래 제가 아는 범위만 말씀드리겠습니다 ^^;
:
: 1. 첫번째 컴파일 Warning은 확실한 원인을 모르겠군요 아마 빌더에서 속도를 위해 헤더를 미리 컴파일하는 부분이 동작한하는거 같은데 이건 상관없을꺼 같군요 어짜피 Warnning 이니 신경쓰지 마시고... (찾아보니 Pre-compile헤더를 찾아서 지우면 된다는 소문이 ^^; )
:
: 2. 말씀하신 Save, Load기능은 소스를 보니까 컴포트설정에대한 저장과 로드기능이군요 이건 Registry를 이용하는 함수들에서 Exception이 나는 걸로 보아.. 흠.. 혹시 윈2000을 사용하십니까? 윈2000에서는 R/W 에러가 날쑤도.. LoadSettings/StoreSettings 함수의 소스가 있다면 Resistry쪽 함수를 공부하셔서 고쳐보심이... Exception처리를 해주시면 적어도 에러는 막을수 있을껍니다.
:
: 3. ShowSetupDialog은 저도 사용을 안해봐서 모르지만, 윈도우장치관리자에서 COM1밖에 설치되어있지 않는거 아닙니까? 보통 COM쪽은 장치관리자에서 얻어올수도.. 마찬가지로 소스가 있다면 다이얼로그를 직접 수정하세요 강제로 COM1, COM2..를 추가할수도 있겠죠
:
: 4. ComPort->Open, Close() 함수는 컴포트를 열어라, 닫아라 하는거죠.. --;
: Button_Open->Caption = "Open" 는 버튼을 하나만 두고 열기 닫기로 버튼의 이름을 표시해주기위한 처리같습니다. 기능상이 아니라 열기, 닫기 이름만 바뀌는 거죠
:
: 5. 카메라 제어라면,, 타이머로도 가능하죠 스레드방식의 컴포넌트는 보통 실시간장비 제어같은곳에 쓰입니다. 실시간 제어가 빠른 제어가 필요없다면 ComPort가 스레드가 아니더라도 무방할꺼 같군요..
:
: 그럼 허접답변이지만 참고정도는 하세요~~
:
: 개박살이었습니다.
:
: 박경원 님이 쓰신 글 :
: : 안녕하세요.빌더 초보입니다.
: :
: : 시리얼 컴포넌트인 ComPort을 어렵게 다운받아서 등록까지 완료했습니다.
: : 그리고 예제 소스(빌더 5.0소스)를 컴파일 시키고 직접 rs-232c케이블을 연결시켜 통신을 해봤죠.
: : 데이터 전송은 잘 되는데, 몇가지 문제가 발생해서요.
: :
: : 첫번째는 컴파일을 하면 [C++Warning]ComMainForm.cpp(3):W8058 Cannot create pre-compiled header:write failed란 경고 메세지가 뜨네요. 아무리 에러를 찾아봐도 잘 되지가 않네요.
: :
: : 두번째는 버튼중에 Store버튼기능과 Load버튼 기능이 있는데,
: : 버튼을 누르면 프로그램 에러 메세지 창이 뜨러다구요.
: : 에러 메세지는 다음과 같습니다.
: : 먼저 Store버튼을 물렀을 때 에러메세지 입니다.
: : Project ComExampleCB5.exe raised exception class ERegistryException with message
: : 'Failed to set data for 'Port''. Process stopped. Use Step or Run to continue.
: :
: : 두번째 Load버튼을 눌렀을 때의 에러메세지 입니다.
: : Project ComExampleCB5.exe raised exception class EConvertError with message '"is
: : not a valid integer value'.Process stopped. Use Step or Run to continue.
: :
: : Store와 Load의 관련 함수는 다음과 같습니다.
: : 정확히 Load와 Store(아래 함수의 기능)기능이 무엇이고 왜 에러가 뜨는지 알고 싶습니다.
: : void __fastcall TForm1::Bt_LoadClick(TObject *Sender)
: : {
: :   ComPort->LoadSettings(stRegistry, "HKEY_LOCAL_MACHINE\Software\Dejan");
: : //  ComPort->LoadSettings(stIniFile, "e:\test.ini");
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::Bt_StoreClick(TObject *Sender)
: : {
: :         ComPort->StoreSettings(stRegistry, "HKEY_LOCAL_MACHINE\Software\Dejan");
: : //  ComPort->StoreSettings(stIniFile, "e:\test.ini");
: : }
: : //---------------------------------------------------------------------------
: :
: :
: : 세번째는 ComPort->ShowSetupDialog()입니다.
: : 실행을 하고 Settings버튼을 누르면 port가 com1하나만 나오는데,
: : com2, com3, com4등의 항목을 나오게 할려면 어케 하면 되는지요.
: :
: : 네번째는 ComPort->Close() (또는 ComPort->Open();) 함수가 있는데,
: : Button_Open->Caption = "Open";(또는 Button_Caption-"Close")가 관련이 있는 것 같은데...
: : 구체적으로 어떻게 관련이 있는지 알고 싶습니다.
: :
: : 그리고 마지막 질문인데요...
: : 쓰레드 방식을 이용한 컴포넌트도 있고 또 기능중에는 타임기능도 있는데,
: : ComPort에는 이런 기능이 있는지요...
: : 또 없다면 쓰레드 방시과 타임방식을 안 써도 무방한지요.
: : 저의 경우 시리얼을 이용할 곳은 카메라 제어에 이용할려고 합니다.
: : 그렇게 속도를 요하는 곳이 아닌 것 같은데...답변 부탁드립니다.
: :
: : 넘 질문이 방대하죠................
: : 초보라 그러니 넓은 아량으로 봐주시고.....바쁜와중에도 답변해주시면 감사하겠습니다.
: :
: :
: : 첨부:ComPort 예제 소스
: :
: :
: : ComExampleCB5.bpr(빌더5.0 소스)
: :
: : /*********************** ComMainForm.h ***************************/
: :
: : //-------------------------------------------------------------
: : #ifndef ComMainFormH
: : #define ComMainFormH
: : //-------------------------------------------------------------
: : #include <CPortCtl.hpp>
: : #include <CPort.hpp>
: : #include <ExtCtrls.hpp>
: : #include <StdCtrls.hpp>
: : #include <Dialogs.hpp>
: : #include <Forms.hpp>
: : #include <Controls.hpp>
: : #include <Graphics.hpp>
: : #include <Classes.hpp>
: : #include <SysUtils.hpp>
: : #include <Messages.hpp>
: : #include <Windows.hpp>
: : #include <SysInit.hpp>
: : #include <System.hpp>
: : //-------------------------------------------------------------
: : class TForm1 : public TForm
: : {
: : __published:    // IDE-managed Componets
: :     TComPort* ComPort;
: :     TMemo* Memo;
: :     TButton* Button_Open;
: :     TButton* Button_Settings;
: :     TEdit* Edit_Data;
: :     TButton* Button_Send;
: :     TCheckBox* NewLine_CB;
: :     TPanel* Panel1;
: :     TButton* Bt_Store;
: :     TButton* Bt_Load;
: :     TComLed* ComLed1;
: :     TComLed* ComLed2;
: :     TComLed* ComLed3;
: :     TComLed* ComLed4;
: :     TLabel* Label2;
: :     TLabel* Label3;
: :     TLabel* Label4;
: :     TLabel* Label5;
: :     TComLed* ComLed5;
: :     TComLed* ComLed6;
: :     TLabel* Label1;
: :     TLabel* Label6;
: :     void __fastcall Button_OpenClick(TObject* Sender);
: :     void __fastcall Button_SettingsClick(TObject* Sender);
: :     void __fastcall Button_SendClick(TObject* Sender);
: :     void __fastcall ComPortOpen(TObject* Sender);
: :     void __fastcall ComPortClose(TObject* Sender);
: :     void __fastcall ComPortRxChar(TObject* Sender, int Count);
: :     void __fastcall Bt_LoadClick(TObject* Sender);
: :     void __fastcall Bt_StoreClick(TObject* Sender);
: : private:    // User declarations
: : public:        // User declarations
: :     __fastcall TForm1(TComponent* AOwner);
: : };
: : //-------------------------------------------------------------
: : extern PACKAGE TForm1* Form1;
: : //-------------------------------------------------------------
: : #endif
: :
: :
: :
: :
: :
: : /*********************** ComMainForm.cpp ***************************/
: :
: : //---------------------------------------------------------------------------
: : #include <vcl.h>
: : #pragma hdrstop
: :
: : #include "ComMainForm.h"
: : //---------------------------------------------------------------------------
: : #pragma package(smart_init)
: : #pragma resource "*.dfm"
: : TForm1 *Form1;
: : //---------------------------------------------------------------------------
: : __fastcall TForm1::TForm1(TComponent* Owner)
: :   : TForm(Owner)
: : {
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TForm1::Button_OpenClick(TObject *Sender)
: : {
: :   if (ComPort->Connected)
: :     ComPort->Close();
: :
: :   else
: :     ComPort->Open();
: : }
: :
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::Button_SettingsClick(TObject *Sender)
: : {
: :   ComPort->ShowSetupDialog();
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::Button_SendClick(TObject *Sender)
: : {
: :   AnsiString Str;
: :
: :   Str = Edit_Data->Text;
: :   if (NewLine_CB->Checked)
: :     Str = Str + "\r\n";
: :   ComPort->WriteStr(Str);
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::ComPortOpen(TObject *Sender)
: : {
: :   Button_Open->Caption = "Open";
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::ComPortClose(TObject *Sender)
: : {
: :   Button_Open->Caption = "Close";
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::ComPortRxChar(TObject *Sender, int Count)
: : {
: :   AnsiString Str;
: :
: :   ComPort->ReadStr(Str, Count);
: :   Memo->Text = Memo->Text + Str;
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::Bt_LoadClick(TObject *Sender)
: : {
: :   ComPort->LoadSettings(stRegistry, "HKEY_LOCAL_MACHINE\Software\Dejan");
: : //  ComPort->LoadSettings(stIniFile, "e:\test.ini");
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::Bt_StoreClick(TObject *Sender)
: : {
: :         ComPort->StoreSettings(stRegistry, "HKEY_LOCAL_MACHINE\Software\Dejan");
: : //  ComPort->StoreSettings(stIniFile, "e:\test.ini");
: : }
: : //---------------------------------------------------------------------------
: :
: :
: :
: :
: :
: :
: :
: :
: :
: :

+ -

관련 글 리스트
12158 시리얼 컴포넌트 ComPort에 대한 질문입니다.(소스 첨부) 박경원 2148 2001/10/29
12182     Re:시리얼 컴포넌트 ComPort에 대한 질문입니다.(소스 첨부) 개박살.U&I 2488 2001/10/30
12185         Re:Re:시리얼 컴포넌트 ComPort에 대한 질문입니다.(소스 첨부) heartsim 1968 2001/10/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.