AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

USB - Drittanbiter Gerät benutzen

Offene Frage von "WARP4"
Ein Thema von mkrasselt1 · begonnen am 31. Aug 2013 · letzter Beitrag vom 3. Sep 2013
 
WARP4

Registriert seit: 3. Aug 2006
7 Beiträge
 
Delphi XE2 Professional
 
#4

AW: USB - Drittanbiter Gerät benutzen

  Alt 3. Sep 2013, 08:42
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
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz