WinCC Elatec RFID-Kartenlesegerät (USB) an WinCC RT Advanced betreiben

Smiththeonlyone

Level-1
Beiträge
24
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen.

Gleich vorweg: Ich bin (noch) kein Profi. Ich habe bisher Roboter programmiert und arbeite mich nun mit Beispielprojekten in der TIA-Welt durch.
Bisher hat das auch ganz gut geklappt. Nun aber finde ich keine Anleitung oder dergleichen ... :/

Folgende Problematik:

Unser Kunde wünscht sich eine Benutzeranmeldung mittels einer RFID-Karte. Sprich, wenn er die Karte an das Lesegerät hält, dann soll automatisch
der jeweilige Benutzer in WinCC angemeldet werden.
Jetzt ist der RFID-Kartenleser allerdings nicht per Profinet eingebunden, sondern ein normaler USB-Kartenleser (angeschlossen per USB am IPC227D), der eine Tastatureingabe emuliert aber auch einen COM-Port emulieren kann. Ich scheitere bereits daran, diesen Kartenleser in das SPS-Projekt einzubinden, so dass ich dort dann die gelesenen Daten z.B. in einen DB schreiben könnte.

Weiß da jemand eine Möglichkeit, wie ich den einbinden kann?
Von mir aus auch per VBSkript aus WinCC heraus (Zugriff auf eine Datei z.B.)

Das wird verwendet:

IPC277D mit Software PLC (RTX V4.6.1) und WinCC Runtime Advanced V13.0 SP1 UPD9
RFID-Lesegerät ElaTec TWN3 Legic USB
TIA-Portal: alles V13.0 SP1 UPD9

Gruß Stephan
 
hmm ... ziemlich wenig Resonanz auf meinen Beitrag. :/
Ich hoffe aber, ihr könnt mir jetzt weiterhelfen ...

Ich habe mittlerweile den Kartenleser an den IPC eingebunden bekommen (mit mehr schlechtem als rechten Support von Elatec, aber immerhin), sprich mit Putty kann ich den Port öffnen und auch die Kartendaten auslesen.
Jetzt möchte ich mit Microsoft Communications Control das ganze in WinCC einbinden. Dafür habe ich ein Objekt "MSComm_2" auf meine Seite "leser-test" hingezogen, die Port-Einstellungen vorgenommen und ein Skript mit folgendem einfachen Inhalt geschrieben:

Sub OpenPort()

HmiRuntime.Screens("leser_test").ScreenItems("MSComm_2").PortOpen = True

End Sub

Dieses Skript wird beim Drücken einer Taste auf der Seite "leser_test" ausgeführt.
Sobald ich dies tue, erscheint im Meldepuffer allerdings der Fehler: "Fehler '' in Skript <OpenPort> in Zeile 18." (18 ist die mit dem oberen Befehl ... das auskommentierte habe ich hier nicht mit hingeschrieben)

Kann mir jemand sagen, was an diesem Befehl falsch ist? In diesem Beispiel von Siemens ist es genau der gleiche Befehl:
https://support.industry.siemens.co...e-daten-senden-oder-empfangen-?dti=0&lc=de-WW

Gruß Stephan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In dem Siemens-Beispiel wird WinCC Professionell verwendet, Du hast aber ein ganz anderes WinCC Advanced.

Meines Wissens kann man mit der WinCC Advanced RT nicht auf Kommunikationsports zugreifen - das ActiveX-Control "MSComm_2" funktioniert vermutlich nicht mit WinCC Advanced.
Der RFID-Leser muß vermutlich als Tastatur eingebunden werden und muß in ein E/A-Feld schreiben.

Harald
 
Du könntest doch folgendes machen :
Zur Anmeldung gehst du auf eine dafür vorgesehene Bildseite, auf der ein Eingabefeld defaultmäßig den Fokus hat (schon durch den Aufruf des Bildes so festgelegt).
Hältst du nun den Chip vor den Leser so wird die Tastatur-Eingabe emuliert und die Nummer des Chips in das Eingabefeld geschrieben. Du mußt jetzt deinem Emulator nur noch beibringen (das geht normalerweise), das er am Ende einer Sequenz ein CR oder ggf. ein CR-LF dranhängen soll.
Nun kannst du durch das Eingabefeld (Eingabe abgeschlossen) oder durch die Wertänderung der daran hängenden Variablen ein Script ausführen, mit dem du dann die Nummer des Chips auswertest und weitere Aktionen ausführst.
Eine Kopplung mit der Siemens Benutzerverwaltung wird dir so allerdings nicht gelingen. Es ist aber auch nicht allzu schwer (wenn man denn einmal am scripten ist) die eben selbst zu erstellen.

Einen anderen Weg wird es im Siemens-Umfeld (mit dem Einsatz von Nicht-Siemens-Komponenten) nicht geben ...

Gruß
Larry
 
Vielen Dank für eure (niederschmetternden :D ) Antworten ...

Ich habe noch den offiziellen Kommentar von Siemens abgewartet. Es ist wirklich so, dass WinCC RT Advanced (warum dann bitte Advanced und nicht Trial oder so ... ) keinen Zugriff auf irgendwas unterstützt. Hervorragend! ...

Nun gut, den Vorschlag von Larry Lafer behalte ich mal im Hinterkopf als Notlösung.
Wenn es mit WinCC nicht geht, geht es ja vielleicht mit dem normalen SPS-Programm??
Sprich: Gibt es Bausteine (ähnlich wie T_CON für TCP/IP und so was) mit denen man einen COM-Port öffnen, lesen und schließen kann?
Das wäre genausogut wie das Auslesen mit einem Skript, wenn nicht noch besser, da ich ja die UID direkt in einen DB schreiben könnte.

Gruß Stephan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Stephan,
das in einem SPS-Programm zu machen halte ich für problematisch.
Ich hatte mir mal ein eigenes (PC-)Programm erstellt, um den COM-Port eines KABA-Readers abfragen zu können.
Hier war es so (das muss bei deinem Reader allerdings nicht so sein), dass der Reader einen Handshake in einer bestimmten Zeit erwartet hat - es wurde also ein Zeichen gesendet, dann mußte man darauf antworten und hat dann den Datenstring (in dem Fall die Chip-Nummer) zurück erhalten. Einen Handshake auf einen seriellen Port an der SPS halte ich für sehr problematisch. Etwas anderes wäre es, wenn der Reader einfach nur einen Datenstring sendet, wenn der Chip davor ist.
Aber das musst du selber sehen.
Das von mir im Beitrag #4 geschriebene läßt sich auf alle Fälle so umsetzen ...

Gruß
Larry
 
Hallo in die Runde,

Soweit ich das mitbekommen habe, habe ich den erwarteten Handshake in der Konfiguration von dem Reader ausgeschalten.
Laut Aussage Siemens-Support gibt es aber auch keine Möglichkeit, das ganze auf der Steuerung zu realisieren.

Nun dachte ich ok, wenns nicht einfach geht, dann eben einfacher:
Mein Gedanke war nun den COM-Port mit einer VBS-Datei (erstellt im Texteditor) zu öffnen, auszulesen und wieder zu schließen und das Ergebnis in eine Textdatei zu schreiben, auf die dann die HMI per VB-Skript zugreift,
allerdings finde ich nichts wirklich sinnvolles, wie man so eine VBS-Datei erstellt. Also der Code zum Öffnen des Ports z.B.
Ich habe beispielsweise "type COM4> test.txt" gefunden, aber das hat nicht funktioniert. Oder auch wieder von MScomm.lib gelesen, aber auch das hat nicht funktioniert.
Bin in VBS totaler Anfänger und wäre über jede Hilfe froh :)

Gruß
Stephan
 
Hallo Stephan,

ich denke, zu deiner COM-Port-Geschichte hatte ich doch in meinem letzten Beitrag etwas geschrieben - auch wenn dir das nicht gefällt.
Manche RFID-Leser haben einen Treiber, den man so einstellen kann, dass er sein Ergebnis entweder in den Tastaturpuffer schreibt (den Weg würde ich hier weiter verfolgen und dazu könnte ich dir auch weiterhelfen) oder in eine Datei als Text. Eventuell kann dein Treiber das schon - dann nutze das. Ansonsten kannst du dir nur ein sperates Programm (ein EXE-File) erstellen, dass außerhalb von der Visu dies für dich übernimmt. Dazu bist du aber m.E. nicht in der Lage (das soll jetzt keine Kritik sein und auch nicht böse gemeint).
Jedoch ... in dem Fall, dass das so funktionieren würde, müßtest du dir in der Visu ein Hintergrundscript erstellen, das zyklisch aufgerufen wird um zu schauen, ob sich an dieser Datei etwas geändert hat. Das wäre nicht so das Problem und würde auch funktionieren - als Zyklus hierfür ist aber mit Standard-Bordmitteln nur "jede Minute" zu erreichen - das wäre mir "etwas schlapp".

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ja, den Plan X habe ich ja auch nicht vergessen ;) Ich würde nur gern eine benutzerfreundlichere Variante zur Verfügung stellen.
Ob mein Kartenlesegerät direkt in eine Datei schreiben kann, bin ich gerade am abklären. Das Ding kann irgendein C-ähnliches Skript ausführen, aber von Befehlen die auf eine Datei zugreifen, kann ich da im Handbuch nichts finden ... nun gut.
Genau das wäre mein Plan, also eine EXE oder zumindest eine VBS-Datei die einfach "nur" den Port COM4 öffnet, ausliest, das Ergebnis in eine Textdatei schreibt und den Port wieder schließt. Ich trau mir das schon zu, das zu programmieren, nur finde ich halt nirgendswo Befehle, wie man einen COM-Port in einem VBS-Skript öffnet, liest und schließt. Ich mein, wenn ich mit Putty beispielsweise von COM4 "F8384DSF" bekomme, dann muss das doch auch mit einem Skript möglich sein.

Wenn ich dann mal (irgendwann :D ) eine Datei habe, wo die UID drinnen steht, würde ich dann ein VB-Skript in WinCC schreiben, welches diese Datei ausliest und das Skript starte ich jedesmal wenn sich eine HMI-Variable ändert, die ich wiederum von der Steuerung mit einem Takt (1s oder so) belege. Das müsste doch gehen, oder?

Zum Thema VBS: Könnt ihr mir dazu zufällig ein Forum empfehlen?

Gruß
Stephan
 
Das mit der Trigger-Variablen, die du dann beständig einliesst / aktualisierst, würde so funktionieren. Du mußt bei deiner Takt-Vorstellung nur bitte auch berücksichtigen, dass du das Bediengerät nicht überlastest (das kann mit Scripten, die ständig ausgeführt werden, sehr schnell passieren).

Zum Thema VBS weiß ich auch kein spezielles Forum. Zu der Siemens-spezifischen Variante kannst du hier sehr viel finden und auch erfragen. Bei eher allgemeineren Fragen halte ich persönlich dann gerne an Google - man findet immer irgendwo etwas.

Aber noch einmal nur zum Verständnis : was stört dich an dem Vorschlag und der Umsetzung, wie ich ihn dir im Beitrag #4 gemacht habe ...?

Gruß
Larry
 
Aber noch einmal nur zum Verständnis : was stört dich an dem Vorschlag und der Umsetzung, wie ich ihn dir im Beitrag #4 gemacht habe ...?

Nur, dass man auf einen Button klicken muss zum Anmelden.
Aber vermutlich wird es darauf hinauslaufen. Eventuell gibt es aber auch noch eine ganz andere Lösung.
Es gibt nämlich schon eine ähnliche Anlage beim Kunden draußen, die denselben Kartenleser nutzt. Eventuell kann ich mir dann vor Ort was abschauen :)

Vielen Dank erstmal für dein Feedback.

Ich wünsche euch ein schönes Wochenende! ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sooo ... hier mal ein Update zu meinem Problem(chen) :D ...

It's solved :)

Gelöst habe ich es nun folgendermaßen (kurz und bündig ... für die Langfassung gerne eine PN an mich):

- Der Elatec RFID-Reader ist so konfiguriert, dass er einen virtuellen COM-Port erzeugt und über diesen die gelesene UID ausgibt.
- Auf dem IPC läuft nun ein Skript (EXE-Datei geschrieben in C#), welches den Port ständig ausliest und die UID, wenn eine neue vorhanden, in eine Textdatei schreibt.
- Unter WinCC habe ich nun ebenso ein SKript erstellt (VBS), welches alle 2 Sekunden von der Steuerung getriggert wird und die UID aus der Textdatei liest und diese in einen DB ablegt
- Wenn eine neue UID erkannt wurde, dann startet ein weiteres Skript in winCC, das einen neuen Benutzer anmeldet
- Unter WinCC habe ich dann die Benutzerverwaltung so eingestellt, dass diese nur ein Passwort benötigt. Dieses Passwort ist die eingelesene UID

Bis jetzt funktioniert es tadellos. Nur ab und an wird die UID nicht vollständig vom Lesegerät übertragen, aber das schau ich mir irgendwann später mal an ...

Gruß Stephan
 
Bis jetzt funktioniert es tadellos. Nur ab und an wird die UID nicht vollständig vom Lesegerät übertragen, aber das schau ich mir irgendwann später mal an ...

Hallo Stephan,

ich nehme mal an, dass du es so gelöst hast, dass du von deinem SerialPort das DataReceived-Event abgefangen hast.
In der Methode müßtest du nun, bevor du den Port einliesst, noch checken, ob .BytesToRead mindestens den von dir erwarteten Wert hat - ansonsten die Methode nicht weiter bearbeiten.
Hat .BytesToRead den passenden Wert (oder größer) dann nur die Bytes auslesen, die du brauchst - den Rest im Puffer lassen. Sonst bekommst du die Verschiebung / Teil-Einlesung nie richtig weg.

Gruß
Larry
 
Hallo Larry,

Vielen Dank für diesen Tipp. Ich bin allerdings nicht mehr dazu gekommen, diesen auszuprobieren, da der Kunde deinen Vorschlag mit dem Keyboard-Emulator wollte.
Auf dem IPC ging das mit dem Anmelden per Karte nämlich reibungslos, aber auf den mobilen Siemens-Panels ktp700f mobile, war es dann komplett vorbei, da dort keine Möglichkeit mehr vorhanden ist, den COM-Port auszulesen. Naja... zumindest hat das Basteln Spaß gemacht :D ... vl. brauch ich es ja irgendwo mal wieder.

Gruß
Stephan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin auf diesen Beitrag gestoßen, da ich gerade vor dem selben Problem stehe. Kunde will Benutzeranmeldung über den Elatec- RFID Reader. Dieser hängt allerdings direkt am PC auf einem seriellen Port. Auf dem PC läuft ebenfalls eine WinCC Runtime Advanced V17.

Hat mittlerweile eventuell jemand eine funktionierende Lösung dafür?
 
Es gibt nur den bereits genannten Weg - also das emulieren einer Tastatur-Eingabe ...
Wenn man es anders haben möchte dann müßte es ein RFID-Leser sein, der über ProfiNet (oder ProfiBus) direkt mit der SPS kommuniziert ...
 
Zurück
Oben