Step 7 [SCL] String bearbeiten/auswerten mit AT-Sicht

netsroht

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

ich schlage mich seit gestern mit einem Problem rum, bei dem ich nicht weiterkomme.

Zum Hintergrund:
Ich möchte ich SCL einen String bearbeiten/auswerten. Hierzu benötige ich dessen (aktuelle) Länge.

Ich habe hierfür eine lokale Sicht erstellt:

Code:
    test : STRING[5];
    _test AT test : STRUCT
        maxi : BYTE;
        actu : BYTE;
        str1 : BYTE;
        str2 : BYTE;
        str3 : BYTE;
        str4 : BYTE;
        str5 : BYTE;
        str5 : BYTE;
       END_STRUCT;

Beim compilieren bekomme ich den Fehler
Der Typ der Sicht ist nicht mit dem Typ der Variablen verträglich.


Wenn ich jetzt eine string um ein Zeichen länger anlege
Code:
    test : STRING[[COLOR=#FF0000]6[/COLOR]];[COLOR=#FF0000][/COLOR]
    _test AT test : STRUCT
        maxi : BYTE;
        actu : BYTE;
        str1 : BYTE;
        str2 : BYTE;
        str3 : BYTE;
        str4 : BYTE;
        str5 : BYTE;
      [COLOR=#FF0000]  str6 : BYTE;[/COLOR]
       END_STRUCT;

dann funktioniert es... :confused:

Kann mir das jemand erklären bzw. mit weiterhelfen. Mir reicht ein String der Länge 5....

Gruß, netsroht
 
Genau so ist es... war ein Schreibfehler.

Richtig ist
Code:
    test : STRING[5];
    _test AT test : STRUCT
        maxi : BYTE;
        actu : BYTE;
        str1 : BYTE;
        str2 : BYTE;
        str3 : BYTE;
        str4 : BYTE;
        str5 : BYTE;
       END_STRUCT;

Jemand eine Idee, woran das liegt, dass es nicht klappt?
 
Hallo,
das ist für mich erstaunlich denn eigentlich darf die AT-Sicht auch kleiner als die Original-Variable sein.
Welche Version von SCL verwendest du ?

Schöner wäre es übrigens, wenn du statt der einzelnen Bytes des Strings ein Array of Byte in entsprechender Größe definierst ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich könnte mir vorstellen (aber ich weiss es nicht). Dass er bei einer strukturierten Sicht diese immer auf ein Wort füllt und das beim String nicht der Fall ist.
Dann hast du deine 8 Byte in der Struktur wohingegen der String nur 7 Byte Lokaldaten reserviert.

Aber reine Vermutung.
 
Hallo,
das ist für mich erstaunlich denn eigentlich darf die AT-Sicht auch kleiner als die Original-Variable sein.
Welche Version von SCL verwendest du ?
Version 5.3 SP6

Schöner wäre es übrigens, wenn du statt der einzelnen Bytes des Strings ein Array of Byte in entsprechender Größe definierst ...

Gruß
Larry
Code:
    test : STRING[5];
    _test AT test : STRUCT
        maxi : BYTE;
        actu : BYTE;
        str : ARRAY[1..5] OF BYTE;
    END_STRUCT;

Leider gleiches Ergebnis.

Ich könnte mir vorstellen (aber ich weiss es nicht). Dass er bei einer strukturierten Sicht diese immer auf ein Wort füllt und das beim String nicht der Fall ist.
Dann hast du deine 8 Byte in der Struktur wohingegen der String nur 7 Byte Lokaldaten reserviert.

Aber reine Vermutung.

Ein String mit einer Länge von 5 besteht ja aus 7 Bytes, wobei im DB quasi 8 Bytes (4 Words) geblockt werden.

Eine lokale Sicht wie oben hat ja genau 7 Bytes. Also sollte es nach meiner Logik gerade gehen.

Sehr komisch...
 
Eine lokale Sicht wie oben hat ja genau 7 Bytes. Also sollte es nach meiner Logik gerade gehen.

Ich weiss das es aufgehen sollte. Aber wär nicht das erste mal das lokaldaten anders gehandhabt werden als das das handling in einem DB. Und ich wüsste jetzt ehrlichgesagt nicht wie man das definitiv nachprüfen könnte wie die lokaldaten effektiv adressiert werden wenn man einen String drauf legt.

Ich habs mal nachgesehen und einen übersetzten Baustein mit 5 zeichen string wegkopiert und in awl geöffnet. es werden gerade anzahl bytes reserviert.

es kann auch sein das die Fehlerüberprüfung des Compilers das einfach enger sieht. IMHO ein Fehler aber nicht zu ändern.

mfg René
 
Zurück
Oben