Step 7 ASCII Zeichenkette über CP senden

Garviel

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus Leute!

Ich sitze an folgendem Problem:

Ich muss einem Regler eine Zeichenkette vorgeben, um damit Parameter zu beschreiben / auszulesen.

Via Docklight bekomme ich die Befehle an den Regler übermittelt und er ändert seine Werte dementsprechend oder liest sie aus und gibt sie mir zurück. (Bild siehe Anhang)

Dort sieht man den Befehl einmal zum beschreiben des Parameters "!2075" mit dem Wert "30" - Der Regler antwortet mit "2075" und "OK".
Das selbe beim lesen, der Befehl zum abfragen des Parameters "?2075" - Der Regler antwortet mit dem Parameter "2075" und dem beschriebenen Wert "30".

Der Befehl müsste so aussehen - <SOH>~<STX>!207530<ETX>\Ð<EOT> bzw. in HEX 01 7E 02 21 32 30 37 35 33 30 03 5C D0 04

Ich möchte das ganze aber über eine CPU 315 2 PN/DP und einen CP 340 laufen lassen, also ich habe versucht über den FB3 P_SEND einen dieser Befehle zu übertragen, leider ohne Erfolg. Der Regler hat den Wert nicht angenommen.

Mache ich da etwas verkehrt? Muss die Zeichenkette noch umgewandelt werden, da ich sie nicht einfach so eingeben kann?

Für eure Hilfe wäre ich euch sehr dankbar

Grüße, und einen guten Start ins Wochenende!
 

Anhänge

  • Docklight_KommProtokoll1.png
    Docklight_KommProtokoll1.png
    49,7 KB · Aufrufe: 46
Ich gab das ketzte Mal den FB_SND_RK (mit ASCII-Protokoll) genutzt.
An den kann man den DB_No, das DBB_No und die Länge der zu sendenen Daten antragen.
Da kann man dann einen String mit den benötigten Daten zusammenfügen (z.B. mit FC2/Concat aus der Standard-IEC-Library).

Zu beachten ist:

Wenn du den String in einen DB ab DBB 0 legst (z.B. ab DB100.DBB0), dann mußt du am FB_SND_RK für DB_No 100 und für DBB_NO 2 eintragen.
Siemens-Strings haben am Anfang 2 extra Byte, die max. String-Länge und die tatsächliche Stringlänge.
Diese darfst du nicht mit an dein Gerät übermitteln, das kann mit diesen beiden Zeichen nichts anfangen!
 
Vielen Dank euch beiden für eure Antworten!

Das mit den ersten beiden Zeichen bei einem String war mir bewusst, leider bekam ich es trotzdem nicht hin den Befehl via Sring an den Regler zu schicken. Nach einem Gespräch mit einem Kollegen gestern morgen haben wir es mit einer Struktur ausprobiert und darin jeden Teil des Befehls (in Hex) als Byte eingetragen und es hat funktioniert.

Momentan sitze ich daran die Daten, welche vom Regler zu mir zurückgesandt werden, so zu verarbeiten das sie auch für normalsterbliche lesbar sind, welche nachher damit arbeiten sollen.

Ich habe da an so etwas gedacht: Die Antwort wenn ich einen Parameter auf dem Regler beschrieben habe sieht beispielhaft so aus: 01 7E (Adresse des Geräts) 02 23 32 30 37 35 3F 3B (Parameter 2075 OK) 03 5C D0 (Checksumme) 04.
Und für die Abfrage : 01 7E (Adress des Geräts) 02 23 32 30 37 35 32 30 (Parameter 2075 mit dem Wert 20) 03 ** (Checksumme) 04.

Nun möchte ich einmal für die Antwort "OK" beim parametrieren eine Ausgabe machen und für die Antworte beim abfragen des Parameterwertes (s.o.) "20" ebenfalls. Ich muss quasi einzelne Bytes aus der Struktur herausholen.

Hat da jemand eine Idee wie man das am geschicktesten macht?

Liebe Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mach aus der Antwort wieder einen String, dann kannst Du mit entsprechenden Stringfunktionen den relevanten Teil herausschneiden und dann in Integer oder was auch immer umwandeln.
Gruß
Erich
 
Zurück
Oben