Beckhoff EL6002 - Prbleme beim Senden/Empfangen von Strings

Schnapsbrenner

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Einen schönen Sonntag an alle,

erstmal die groben Fakten:
An meiner CX5130 ist (neben anderen Klemmen) eine EL6002 gesteckt. Via RS232 ist an der EL6002 ein Julabo F32-ME Kältethermostat angeschlossen.
Zur Programmierung nutze ich TwinCat 3. Derzeit habe ich schon die Möglichkeit mittels Strings zu kommunizieren (Einstellungen senden - Werte empfangen funktioniert, einzeln gesendet, zuverlässig).

Zum probieren (und auch im allgemeinen Erfahrung mit Twincat zu sammeln) habe ich mir auf einer Visu einen Switch erstellt, diesen dann mit einer Variablen verknüpft und in der Main eine IF ELSE Schleife angelegt um das Gerät EIN und AUS zu schalten. Funktioniert super.

Bei dem Versuch dieses kleine Projekt zu erweitern stoße ich auf folges Problem:
Nach dem Einschalten möchte ich nun einen zusätzlichen Befehl senden, der mir die aktuelle Bad-Temperatur zurück gibt um diesen in der Visu anzuzeigen.
Nun funktioniert keinerlei Senden und Empfangen mehr durch diesen Zusatzbefehl. Auch an verschiedenen Stellen im Programmablauf ist es nicht mehr möglich zu kommunizieren.
In der STRING-Variablen ist entweder der letzte gesendete Befehl oder er ist leer.

Woran kann es liegen?

Ich habe verschiedene Schleife um die einzelnen Befehle gepackt und auch schon mit Timern experimentiert.
Ziel der Versuche war es auszuschließen, dass der Befehl mehrere Sende- bzw.. Empfangs-Versuche braucht.
Code bereite ich gerade auf, um diesen bald möglich hinzuzufügen.

Beste Grüße und im voraus Vielen Dank für Antworten.
 
Hallo!

....ohne, dass ich den Code jetzt kenne.
Die Bausteine zum Senden/Empfangen werden auch immer wieder mit FALSE aufgerufen?
Ein beliebter Fehler ist, den Flankenwechsel nicht zur berücksichten. Fast alle Baustein, werden über eine positive Flanke gestartet und müssen durch eine negative Flanke für die nächste Verwendung erst einmal "zurück gesetzt" werden.

Gruß,
mac203
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Problem ist behoben - es hat ein "Enter"-Zeichen in einem der Strings gefehlt und somit wurden 2 Befehle hintereinander an das Thermostat gesendet und jeweils nur der erste bearbeitet. :sm23:

@mac203
kannst dein Kommentar bitte nocheinmal näher erläutern? - an sich kenne ich den Umgang mit Flanken aus anderen Bereichen - hier dachte ich Beckhoff kümmert sich darum - an den Rücksetzten des Empfangsstrings arbeite ich gerade
 
@mac203
kannst dein Kommentar bitte nocheinmal näher erläutern? - an sich kenne ich den Umgang mit Flanken aus anderen Bereichen - hier dachte ich Beckhoff kümmert sich darum - an den Rücksetzten des Empfangsstrings arbeite ich gerade

Ein einfaches Beispiel ist der NT_GetTime.
Wenn ich diesen Baustein mit Start:=TRUE aufrufe, bekomme ich die Betriebssystem-Zeit (Zeit, Datum, usw.) zurück.
Soll nun erneut die Zeit abgefragt werden, so muss der Baustein erst einmal mit Start:=FALSE aufgerufen werden, um ihn wieder in den Ausgangszustand zurück zu setzen.

Gruß,
mac203
 
Hallo zusammen,

ich habe diese Klemme auch im Einsatz, bin Anfänger in Sachen TwinCat und soll damit einem Trafo die Spannung und Frequenz vorgeben. D.h. eigentlich will ich ihm nur einen String senden, brauche also keinen ständigen Datenaustausch. Nun hilft mir die Doku von Beckhoff nicht wirklich weiter und die Beispiele beziehen sich alle auf die Klemme EL6001. Wie muss ich mein Programm bzw. welche Variablen muss ich im SystemManager verknüpfen, um eine Kommunikation herstellen zu können. Hat jemand zufällig ein Beispiel für die Klemme El6002? Das würde mir wirklich weiterhelfen. Ich programmiere übrigens mit TwinCat 2.

Vielen Dank für eure Hilfe im Voraus.
 
Zuletzt bearbeitet:
Ich habe die Lib erworben und arbeite schon damit. In den Beispielen kann ich z.B. für die EL6001 State und Crtl im SysMan mit den Variablen vom Programm verknüpfen, diese gibt es aber bei der EL6002 nicht. Ich bin jetzt so weit, dass ich in meiner Struktur vom Programm den ASCII Code zur Klemme transportiert bekomme, jedoch läuft mir immer mein TXBuffer über (ComError_TXBUFFEROVERRUN). Als Befehl benutze ich den Send String Baustein, den ich durch Freigabe einer boolschen Variable aktiviere. Ich habe im SysMan bisher nur die Datenstrukturen verknüpft, was muss ich noch miteinander verknüpfen?
 

Anhänge

  • Send_String.PNG
    Send_String.PNG
    14,7 KB · Aufrufe: 60
  • SysMan_Struktur.PNG
    SysMan_Struktur.PNG
    14,9 KB · Aufrufe: 48
  • Sys_Man.PNG
    Sys_Man.PNG
    35 KB · Aufrufe: 49
  • Var_Global.PNG
    Var_Global.PNG
    10,6 KB · Aufrufe: 46
  • Fast_Task.PNG
    Fast_Task.PNG
    21,7 KB · Aufrufe: 51
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt hab ich irgendwas verhauen, ich bekomme sofort den TXOverrun sobald ich meinen String sende. Es wird nichts mehr in die Datenstruktur geschrieben. :-( Mit was soll ich die einzelnen Bits verknüpfen, ich habe ja keine Variablen dafür, oder muss ich mir da was zusammenschreiben? Vielen Dank schon mal für deine bisherige Unterstützung.
 
Vermutlich liegt es an der Twincat-Version.

Die Bit-Verknüpfung sollte eine Notlösung sein:
z.B. das Bit Inti accepted im Status hat in hier die Adresse 39.2, also das 2. Bit.
Auf Verknüpfung klicken -> im Fenster Variable Typ ->alle Typen anwählen und das Bit mit dem
entsprechenden Byte verknüpfen. Im nächsten Fenster dann das korrekte Bit 2 anwählen, usw..


6002_1.JPG
 
Ok, verstehe. Dann mach ich das mal für alle durch. Die TwinCat-Version ist eigentlich noch ziemlich neu, ich hoffe nicht , dass es daran liegt. Ich habe parallel mal den Beckhoff Support kontaktiert und lass mich da auch mal belehren. Ich wünsche dir/euch auf jeden Fall ein schönes Wochenende. Vllt schreibt man sich nächste Woche wieder, Danke bis hier hin!:s12::s12:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Neue Woche neues Glück. Ich habe nun auch Antwort vom Beckhoff Support bekommen, auch hier wird deine Antwort bestätigt Paulchen_1. Ich habe nun nach deiner Anleitung die Variablen verknüpfen können, bekomme aber dann einen Verknüpfungskonflikt angezeigt (s. Bild). Ich weiß leider noch nicht genau an was es liegt. Update: Inzwischen ist der Konflikt behoben, ich hatte eine alte Verknüpfung vergessen zu löschen. Jetzt become ich meinen String in ASCII an den Ausgang der Klemme. Jeder einzelne Buchstabe wird also umgewandelt in ASCII und einer Datenstruktur z.B. D[1] zugewiesen. Nur an meinem Trafo ändert oder sieht man keinerlei Reaktion. Wenn ich den Handshake RTS/CTS über coe-online auf TRUE setze bekomme ich den TXOverrun-Error, also lasse ich ihn auf FALSE. Einstellungen am Trafo habe ich keine vorgenommen. Laut Hersteller 19,2kBaud 8N1 und die Klemme habe ich auch darauf eingestellt. Wenn ich am Ausgang der Klemme über den SysMan sehe, dass Daten in den Data Out Felder ankommen, kann programmtechnisch nichts verkehrt sein, oder? Jemand eine Idee, warum sich am Trafo nichts tut?
 

Anhänge

  • Capture.jpg
    Capture.jpg
    95,6 KB · Aufrufe: 38
Zuletzt bearbeitet:
Schwer zu sagen.
Wenn du sicher bist, das die ASCII-Zeichen am Trafo ankommen, dann werden die vielleicht falsch interpretiert.
Gesendet wird 'Sour:Voltac,230<lf>'. Die 230 werden hierbei auch in ASCII gewandelt, also 50,51,48.
Oder muss hier z.B. die Zahl 230 direkt übertragen werden?
Erwartet der Trafo vielleicht noch <Start of Text>, <End of Text> o.ä..
Antwortet der Trafo denn mit irgendwelchen Zeichen?
Gruß Paulchen
 
Ob das Zeichen am Trafo ankommt kann ich nicht sagen, ich habe aber das Zeichen am Ausgang der Klemme, soweit man das im SysMan sehen kann. Ein Startsymbol gibt es laut Hersteller nicht aber ein Endzeichen. Bei RS232 kann LF oder CR verwendet werden. Habe ich aber auch schon so eingegeben, der Trafo antwortet gar nicht. Vllt liegt es wirklich daran die 230 als Zahl einzugeben, ich schau da gleich nochmal nach.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Problem ist gelöst!:s11:

Ich habe wie du gesagt hast alles einzeln verknüpft, leider ohne Erfolg. Der Fehler lag dann an dem Endzeichen für den String. Mein Trafo erkennt entweder LF oder CR als Ende des Strings an, ich hatte es in den verschiedensten Versionen versucht zu schreiben. Da TwinCat den String automatisch in ASCII umwandelt, dachte ich, dass ich dafür einfach $10 bzw. $13 schreiben kann. Falsch gedacht, hier benötige ich die hex Schreibweise, komm da mal drauf. Hab es dann mit $0D versucht und siehe da, der Trafo reagiert!

Vielen Dank an Paulchen_1, du hast mir echt weitergeholfen!
 
Zu früh gefreut...konnte es leider erst seit kurzem wieder testen...also nochmal zusammenfassend:

ich möchte über eine EL6002 mit einem Trafo kommunizieren. Die Verknüpfungen und das Programm habe ich soweit hinbekommen. Der Trafo reagiert auch, manchmal. Ich denke, dass mein gesendeter String nicht richtig gelesen wird und möchte daher gerne wissen, wie ich den String schreiben muss. Der Trafo und die Klemme sind wie folgt parametriert: 19,2 kBaud 8N1

Laut Anleitung des Trafoherstellers besteht der zu sendende Befehl aus Schlüsselwort, Trennzeichen, Übergabewert und Endzeichen. Mehrere Befehle aus mehreren Schlüsselwörtern können durch einen „:“ getrennt werden. Als Endzeichen sind entweder CR oder LF erlaubt.

Befehl Bsp.:

SOUR:VOLTAC,230 (Spannung 230V-AC)
SOUR:CURR,0.5 (Strom 0.5A)
SOUR:FREQ,50 (Frequenz 50Hz)
OUTP,1 (Ausgangsrelais EIN)

Über den Baustein SendString habe ich dann den Befehl in verschiedenen Variationen eingegeben.

z.B.: ‘SOUR:VOLTAC,230:SOUR:CURR,0.5:SOUR:FREQ,50:SOUR:OUTP,1$0D’

Dies hat aber nicht (immer) funktioniert. Was funktioniert hat war:

‘SOUR:VOLTAC,230:SOUR:VOLTAC,230:SOUR:FREQ,50:SOUR:FREQ,50$0D’ (zwei gleiche Befehle deswegen, weil: ‘SOUR:VOLTAC,230:SOUR:FREQ,50$0D‘ nicht funktioniert hat)

Und in einem zweiten SendString Baustein:

‘SOUR:OUTP,1$0D‘

Mit diesen zwei SendString Befehlen hat sich der Trafo auf 230V und 50 Hz eingestellt und anschließend das Ausgangsrelais eingeschaltet. Was mache ich falsch oder liegt es doch nicht am Befehl?

Vielen Dank im Voraus.
 
Ich weiß nicht ob das mit $0D funktioniert. Bei Codesys kenne ich dafür nur $R oder $N als carriage return und line feed. Vielleicht ist das das Problem. Ansonsten vielleicht die Baudrate runterstellen oder deine Verkabelung prüfen?

Du hast auch wenn ich das richtig sehe die Parität auf "None" gestellt (8N1). Hier werden Fehler vollkommen ignoriert. Kann dein Netzteil auch Paritätsprüfung der Daten ? Dann könnte das Netzteil fehlerhaft empfangene Daten erkennen.

Ansonsten: Bekommst du eine Rückmeldung ob der Befehl empfangen wurde? Zum Beispiel ein "OK" oder irgendwas? Du könntest auch die Kommandos einzeln schicken.
 
Zuletzt bearbeitet:
Die Verkabelung habe ich überprüft, daran liegt es nicht. Das Endzeichen $0D habe ich aus dem Beispiel entnommen, kann es aber mal mit $R bzw. $N versuchen. 8N1 ist vom Hersteller vorgegeben, dementsprechend habe ich die Klemme konfiguriert. Von einer bestimmtem Reihenfolge steht nichts im Handbuch, werde den Hersteller nochmals kontaktieren.
 
Schönen Freitag euch Allen,

da ich eine ähnliche Frage habe stelle ich sie mal hier.

Zu meiner Konfiguration:

TwinCAT NC PTP v2.11.2249

CONlibV2 1.8.08

Win 7 32bit PC mit ComPort

Zu meiner Frage:

Ich möchte gern eine Stereo Vorstufe (Rotel RC-1570) mit TwinCAT steuern. Befehle werden aktuell mit den Baustein SendString gesendet, dass funktioniert auch wunderbar.

Die Antworten der Vorstufe möchte ich mit den ReciveString Baustein einlesen.

Mein Baustein Aufruf sieht so aus:


(*Empfangen*)


fbRecive(
Prefix := '',
Suffix := '',
Timeout :=T#1s ,
Reset := FALSE,
ReceivedString := HV_EmpfangeString,
RXbuffer := Com_RxBuffer ,
StringReceived => ,
Busy => ,
Error => ,
RxTimeout =>
);


Edge(
CLK :=fbRecive.StringReceived ,
Q =>
);


IF Edge.Q THEN
Last_String := HV_EmpfangeString;
END_IF

Es wird allerdings nur ein Teil oder garkein String empfangen. Ich glaube das der Baustein nicht weiß wann der gesendete String endet.

Hier mal das Protokoll : http://rotel.com/sites/default/files/product/rs232/RC1570 Protocol.pdf

Hoffe es kann mir wer helfen. Super Forum hier, hat mir schon oft geholfen.

Gruß HA_Freak
 
Zurück
Oben