Baustein "Serial_Interface (FB)"

isom
2011-03-17
2011-03-30
  • isom - 2011-03-17

    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!

     
  • Uwe - 2011-03-18

    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

     
  • isom - 2011-03-22

    Hallo Uwe

    Danke vielmal für deine Antwort, werde es mit derselben Baustein versuchen!

    Grüsse
    isom

     
  • isom - 2011-03-28

    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!

    IMG: hardware_config.JPG

     
  • Uwe - 2011-03-29

    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.

     
  • isom - 2011-03-29

    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

     
  • isom - 2011-03-29

    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

    IMG: Beschaltung Sensor..JPG

     
  • Matze001 - 2011-03-29

    Ich sehe beim überfliegen das du als baud 1920 angibst statt 19200 ... vielleicht ist das der Fehler?

    Grüße

    Marcel

     
  • isom - 2011-03-29

    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

     
  • 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ß

     
  • Uwe - 2011-03-30

    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).

     
  • Uwe - 2011-03-30

    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.

     
  • isom - 2011-03-30

    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

     

Log in to post a comment.