Q&A

  • [도와주세요] 시리얼 통신법 좀...
HAMODU-900 모델의 카드리더기를 이용하여 사원 근태를 체크하고 있습니다.

그런데, 프로그램이 워낙 구식(도스용 코볼)이라 이번에 델파이로 다시 만들려고

합니다.

COM1 port에 RS-422A와 RS-232C 잭이 물려 있읍니다. 아마 컨버터인 것 같습니다.

자료실에서 ComPort 라이브러리 2.63은 Down 받았는데 시리얼 통신에 대해서는

워낙 아는게 없어서 시작을 어떻게 해야할지 모르겠습니다.

혹시 소스좀 구할 수 있을까요?

고수님들의 조언좀 부탁합니다.

1  COMMENTS
  • Profile
    깨구락지 2001.12.17 18:28
    HAMODU 를 연결해서 사용중이라고 하셨는데 저도 그것(HAMODU-900)을 한대 갖고 있습니다. 그런데 연결방법을 몰라 사용을 못하고 있습니다.

    피씨와 어떻게 연결 되어 있는지요. 만든회사에 전화했더니 자세하게 가르쳐 주지를 않더군요. 님처럼 근태기록기를 꾸밀 계획입니다만...

    카드리더-컨버터-시리얼포트 이런식으로 연결되어 있나요?

    리더기의 셋팅은요?

    현재 설정되어 있는것을 기준으로 알려주시면 고맙겠군요.

    현재는 단순 리더기를 붙여서 사용중입니다. 피씨와 함께. 비싼 근태기록기져, 혈~



    시리얼통신은 포트와 보드레이트만 잘 맞추어주면 연결하는데는 이상이 없구요,

    특별한경우 데이타비트를 조정해주시면 됩니다. 그리고 데이타의 전송은 보통 이벤트가

    발생하므로-컴포넌트마다 다른이름임다.-이벤트를 이용하심됩니다. 역시 컴포넌트마다

    처리방법이 다르므로 함께 들어있는 예제를 참고하심 됩니다.

    아래는 CommPortDriver 라는 컴포넌트를 사용한 방법입니다.(현재 사용하고 있는)

    우선 연결부분입니다. INI 파일에 설정치를 기록했습니다.

    procedure TGuntaeForm.ConnectSerial();

    type

    TIniSerial=record

    Comport:byte;

    databits:byte;

    HWHS:byte;

    Parity:byte;

    Baudrate:byte;

    Stopbits:byte;

    SWHS:byte;

    end;

    var

    IniSerial:TIniSerial;

    begin

    IniFile:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));

    with IniSerial do begin

    Comport:=IniFile.ReadInteger('Serial','Comport',Comport);

    Databits:=IniFile.ReadInteger('Serial','DataBits',Databits);

    HWHS:=IniFile.ReadInteger('Serial','HWHS',HWHS);

    parity:=IniFile.ReadInteger('Serial','Parity',parity);

    Baudrate:=IniFile.ReadInteger('Serial','BaudRate',Baudrate);

    stopbits:=IniFile.ReadInteger('Serial','StopBits',stopbits);

    SWHS:=IniFile.ReadInteger('Serial','SWHS',SWHS);

    end; //with IniSerial

    IniFile.Free;

    //시리얼포트 활성

    with compt do begin

    ComPort:=TComPortNumber(IniSerial.Comport);

    ComPortDataBits:=TComPortDataBits(IniSerial.Databits);

    ComPortHwHandshaking:=TComPortHwHandshaking(IniSerial.HWHS);

    ComPortParity:=TComPortParity(IniSerial.parity);

    ComPortSpeed:=TComPortBaudRate(IniSerial.Baudrate);

    ComPortStopBits:=TComPortStopBits(IniSerial.stopbits);

    ComPortSwHandshaking:=TComPortSwHandshaking(IniSerial.SWHS);

    Connect;

    //포트검사

    if not Connected then begin

    messageDlg('시리얼포트 접속 실패!!'#13'프로그램은 종료됩니다.',mtError,[mbOK],0);

    Application.Terminate

    end;

    end; //with compt

    end;



    데이타 처리부분입니다. OnReceiveData 이벤트입니다.

    procedure TGuntaeForm.ComPtReceiveData(Sender: TObject;

    DataPtr: Pointer; DataSize: Cardinal);

    var

    pDataPtr: pchar;

    buffer: array[0..255] of char;

    cnt: integer;

    sTemp: string;

    begin

    pDataPtr:=DataPtr;

    cnt:=0;

    while DataSize > 0 do begin

    buffer[cnt]:=pDataPtr^;

    inc(pDataPtr);

    inc(cnt);

    dec(DataSize);

    end;

    sTemp:='';

    //숫자가 아닌 문자는 걸러내자!

    for cnt:=0 to 255 do

    if buffer[cnt] in ['0'..'9'] then

    sTemp:=sTemp+buffer[cnt];

    sTemp:=copy(stringreplace(sTemp,#13,'',[rfReplaceAll]),1,5);

    Savedata(trim(sTemp));

    buffer:='';

    end;



    깨굴~



    푼수: 위 CommPortDriver 는 www.bysmusic.com 에서 구했습니다.



    김규상 wrote:

    > HAMODU-900 모델의 카드리더기를 이용하여 사원 근태를 체크하고 있습니다.

    > 그런데, 프로그램이 워낙 구식(도스용 코볼)이라 이번에 델파이로 다시 만들려고

    > 합니다.

    > COM1 port에 RS-422A와 RS-232C 잭이 물려 있읍니다. 아마 컨버터인 것 같습니다.

    > 자료실에서 ComPort 라이브러리 2.63은 Down 받았는데 시리얼 통신에 대해서는

    > 워낙 아는게 없어서 시작을 어떻게 해야할지 모르겠습니다.

    > 혹시 소스좀 구할 수 있을까요?

    > 고수님들의 조언좀 부탁합니다.