# Hilfe bei serieller Kommunikation



## sps_noob (25 Januar 2011)

Hallo zusammen,

ich hoffe ihr könnt mir helfen.

Problem:
Ich möchte gern einen Kugelhahn mit Mikroprozessor über eine serielle Schnittstelle ansteuern. Befehle können mit CR oder LF terminiert werden.
Der Kugelhahn kann Befehle im ASCII Code verarbeiten, möglich wären hier !<Pos> oder V (für die Ausgabe der Versionsnummer) + weitere Befehle.

TwinCat Software ist vorhanden (ja auch die ComLib), Hardware die vorhanden ist wären BK 1120 + KL6031 oder alternativ EK1100 + EL6001

Ich kann bisher den Ausgang der Klemme mit Daten belegen, im System Manager auch zu sehen bzw. am Kugelhahn kommt am Tx auch eine Spannung an.

Allerdings tut sich am Eingang der Klemme nichts, wenn ich eine Positionsvorgabe sende passiert auch nichts.

Habe das ganze mit dem Beckhoffbeispiel zum senden eines strings probiert. Ohne Erfolg, bzw. mit dem genannten Resultat.

Ich habe keine Ahnung wo der Fehler liegt, muss die Klemme noch konfiguriert werden? Wie muss der string richtig aussehen? Passt die Hardware einfach nicht?

Habe mittlerweile so viele Ansätze ausprobiert, nichts funktioniert. Beckhoff support kann mir auch nicht helfen, Kugelhahn Hersteller meint ich solle den Hahn mit ner seriellen Schnittstelle vom PC aus mit Hyperterm oder so ansprechen (also per SUB-D kabel und entsprechendem Adapter) aber das hilft mir nicht, da ich neben dem Kugelhahn auch noch 2 weitere Hähne und noch n paar andere Teile steuern möchte (und zwar ohne dass ich jedesmal mein kabel in jedes Teil reinstecke)

Falls ihr mehr Infos braucht sagt Bescheid. Zur Lösung reicht mir ja vlt. auch nur ein andere Denkansatz oder irgend ein Stichwort dass zur Lösung führt...google kann ich dann auch noch allein benutzen...aber ich habe jetzt echt so gar keine Ahnung was mir weiter hilft.

also ideen, fragen, lösungen,....her damit ich bin für jeden geistreichen kommentar dankbar


----------



## SW-Mech (25 Januar 2011)

sps_noob schrieb:


> Hallo zusammen,
> 
> .... zu sehen bzw. am Kugelhahn kommt am Tx auch eine Spannung an.



Was heisst am Tx kommt eine Spannung an? Nach meinem Verständnis ist hier Tx der Sendeausgang der Kugelhahn-Schnittstelle.

Oder anders gesagt:
- Der Tx-Anschluss der Beckhoff-Klemme muss mit dem Rx-Anschluss des Kugelhahns verbunden sein
- Der Rx-Anschluss der Beckhoff-Klemme muss mit dem Tx-Anschluss des Kugelhahns verbunden sein
- Auf beiden Seiten müsste jetzt noch ein GND-Anschluss sein, der dann noch miteinander verbunden wird.

So sieht meiner Meinung nach eine RS232-Verbindung aus.

Gruss SW-Mech


----------



## sps_noob (25 Januar 2011)

Oh da hab ich gar nicht dran gedacht das zu erwähnen...nein, also gemeint ist natürlich der Tx Eingang am Hahn, es ist tatsächlich der Dateneingang gemeint, so stehts zumindest auch in der Anleitung....ausprobiert hab ich es im übrigen auch schon...

Die Verbindung sieht natürlich so aus wie du sie beschrieben hast...Ich hab mich da nur unklar ausgedrückt, also das Kabel welches mit dem Tx(Klemme) verbunden ist und am Rx(Hahn) angeschlossen ist, da kann ich eine Spannung messen...

Am Tx(Hahn) kann ich auch eine Spannung messen, dieses Kabel ist mit Rx(Klemme) verbunden...nur ich sehe keine Daten im System Manager...

Also elektrisch scheint schon alles richtig verbunden, ja auch gnd.


aber danke trotzdem


----------



## argv_user (25 Januar 2011)

Spannungen messen im Ruhezustand.
Auf RxD und TxD sollten immer von Null verschiedene Pegel vorhanden sein.
Kenne den Beckhoff-Kram nicht, aber wenn es sich um RS232 handelt,
so muss es gegenüber GND eine negative Spannung sein.

Verflixt nochmal, vor etwa 30 Jahren habe ich mittels Kopfhörer probiert ob
sich auf Sende- und Empfangsleitung etwas bewegt. Da ging es allerdings nur um maximal 9600 Baud.

Also die Verkabelung stimmt? Sicher?

Sind ja nur drei Drähte, und es fließen nur Milli...


----------



## sps_noob (25 Januar 2011)

also am Rx(Hahn) habe ich ca. -10,5V am Tx(Hahn) -8,3V gnd ist nahezu 0

wie sw-mech die verdrahtung beschrieben hat, so ist sie in der anleitung und so ist sie auch schon immer von mir umgesetzt... ich denk der fehler liegt irgendwo in der software, also entweder muss ich im system manager noch etwas machen oder im plc muss das programm irgendwie anders aussehen...evtl. die klemme konfigurieren, wobei laut kugelhahn anleitung die standard settings der kl6031 identisch sind mit der der kugelhahn schnittstelle...

aktuell sieht das programm so aus wie das beispiel von beckhoff zu sendstring...kann den code hier nicht einfügen, da anderer rechner, aber ich habs auch schonmal hier im forum gesehen...if timer.q or send.busy then .... send (.............) usw.

für das was ich da aufbauen will benutzen wir nen CP6211 - irgendwas und der hängt weder am netz noch hat der sonst irgend ne datenübertragungsmöglichkeit zu meinem laptop. (bzw. wir wollen das auch gar nicht)


----------



## ohm200x (25 Januar 2011)

Hi,

hast du die Komponenten schon öfter eingesetzt oder ist es das erste mal?
Auch wenn der Tip schon genannt wurde würde ich ggf. die Komponenten erst mal einzeln testen / kennenlernen.

Also wie der Hahnhersteller schon sagt mit nem PC den Hahn über eine serielle Verbindung (Hypertherminal unter Windows) mal ansprechen.
Wäre ja gut möglich das der Hahn nen Hau weg hat.
Wenn das tut weißt das der Hahn schon mal nicht schuld ist.

Dann kannst du auf die selbe Methode die Ausgaben deiner Seriell-Karte prüfen.

Sollte bis hierhin alles iO sein hört mein Latein auf.

Eine Frage noch. Du schreibst den oben genannten Test möchtest oder kannst du nicht machen, weil du mehrere Hähne anzusteuern hast. Sind das zufällig RS485 Komponenten? Denn RS232 ist soweit ich weiß eine reine Punkt zu Punkt Verbindung.

Hoffe das hilft.

Gruß ohm200x


----------



## bits'bytes (25 Januar 2011)

Hallo,
unter der Annahme dass es eine RS232 ist (und keine RS485/RS422)

Grundsätzlicher Test ob von der SPS was rauskommt: Du zapfst die Tx Leitung der SPS an und führst sie mit dem Ground auf die serielle Rx des PC (auch USB Serial Konverter möglich).

Dann lässt du irgend so ein Programm mitlaufen wie z.B.
http://www.serial-port-monitor.com/index.html

Wenns rein ASCII ist, kannst du auch Hyperterm verwenden.

Dann siehst du schon mal genau, was aus der SPS rauskommt.

Das gleiche kannst du auch beim Kugelhahn versuchen.

Das müsste dir dann doch schon etwas aufzeigen.

bg
bb


----------



## Commander_Titte (25 Januar 2011)

Hallo,

hatte vor zwei wochen mal nen änlichen Fall, hatte aber mit Modbus RTU zutun.
Aber vieleicht bringt es dich ja weiter.

Ich hatte nen BC9020 und ne KL6001. Damit wollte ich ein LCD Display über RS232 Modbus RTU ansteuern. Bei der Inbetriebnahme bzw. testen, wurden nur Daten von der Klemme hinaus gesendet. Es kam aber absolut nichts an Daten/Antworten vom LCD wieder. Hatte dann gedacht das irgendetwas im Programm nicht in Ordnung war. Zum überprüfen des Programmes hab ich das LCD über den COM Port am Laptop betrieben. Funktioniert!
Hab dann anstatt den BC9020 ein BC9100 eingesetzt. Problem bestand immer noch. Durch zufall hab ich gesehen, dass ich noch ein BC9100 mit anderer Firmware hab. Eingesetzt, und es funktionierte, zum Teil! Daten senden und empfange funktionierte. Um eine sicher Verbindung zu gewährleisten musste ich die Taskzeit von 10ms auf 5ms runtersetzten. Und seit dem läuft es!!

BC9020 -> FW: B4; Lief nicht
BC9100 -> FW: B1; Lief nicht
BC9100 -> FW: B0; funktioniert


Vieleicht gibt es ja auch probleme mit der Firmware auf dem BK, oder vieleicht die Taskzeit zu hoch?

MFG 
Christoph


----------



## biGPack (27 Januar 2011)

Hast du jetzt schon mal versucht über Hyperterminal den Kugelhahn zu steuern?
Die Klemmen an sich sind vorkonfiguriert. Je nachdem welchen Typ du benutzt.
Bei uns sind immer 9600/8/n/1 in der Klemme als standard. Über KS2000 kannst du die Klemme umkonfigurieren.

Ich hab dir mal ein Beispiel für nen scanner der via serieller Kommunikation arbeitet angehängt.


----------



## sps_noob (27 Januar 2011)

Aaaalso,

ich fang mal hinten an.

KS2000 hab ich nicht, habe "nur" TwinCat.

Den Verusch mit Hyperterminal habe ich bereits gemacht (schon lange bevor ich versucht habe das ganze mit Beckhoff) zu machen...es geht alles.

Aber ich möchte ja meine Anlage automatisieren und nicht mit dem Stecker von Teil zu Teil rennen. Wenn ich so an die 10 serielle Schnittstellen am Laptop hätte würde sich das Problem natürlich nicht ergeben. Deshalb ja TwinCat + Klemmen, da kann ich mir ja soviele Schnittstellen basteln wie ich brauche.

Was ich demnächst noch versuchen werde (falls niemand ne bessere Idee hat) ist das was bitsbytes geschrieben hat...also mal loggen was da rauskommt.
...
Im System Manager sehe ich den Klemmenausgang 22 Datenbyte...ich sende jetzt den string "V$N" an den Kugelhahn, der Hahn sollte eigentlich dann mit der Versionsnummer antworten...Der Ausgang der Klemme sieht dann so in etwa aus Byte 0: 86 Byte1: 0D die anderen Bytes 00 ... Stausbyte am Eingang (Klemme) switched immer zwischen 0000 und 0001 aber die Datenbytes bleiben bei 00 
Das sollte eigentlich NUR bei nem nicht bekannten Befehl passieren...Ist mein String falsch? Terminierung?

Das ist jetzt gerade der aktuelle Stand, den String hab ich schon mehrfach verändert...in allen Variationen...habe irgendwo in der infosys gelesen die strings sind Nullterminiert...ist das von Belang? In der Hahn-Anleitung steht als Terminierungszeichen CR oder LF bin jetzt confused wegen dieser Nullterminierung...

Möglicherweise ist ja genau das der Fehler...wenn ich mit Hyperterm Daten an den Hahn sende brauch ich mir darüber keine Gedanken machen...da hab ich nichts von ner Nullterminierung gehört bisher.

schonmal Danke für eure Mühen und Ideen...

ach ja...die Firmwareaktualisierung...guck ich mal ob und wie das geht und dann obs hilft


----------



## argv_user (27 Januar 2011)

Nullterminiert sind die Strings in C; im Speicher.
Aber ganz selten wird diese Null auch übertragen.

Ich rate jetzt nicht wirklich:

Also es sollte genügen, den Kommandostring zu senden.
Wenn der am Ende weder CR noch LF hat, dann eines der 
beiden nachschieben. Aber keinesfalls noch eine Null.


----------



## sps_noob (27 Januar 2011)

mit Nachschieben meinst du: erst das Kommando...dann ein CR ?
also 2 strings senden? oder meinst du string 1 := "V" ...dann auf das gleiche Ausgangsbyte ein CR ? Weil, wenn ich beides nacheinander sende kommt am Klemmenausgang das gleiche raus wie wenn ich beides in einem string schreibe...

Dazu müsste ich dann nach dem senden des Kommandos den Txbuffer leeren, richtig? hmmm.... ich probiers mal aus... später...bin grad nicht vor der anlage

aber is ne variante, die ich noch nicht probiert habe...


----------



## argv_user (27 Januar 2011)

Es ist eigentlich ganz einfach:

Wenn der Kommandostring am Ende noch kein CR oder LF hat, dann hängst Du eben eins dran, und dann weg damit. Nur BASIC-Fans haben es da etwas einfacher...


----------



## sps_noob (28 Januar 2011)

So ich habe jetzt mal ein anderes serielles Gerät auf die gleiche Art und Weise angesprochen wie den ****** Kugelhahn...Da gings!

Bin jetzt mit meinem ganzen Latein am Ende, die SPS läuft bei anderen Geräten so wie sie soll, nur beim Hahn nicht.

Der ist im übrigen i.O. per Kabel und Laptop und Hyperterm tut er was er soll.

so Lösungsvorschläge?

bei Bedarf würd ich auch mal mein programm anhängen...das müsste ich aber vorher von A nach B "tragen" per USB stick und da hab ich grad keine Zeit für *sry*

danke für die bisherigen tips und für die die noch kommen...


----------



## Seals (1 Februar 2011)

Versuch doch mal statt $N ein $0A$0D in den String zu schreiben. Vielleicht hilft das...


----------



## sps_noob (1 Februar 2011)

Hallo alle Helfer,

also String war und ist richtig, Verdrahtung ist auch korrekt...Der Beckhoff Support Mitarbeiter brachte mich dann nach ca. 12,8 mails auf die Idee einfach mal RTS und CTS zu brücken....Ergebnis...läuft! Anscheinend hat die im PLC ausgeführte Config der Klemme nicht das gemacht was sie sollte, so musste also die Hardwarelösung mit Brücken her...ist mir auch egal was da nicht gefunzt hat....jetzt jehts alles.

Falls jemand ne einfache Softwarelösung für mein Probelm (das erstmal gelöst ist) hat, dann her damit...warn ja bisher alles nur Tests zum grundsätzlichen Betrieb meiner Teile, als nächstes gehts dann ans coden.... 3Kugelhähne, ne Dosierpumpe, 2 Magnetventile, 2 Schlauchpumpen, ne Flügelradpumpe und n Temperatursensor wollen ja jetzt über die klemmen miteinander reden..... aber bis ich da wieder um hilfe bettele vergehen noch ein paar tage...


----------



## Mario_K (2 Februar 2011)

Hallo sps_nob,

da du ja leider kein KS2000 hast bleibt dir nur die Möglichkeit die Klemme aus der Software raus zu parametrieren. Das habe ich letztens programmiert.
Dabei habe ich in der Hochlaufphase der SPS die aktuelle Konfiguration mit KL6ReadRegisters ausgelesen, je nach meiner Wunschkonfig mit KL6configuration die gewünschte Konfiguration eingespielt und zum Abschluss noch mit NT_Reboot einen Neustart erzwungen. Funktioniert hier einwandfrei.

Grüße, Mario


----------

