Q&A

  • serial 통신 예제
간단히 만들어 봤습니다.

1, 우선 var 및에 전역번수를 잡어 놓구

// variables for serial communication.

lpszCommName : PChar; {Serial Port Name}

hCommPort : THandle; {Port handle.}

iAccess : Integer; {Type of access needed.}

dwCreation : DWORD; {Creation flags.}

DeviceControlBlock : TDCB; {Serial Port Control Stucture}

ts : TCommTimeouts;



2. 그밑에다 DCB 상수(?)를 적어놓습니다.

const

{Serial port flag values.}

DCB_BINARY = $0001;

DCB_PARITY = $0002;

DCB_OUTXCTSFLOW = $0004;

DCB_OUTXDSRFLOW = $0008;

DCB_DTRENABLE = $0010;

DCB_DTRFLOW = $0020;

DCB_DSRSENSE = $0040;

DCB_TXCONTONXOFF = $0080;

DCB_OUTX = $0100;

DCB_INX = $0200;

DCB_PECHAR = $0400;

DCB_NULL = $0800;

DCB_RTSENABLE = $1000;

DCB_RTSFLOW = $2000;

DCB_RTSTOGGLE = $3000;

DCB_ABORT = $4000;



3. 물론 앞에 선언이 되어야 하고 implementation 아래 다음을 타이핑.



procedure TForm1.ComPortStart;

begin

lpszCommName := 'COM1';

iAccess := GENERIC_READ or GENERIC_WRITE;

dwCreation := OPEN_EXISTING;



hCommPort := CreateFile(lpszCommName, iAccess, 0, NIL, dwCreation,0,0);

SetupComm( hCommPort, 1024, 1024); // Buffer Size



///////////////////////////////////////////////////////////////////////

// 통신할때 포트에 쌓인 값이 몇바이트가 되던지 무조건 다읽고

// 기다리지 않고 다음것을 읽을 수 있도록 초기화 한다.

///////////////////////////////////////////////////////////////////////

ts.ReadIntervalTimeout := 5;

ts.ReadTotalTimeoutMultiplier := 5;

ts.ReadTotalTimeoutConstant := 50;

SetCommTimeouts(hCommPort, ts);



GetCommState( hCommPort, DeviceControlBlock ) ; //dcb의 기본값을 받는다.

DeviceControlBlock.BaudRate := 9600 ; //BAUD_9600 -- 전송속도

DeviceControlBlock.ByteSize := DATABITS_8 ; //데이타비트

DeviceControlBlock.Parity := NOPARITY ; //패리티 체크

DeviceControlBlock.StopBits := ONESTOPBIT ; //스톱비튼

SetCommState( hCommPort, DeviceControlBlock ) ; //변경된 Dcb 설정

end;



4. 불러쓸때는 간단히 'CommPortStart;'라고만 적으면 되겠죠?



5. 마지막으로 가장(?) 중요한건 나가기전에 반드시 close를 해줘야겠죠?

'CloseHandle(hCommPort);' 이렇게요.



-- 전에 시리얼 통신을 잘 몰라서 질문도 하구 컴포넌트도 구해봤지만,

이렇게 api를 이용하는게 가장 안정적이더라구요.

자세한 내용은 통신에 관한 책들을 참조하시고 도움됐으면 좋겠네요

그럼 수고하십시오.



0  COMMENTS
    • 구민오
    • 1999.02.05 11:02
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 세림
      1999.06.07 19:28
      간단한 웹서버 응용을 테스트하고 있는데 처음에는 익스플러어에서 실행되더니 다음부터는 연결 프로그...
    • 이정욱
      1999.02.06 09:54
      인터넷 프로그래밍을 하시면서 유해정보차단장치를 만드신다고 하셨는데 그것을 통제하는 방법은 있습니다....
    • 안치봉
      1999.06.08 00:35
      세림 께서 말씀하시기를... > 간단한 웹서버 응용을 테스트하고 있는데 > 처음에는 익스플러어에서 실행...
    • 이정욱
      1999.02.06 01:57
      메세지가 발생하면서 전달이 되지는 않을것 같다는것이 제 의견입니다. 그냥 IE는 ActiveX콘트롤로써 그부...
    • 성관
    • 1999.06.07 19:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김경호
      1999.02.06 01:14
      안녕하세요. A양식과 B양식을 하나로 합쳐서 미리보기 기능으로 만들려고 합니다. A양식은 1페이지에 B양...
    • 델사랑
      1999.06.07 19:45
      성관 께서 말씀하시기를... > 안녕하세요.. > 날씨가 무척이나 무덥지요,,,,, > 무더운 여름을 잘 보내...
    • 김재억
    • 1999.02.05 20:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.02.08 06:04
      E-Mail을 확인해 보세요. 김재억 wrote: > 안녕하세요? 김 재억입니다. > 제가 다니는 회사는 POD정기...
    • 박성훈
      1999.06.11 02:15
      조진희 께서 말씀하시기를... > 안녕들 하셨어요.. > 저희가 입력된 데이타 수정작업을 하려던 중에 dggr...
    • 초보
      1999.06.12 20:25
      박성훈 께서 말씀하시기를... > dbgrid를 선택하신 곳이 현재 레코드의 위치가 됩니다. 그러니까 사원테...
    • 강영구
    • 1999.02.05 19:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.02.08 06:01
      사용하시는 스케너의 Twain드라이버가 직접 아래작업들을 코맨드로 지원하지 않는다면 직접 스케너를 제어...
    • 전철호
      1999.06.07 20:01
      정성호 께서 말씀하시기를... > 안녕하세요.. 많은 도움을 받고 있는 신삥입니당... > 쩝 전 도와드릴 일...
    • 구민오
    • 1999.02.05 11:02
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김재휘
      1999.06.07 17:39
      DBGrid를 이용해서 테이블내에 레코드를 삽입하려하고 했습니다. 간단하다고 생각했죠.. Table1.Insert; ...
    • 이정욱
      1999.02.06 09:54
      인터넷 프로그래밍을 하시면서 유해정보차단장치를 만드신다고 하셨는데 그것을 통제하는 방법은 있습니다....
    • 이정욱
      1999.02.06 01:57
      메세지가 발생하면서 전달이 되지는 않을것 같다는것이 제 의견입니다. 그냥 IE는 ActiveX콘트롤로써 그부...
    • Hans
    • 1999.06.07 12:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 1999.02.05 04:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.02.05 06:58
      크리스탈 리포트(따로구입)는 물론 퀵리포트(델파이기본), 하이퍼 리포트, HTML리포트 등등 수도없이 많습...
    • 1999.02.05 04:14
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이영호
      1999.06.06 11:58
      인스톨 쉘드에서 여러개의 setup 화일들을 하나의 화일로 만들어서 실행시 자동인스톨이 되게 하려고 합...
    • 이정욱
      1999.02.05 06:58
      크리스탈 리포트(따로구입)는 물론 퀵리포트(델파이기본), 하이퍼 리포트, HTML리포트 등등 수도없이 많습...
    • 구민오
      1999.02.03 03:49
      텍스트 박스나 리치 텍스트 박스에 나타난 글 내용중에서 여러 검색어를 가지고 그 여러 검색어 중 하나라...
    • 류성호
      1999.06.07 20:11
      설치 프로그램을 만들어 주는 인스톨쉴드 프로그램은 여러가지가 있습니다. Windows용 설치프로그램 말고...
    • 이정욱
      1999.02.03 21:59
      검색을 하시는 루틴에서(물론 POS함수로 하시죠?) 두개의 검색문을 넣으시면 됩니다. 예를들어.. 그냥.....
    • 이정욱
      1999.06.06 04:19
      델파이 헬프에서 'Distributable Files'라는 색인으로 보세요. 이부분이 글씨가 작아서 잘 안보이니 인쇄...
    • 1999.06.05 23:45
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 박민주
      1999.02.02 19:08
      안녕하세요. 건전지 충방전 Test 시스템에 사용될 프로그램을 개발하려고 합니다. 가장 정밀할때의 타임...
    • 신호성
      1999.06.07 08:58
      희 께서 말씀하시기를... > 델파이에서 내장프로시저를 사용할때 한 묶음의 결과값을 얻고자 할때는 어떻...
    • 이정욱
      1999.02.03 21:47
      파워러브 델파이 97년 7월(5호)에 보시면 0.001초에 도전하자라는 것이 있습니다. 조금이나마 그것이 도움...
    • 구민오
    • 1999.02.03 03:49
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 황영일
      1999.06.05 20:13
      인스톨 프로그램을 만들어 배포해서 win95와 winnt에는 문제가 없었는데 win98에서 알리어스 language dri...
    • 이정욱
      1999.02.03 21:59
      검색을 하시는 루틴에서(물론 POS함수로 하시죠?) 두개의 검색문을 넣으시면 됩니다. 예를들어.. 그냥.....
    • 박민주
    • 1999.02.02 19:08
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.02.03 21:47
      파워러브 델파이 97년 7월(5호)에 보시면 0.001초에 도전하자라는 것이 있습니다. 조금이나마 그것이 도움...
    • 이정욱
      1999.06.05 20:12
      무슨 말씀이신지...? 다시 정확히 질문 바랍니다. 이현신 께서 말씀하시기를... > 윈도우에서 특정 폴...
    • 이현신
      1999.06.05 22:30
      이정욱 께서 말씀하시기를... > 무슨 말씀이신지...? 다시 정확히 질문 바랍니다. 그러니깐 PC '내 컴...
    • 김태균
      1999.06.07 17:49
      이현신 께서 말씀하시기를... > 이정욱 께서 말씀하시기를... > > 무슨 말씀이신지...? 다시 정확히 질문...
    • 김성중
    • 1999.02.02 04:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.02.02 09:44
      음.. 여기 있습니다. 잘 사용하시구요... 자주 들러서 답변도 해주세요. 서로 돕구 살아야죠. unit S...
    • 한 재
    • 1999.06.05 17:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 전철호
      1999.06.07 20:11
      한 재 께서 말씀하시기를... > DBGrid에 Memo필드의 내용 출력하기 예제(아래의 소스)의 DatabaseName은 '...