Chipkartenleser an Serielleschnitstelle ET 200S

hari

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo erst mal!

Nun also mein Problem liegt darin, dass ich zwar einiges Erfahrung in der Programmierung mit Speicherprogrammierbaren Steuerungen und sonstigen Programmiersprachen mit bringe jedoch relativ neu auf dem gebiet von Step7 und dessen AWL bin.

Nun habe ich das Problem das ich von einer Chipkarte gerne die Daten zum Authentifizieren auslesen möchte. Das Lesegerät (von Syscor) habe ich dabei über eine Serielle Schnittstelle mit dem Seriellenschnittstellenmodul der ET 200 S verbunden. (6ES7 138-4DF01-0AB0)

Welche Informationen oder Dokumentationen besitze ich noch zum Chipkartenleser:
1.) Er kann sowohl im ASCII als auch im Binärmodus laufen.
2.) Ich kenne die Befehle die ich an den Chipkartenleser senden muss sowohl im ASCII als auch im Binärmodus.

Mein Programm läuft derzeit im ASCII modus da ich nicht weiß wie ich den Binärmodus umsetzen kann.

Code:
//select commando senden

      U     "2000ms"
      =     L      1.0
      BLD   103

      CALL  "S_SEND" , "IDB_send_login"
       REQ    :=L1.0
       R      :=
       LADDR  :=272
       DB_NO  :=1
       DBB_NO :=0
       LEN    :=
       DONE   :="m_ready_send"
       ERROR  :=
       STATUS :=
       COM_RST:="m_restart"
      NOP   0

//warten bis fertig gesendet
      U     "m_ready_send"
      R     M     10.0


//empfangen aktivieren

      U     "m_ready_send"
      S     "m_rcv"


      U     "m_rcv"
      =     L      1.0
      BLD   103


      CALL  "S_RCV" , "IDB_rcv_ID"
       EN_R   :=L1.0
       R      :=
       LADDR  :=272
       DB_NO  :=2
       DBB_NO :=#DB_start
       NDR    :="m_ready_rcv"
       ERROR  :=
       LEN    :=
       STATUS :=
       COM_RST:="m_restart"
      NOP   0

//wenn das Empfangen Abgeschlossen wurde wird der Merker wieder freigegeben um
//den nächsten ablauf zu gewährleisten

      U     "m_ready_rcv"
      R     "m_rcv"



//Überprüfen der Empfangenen Daten mit dem Buchstaben der übermittelt wurde

      CALL  "BYTE_COMPARE" , "IDB_BYTE_COMPARE"
       IN_Byte_1:="DATA_Chipkate".ID_BYTE1
       IN_Byte_2:=#failure_code
       RE_out   :=#error

im Großen und ganzen ist meine Idee ganz einfach doch kann das auch Funktionieren? Im Moment tut es das noch nicht. Hat jemand Erfahrung damit und kann mich jemand auf diesem Gebiet wieder auf den rechten Weg bringen den ich glaube im Moment befinde ich mich ich Nirvana.

Ebenso in welcher Form die Empfangenen Daten abgelegt werden ist mir nicht ganz klar.

Über einen Tipp wäre ich sehr erfreut. Sollte ich wichtige Informationen vergessen haben kann ich die sofort nachreichen doch weiß ich auf dem Gebiet nicht was wirklich wichtig ist.

lg HaRii
 
Mir fällt auf, das Len beim senden nicht gesetzt ist, da muss die Länge der zu sendenden Daten rein.

Der Aufbau hängt natürlich vom Leser ab, kannst Du mal das Projekt oder den DB einstellen, damit man sieht wie du die Anfrage aufgebaut hast,

Ansonsten kann noch die Schnittstelleneinstellung falsch ein.

Weitere Anregungen hier
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die extrem schnelle Hilfe!

ich habe es aus dem Grund nicht eingetragen weil ich sie nicht kenne.
Vor allem ist mir nicht klar ob es ausreicht einfach nur den Buchstaben (Befehl) zu übertragen oder ob er in ein Parket das ich erstelle gegliedert werden muss.
 

Anhänge

  • Chipkart.zip
    375,2 KB · Aufrufe: 4
Erst mal auf die schnelle.

Das senden passt auf keinen Fall.

Zum senden musst du einen DB erstellen der das Abfragekommando enthält

z.B. DB5
Dann kommt der Befehl, den kenne ich nicht das muss aus der Beschreibung des Lesers hervorgehen, vieleicht mal uploaden.
Nur Unverbindlich wie so etwas aussehen könnte
Zb: DB5
DBB0 CHAR 'R'
DBB1 CHAR 'C' Befehl Lese Karte (Read Card)
DBB2 Byte w#16#0A CR
DBB3 Byte w#16#0D Line Feed

Bei ASCII werden die anfragen meist mit CR+LF abgeschlossen.
diese vier Bytes müßen dann zum Leser gesendet werden , dann ist LEN=4
 
ok dann kann das schon einmal so ganz und gar nicht stimmen:

sende ja jetzt nur ein 's' zum Selektieren der Chipkarte ohne jeglichen Rahmen zu bilden.

im anhang alle Dokumente die ich zum Kartenleser besitze...

meine 1. Idee war ja den reader einfach im Binärmodus zu belassen und ihm dann die Telegramme zu übermitteln. könnte das funktionieren?

Schnittstelle der SPS dabei auf ASCII
 

Anhänge

  • flussdiagramm_treiber.pdf
    164,7 KB · Aufrufe: 2
  • User Manual 13.56MHz Multi ISO V1_0.pdf
    1,4 MB · Aufrufe: 2
  • datenstruktur.pdf
    60 KB · Aufrufe: 0
  • befehle.pdf
    45,5 KB · Aufrufe: 2
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn du in die PDF Befehle schauts sieht du ja was du senden musst.

Zum selectieren muss im DB stehen
z.B. DB5
DBB0 byte w#16#02 //STX
DBB1 byte w#16#01 // Leser 1
DBB2 byte w#16#01 // Select Commando
DBB3 byte w#16#73 // = Ascci "s"
DBB4 byte w#16#73 // BCC Block Checksumme
DBB5 byte w#16#03 // ETX

Len wäre 6

Probier doch mal erst den Leser mit Hyperterminal zu "verstehen", dazu kann man eine Datei anlegen mit den Befehlen und diese vom PC aus senden. Man braucht aber einen Editor für Hex z.b WinCommander.
 
Zurück
Oben