# [SCL] String in Char umwandeln



## emilio20 (7 November 2012)

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;_


----------



## Ralle (7 November 2012)

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.


----------



## Larry Laffer (8 November 2012)

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 (8 November 2012)

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!


----------



## emilio20 (8 November 2012)

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 (8 November 2012)

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.


----------



## emilio20 (8 November 2012)

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


----------



## emilio20 (26 November 2012)

Was meist du genau mit AT sicht . ? Kannst du mr ein Beispiel zeigen ?



Larry Laffer schrieb:


> 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.
> 
> ...


----------



## Larry Laffer (26 November 2012)

Ja ... siehe Beitrag #4 in diesem Thread von Ralle ...
Das läßt sich natürlich auch beliebig anders varieren ...

Gruß
Larry


----------



## emilio20 (26 November 2012)

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 (27 November 2012)

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


----------

