Q&A

  • RS232C 수신에 관련 질문
rs232c 통신을 "COMM32" 또는 "COMM" 콤포넌트를 이용하여 통신 프로그램을 작성 하였는데 각각 장단점이 있습니다.
하지만 제가 원하는것은 만족을 할 수 가 없어 고수님들의 조언을 얻고자 이 글을 올립니다.
꼭 보시고 답변 부탁 드립니다. ...

1. 콤포넌트의 기능
  COMM32 는 송신시 "00" 을 보낼 수 없고, 수신은 가능 하며 RTS, CTS
    제어가 안됨.
  COMM 은 송신시 "00" 을 보낼 수 있고, RTS, CTS 제어가 되며 수신버퍼에
    "00"가 들어오면 STOP BIT로 생각하는지 그 뒤로는 짤림.

2. 제가 원하는 기능
   "1." 내용을 모두 만족하는 방법이나 콤프넌트 소개 바랍니다.
   RTS, CTS 제어 및 "00"를 송신도 하고 수신도 되어야함.

3. 프로그램한 내용 (COMM으로 한 내용임 한번 봐 주시고 지적 해 주세요.)
  1) 송신
     procedure TMainF.write1(code: Integer);
     var num, txdata : string;
          wrkstr: pchar;
          code1 : char;
          count, cnt, cnt1, i : integer;
     begin
         readyflg1 := 0;
         cnt := 0;
         code1 := char(code);
         num := #$55 + #$55 + #$98 + code1 + #$00 + #$55;
         count := Length(num);
         for i := 1 to count do
         txdata := txdata + ' ' + inttohex(Byte(num[i]), 2);
         Memo1.Lines.add(txdata);
         comm1.SetRTSState(True);
         wrkstr := pchar(num);
         Comm1.write(wrkstr[0], Count);
         comm1.SetRTSState(False);
      end;
  2) 수신
      procedure TMainF.Comm1RxChar(Sender: TObject; Count: Integer);
      type
         CharBuf = array[0..99] of Char;
      var
          buffptr : ptrchar;
          commbuff : string;
          Buffer: ^CharBuf;
       begin
          GetMem(Buffer, Comm1.ReadBufSize);
          Fillchar(Buffer^, Comm1.ReadBufSize, 0);
          Comm1.Read(Buffer^, 16);
          commbuff :=  Buffer^;
       end;

       //이렇게 하면 commbuff  의 내용을 디스플레이 하여 보면 "00"이후의
         data는 나오지 않음.
////////////////////////////////////////////////////////////////////
3  COMMENTS
  • Profile
    최영권 2002.01.14 20:03
    제생각으로는
    사용하신 콤포런트가 널(NULL)값을 지원하는지 체크해보는게 나을거 같군여
    지원된다면
    받아드린 변수가 string이라면 그변수 length부분에 널부터 추가되어지는 바이트수만큼 추가를 해주셔야 할거 같은데여



  • Profile
    김정기 2002.01.13 00:04
    저 같이 허접한놈이 답변을 해도 될려나...
    사실 답변은 아니고요. 이런문제가 아닐까? 라고 쓸대없이 생각하게 되어서.

    Recive이벤트가 발생하여 바로 Data를 통째로 읽어왔을때...
    이벤트가 발생했다는거 뿐이지 Data는 다 전송된거 아니잖아요.
    그래서 Data의 부분만 가져온게 아닐지..
    그래서 한프레임이 만들어질때까지 기다려야 되는것은 아닌지... 라고..

    그냥 AsyncFree 이걸 사용했을때 그랬던적이 있어서요! ComDrive를
    사용했을대도 그랬던거 같고..

    그냥 제생각이에요. 쓸대없이 죄송합니다. (__)
  • Profile
    김흥식 2002.01.10 00:50
    안녕 하십니까.
    제가 현재 사용중인 콤포넌트를 보내드립니다.
    궁금한것이 있으면 멜 주십시요.