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
Antwort Antwort
mkrasselt1

Registriert seit: 14. Feb 2011
3 Beiträge
 
#1

USB - Drittanbiter Gerät benutzen

  Alt 31. Aug 2013, 10:29
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
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#2

AW: USB - Drittanbiter Gerät benutzen

  Alt 31. Aug 2013, 13:35
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.

Geändert von hathor (31. Aug 2013 um 13:38 Uhr)
  Mit Zitat antworten Zitat
mkrasselt1

Registriert seit: 14. Feb 2011
3 Beiträge
 
#3

AW: USB - Drittanbiter Gerät benutzen

  Alt 31. Aug 2013, 15:58
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
  Mit Zitat antworten Zitat
WARP4

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

AW: USB - Drittanbiter Gerät benutzen

  Alt 3. Sep 2013, 09: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
Antwort Antwort

 

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 10:16 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