Frage zu FC5: DINT to STRING

Zuviel Werbung?
-> Hier kostenlos registrieren
@Thomas:
Was passiert, wenn du einem Baustein (von mir aus ein FC), der als Übergabeparameter einen String[5] (z.B.) haben will einen String[3] übergibst ?

Ich weiß was passiert, du aber anscheinend nicht.
Zeig deinen Baustein doch mal her. Vielleicht ist dieser ja der Grund dafür warum bei dir die String-Header immer falsche Werte besitzen.
 
Hallo Thomas,
ich muß gestehen, dass es mir langsam etwas schwerfällt bei der hier vorgetragenen Arroganz und Besserwissen noch cool zu bleiben - aber noch geht es ...

Als deklarierte Länge wird bei mir allerdings nicht die Stringlänge eingetragen sondern 0 (auch wenn es ein neu erstellter DB ist und in dem deklarierten String etwas drinsteht).
Mach mal einen neuen DB auf, deklariere dort einen String[40] und schreibe als Wert z.B. 'Larry' hinein. Dann wirst (auch du) feststellen, das darin dann zwar als Gesamtlänge 40 drinsteht, nicht aber 5 als benutze Länge. Also ???

@Thomas:
Was passiert, wenn du einem Baustein (von mir aus ein FC), der als Übergabeparameter einen String[5] (z.B.) haben will einen String[3] übergibst ?
War ein blödes Beispiel, da man an einem FC als OUT-Parameter (oder RET_VAL) nur String (ohne Längenbeschränkung) übergeben kann - hier liegt dann die Verantwortung, wenn man kurzere Strings anträgt und den Header selbst belegt bei dem, der den Header erstellt.
Bei einem FB hingegen würdest du die Meldung erhalten "der Aktualdatentyp String[3] passt nicht zu dem formalen Typ String[5] des Formalparameters". Hier würde also auch meine Vorgehensweise greifen ...
Ich weiß was passiert, du aber anscheinend nicht..
Große Sprüche ???

Zeig deinen Baustein doch mal her. Vielleicht ist dieser ja der Grund dafür warum bei dir die String-Header immer falsche Werte besitzen.
Danke für das Angebot ... aber ich denke, dass ich meine Bausteine auch ohne deine Hilfe ans Rennen bekomme. Darüber hinaus funktioniert der (mein Baustein) ja ... :rolleyes:

Da du dich ja so für die Siemens-Bausteine engagierst, gegen die ich aufzumucken gewagt habe ... hast du sie vielleicht verzapft ?

Möchtest du dich jetzt noch ein bißchen zoffen und versuchen, mir meine Unzulänglichkeiten aufzuzeigen ? Kein Problem ... ich hoffe, du bist zu 100% perfekt ...

Gruß
Larry

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Um einmal den Streit hier nicht zu sehr eskalieren zu lassen:

1. Wenn man einen DB erstellt, als Anfangswert einen String vorgibt und das ganze in die SPS überträgt, steht die aktuelle Länge des Strings nicht in Byte 1!

2. Wenn man einen DB erstellt, als Anfangswert einen String vorgibt, den DB dann initialisiert und das ganze in die SPS überträgt, steht die aktuelle Länge des Strings in Byte 1!

Ich halte das für nicht so toll, denn neu erstellte DB mit vorbelegten Anfangswerten habe ich bisher auch nie initialisiert, aber nun gut...
 
1. Wenn man einen DB erstellt, als Anfangswert einen String vorgibt und das ganze in die SPS überträgt, steht die aktuelle Länge des Strings nicht in Byte 1!

2. Wenn man einen DB erstellt, als Anfangswert einen String vorgibt, den DB dann initialisiert und das ganze in die SPS überträgt, steht die aktuelle Länge des Strings in Byte 1!

Ich halte das für nicht so toll, denn neu erstellte DB mit vorbelegten Anfangswerten habe ich bisher auch nie initialisiert, aber nun gut...

Das ist doch genau das gleiche Verhalten wie auch bei allen anderen Variablen in Datenbausteinen!

1)
Ich lege einen neuen Datenbaustein an. Ich ändere den Platzhalter INT auf String, gebe einen Starttext ein. Kein initialisieren. Baustein laden.
Ergebnis:
- Max Länge passt
- Akt. Länge zum Aktualwert und Anfangswert

2)
Ich ändere in diesem Baustein den Anfangswert auf einen anderen Text (länger/kürzer). Baustein laden.
Ergebnis:
- Max Länge passt
- Akt. Länge zum Aktualwert, aber nicht mehr zum Anfangswert (stört hier ja auch nicht).

3)
Baustein auf Datensicht schalten, Baustein initialisieren. Baustein laden.
Ergebnis:
- Max Länge passt
- Akt. Länge zum Aktualwert und Anfangswert

Ergebnis:
Die Max.-Länge passt in jedem Fall. Auch ohne zu initialisieren.

Und wenn Stringfunktionen scheitern welche eine Variable vom Typ String als Ziel haben (wie in der hier verwendeten Dint to String Funktion) ist meistens eine falsche Maximallänge der Grund.
Für lesenden Zugriff ist dann wiederum die Aktuallänge im Header wichtig.
 
Zurück
Oben