Problem mit CHAR in SCL

Jupp06

Level-1
Beiträge
107
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe einen Datenbaustein mit mehreren ARRAYS OF CHAR.
In diese Arrays möchte ich nun in SCL Zeichen schreiben.

Beispiel:
Test ist ein ARRAY [0..3] OF CHAR
Nun würde ich gerne die Zeichen ABCD in dieses Array schreiben.

Im DB kann man ja z.B. den Startwert so deklarieren: 'A','B','C','D'

Eine Zuweisung DBx.Test := 'A','B','C','D'; funktioniert aber nicht.

Selbst DBx.DBx := 'A'; geht nicht.


Was mache ich falsch? Habe über die Suche im Forum leider nichts passendes gefunden.


Viele Grüße

Johannes
 
Wie immer kommt es auf die richtige Schreibweise an.

Code:
DB100.DBB400 := CHAR_TO_BYTE('A');
DB100.Char_Array[1] := 'A';
WORD_TO_BLOCK_DB(100).DBB400 := CHAR_TO_BYTE('A');

Probier mal Obiges aus, Variante 1 ist direkt absolut, Variante 2 Symbolisch (auch für den DB kann man noch ein Symbol angeben, wichtig ist Chat_Array (so ist das in meinem DB definiert), der Compiler muß wissen, welchen Typ die Variable hat), Variante 3 ist mit variablem DB, ansonsten aber absolut. Nur mit der Konvertierung übersetzt der Compiler das, was dann im DB steht habe ich aber nicht geprüft.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schonmal vielen Dank für die schnelle Hilfe!

Sowas geht jetzt:
"Telegramm_Quittierung".Telegrammkopf.T_FlowControl[0] := 'A';
"Telegramm_Quittierung".Telegrammkopf.T_FlowControl[1] := 'K';

Elegant wäre es natürlich, wenn man das auch in einer Zeile hinbekommt. Besonders bei längeren Arrays.
Gibt es die Möglichkeit?
 
Elegant wäre es natürlich, wenn man das auch in einer Zeile hinbekommt. Besonders bei längeren Arrays.
Gibt es die Möglichkeit?

Du kannst statt ein Array of Char einen String deklarieren und dann ganze Strings schreiben, die haben aber zusätzlich 2 Kopfbyte im DB. Und dann könnte man vielleicht noch mit dem AT-Befehl ein wenig experimentieren, aber das kommt wohl auf das Gleiche raus.
 
Wegen der Kopfbytes wollte ich eigentlich keine Strings nehmen, weil sonst die Bytezuordnung in den Telegrammen nicht mehr stimmt...
(ASCII-Telegramme, die über IE und ein PLS gesendet werden)

Wenn ich erst einen String bilde und dann einen Teil davon ins Char-Array kopiere, ist der Aufwand schon wieder so groß, dass ich die Bytes auch gleich einzeln kopieren kann.
Schade... :-|
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sowas geht jetzt:
"Telegramm_Quittierung".Telegrammkopf.T_FlowControl[0] := 'A';
"Telegramm_Quittierung".Telegrammkopf.T_FlowControl[1] := 'K';

Elegant wäre es natürlich, wenn man das auch in einer Zeile hinbekommt. Besonders bei längeren Arrays.
Gibt es die Möglichkeit?

Das geht mit einer selbstgeschriebenen Funktion STRING_TO_CHAR.
 
würde ich nicht sagen, daß der Aufwand groß ist.

Ich habe probiert :

Code:
VAR_INPUT
    IN_String              : STRING[16]  ; 
       aChar AT IN_String  : ARRAY[1..18] OF CHAR ;
END_VAR

VAR_OUTPUT
   OUT_Char        : ARRAY[1..18] OF CHAR ;
END_VAR

  
BEGIN

IN_String          := 'ABCDEFGHabcdefgh' ;
OUT_Char := aChar ;

Das Array OF Char hat am Anfang die 2 Bytes MaxLänge und IstLänge, die muß man dann weglassen
beim kopieren.

gruß fmbux
 
Hallo zusammen,
ich habe einen Datenbaustein mit mehreren ARRAYS OF CHAR.
In diese Arrays möchte ich nun in SCL Zeichen schreiben.

Beispiel:
Test ist ein ARRAY [0..3] OF CHAR
Nun würde ich gerne die Zeichen ABCD in dieses Array schreiben.

Im DB kann man ja z.B. den Startwert so deklarieren: 'A','B','C','D'

Eine Zuweisung DBx.Test := 'A','B','C','D'; funktioniert aber nicht.

Selbst DBx.DBx := 'A'; geht nicht.


Was mache ich falsch? Habe über die Suche im Forum leider nichts passendes gefunden.


Viele Grüße

Johannes

Nachtrag zu "Selbst DBx.DBx := 'A'; geht nicht."

So funktioniert es: DBx.DBx := CHAR_TO_BYTE('A');

Gruß
Johannes
 
Zurück
Oben