Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: Problem mit CHAR in SCL

  1. #1
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Frage


    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
    Zitieren Zitieren Problem mit CHAR in SCL  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.261
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    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.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Jupp06 (27.09.2012)

  4. #3
    Jupp06 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Standard

    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?

  5. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.261
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Zitat Zitat von Jupp06 Beitrag anzeigen
    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.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Jupp06 (27.09.2012)

  7. #5
    Jupp06 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Standard

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

  8. #6
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    Zitat Zitat von Jupp06 Beitrag anzeigen

    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.
    and we all support the team (S.King - Die Arena)

  9. Folgender Benutzer sagt Danke zu Sinix für den nützlichen Beitrag:

    Jupp06 (28.09.2012)

  10. #7
    Registriert seit
    17.10.2009
    Beiträge
    37
    Danke
    4
    Erhielt 11 Danke für 11 Beiträge

    Standard

    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

  11. Folgender Benutzer sagt Danke zu fmbux für den nützlichen Beitrag:

    Jupp06 (01.10.2012)

  12. #8
    Jupp06 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Jupp06 Beitrag anzeigen
    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

  13. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.261
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jupp06 Beitrag anzeigen
    Nachtrag zu "Selbst DBx.DBx := 'A'; geht nicht."

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

    Gruß
    Johannes
    Das hatte ich dir doch schon in Post 2 geschrieben.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 31.08.2012, 08:55
  2. Antworten: 50
    Letzter Beitrag: 09.08.2012, 09:31
  3. Problem mit SCL-FC
    Von momo99 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 15.03.2009, 17:20
  4. Problem mit FC in SCL
    Von broesel im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 05.06.2007, 09:18
  5. Problem mit FB in SCL
    Von broesel im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 29.05.2007, 14:41

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •