Ich habe eine Frage bezgl. des Bausteines "Serial_Interface (FB)". Ich muss Werte eines Barcodeleser's einlesen und weiterverarbeiten. Den Baustein habe ich studiert und mir ist nicht klar, wie ich die Werte aus dem Receive-Buffer auslesen kann. Ein dementsprechendes Struct wird beim Einfügen des Bausteins erstellt. Wie kann ich jetzt die Zeichenketten mit Hilfe des Array-Index auslesen?
Danke für eure Hilfe!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
der Receivebuffer ist eine Struktur mit den Komponenten "Data" und "Index".
Data wiederrum ist ein Bytearray.
Dieses Array hat zunächst nichts mit Zeichenketten zu tun.
Du musst die einzelnen Bytes z.B. in einer For-Schleife aus dem Receivebuffer
holen und in eine Zeichenkette packen.
Soweit der prinzipielle Weg.
In deinem Fall geht es um einen Barcodescanner der scheinbar Zeichenketten liefert.
Häufig nutzen solche Scanner einfache ASCII-Protokolle.
In solchen Fällen ist es einfacher den Baustein BARCODE_SCANNER aus der Bibliothek Scanner_01.lib zu nutzen.
Dieser Baustein nutzt intern den Baustein Serial_Interface und nimmt dir die Arbeit
des umkopierens ab.
Habe mir die Lib. für den Baustein runtergeladen und die Dok. gelesen. Die Funktion ist genau zutreffend. Mir ist jedoch unklar, welche Adressen der seriellen Schnittstelle zu welcher Variable des Funktionsbausteins gehören?! (Serielle Schnittstelle 750-600/000-010, Koppler 750-841)
Danke für eure Hilfe!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
vergiss die Adressen ...
Serielle Klemmen zählst du von links nach rechts beginnend mit 2.
Die erste gesteckte serielle Klemme ist Com-Port Nr. 2
die zweite hat die Nummer 3 u.s.w.
Die Nummer 1 ist die Diagnoseschnittstelle auf dem Controller (hinter der kleinen Klappe).
Du musst also nur eine 2 an den Eingang bCOM_PORT_NR legen und der Baustein weiß
mit welcher Klemme er reden soll.
Da du eine 750-650/000-010 hast
solltest du die Eingänge für Baudrate, Parität und Flow Control besser nicht beschalten
und bei der Verdrahtung entweder
RTS / CTS zum Scanner mit verdrahten
oder auf dem seriellen Modul eine Brücke einlegen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ich muss dem Scanner nichts senden, ich muss nur die empfangenen Daten verarbeiten. Werde nach deinen Angaben vorgehen, danke für deine schnelle Antwort!
Grüsse
isom
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Habe heute weiter programmiert und habe leider wieder ein Problem. Der Sensor funktioniert einwandfrei und scheint auch den gelesenen Code zu schicken. Sieht jemand meinen Stolperstein?! Variablendeklaration und Beschaltung des Funktionsbausteins sind unten ersichtlich.
Danke für eure Hilfe!
isom
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Laut Doku der Library Scanner_01 werden Baudraten so eingegeben; z.B. BAUD_1200:=120;.
Habe mir beim Durchlesens der Dokumentation der Scanner_01-Library die gleiche Frage gestellt warum die 0 weggelassen wird. Nach dem Einloggen & Starten meines Programmes wird vor dem Baustein die Variable für den Eingang cbBAUDRATE des FB BARCODE_SCANNER auf baudrate=BAUD_19200 gesetzt.
Danke für deine Anwort!
isom
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2011-03-29
Originally created by: blackenslaver666
Hi.
Hier meine Erfahrungen mit einem Barcode Scanner:
Ich hatte an einem anderen Controller auch so ein Ding im Einsatz, hat auch gut geklappt. Als erstes musst du darauf achten dass du die richtigen Kommunikationsparameter setzt. Das aber nicht nur im Controller, sondern auch am Scanner so dass er die korrekten Parameter benutzt. Bei meinen Teil gab's da komfortable Barcodes zum Scannen in der BA wo man sich die gewünschten Parameter raussuchen konnte und diese per Scanvorgang parametriert hat. Parameter natürlich auch in der Steuerung einstellen. Der andere wichtige Punkt ist dass dein Scannerbaustein feste Terminierungszeichen benötigt, siehe Doku. Ich denke da liegt das Problem bei dir. Es ist nicht immer eindeutig was der Scanner überhaupt sendet. Du musst dir aber im Klaren sein dass er einzelne Zeichen als Byte sendet die dann hinterher in einen String umwandelt werden. Um einen fertigen Datenblock zu erkennen benötigt er fixe Start-/Ende-Zeichen für den Block. In deinem Bsp. hast du einfach die Default-Werte übernommen. Wie der FB im Fehlerfall reagiert weiss ich nicht. Bei mir war es aber so dass er trotzdem Rohdaten erfasst hat diese aber nicht unwandeln konnte. Mein FB hat nur ein Endezeichen benötigt, auch dieses konnte ich im Scanner programmieren (war "CR LF"). Notfalls kannst du ja mal in die FB-Instanz reingucken und dir die Rohdaten ansehen. So solltest du zur Lösung kommen.
Gruß
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
du hast ne 750-650/000-010
Ich habe dir geraten die Eingänge
cbBAUDRATEcpPARITYcfFLOW_CONTROL
NICHT zu beschalten.
Nimm die Parameter weg und laß die Beinchen offen dann wird's funktionieren.
Dein Modul (750-650/000-010) kann man nicht aus dem Programm umparametrieren.
Dieses Modul ist vom Hersteller fest auf 19200 / N / 8 / 1 mit Hardwarehandshake eingestellt.
Du kannst dieses Modul nicht mit flowcontrol = 0 fahren (daher auch der Rat mit der Brücke).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
deine Start und Endezeichen musst du natürlich auch noch anpassen.
Ich würde z.B als Startzeichen im Scanner STX (16#02) und
als Endezeichen ETX (16#03) definieren und diese dann entsprechend
an den Baustein anlegen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Es hat funktioniert, klasse!
Habe die von Uwe genannten Eingänge nicht beschalten und im Barcodescanner den Pre- & Sufix eingestellt und schon hat's geklappt.
Danke für eure tolle Hilfe!
isom
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo miteinander
Ich habe eine Frage bezgl. des Bausteines "Serial_Interface (FB)". Ich muss Werte eines Barcodeleser's einlesen und weiterverarbeiten. Den Baustein habe ich studiert und mir ist nicht klar, wie ich die Werte aus dem Receive-Buffer auslesen kann. Ein dementsprechendes Struct wird beim Einfügen des Bausteins erstellt. Wie kann ich jetzt die Zeichenketten mit Hilfe des Array-Index auslesen?
Danke für eure Hilfe!
Hallo isom,
der Receivebuffer ist eine Struktur mit den Komponenten "Data" und "Index".
Data wiederrum ist ein Bytearray.
Dieses Array hat zunächst nichts mit Zeichenketten zu tun.
Du musst die einzelnen Bytes z.B. in einer For-Schleife aus dem Receivebuffer
holen und in eine Zeichenkette packen.
Soweit der prinzipielle Weg.
In deinem Fall geht es um einen Barcodescanner der scheinbar Zeichenketten liefert.
Häufig nutzen solche Scanner einfache ASCII-Protokolle.
In solchen Fällen ist es einfacher den Baustein BARCODE_SCANNER aus der Bibliothek Scanner_01.lib zu nutzen.
Dieser Baustein nutzt intern den Baustein Serial_Interface und nimmt dir die Arbeit
des umkopierens ab.
Hier findest du die Bibliothek mit Dokumentation
http://www.wago.com/wagoweb/documentation/navigate/nm9mpl_d.htm
Hallo Uwe
Danke vielmal für deine Antwort, werde es mit derselben Baustein versuchen!
Grüsse
isom
Hallo Uwe, hallo miteinander
Habe mir die Lib. für den Baustein runtergeladen und die Dok. gelesen. Die Funktion ist genau zutreffend. Mir ist jedoch unklar, welche Adressen der seriellen Schnittstelle zu welcher Variable des Funktionsbausteins gehören?! (Serielle Schnittstelle 750-600/000-010, Koppler 750-841)
Danke für eure Hilfe!
Hallo isom,
vergiss die Adressen ...
Serielle Klemmen zählst du von links nach rechts beginnend mit 2.
Die erste gesteckte serielle Klemme ist Com-Port Nr. 2
die zweite hat die Nummer 3 u.s.w.
Die Nummer 1 ist die Diagnoseschnittstelle auf dem Controller (hinter der kleinen Klappe).
Du musst also nur eine 2 an den Eingang bCOM_PORT_NR legen und der Baustein weiß
mit welcher Klemme er reden soll.
Da du eine 750-650/000-010 hast
solltest du die Eingänge für Baudrate, Parität und Flow Control besser nicht beschalten
und bei der Verdrahtung entweder
RTS / CTS zum Scanner mit verdrahten
oder auf dem seriellen Modul eine Brücke einlegen.
Hallo Uwe
Ich muss dem Scanner nichts senden, ich muss nur die empfangenen Daten verarbeiten. Werde nach deinen Angaben vorgehen, danke für deine schnelle Antwort!
Grüsse
isom
Hallo miteinander, hallo Uwe
Habe heute weiter programmiert und habe leider wieder ein Problem. Der Sensor funktioniert einwandfrei und scheint auch den gelesenen Code zu schicken. Sieht jemand meinen Stolperstein?! Variablendeklaration und Beschaltung des Funktionsbausteins sind unten ersichtlich.
Danke für eure Hilfe!
isom
Ich sehe beim überfliegen das du als baud 1920 angibst statt 19200 ... vielleicht ist das der Fehler?
Grüße
Marcel
Hallo Marcel
Laut Doku der Library Scanner_01 werden Baudraten so eingegeben; z.B. BAUD_1200:=120;.
Habe mir beim Durchlesens der Dokumentation der Scanner_01-Library die gleiche Frage gestellt warum die 0 weggelassen wird. Nach dem Einloggen & Starten meines Programmes wird vor dem Baustein die Variable für den Eingang cbBAUDRATE des FB BARCODE_SCANNER auf baudrate=BAUD_19200 gesetzt.
Danke für deine Anwort!
isom
Originally created by: blackenslaver666
Hi.
Hier meine Erfahrungen mit einem Barcode Scanner:
Ich hatte an einem anderen Controller auch so ein Ding im Einsatz, hat auch gut geklappt. Als erstes musst du darauf achten dass du die richtigen Kommunikationsparameter setzt. Das aber nicht nur im Controller, sondern auch am Scanner so dass er die korrekten Parameter benutzt. Bei meinen Teil gab's da komfortable Barcodes zum Scannen in der BA wo man sich die gewünschten Parameter raussuchen konnte und diese per Scanvorgang parametriert hat. Parameter natürlich auch in der Steuerung einstellen. Der andere wichtige Punkt ist dass dein Scannerbaustein feste Terminierungszeichen benötigt, siehe Doku. Ich denke da liegt das Problem bei dir. Es ist nicht immer eindeutig was der Scanner überhaupt sendet. Du musst dir aber im Klaren sein dass er einzelne Zeichen als Byte sendet die dann hinterher in einen String umwandelt werden. Um einen fertigen Datenblock zu erkennen benötigt er fixe Start-/Ende-Zeichen für den Block. In deinem Bsp. hast du einfach die Default-Werte übernommen. Wie der FB im Fehlerfall reagiert weiss ich nicht. Bei mir war es aber so dass er trotzdem Rohdaten erfasst hat diese aber nicht unwandeln konnte. Mein FB hat nur ein Endezeichen benötigt, auch dieses konnte ich im Scanner programmieren (war "CR LF"). Notfalls kannst du ja mal in die FB-Instanz reingucken und dir die Rohdaten ansehen. So solltest du zur Lösung kommen.
Gruß
Hallo isom,
du hast ne 750-650/000-010
Ich habe dir geraten die Eingänge
cbBAUDRATEcpPARITYcfFLOW_CONTROL
NICHT zu beschalten.
Nimm die Parameter weg und laß die Beinchen offen dann wird's funktionieren.
Dein Modul (750-650/000-010) kann man nicht aus dem Programm umparametrieren.
Dieses Modul ist vom Hersteller fest auf 19200 / N / 8 / 1 mit Hardwarehandshake eingestellt.
Du kannst dieses Modul nicht mit flowcontrol = 0 fahren (daher auch der Rat mit der Brücke).
Achso, fast vergessen ...
deine Start und Endezeichen musst du natürlich auch noch anpassen.
Ich würde z.B als Startzeichen im Scanner STX (16#02) und
als Endezeichen ETX (16#03) definieren und diese dann entsprechend
an den Baustein anlegen.
Hallo miteinander
Es hat funktioniert, klasse!
Habe die von Uwe genannten Eingänge nicht beschalten und im Barcodescanner den Pre- & Sufix eingestellt und schon hat's geklappt.
Danke für eure tolle Hilfe!
isom