Funkstille Wago serielle Schnittstelle - Ölbad

isom
2011-06-10
2011-07-01
  • isom - 2011-06-10

    Hallo lieber Gesangsverein

    Folgendes Problem:
    Ich möchte mittels Wago 750-841 und serieller Schnittstelle (750-650/000-01) ein Niveauausgleich realisieren. Dieser wird gebraucht für ein Kalibrierölbad in welchem wir unsere Temperaturmessungen kalibrieren. Mittels serieller Schnittstelle kann ich den Niveaustand, die Momentanwerttemperatur, usw. auslesen, sowie die Pumpenleistungsstufe und Sollwerte steuern. Die serielle Schnittstelle wurde mit dem HyperTerminal getestet -> Funktioniert einwandfrei.
    Ich habe mir nun um die Kommunikation zu testen ein kleines Programm erstellt. Mit diesem möchte ich in der Visualisierungsebene einen String senden, sowie die empfangenen Strings anzeigen.

    Ich habe jedoch Funkstille zwischen der Wago und dem Ölbad.

    Die Komponenten sind folgendermassen miteinander verkabelt:
    Kommu-Test Hyperterminal - Wago:
    Female D-Sub, PC / Wago
    Pin 2 RxD / Klemme 1 TxD
    Pin 3 TxD / Klemme 5 RxD
    Pin 5 GND / Klemme 3 Masse
    Pin 7 CTS / Klemme 2 RTS
    Pin 8 RTS / Klemme 6 CTS
    Gehäuse Schirm / Klemme 4 Schirm
    -> Funktioniert!

    Kommu-Test, Hyperterminal - Ölbad
    Female D-Sub / Male D-Sub
    Pin 2 RxD / Pin 2 TxD
    Pin 3 TxD / Pin 3 RxD
    Pin 5 GND / Pin 5 Masse
    Pin 7 CTS / 8 RTS
    Pin 8 RTS / 7 CTS
    Gehäuse Schirm / Gehäuse Schirm
    -> Funktioniert!

    Kommu-Test, Ölbad - Wago
    Female D-Sub / Wago
    Pin2 RxD / Klemme 1 TxD
    Pin3 TxD / Klemme 5 RxD
    Pin5 GND / Klemme 3 Masse
    Pin7 CTS / Klemme 2 RTS
    Pin8 RTS / Klemme 6 CTS
    Gehäuse Schirm / Klemme 4 Schirm
    Funktioniert NICHT!

    Bin mir im Klaren, dass mein Problem sehr spezifisch ist. Ich denke jedoch, dass mein Fehler im Testprogramm zu finden ist und nicht im Anschluss der Datenleitung(en). Habe es angefügt, hoffe ihr könnt mir weiterhelfen!

    CoDeSys-V: 2.3.9.13, SW 17

    Grüsse
    isom

    Kommu Test.pro [62.87 KiB]

     
  • gravieren - 2011-06-10

    Hi

    isom hat geschrieben:
    Kommu-Test, Ölbad - Wago
    Female D-Sub / Wago
    Pin2 RxD / Klemme 1 TxD
    Pin3 TxD / Klemme 5 RxD
    Pin5 GND / Klemme 3 Masse
    Pin7 CTS / Klemme 2 RTS
    Pin8 RTS / Klemme 6 CTS
    Gehäuse Schirm / Klemme 4 Schirm
    Funktioniert NICHT!
    Bin mir im Klaren, dass mein Problem sehr spezifisch ist. Ich denke jedoch, dass mein Fehler im Testprogramm zu finden ist und nicht im Anschluss der Datenleitung(en). Habe es angefügt, hoffe ihr könnt mir weiterhelfen!
    CoDeSys-V: 2.3.9.13, SW 17
    Grüsse
    isom

    Mach doch mal eine Brücke von Klemme 2 nach 6 (RTS + CTS)
    Und Pin 7 nach Pin 8 (RTS +CTS)
    Somit wird das Hardwareprotokoll ausgeschaltet.

    Nun sendest du mit der Wago mal ein paar Zeichen.
    Flackert die TxD-LED der Wago ?

    Falls ja, liest du mit HT an der Wagoseite. (PC --> mit Hyperterminal -->RxD-Signal)
    Sendet die Wago das richtige ?

    Nun (PC --> mit Hyperterminal -->RxD-Signal)
    Diesmal liesst du was das "Ölbad" sendet.

    Was sendet die Wago ?
    Was sendet das Ölbad?

    Gruß Karl

     
  • gravieren - 2011-06-10

    Hi

    Die Parameter:

    9600 baud
    8 Datenbits
    1 Stoppbit
    Parität "keine" stimmen für den Sensor ?

    Welche Einstellungen hast du unter HT verwendet ?

     
  • isom - 2011-06-14

    Zitat:
    Mach doch mal eine Brücke von Klemme 2 nach 6 (RTS + CTS)
    Und Pin 7 nach Pin 8 (RTS +CTS)
    Somit wird das Hardwareprotokoll ausgeschaltet.
    Nun sendest du mit der Wago mal ein paar Zeichen.
    Flackert die TxD-LED der Wago ?

    Flackert.

    Zitat:
    Falls ja, liest du mit HT an der Wagoseite. (PC --> mit Hyperterminal -->RxD-Signal)
    Sendet die Wago das richtige ?

    Sendet das Richtige!

    Zitat:
    Nun (PC --> mit Hyperterminal -->RxD-Signal)
    Diesmal liesst du was das "Ölbad" sendet.

    Beim ersten Versuch erhalte ich ein Wirrwarr an Zeichen vom Ölbad zurück(Hoch-zahlen, -buchstaben, Bruchzahlen, div. spezielle Zeichen) Dannach weiterhin Funkstille... Auch bei einem erneuten Start von Wago & Ölbad werden nicht einmal mehr die Zeichen übermittelt.

    Zitat:
    Die Parameter:
    9600 baud
    8 Datenbits
    1 Stoppbit
    Parität "keine" stimmen für den Sensor ?

    Baudrate ist bei der 750-650/000-010 doch 19200 ?!

    Zitat:
    Welche Einstellungen hast du unter HT verwendet ?

    19200, 8 Datenbits, 1 Stoppbit, no Parity, Hardwarehandshake on/off (je nach Datenleitung, gebrückt->Hardwarhandshake off, angeschlossen on)

    Danke für Deine Hilfe, hoffe Du hast noch einen Rat auf Lager!

    Grüsse
    isom

     
  • Anonymous - 2011-06-14

    Originally created by: blackenslaver666

    Mahlzeit.
    Sieht für mich so aus als ob deine Komm-Parameter auf beiden Seiten nicht zusammenpassen. Zwar sendet die Wago das Richtige aber vom Ölbad kommt (bei gleichen HT-Parametern?) nur WirrWarr zurück. Auch hast du noch nicht beschrieben was der Sensor/Ölbad für (Default-)Parameter vorgibt. Was die Wago da als default hat ist erstmal sekundär. Ich hatte auch mal so ein Problem mit einem Analogwegsensor. Letztlich hatte sich herausgestellt dass der Sensor die vielfachen Einstellungen (Baudraten, Parität etc.) lt. Handbuch doch NICHT konnte, sondern lediglich die Defaulteinstellungen! Dann habe ich meine serielle Klemme umkonfiguriert und schon stand die Kommunikation. Daher mein Tipp: Gucken was macht das Ölbad als Default und die Wago dementsprechend anpassen.

    Viel Glück.

    Gruß Andy

     
  • gravieren - 2011-06-14

    Hi

    isom hat geschrieben:
    Flackert.

    Du machst das senden der Wago auf "Knopfdruck ?
    Falls nein, bitte ändern.

    isom hat geschrieben:
    Beim ersten Versuch erhalte ich ein Wirrwarr an Zeichen vom Ölbad zurück(Hoch-zahlen, -buchstaben, Bruchzahlen, div. spezielle Zeichen) Dannach weiterhin Funkstille... Auch bei einem erneuten Start von Wago & Ölbad werden nicht einmal mehr die Zeichen übermittelt.

    Warte bis nichts mehr gesendet wird.
    Nun sende einen Befehl von der Wago.

    Du beachtest doch sicher "CR" und "LF" falls notwendig bein senden ?

    isom hat geschrieben:
    Baudrate ist bei der 750-650/000-010 doch 19200 ?!

    750-650/000-010 --> Ja
    Du hattest 750-650/000-01 angegeben, ich bin von einem 750-650/000-001 ausgegangen.

    isom hat geschrieben:

    Ich würde mal:

    Einschalten des "Ölbad"-Sensors.
    Mit HT lesen, ob er beim einschalten etwas sendet.
    Falls ja, was ?

    Nun die Wago anschliessen.
    Die Spannung nur des Ölbadsensors wegnehmen und wieder anschliessen.
    Kannst du diese Zeichen auch lesen.

    Versuche Schritt für Schritt das zu bewerkstelligen.

    Welchen Sensor verwendest du überhaupt ?

    Gruß Karl

     
  • gravieren - 2011-06-14

    Hi

    blackenslaver666 hat geschrieben:
    Mahlzeit.
    Sieht für mich so aus als ob deine Komm-Parameter auf beiden Seiten nicht zusammenpassen. Zwar sendet die Wago das Richtige aber vom Ölbad kommt (bei gleichen HT-Parametern?) nur WirrWarr zurück. Auch hast du noch nicht beschrieben was der Sensor/Ölbad für (Default-)Parameter vorgibt. Was die Wago da als default hat ist erstmal sekundär. Ich hatte auch mal so ein Problem mit einem Analogwegsensor. Letztlich hatte sich herausgestellt dass der Sensor die vielfachen Einstellungen (Baudraten, Parität etc.) lt. Handbuch doch NICHT konnte, sondern lediglich die Defaulteinstellungen! Dann habe ich meine serielle Klemme umkonfiguriert und schon stand die Kommunikation. Daher mein Tipp: Gucken was macht das Ölbad als Default und die Wago dementsprechend anpassen.

    Da er schon mit HT getestet hat und Daten rausbekommen hat, denke ich dass die Parameter stimmen sollten.

    Gruß Karl

     
  • isom - 2011-06-14

    Zitat:
    Du machst das senden der Wago auf "Knopfdruck ?
    Falls nein, bitte ändern.

    Ja, es muss ein Taster als Bestätigung sowie ein Taster zum Senden gedrückt werden.

    Zitat:
    Warte bis nichts mehr gesendet wird.
    Nun sende einen Befehl von der Wago.
    Du beachtest doch sicher "CR" und "LF" falls notwendig bein senden ?

    Befehl wird gesendet, keine Rückmeldung. Bezüglich CR LF habe ich schon einen Post eröffnet, da ich den Initialwert nicht wusste. (Link zum Post
    startzeichen : BYTE :=16#0A; ( Prefix -> LF )
    endzeichen : BYTE :=16#0D; ( Sufix -> CR )
    Ich bin jedoch unschlüssig:
    Verbindung HT -> Ölbad, ich sende z.B. den Befehl IN PV 05 für den Niveaustand (OHNE CR LF) -> Funktioniert, der Niveaustand wird postwendet im HT angezeigt.

    Sende ich Zeichen von der Wago ins HT wird mir jedoch CR LF auch nie angezeigt.

    Zitat:
    750-650/000-010 --> Ja
    Du hattest 750-650/000-01 angegeben, ich bin von einem 750-650/000-001 ausgegangen.

    Sorry, mein Fehler.

    Zitat:
    Ich würde mal:
    Einschalten des "Ölbad"-Sensors.
    Mit HT lesen, ob er beim einschalten etwas sendet.
    Falls ja, was ?
    Nun die Wago anschliessen.
    Die Spannung nur des Ölbadsensors wegnehmen und wieder anschliessen.
    Kannst du diese Zeichen auch lesen.
    Versuche Schritt für Schritt das zu bewerkstelligen.
    Welchen Sensor verwendest du überhaupt ?

    1. Beim Einschalten wird nichts gesendet, Test mit HT -> Ölbad
    2. Spannung weg vom Ölbadsensor, wieder einschalten, auch keine Zeichen
    3. Beide Fälle mit Neustart von Wago getestet, keine Zeichen
    4. Sensor = Interner Thermostat in einem Ölbad, Datenblätter sind auf dem Weg

    Grüsse

     
  • gravieren - 2011-06-14

    isom hat geschrieben:

    Du beachtest doch sicher "CR" und "LF" falls notwendig bein senden ?
    Befehl wird gesendet, keine Rückmeldung. Bezüglich CR LF habe ich schon einen Post eröffnet, da ich den Initialwert nicht wusste. (Link zum Post) In meinem vorderen Projekt mit serieller Kommu konnte ich bequem auf ETX 16#03, STX 16#02 umstellen. Der Thermostat in meinem Ölbad verlangt jedoch ein CR LF. Ich habe meinen Baustein Serial_Interface nun folgendermassen beschalten:
    startzeichen : BYTE :=16#0A; ( Prefix -> LF )
    endzeichen : BYTE :=16#0D; ( Sufix -> CR )

    Vergiss vorerst das mit dem "ETX und STX" ich denke, das ist eine "andere" Baustelle.

    Ich denke, der Fehler ist von der Wago.

    Bitte teste doch mal:
    Verbindung Wago --> HT.

    Mach einen Button_1 --> Befehl senden.
    Mach einen Button_2 --> CR senden. (Nur 1 Zeichen senden)
    Mach einen Button_3 --> LF senden. (Nur 1 Zeichen senden)

    Kommen jetzt die Zeichen ordnungsgemäß im HT an ?

    Gruß Karl

     
  • isom - 2011-06-14

    Servus

    Hab das mit den Buttons so gemacht, wie du gesagt hast. Ich denke jedoch, du hast mich missverstanden.

    1. Fall:
      Verbindung HT->Thermostat Ölbad
      Ich gebe zum Beispiel den Befehl 'IN PV 00' ein. OHNE CRLF. Das Ölbad versteht mich und meldet sich postwendet. Wird CRLF hinten angehängt, funzt das ganze nicht mehr.

    2. Fall:
      Verbindung HT->CoDeSys
      Ich gebe in meinem Textfeld in der Visu z.B. 'Hallo Welt' ein. Im HT wird dies sofort angezeigt. Gebe ich in der Benutzeroberfläche im HT z.B. 'Dito' ein, wird dieses auch in der Visu angezeigt.

    Mein Verständnisproblem liegt vor allem im 1. Fall; warum muss bei der Texteingabe im HT nicht ein CR LF als Endzeichen gesetzt werden? Dies wird in der Doku mehrmals erwähnt...
    Und warum wird im HT direkt der String angezeigt, welcher ich in der Visu eingebe, die Start- & Endzeichen welche ich im FB Serial_Interface beschriftet habe jedoch nicht.

    Ich denke ich verstehe auf was das du hinaus wolltest mit den 3 Buttons; die Übertragung schrittweise vereinfachen. Habe dies getestet, immer noch keine Rückmeldung vom Ölbad.
    (Programm mit den 3 Buttons als Anhang)

    Ich steh auf'm Schlauch!

    Ps. Danke Karl!

    Kommu Test 3 Buttons.pro [64.53 KiB]

     
  • Anonymous - 2011-06-14

    Originally created by: blackenslaver666

    gravieren hat geschrieben:
    Da er schon mit HT getestet hat und Daten rausbekommen hat, denke ich dass die Parameter stimmen sollten.

    Ok, hab ich etwas anders gelesen, aber sei's drum.

    @Topic
    Ich habe mir jetzt mal das Pro angeguckt und glaube zu wissen wo das Problem liegt. Du setzt in den angehängten Pro's jeweils den Scanner-FB ein. Ich denke nicht dass es damit funktioniert. An diesem kannst du nur jeweils ein Start-und Endezeichen für einen Frame definieren. Brauchst du da mehr Terminierungszeichen (wie im Fall "CRLF") funktioniert der Baustein nicht mehr. Hier solltest du auf den universellen "Serial_Interface"-Baustein wechseln, der ist halt "schwieriger" zu versorgen. Denn dieser Baustein frisst keine Strings, sondern nur ein Array von Byte. Für dich bedeutet das, dass du deinen VISU-String erst in Bytes konvertieren musst (natürlich Zeichen zählen für Byte-Array-Indizes!) und anschließend deine Terminierungszeichen anhängen kannst. Das lässt sich wunderbar in die StateMachine integrieren. Auf diese Weise kannst du auch ganz einfach einzelne Befehle zusammenbauen bevor du sie absetzt.

    Die Logik muss also s.ä. aussehen:
    1. Sende-Byte-Array versorgen: VISU-String in Byte konvertieren, CRLF anhängen, Anzahl Zeichen in Sendekette ermitteln und an Serial-FB übergeben.
    2. Mit Tastendruck auf VISU "Start" Zeichenkette setzen.
    3. Warten bis Daten im Empfangspuffer.
    4. Daten aus Empfangspuffer extrahieren: Byte-Array in STRING umwandeln und die entsprechenden Zeichen aus dem STRING zur Auswertung extrahieren. (Anmerkung: Das Empfangen ist natürlich blöd weil der FB offenbar nicht ausgibt wann er eine Antwort fertig empfangen hat. Hier könnte es aber wiederum sein dass der Sensor Terminierungszeichen anhängt, nach denen du das Byte-Array scannen kannst. Ansonsten würde ich eine Zeitverzögerung einbauen und prüfen ob sich der Index (Anzahl der empfangenen Zeichen) nicht mehr ändert.)

    Vom HT solltest du dich nicht verwirren lassen. Aber es ist doch durchaus möglich, dass das HT automatisch CRLF anhängt mit Drücken der Enter-Taste bzw. diese Zeichen maskiert wenn Daten empfangen wurden. Heisst ja auch nichts anderes wie Zeilenvorschub und genau so arbeitet ja auch das HT (obwohl in der Hilfe dazu nix zu finden ist).
    Letztlich ist aber entscheidend was dein Sensor verlangt an Zeichenkette. Wenn die Doku sagt er braucht ein CRLF dann muss das auch von der Wago kommen (HT macht das vermutlich automatisch).

    Gruß Andy

     
  • gravieren - 2011-06-14

    Hi

    Das was "blackenslaver666" schreibt hört sich logisch an.

    HT sendet mit dem "Return" ein "CRLF" !

    Was sagt das Handbuch hierzu ?
    (Protokoll" für Ölbadsensor)

    Gruß Karl.

     
  • isom - 2011-06-15

    Hallo miteinander

    Erstmals vielen Danke für eure Hilfe!

    @Andy: Werde wohl nicht umher kommen, die von dir angedeutete komplexere Variante zu programmieren, danke für den Tipp!

    @Karl: Zum Protokol werden folgende Informationen hilfreich:
    "Der Befehl vom Rechner muss mit einem CR, CRLF oder LCCR abgeschlossen sein."
    "Die Rückantwort vom Thermostaten wird immer mit einem CLRF abgeschlossen."
    CR = Carriage Return, LF = Line Feed

    Beim durchforsten der Doku bin ich über eine spezielle Anmerkung gestolpert; "Treiber Software für LABVIEW". Hier wird beschrieben, dass um die Schnittstelle programmtechnisch ansprechen zu können, ein Treiber zur Verfügung gestellt wird. Könnte es sein, dass hierbei der Hund vergraben liegt? Mit HT funktioniert die Ansteuerung, jedoch nur befehlsweise und vor allem wird in der Doku erwähnt, dass mit HT die Schnittstelle auf ihre Funktion getestet werden kann.

    Ich probier's mal mit dem Serial-Interface-FB. Danke nochmals!!

    Grüsse
    isom

     
  • isom - 2011-07-01

    Hallo miteinander

    Habe die Komunikation herstellen können und musste nicht die komplexere Variante wie von Andy angedeutet programmieren. Der Fehler lag wie schon vermutet bei den Start- & Endzeichen. Ich wurde jedoch fündig bei den STRING-Konstanten in der Hilfe:
    - $L oder $l Zeilenvorschub
    - $N oder $n Neue Zeile
    - $R oder $r Zeilenumbruch

    Mein Ölbad verlangt ein CR LF. Ich habe nun mit der Funktion CONCAT den eingegebenen String, der übermittelt werden soll, mit dem String '$R$L' zusammengefügt. Nach dieser Änderung funktionierte das Senden einwandfrei. IM FB Barcode_Scanner mussten um Daten empfangen zu können, die folgenden Initialwerte angelegt werden:
    - startzeichen : BYTE :=16#0A; ( Prefix -> LF )
    - endzeichen : BYTE :=16#0D; ( Sufix -> CR )

    Hoffe ich kann mit diesem Eintrag jemandem auf die Sprünge helfen & wünsche einen schönes Wochenende.

     

Log in to post a comment.