String-Variable mit $-Zeichen

good_mike

Level-1
Beiträge
55
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte in Twincat 2 folgenden String Variableninhalt erzeugen '$12$34$56$78'.

Die einzelnen Ziffern verändern sich dynamisch.
D.h. ich habe die folgenden INT-Variablen
Teil_1 = 12
Teil_2 = 34
Teil_3 = 56
Teil_4 = 78

Das ganze möchte ich mit den entsprechenden $-Zeichen dazwischen in den o.g. String umwandeln.
Funktioniert ja prinzipiell über CONCAT aber das Problem ist das ich mit diesen "doofen" Dollarzeichen nicht zurecht komme.
Sobald ich nur ein $-Zeichen angebe (z.B. xx = '$') kommt die Fehlermeldung "Erwarte ';' vor '$'...." . Wenn ich zwei Dollarzeichen angebe hab ich zwar keine Fehlermeldung, aber mein String sieht dann so aus '$$12$$34$$56$$78'.

Mir ist klar das die Angabe des $ Zeichens was mit der Hex-Darstellung zu tun hat, aber so richtig komme ich hier nicht weiter....

Vielen Dank vorab für die Hilfe


Gruß

Good_mike
 
Soweit mir noch bekannt wird folgend des $-Zeichens ein HEX-Code nach Windows-CP? verlangt. Dann müsstest Du also $21 eingeben für das Dollar-Zeichen.
Versuch möglich?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, die Idee war super. Natürlich gleich ausprobiert....
Das Zeichen bei $21 ist ein "!". Schnell gegoogelt: Der HexCode für das Dollarzeichen ist die 24- Wenn ich jetzt $24 angebe habe ich wieder die zwei Dollarzeichen "$$". Also genau so weit wie zuvor... :-(

1653843528027.png
 
Hallo Good_mike,

kurzer Hinweis: Deine erste CONCAT-Anweisung ist nicht richtig parametriert, es müsste "CONCAT(xx, Teil_1)" heißen.


Gruß, Fred
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Hilfe in Codesys 2 sagt zu diesem Thema:
Code:
STRING-Konstanten
Ein String ist eine beliebige Zeichenreihe. STRING-Konstanten werden mit einfachen Hochkommas vorn und hinten begrenzt. Es können auch Leerzeichen und Umlaute eingegeben werden. Sie werden genauso wie alle anderen Zeichen behandelt.

In Zeichenfolgen wird die Kombination des Dollarzeichens ($) gefolgt von zwei hexadezimalen Ziffern als hexadezimale Darstellung des acht Bit Zeichencodes interpretiert. Außerdem werden, wenn sie in einer Zeichenfolge auftauchen, Kombinationen von Zeichen, die mit dem Dollarzeichen beginnen, wie folgt interpretiert:

$$
 Dollarzeichen
 
$'
 Hochkomma
 
$L oder $l
 Zeilenvorschub
 
$N oder $n
 Neue Zeile
 
$P oder $p
 Seitenvorschub
 
$R oder $r
 Zeilenumbruch
 
$T oder $t
 Tabulator
 
Genau dadurch bin ich auf die zwei Dollarzeichen gekommen. Aber ich darf halt im Inhalt der String-V. nur ein $ Zeichen haben....
 
Die online Darstellung ist irreführend über prüfe dein string Länge mit langht sollte Anzahl ohne Sonderzeichen sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Stimmt...
1653855356497.png

und trotzdem funktioniert die Übergabe der PIN an den OSCAT Baustein PIN_CODE so nicht. Sehr komisch!

Trotzdem Danke für die Hinweise!!!
 

Anhänge

  • 1653855012912.png
    1653855012912.png
    46,2 KB · Aufrufe: 3
16.33. PIN_CODE
Type Funktionsbaustein
Input CB : BYTE (Eingang)
E : BOOL (Enable Eingang)
SETUP PIN : STRING(8) (zu prüfender String)
Output TP (Trigger Ausgang)

Kann es sein, dass Dein String für den Baustein zu lang ist?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Baustein PIN_CODE benötigt keine Dollarzeichen. Er schaut lediglich auf die Bytewerte des Strings. Nur wenn das als Zeichen nicht darstelbare Steuerzeichen sind, werden die mit dem Dollarzeichen dargestellt.

Code:
    Teil_1: BYTE;
    Teil_2: BYTE;
    Teil_3: BYTE;
    Teil_4: BYTE;
    Gesamt: STRING;
    ptSource: POINTER TO BYTE;
    ptDest: POINTER TO ARRAY [0..4] OF BYTE;

Code:
Teil_1 := 12;
Teil_2 := 34;
Teil_3 := 56;
Teil_4 := 78;

ptDest := ADR(Gesamt);
ptSource := ADR(Teil_1);
ptDest^[0] := ptSource^;

ptSource := ADR(Teil_2);
ptDest^[1] := ptSource^;

ptSource := ADR(Teil_3);
ptDest^[2] := ptSource^;

ptSource := ADR(Teil_4);
ptDest^[3] := ptSource^;

ptDest^[4] := 0;
 
Der Baustein PIN_CODE benötigt keine Dollarzeichen. Er schaut lediglich auf die Bytewerte des Strings. Nur wenn das als Zeichen nicht darstelbare Steuerzeichen sind, werden die mit dem Dollarzeichen dargestellt.

Code:
    Teil_1: BYTE;
    Teil_2: BYTE;
    Teil_3: BYTE;
    Teil_4: BYTE;
    Gesamt: STRING;
    ptSource: POINTER TO BYTE;
    ptDest: POINTER TO ARRAY [0..4] OF BYTE;

Code:
Teil_1 := 12;
Teil_2 := 34;
Teil_3 := 56;
Teil_4 := 78;

ptDest := ADR(Gesamt);
ptSource := ADR(Teil_1);
ptDest^[0] := ptSource^;

ptSource := ADR(Teil_2);
ptDest^[1] := ptSource^;

ptSource := ADR(Teil_3);
ptDest^[2] := ptSource^;

ptSource := ADR(Teil_4);
ptDest^[3] := ptSource^;

ptDest^[4] := 0;
Danke! Das schau ich mir später an - Ich komme die Woche über wohl nicht dazu!!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Anzeige '$$' ist nur ein Darstellungsproblen bzw. Anzeige-Eigenschaft der Entwicklungsumgebung. Wie Du mit der LEN-Funktion sehen kannst, ist der String '$$12$$34$$56$$78' nur 12 Zeichen lang und nicht 16, weil da tatsächlich nur einzelne '$'-Zeichen drin stecken und nicht doppelte.

Harald
 
Zurück
Oben