TIA SCL neuling : DINT_TO_CHAR

Senator42

Level-2
Beiträge
944
Reaktionspunkte
80
Zuviel Werbung?
-> Hier kostenlos registrieren
hi Forum, habe bisher fast nur S7-Klassik.

im Klassik habe ich:

im FC AWL

Code:
temp  myi   DINT
temp  myString   String[254]


      CALL  "DI_STRNG"  // FC5
       I      :=#myi
       RET_VAL:=#myString
das funktioniert (im MaxLen steht auch 254 drin !)


NUN das PROBLEM:

im Tia V13 habe ich einen FC3 in SCL

Code:
temp  myint   DINT
temp  tempChar   Array[0..31 of Char

#tempChar =DINT_TO_CHAR(myint);       --->  [B]hier kommt beim überstzen Alles immer :  unbekannte Anweisung[/B]

was mach ich falsch?

Die Ziel SPS ist ne 1500.
 
Hallo Senator,

auf dem ersten Blick hast du vergessen anzugeben, welchen Char du in deinem Array beschreiben möchtest.

Code:
#tempChar[1] := DINT_TO_CHAR(myint) ;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
Grundsätzlich passt weder die Zahl die in einem DInt steckt, noch das entsprechende Bitmuster dahinter in einen einzelnen Char. Auch die oben angebotene Lösung funktioniert deshalb leider nicht.
In deinem AWL-Schnipsel willst du zudem in einen String konvertieren, in deinem SCL-Schnipsel wiederum in ein Char-Array. Was genau ist denn jetzt dein Problem, Dint_to_String oder Dint_to_Char-Array?
 
"Unbekannte Anweisung" weil bei der Zuweisung der Doppelpunkt fehlt

ABER: DINT_TO_CHAR ist sowieso nicht das was Du brauchst.
Du willst vermutlich einen Zahlenwert in eine Zeichenkette wandeln? Da müsstest Du DINT_TO_STRING nehmen, und wenn das Ergebnis unbedingt in einem CHAR-Array liegen soll dann kannst Du mit Strg_TO_Chars die Zeichen aus dem String in das CHAR-Array kopieren. Warum ist Dein CHAR-Array 32 Zeichen lang (so lang wird die Zeichenkette nicht)?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke. das := war letzendlich das Problem. Statt nur =

tatsächlich wollte ich einen String, nacz aussen liefern in
Output myout String

und das geht :-)


Code:
Output   myout    String	



#tempChar[1] := DINT_TO_CHAR(#myint);


#x0 := #tempChar[0];
#x1 := #tempChar[1];
#x2 := #tempChar[2];
#x3 := #tempChar[3];
#x4 := #tempChar[4];




#tempString := DINT_TO_STRING(#myint);


#myout := #tempString;
 
Leider habe ich eine neues Problem.

In der HW-Konfig kann ich jetzt den Taktmerker nicht mehr anKlicken.
Zuletzt habe ich mit den Symbolen des MB1 (-> Taktmerker) rumgespielt, z.b. umbenannnt.
 
Code:
Output   myout    String	



[COLOR="#FF0000"]#tempChar[1] := DINT_TO_CHAR(#myint);


#x0 := #tempChar[0];
#x1 := #tempChar[1];
#x2 := #tempChar[2];
#x3 := #tempChar[3];
#x4 := #tempChar[4];[/COLOR]



#tempString := DINT_TO_STRING(#myint);


#myout := #tempString;
Hat das rot markierte irgend einen Sinn oder sieht das jetzt nur so sinnfrei aus, weil Du nicht den ganzen Code gepostet hast? Egal in welchen CHAR man das Ergebnis speichert, DINT_TO_CHAR(#myint) liefert immer das gleiche Ergebnis.

Harald
 
Zurück
Oben