Q&A

  • RS232C 테스트 용 프로그램
얼마전에 RS232C 기능에 대해 질문했던 이용벽입니다.
소개해 주신 <델파이 정복>을 정독하고 이 사이트에 공개된 Object를 여러개 받아서 시행착오를 거듭한 끝에
드디어 기본적인 전송과 수신을 할 수 있게 되었습니다. 며칠간의 어둠에서 빛을 얻은 기분입니다.
혹시나 같은 고민을 하시는 분이 있으시면 도움이 될까해서 소스를 올려드립니다.
아직 초보적인 상태이지만 초기에 기능확인에 도움이 될것이라 믿습니다.
TComm이란 Object를 사용했는데 원래는 Component로 등록하고 사용하는 것이었습니다.
그런데 몇번 테스트하고 지우고 보니 다시 Component 등록이 안되더군요.
할수없이 Object로 사용하는 것을 시도했는데 다행히 통했습니다.
그래서 TCommV2로 이름을 임의로 바꾸었습니다. Version2.0이라는 의미입니다.(원래는 1.1version)
Register부분만 //로 정지시켰으므로 필요하신 분은 복귀시켜서 사용하십시오.

한가지 질문이 있습니다. 프로그램 내에 아래롸 같은 Procedure가 있는데요
Count라는 변수가 어떤 것인지 아직도 잘 이해가 안됩니다.
아실 수 있으면 설명 부탁드립니다.
도와주신 분들께 다시 한번 감사드립니다.


procedure TForm1.CommRead(Sender: TObject; Count: Word);   {Read}
var
  Buff: array[0..1023] of Char;
  RLen: Word;
  I: Integer;
  Str: String;
begin
  Comm1.ReceiveBuf(Buff[0], Count, RLen);
  Str := '';
//  for I := 0 to RLen - 1 do begin
  for I := 0 to BufShow - 1 do begin
    if (Buff[I] < ' ') or (Buff[I] >= #127) then
      Str := Str + '(#' + IntToHex(Byte(Buff[I]), 2) + ') '
    else
      Str := Str + String(Buff[I]) + ' ';
  end;
  Memo1.SelStart := Length(Memo1.Text);
  Memo1.SelText := String(Str);
  Memo1.Lines.Add('');
  Memo1.Lines.Add('');
end;
2  COMMENTS
  • Profile
    최용일 2009.12.31 12:45
    최대 count만큼 RS232C를 통해서 데이터를 읽고, 데이터중 화면상에 뿌릴 수 없는 아스키코드는 16진수로 변환해서 메모장에 뿌리는 함수이군요...
    TComm이란 컴포넌트를 안써봤지만... 아래 코드에서 count는 읽어올 데이터의 최대 갯수이고, RLen은 읽은 갯수겠네요...

    Comm1.ReceiveBuf(Buff[0], Count, RLen);

    읽을 수 있는 데이터가 1000개 있을 때, count가 100이면 100개를 읽어와서 RLen=100이 될테고, count가 2000이면 1000개를 다 읽어와서 RLen=1000 이 되겠죠.
  • Profile
    이용벽 2009.12.31 19:44
    질문 하나 더.
    잘 동작하던 프로그램이 가끔 이상 동작을 해서 고생하고 있습니다.
    위 문장을 보시면 제 장비에서 나오는 신호가 (#80)(X)(Y)(#FE).....형태가 되어야 합니다.(X, Y는 변수)
    그런데 초기 데이터에 b(#E5)c(#00)5(#BD)(#00)(#00) 로 시작하면서 엉뚱한 데이터형으로 변합니다.
    PC와 장비를 리셋하고도 잘 안되다가 어느 순간 정상화되곤 하는데 원인을 알 수 없어서 예방이 안되고 있습니다.
    PC측의 COM1 포트 버퍼를 Clear해야 하는 거라고 생각하는 데 TComm 이란 객체에 그런 기능이 있는지 봐도 잘 모르겠네요.
    시간 있으시면 잠시 들여다 보시고 가르쳐주셨으면 합니다. (지금 열심히 보고 있는데 이해력이 달려서....)
    TComm 파일은 위 첨부에 포함되어 있습니다.
    • 후초보
    • 2010.01.07 01:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김준형
      2010.06.12 00:31
      아마 한글설정하는 부분에서 Microsoft IME 2007이상으로 설정되어 있는것 같은데.. 제어판->국가 및...
    • 매중원
    • 2010.01.06 22:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.01.06 23:02
      코드를 이해하시고 짜신것은 아닌듯하군요... 아래 부분이 잘못
    • 한윤식
    • 2010.01.06 22:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • phono
      2010.01.07 01:35
      폰트 크기 줄이지 않는 이상 안됩니다. 퀵레포트의 비애죠 ㅠ.ㅠ
    • 최용일
      2010.01.06 23:10
      이런경우는 OnMouseDown이나 OnMouseUp에서 처리하시면 됩니다. 이벤트의 파라매터중에서 Button을 보시...
    • 이종원
      2010.01.06 23:45
      답변 감사드립니다. ^^ 확인해보겠습니다 ^^
    • 스바쉬
    • 2010.01.06 20:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • phono
      2010.01.07 01:37
      BDE 쓰시나요 ADO 쓰시나요? 아 하긴 델4면 BDE 일거 같은데.., 아주 간단 INSERT 쿼리부터 테스트...
    • 희아빠
    • 2010.01.06 19:19
    • 0 COMMENTS
    • /
    • 0 LIKES
    • HyunjSohn
    • 2010.01.06 10:05
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.01.06 23:17
      자료실에 있는 델6지원하는 2.75버전을 설치해보세요.
    • HyunjSohn
      2010.01.08 08:36
      감사합니다만, 제가 보안때문에 외부파일을 가지고 들어가지 못하는 상황인데 지금 가지고 있는 RxLib를 ...
    • 최용일
      2010.01.08 08:47
      require절에있는 것들 다 지우고 다시 컴파일해보세요. 아마도 필요한 패키지 추가할 것인가 물어볼것입...
    • HyunjSohn
      2010.01.12 07:36
      감사합니다^^ path 추가로 해결이 됐습니다.
    • 이규하
      2010.01.27 18:05
      http://jvcl.delphi-jedi.org/ 에 최신의 Rxlib 를 계승한 Jedi Visual Component Library 가 있습니...
    • phono
      2010.01.07 02:10
      batch 처리 statement가 있다고는 얼핏 들은거 같은데.., 200만건 이면은 후덜덜한 양이네요.. ^^
    • phono
      2010.01.08 19:14
      "현재는 sqlldr 로더를 이용해서 10분미만으로 작업을 끝내고 있다고 합니다만, 이것이 로더를 사용...
    • 구창민
      2010.01.08 19:49
      아.. 네 그런 조치는 이미 해두었다고 하네요.. 현재는 그냥 로더를 이용해 처리한답니다...그시간...
    • phono
      2010.01.08 22:38
      이렇게 해도 될런지 모르겠지만.. 저같은 경우 인서트 껀수가 많은거 같은 경우 가끔 트랜젝션 ...
    • 이강석
    • 2010.01.06 01:40
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이강석
      2010.01.06 01:55
      <!--CodeS--> procedure TfMain.VMRTextOut(AText: string); var VMRBitmap: TVMRBit...
    • 이강석
      2010.01.06 02:29
      쩌업...TVideoWindow 프로퍼티 Mode를 vmVMR로 주니까 나오네요?? ^^
    • 이용벽
    • 2010.01.04 19:35
    • 8 COMMENTS
    • /
    • 0 LIKES
    • 아이에스
      2010.01.04 19:46
      Memo1.Lines[0] + Memo1.Lines[1];
    • 이용벽
      2010.01.04 20:14
      2개만이 아니라 연속으로 출력하려고 하는데요
    • 오름
      2010.01.04 20:45
      Memo1.Lines.Add('A'); Memo1.Lines.Add('B'); Memo1.Lines.Delimiter:=chr(28); ShowMEssage(Memo1.L...
    • 이용벽
      2010.01.04 22:52
      콤파일 시 이런 메시지가 나옵니다. 제가 뭔가 사용을 잘못한것인지... Undeclared identifier: 'Delimi...
    • 장성호
      2010.01.04 22:59
      다음과 같이 하면 line을 바꾸지 않고 계속 Memo에 추가됩니다. Memo1.Text:=Memo1.Text+'A';...
    • 이용벽
      2010.01.05 00:05
      감사합니다. 그런 방법이 있었군요. 한가지 더. 정지시킬 때까지 무한 루프일 경우는 어떻게 될까요. M...
    • 소울해커
      2010.01.05 08:12
      변수 하나 두시고 취소 버튼만드셔서 컨트롤하셔요. 루프중에 프로그램이 응답없음이 되지 않도록 ...
    • • • •
    • 최용일
      2010.01.04 23:19
      TList로 바꾸시는것이 좋을듯하네요. 안의 데이터가 WIN32_FIND_DATA라고 생각하시고 포팅하시면 될것같...
    • 소울해커
      2010.01.05 08:15
      답변 감사합니다. 헌데... 개발 방향이 수정되어서 고심한 의미가 사라질거 같습니다. ㅠ_ㅠ;
    • 김수현
    • 2010.01.02 06:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2010.01.04 00:35
      <!--CodeS--> var pUserName: array[0..80] of Char; wLength: LongWord; begin wLengt...
    • 신동열
    • 2010.01.01 03:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 권익수
      2010.01.02 04:38
      Connections 메뉴의 Show Host Name 옵션이 체크되어있지않나 확인해보세요. Show Host Name 옵션이 체...
    • 최용일
      2009.12.31 12:37
      pipe
    • 이용벽
    • 2009.12.31 02:42
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.12.31 12:45
      최대 count만큼 RS232C를 통해서 데이터를 읽고, 데이터중 화면상에 뿌릴 수 없는 아스키코드는 16진수로...
    • 이용벽
      2009.12.31 19:44
      질문 하나 더. 잘 동작하던 프로그램이 가끔 이상 동작을 해서 고생하고 있습니다. 위 문장을 보시면 ...
    • 박선우
    • 2009.12.30 20:40
    • 0 COMMENTS
    • /
    • 0 LIKES