[SCL] String in Char umwandeln

emilio20

Well-known member
Beiträge
825
Punkte Reaktionen
20
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo
wie kann ich in SCL aus einen String[11] einen Array of Char[0..11] erzeugen?

Habe folgendes

VAR_OUTPUT

A_CHAR:ARRAY [0..11]OF CHAR;


END_VAR


VAR
TEXT:STRING[11];
SPEICHER:ARRAY[0..11]OF STRING;


END_VAR


Beginn

FOR i := 0 TO 11 BY +1 DO
SPEICHER:=TEXT; ????? Hier stimmt was nicht
;
END_FOR;




FOR i2 := 0 TO 11 BY +1 DO
A_CHAR[i2]:= STRING_TO_CHAR(SPEICHER[i2]);
;
END_FOR;
 
Zuletzt bearbeitet von einem Moderator:

Ralle

Supermoderator
Teammitglied
Beiträge
14.633
Punkte Reaktionen
3.489
Speicher hast du als Array of String definiert, das heißt, das in Speicher 12 Strings á 255 Byte Länge angelegt sind.
Wenn du da etwas zuweisen willst, dann sollte es auch ein String sein.

Der zweite Teil, mit dem Wandeln String_to_Char sieht ok aus. --> Korrektur, ne, das paßt ja auch nicht

Muß noch mal korrigieren, der zweite Teil greift ja auchin Speicher, da sollte statt Speicher[i2] Text[i2] stehen.
 
Zuletzt bearbeitet:

Larry Laffer

Supermoderator
Teammitglied
Beiträge
13.096
Punkte Reaktionen
2.721
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
ich würde hier so vorgehen :
Auf den Quellstring eine AT-Sicht bilden, die den String-Bestandteil, der dich interessiert, als Array_of_Char darstellt und diesen Datenteil (der AT-Sicht) dann auf den Ausgabeteil kopieren / übertragen.

Gruß
Larry

Nachsatz:
Ich kann mit deinem Code nicht so schrecklich viel anfangen sonst hätte ich dir da ein Beispiel zu gepostet ...
Was möchtest du nach A_Char ausgeben ?
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.633
Punkte Reaktionen
3.489
AT-Ansicht wire Larry sagte, wäre dann in etwa so (für einen 30-Zeichen-String):

Temp_String1: STRING[30];
atTemp_String1 AT Temp_String1: ARRAY[0..31] OF BYTE; /Byte verwenden und evt. Typ wandeln oder gleich Char, Byte 0 und 1 sind max.Länge und tatsächliche Länge des String!
 
OP
emilio20

emilio20

Well-known member
Beiträge
825
Punkte Reaktionen
20
Hallo
Habe noch mal eine grundsätzliche Frage.

Wenn mann Daten über TCP überträgt verwendet man dann CHAR oder kann mann einen kompletten String übertragen ?

Habe mal versucht einen kompletten String zu senden. Dieser kam auch am Arduino an, allerdings wurde auch die ersten 2 Bytes Länge/Große angezeigt.
Habe ich beim Übertrage die ersten 2 Bytes nicht mitgesendet, kam der Text richtig an.

Ein weitere frage. Am Baustein TCP Senden muss man die Sende-daten ansetzen und die Größe LEN. Ich habe einen String[16] der Bereich geht von DBX 0.0 - DBX 18.0 . Muss ich jetzt bei LEN 16 oder 18 ansetzen ?
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.633
Punkte Reaktionen
3.489
Zuviel Werbung?
->Hier kostenlos registrieren
Bei S7 besteht ein String aus den 2 führenden Byte, dann kommt der eigentliche String. Davon wissen natürlich andere Empfänger nichts. Entweder du sendest den String als eine einfache Folge von Byte/Char (dann 16 Byte LEN) oder du sendest den S7-String und entfernst im Empfänger die beiden führenden Byte (dann 18 Byte LEN). Es ginge auch noch etwas anderes.
Beim TCP-Sendebaustein gibst du ja wahrscheinlich einen Any als Sendefach an. Wenn du nun einen String[16] in deinem Sende-DB anlegst, ab DBB0 z.Bsp., dann könntest du am Sende-FB für den Any diesen ab DBB2 angeben, also z.Bsp. P#DB100.DBX2.0 Byte 16. Bei LEN dann natürlich 16. Das würde ich einmal testen. Nochmal, du schreibst einen String in dein Sendefach, gibst aber beim Any den Beginn des Sendefachs 2 Byte später an.
 
OP
emilio20

emilio20

Well-known member
Beiträge
825
Punkte Reaktionen
20
Hallo
Senden klappt wenn ich die ersten 2 Bytes weg lase. Aber beim empfange habe ich eine art laufschrieft. Ich habe als empfangsvariable aich einen String[16]. Denke mal das ich nicht die infromationen erhalte wie lange der String ist.
Versuche es mal mit einen cHAR
 
OP
emilio20

emilio20

Well-known member
Beiträge
825
Punkte Reaktionen
20
Was meist du genau mit AT sicht . ? Kannst du mr ein Beispiel zeigen ?

Hallo,
ich würde hier so vorgehen :
Auf den Quellstring eine AT-Sicht bilden, die den String-Bestandteil, der dich interessiert, als Array_of_Char darstellt und diesen Datenteil (der AT-Sicht) dann auf den Ausgabeteil kopieren / übertragen.

Gruß
Larry

Nachsatz:
Ich kann mit deinem Code nicht so schrecklich viel anfangen sonst hätte ich dir da ein Beispiel zu gepostet ...
Was möchtest du nach A_Char ausgeben ?
 
OP
emilio20

emilio20

Well-known member
Beiträge
825
Punkte Reaktionen
20
Hallo das hat ja schon mal super geklappt.
Habe aus meinen String[16] einen char gemacht den ich über TCP sende. Das Echo ist auch ein Char

Jetzt muss ich nur noch aus den empfangenen Array [0..15] of Char einen String[16] machen ?
 

Larry Laffer

Supermoderator
Teammitglied
Beiträge
13.096
Punkte Reaktionen
2.721
Du kannst die AT-Sicht auch dafür nehmen.
Der String wird einfach "nur" anders benutzt. Eine Änderung, die du in der AT-Sicht machst, wirkt sich auch auf die Ursprungs-Variable aus (an eben der Position).

Gruß
Larry
 
Oben