String Initialisieren

xymoro

Level-1
Beiträge
29
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi

Ich möchte die Funktion FC26 aus der IEC bibliothek anwenden.
Damit diese Funktion ausgeführt wird muss der String, der sich im DB950.String_1 (s. angehängtes Bild) befindet, initialisiert werden.

Beobachte ich das System so ist diese Funktion nicht grün umrandet. Meine Annahme ist, dass diese nicht funktioniert, da der String nicht initialisiert wurde.

Ich habe die Funktion FC95 selber programmiert (s. angehängtes Bild). Diese soll mir den String initialisieren. Ich schaffe es mit dieser Funktion in den DB950.String_1 zu schreiben. Ich sehe aber nicht das sich Bit0 und Bit1 dadurch verändern.

Ein Standard Baustein "FB7 Receive Data" schreibt zyklisch etwas in den DB950.String_1 hinein.

Muss ich den String zyklisch initialisieren? Langt einmal?

Ich hoffe mir kann geholfen werden.


CPU Typ:315-2DP
Software: STEP7 V5.4 + SP4

Gruß
Jan
 

Anhänge

  • Unbenannt3.JPG
    Unbenannt3.JPG
    119,8 KB · Aufrufe: 67
Ich möchte die Funktion FC26 aus der IEC bibliothek anwenden.
Damit diese Funktion ausgeführt wird muss der String, der sich im DB950.String_1 (s. angehängtes Bild) befindet, initialisiert werden.

Beobachte ich das System so ist diese Funktion nicht grün umrandet. Meine Annahme ist, dass diese nicht funktioniert, da der String nicht initialisiert wurde.
Deine FC95 wird nur mit einer Flanke aufgerufen, weil M900.7 direkt nach der Bearbeitung wieder zurückgesetzt wird. Meistens sieht man den Rahmen darum höchstens mal kurz aufblinken.
Wer setzt denn überhaupt M900.7?

Ich habe die Funktion FC95 selber programmiert (s. angehängtes Bild). Diese soll mir den String initialisieren. Ich schaffe es mit dieser Funktion in den DB950.String_1 zu schreiben. Ich sehe aber nicht das sich Bit0 und Bit1 dadurch verändern.
Was sind Bit0 und Bit1? In deinem Screenshot ist davon nichts zu sehen.

Ist der String_1 denn immer mindestens 18 Zeichen lang? Weil du versuchst ab dem 18. Zeichen 3 Zeichen zu kopieren.

Ansonsten mach dich doch erstmal mit der MID-Funktion etwas vertraut, indem du z.B. aus deinem "Check This Out" versuchst das "This" auszuschneiden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beim Initialisieren ist wichtig, dass im Bye 0 und 1 des S7-Strings die max. Länge und die tatsächliche Länge stehen. Diese ersten beiden Byte siehst du so im DB nicht. Schau dir mal einen String in der Variablentabelle an, also z.Bsp. deinen String_1 byteweise als Char ab DBB0 bis DBB30 in die Variablentabelle eintragen. DBB 0 und 1 dabei bitte in Hex. In DBB 0 sollte eine 64hex stehen, in DBB1 entweder eine 64hex oder auch eine kleinere Zahl, wenn weniger Bytes relevant sind. Ohne diese Längenangaben arbeiten die Standard-FC nicht!

Wenn du nun zyklisch Daten in den DB hineinschreibst, mußt du kontrollieren, ob auch Byte 0 und 1 sinnvolle Daten enthalten, das hängt davon ab, was genau dein FB 7 empfängt und einträgt. Kommen die Strings z.Bsp. von einem PC, dann gibt es die Größenangaben nicht und man muß sie selbst eintragen!
 
Zuletzt bearbeitet:
Deine FC95 wird nur mit einer Flanke aufgerufen, weil M900.7 direkt nach der Bearbeitung wieder zurückgesetzt wird. Meistens sieht man den Rahmen darum höchstens mal kurz aufblinken.
Wer setzt denn überhaupt M900.7?
Merci guter Tipp habe einen Timer eingebaut. Die Funktion hatte dann aber auch keinen grünen Rand --> String nicht geeignet.

Ist der String_1 denn immer mindestens 18 Zeichen lang? Weil du versuchst ab dem 18. Zeichen 3 Zeichen zu kopieren.
Der Antwort String aus der RS232 Kommunikation ist länger. Initialisiert habe ich nur die ersten 12 Bits.

Ansonsten mach dich doch erstmal mit der MID-Funktion etwas vertraut, indem du z.B. aus deinem "Check This Out" versuchst das "This" auszuschneiden.
Hab ich gemacht und etwas gespielt. Man siehe da, wenn ich vorne aus dem String was ausgeschnitten habe, hat es geklappt.

--> Ich habe jetzt einfach die Initialisierung des Strings deutlich länger gemacht, so dass quasi die RS232 die Initaldaten überschreibt und nicht ins "leere" schreibt und siehe da es funktioniert.

Der Initialstring war schlicht und einfach kürzer als mein RS232 Antwortstring. Doch jetzt, da der Initialisierungsstring länger ist als der RS232 String funzt es.

Merci!
 
Wenn du nun zyklisch Daten in den DB hineinschreibst, mußt du kontrollieren, ob auch Byte 0 und 1 sinnvolle Daten enthalten, das hängt davon ab, was genau dein FB 7 empfängt und einträgt. Kommen die Strings z.Bsp. von einem PC, dann gibt es die Größenangaben nicht und man muß sie selbst eintragen!
Wie wahr (vgl. Antwort zuvor).
Danke
 
Zurück
Oben