Ganz kurz aus meiner Erfahrung mit einem RFID - Reader:
Wenn der Reader seriell angesprochen werden kann (z.B. virtueller
COM-Port über USB), einfach eine Komponente für serielle Kommunikation beutzen. Gibt es einige...google mal nach DELPHI und serial Communication library). Es gibt freie und kommerzielle...
Diese haben überlicherweise bereits eingebaute Events für z.B. onReceiveData die die empfangenen Zeichen zur Verfügung stellen und besitzen Methoden für das Öffnen, Schliessen des
COM-Ports und das Senden von Daten (meist als
ASCII-String).
Was an den Reader gesendet werden muss und wie er antwortet muss allerdings bekannt sein (meist durch den Hersteller des Readers zu bekommen).
Für das Empfangen sah bas bei mir prinzipiell so aus (bitte nur als Schema sehen, es ist nach den damaligen Vorgaben des Reader-Herstellers mal so erzeugt worden ...).
Code:
//------------------------------------------------------------------------------
//
Handle OnReceiveData event of the CommPortDriver
procedure TfmMain.CommPortDriverMainReceiveData(Sender: TObject;
DataPtr: Pointer; DataSize: Cardinal);
var
P: PChar;
begin
P:=DataPtr;
while DataSize > 0 do
begin
case P^ of
#13:begin //CR Detection
_RecvDataBuild:= _RecvDataBuild + P^;
end;
#10:begin //LF Detection, data fully received
_RecvDataBuild:= _RecvDataBuild + P^;
ReceiveDataStr:= _RecvDataBuild;
_RecvDataBuild:= ''; //Prepare for new data to be fetched
AddLineToComLog( ReceiveDataStr , clBlack);
RxdHasAck:= Pos('ack',ReceiveDataStr) > 0; //is there a "ack" in received string ?
RxdHasNak:= Pos('nak',ReceiveDataStr) > 0; //is there a "nak" in received string ?
end;
else
_RecvDataBuild:= _RecvDataBuild + P^; //Accumulate received data
end;
inc(P);
dec(DataSize);
end;
end;
...und so für das Senden von Daten:
Code:
//------------------------------------------------------------------------------
// Send a string to the reader / writer device and log the string into the
// logbook
procedure TfmMain.SendStringToReaderWriter(aSendStr: String);
begin
if CommPortDriverMain.Connected then
begin
CommPortDriverMain.SendString( aSendStr );
AddLineToComLog( #09 + aSendStr , clBlack);
end;
end;
Gruss Warp