Großanzeige über EL6001 ansprechen

DA8

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,
ich brauche Hilfe dabei, eine Großanzeige der Firma Rhewa (0405/20) über eine EL6001 anzusprechen.
Habe mir bereits viele Themen über die EL6001 angesehen aber komme zu keinem Ergebnis.

Rhewa hat mir eine Aufstellung zugesandt, wie ich den Datensatz ASCII-Code 22Byte zu konfigurieren habe.
Byte 0: STX = $02
Byte 1-11: Daten
Byte 12: $27 (Gewichtswert nicht in Ruhelage)
Byte 13: $A0 (Gewicht in kg)
Byte 14 - 18: $30
Byte 19: $0D
Byte 20: $0A
Byte 21: EOT = $04

Bisher habe ich eine schnelle Task erstellt und die Kommunikation läuft über SerialLineControl.
Die Daten möchte ich über SendString an die Karte senden.

Nun zu meinen Fragen:
1. Ich bekomme über eine Wiegezelle ein Gewicht in einem String. Aus diesem String lese ich mir Stelle für Stelle die Werte und möchte sie mir in den String schreiben, den ich an die EL6001 schicken möchte. Vor jeden Wert muss ich aber ein Dollar setzen, was zu einem Problem führt weil TwinCat durch das Dollar ein Befehl erwartet (String-Konstante). Was muss ich also für ein Zeichen vor oder nach dem Dollar setzen damit ich ein einzelnes Dollar in einen String einfügen kann?


2. Mir wird, wenn ich einfach ausgedachte Werte (Byte1-11: ABCDEF____) an die Karte sende, der passende ASCII im SystemManager angezeigt. Die Anzeige bleibt aber weiter auf 'Waage außer Betrieb' als würde sie nichts erhalten. Wenn ich aber die Anzeige abklemme und eine Brücke von TX auf RX mache, lese ich an RX denselben Code ein. Kann das an einem fehlenden Handshake durch die Anzeige liegen?
Angeschlossen habe ich die Anzeige nur an TX und GND.

ich hoffe, jemand kann nachvollziehen was meine Probleme sind und mir helfen.

Danke schon Mal im Voraus.
Freundliche Grüße!
 
Wo brauchst Du ein $-Zeichen???
Für ein $-Zeichen versuche mal '$$' oder '$24' oder 16#24. Um den Zeichencode eines Zeichens anzugeben muß man nicht die $-Schreibweise benutzen, man kann den Wert auch hexadezimal oder dezimal angeben: '$0D' = 16#0D = 13

Sind die Kommunikationsparameter Baudrate, Datenbits, Paritätsbit und Stopbit passend zur Großanzeige eingestellt?
Müssen in "Byte 1-11: Daten" ganz bestimmte Werte stehen?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo DA8,
könnte es sein, dass Du etwas missverstanden hast. Alle von Dir im Beispiel angeführten Dollarzeichen sollen/müssen nicht gesendet werden und die dahinter stehenden Daten sind auch keine Strings, sonst kämst Du auch nie mit den 22 Bytes hin. Das Dollarzeichen soll Dir lediglich Signalisieren, dass es sich bei den Daten dahinter um Zahlen im Hex-Format handelt. Du must vielmehr den String den Du von Deiner Wiegezelle erhälst in eine Zahl wandeln.
 
PLC_Bildung_String_ASCII.jpg
PLC_SendString_ReceiveString.jpg
SystemManagerTxRx.jpg

An PN/DP:
Ich bilde mir einen String, indem ich 22 Bytes hintereinander durch $ 'trenne'.
Wenn ich eine Brücke zwischen Rx und Tx mache, empfange ich über ReceiveString genau das, was ich an einer Anlage in unserem Betrieb empfange. Dort ist aber eine Auswerteeinheit von Rhewa zwischen und ich soll testen, ob wir diese überhaupt noch brauchen.

Die Kommunikationsparameter sind eingestellt wie bei der anderen Anlage auch.
 
Die Anzeige bleibt aber weiter auf 'Waage außer Betrieb' als würde sie nichts erhalten. [...] Kann das an einem fehlenden Handshake durch die Anzeige liegen?
Angeschlossen habe ich die Anzeige nur an TX und GND.
Dazu mußt Du in das Handbuch der Anzeige schauen, wie deren RS232 angeschlossen und eingestellt werden muß.

Dein Sendestring fbFormat.sOut sieht erstmal brauchbar aus (bis auf die nicht genauer beschriebenen Byte 1-11). Die Anzeige sollte damit was anfangen können.

Ich bekomme über eine Wiegezelle ein Gewicht in einem String.
Hast Du Dich da ungenau ausgedrückt?
Wiegezellen senden keine Strings, sondern ändern ihren elektrischen Widerstand. Wiegezellen müssen an ein Auswertegerät angeschlossen werden (z.B. RHEWA 82c) und dieses kann dann das ermittelte Gewicht an eine Anzeige oder einen Kommunikationspartner senden.

Wenn ich eine Brücke zwischen Rx und Tx mache, empfange ich über ReceiveString genau das, was ich an einer Anlage in unserem Betrieb empfange. Dort ist aber eine Auswerteeinheit von Rhewa zwischen und ich soll testen, ob wir diese überhaupt noch brauchen.

Wenn Du mit "Auswerteeinheit" das Auswertegerät meinst: ja, irgendein Auswertegerät brauchst Du unbedingt (kann auch ein ganz einfaches sein). Eine SPS kann Wiegezellen nicht auswerten. Oder gibt es für Deine nicht genannte SPS ein spezielles Eingangsmodul für Wiegezellen?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich sende in dem String von 1-11 lediglich '111 '. 3x 1 und sonst Leerzeichen aber das wird ja bekannt sein.

Ja ich habe mich ungenau ausgedrückt. Ich bekomme einen LREAL_Wert den ich mir in einen String schreibe. Diesen String nehme ich dann Zeichen für Zeichen auseinander und wandel ihn in eine Zahl um. Aber soweit bin ich noch nicht weil ich noch das Problem mit dem Dollar-zeichen habe. Habe versucht die werte hexadezimal zu übertragen aber da habe ich nicht wirklich viel ausprobiert weil ich erstmal die Anzeige ansprechen möchte.

Ich arbeit mit einem CX5120 der Firma Beckhoff, einer el6001 (rs232 für Anzeige) und einer el3356-0010 (Wiegezelle). Den Umrechnungsfaktor habe ich im Programm realisiert und bekomme exkate Werte angezeigt. Früher wurde es halt so realisiert, dass über rs232 ein String aus dem Auswertegerät gelesen und wieder hineingeschrieben wurde.
 
Ich weiß nicht die Bedeutung und Bildungsvorschrift der Bytes 1-11. Es sollte (für das gesamte Telegramm) in dem Handbuch der Anzeige stehen, was die Anzeige erwartet.
Wenn Du ein Telegramm zu einer anderen Anzeige mitlesen kannst und genau so ein Telegramm zu Deiner Anzeige sendest, und die Anzeige zeigt das nicht an, dann sollte der Grund dafür ebenfalls in dem Handbuch zu finden sein. Wir können das Handbuch nicht für Dich lesen, weil RHEWA das Handbuch nicht öffentlich zum Download anbietet.

Für die Wandlung bzw. Ziffernzerlegung von LREAL zu ASCII-Zeichen (CHARs) brauchst Du keinerlei $-Zeichen. Du mußt lediglich zu dem Ziffernwert (0...9) den Wert 48 dezimal ( = 16#30 = '0' ) addieren oder OR-verknüpfen.
Vielleicht gibt es auch einen fertigen Baustein von Beckhoff für die (formatierte?) Konvertierung von LREAL zu String? Dann mußt Du wohl lediglich ein paar Zeichen aus dem erzeugten String in Deinen String kopieren - wieder ohne irgendeine Verwendung von $-Zeichen.

Harald
 
Den Gewichtswert in den Sendestring/Struktur einfügen kann man ungefähr so machen (Behandlung des Dezimalkommas und Formatierung/rechtsbündig fehlt noch):
Code:
mySend.Byte0 := 16#02;  //sollte auch gehen: mySend.Byte0 := '$02';
mySend.Byte1 := '1';
...
mySend.Byte11 := ' ';
mySend.Byte12 := 16#27;
mySend.Byte13 := 16#A0;

myLRealGewicht := 123.4;
sGewicht := CONCAT(LREAL_TO_STRING(myLRealGewicht), '00000');
mySend.Byte14 := sGewicht[1];
mySend.Byte15 := sGewicht[2];
mySend.Byte16 := sGewicht[3];
mySend.Byte17 := sGewicht[4];
mySend.Byte18 := sGewicht[5];

mySend.Byte19 := 16#0D;
mySend.Byte20 := 16#0A;
mySend.Byte21 := 16#04;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,
es hat geklappt mit dem Umwandeln der Daten. Super, danke!!!

Die Anzeige zeigt mir trotzdem nichts an. Ich habe mir heute morgen die Mühe gemacht und ein Auswertegerät abgebaut und im Büro an meine testanlage. Dort lese ich einen String von dem Auswertegerät ein der genau der gleiche ist wie ich mir schon gebildet habe. Die Anzeige läuft auch weil ich sie an das Auswertegerät angeschlossen habe.
Habe jetzt noch eine weitere EL6001 verbaut um mir den Code auszulesen, der an die Anzeige geht. Dort kommen aber lediglich 5*SPACE und 1*AMPERSAND an. Verstehe ich nicht.

Die Rhewa-Dokumentation der Anzeige besteht aus zwei Seiten, dort finde ich keine Daten die ich nicht berücksichtigt habe. Die Dokumentation des Auswertegerätes ist da umfangreicher, beschreibt mir aber auch nur das Datenformat zwischen Auswerteeinheit und PC.

Vielen Dank für die viele Hilfe!!!
 
Zurück
Oben