HAMODU-900 모델의 카드리더기를 이용하여 사원 근태를 체크하고 있습니다.
그런데, 프로그램이 워낙 구식(도스용 코볼)이라 이번에 델파이로 다시 만들려고
합니다.
COM1 port에 RS-422A와 RS-232C 잭이 물려 있읍니다. 아마 컨버터인 것 같습니다.
자료실에서 ComPort 라이브러리 2.63은 Down 받았는데 시리얼 통신에 대해서는
워낙 아는게 없어서 시작을 어떻게 해야할지 모르겠습니다.
혹시 소스좀 구할 수 있을까요?
고수님들의 조언좀 부탁합니다.
피씨와 어떻게 연결 되어 있는지요. 만든회사에 전화했더니 자세하게 가르쳐 주지를 않더군요. 님처럼 근태기록기를 꾸밀 계획입니다만...
카드리더-컨버터-시리얼포트 이런식으로 연결되어 있나요?
리더기의 셋팅은요?
현재 설정되어 있는것을 기준으로 알려주시면 고맙겠군요.
현재는 단순 리더기를 붙여서 사용중입니다. 피씨와 함께. 비싼 근태기록기져, 혈~
시리얼통신은 포트와 보드레이트만 잘 맞추어주면 연결하는데는 이상이 없구요,
특별한경우 데이타비트를 조정해주시면 됩니다. 그리고 데이타의 전송은 보통 이벤트가
발생하므로-컴포넌트마다 다른이름임다.-이벤트를 이용하심됩니다. 역시 컴포넌트마다
처리방법이 다르므로 함께 들어있는 예제를 참고하심 됩니다.
아래는 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 받았는데 시리얼 통신에 대해서는
> 워낙 아는게 없어서 시작을 어떻게 해야할지 모르겠습니다.
> 혹시 소스좀 구할 수 있을까요?
> 고수님들의 조언좀 부탁합니다.