Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi USB - Drittanbiter Gerät benutzen (https://www.delphipraxis.net/176374-usb-drittanbiter-geraet-benutzen.html)

mkrasselt1 31. Aug 2013 09:29

USB - Drittanbiter Gerät benutzen
 
Hallo Leute,
ich sitze gerade an einem auch für mich neuen Szenario, für das mir zwar Lösungswege eingefallen sind,
diese aber nicht zum erwünschten Problem führen:
Mir liegt ein RFID-Mifare Kartenleser vor, der von einer Firma samt Software ausgeliefert würde.
(Diese ist allerdings auf Italientisch, und alles andere als einfach zu bedienen...)
Meine Aufgabe besteht jetzt darin, dieses Gerät selbst anzusteuern um bestimmte Funktionen zu benutzen.
Soviel habe ich bereits herrausgefunden:
Im Gerät versteckt sich ein USB-Seriel-Adapter(sollte es ja einfacher machen...) und eine offenbar selbsterstelle Schaltung.
Die Daten die an das Gerät gesendet werden, habe ich mittels Seriell-Hardware Monitor aufgezeichnet.
http://nmail.us.to/public/read.html
Das ist ein kompletter Lesevorgang.
Jetzt habe ich in meinem Delphiprogramm die Unit comcrtl eingebunden, und kann eine Verbindung mit dem Gerät aufnehmen. Jetzt hab ich aber ein Problem:
wie kann ich genau solche Daten wie in dem Beispiel an das Gerät senden, um so Daten auf die Karten zu schrieben ?
einfach mit
comport.Send('5');
comport.Send('5');
comport.Send('8');
comport.Send('a');
...
oder wie ?
und wie warte ich auf die Antwort (die ja durchaus einige Millisekunden brauchen kann?)
zum Thema seriell programmieren mit delphi waren meine Recherchen leider immer wenig ergiebig.
die meisten Seiten zeigten nur reine ausgaben....das ist ja einfach...
Könnt ihr mir weiterhelfen ?
Gerne zeige ich euch auch meinen bisherigen code, aber der ist wenig umfangreich...
Grüße und Danke im Vorraus:
Michael

hathor 31. Aug 2013 12:35

AW: USB - Drittanbiter Gerät benutzen
 
RFID-Mifare Kartenleser: Kannst Du damit auch Karten und Chips beschreiben?

Die meisten Cards für Zugangskontrollen sind nur zum Lesen geeignet.
Der Chip EM4102 ist z.B. nur zum Lesen...
EM 4102 - 125 kHz System - Read Only
Spezifikationen:
Datenübertragung Kontaktlos
Betriebsfrequenz 100 - 150 kHz (normalerweise 125 kHz)
Speicherkapazität 64 Bit nur Lesespeicher (read only)
Aufteilung der Speicherkapazität:
9 Bit Header
10 Bit Reihen-Parity-Bit
4 Bit Spalten-Parity-Bit
40 Bit Data / 1 Step-Bit

Reichweite Lesen Ca. 5 cm (abhängig von der Antenne)
EM410x Transponder geben eine Seriennummer-Information in der Länge von 5 Bytes zurück.
Die Seriennummern werden vom Hersteller vergeben.

mkrasselt1 31. Aug 2013 14:58

AW: USB - Drittanbiter Gerät benutzen
 
ja mit dem Leser lässt sich auch schreiben.
Und leider ist es "Pflicht", dieses Gerät zu verwenden,
denn es hat noch eine zweite funktion. ...
(kann ich nichts für :/)
Wichtig zu wissen ist eigentlich nur das das nicht für Zugangskontrolle genutzt
wird, sondern zum bezahlen. Und die Leute die das Aufladen durchführen sollen,
sind... naja es soll halt in der Bedienung so einfach wie möglich sein.
Und weder Karten noch die Art des Systems darf ich bestimmen :/ (die sind von einem
zulieferer gegeben, der auch die Lese/schreibgeräte in den Automaten produziert)
Blöderweise ist diese Technologie auch nur eingekauft, das heißt die können und mit dem
Quellcode nicht aushelfen.
Leider.
Deswegen bin ich daran, das lesegerät selbst anzusteuern

WARP4 3. Sep 2013 08:42

AW: USB - Drittanbiter Gerät benutzen
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz