Step 7 Standard Baustein FC 5 DI_STRNG --- BIE ist immer 0

Keb

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag an alle.

Meine Problemstellung:
Ich möchte einen DINT Wert mit Hilfe des FC 5 in einen String wandeln. Ich rufe die Funktion in einem FC auf! Habe jedoch das Problem, das das BIE immer 0 ist. Ich habe schon mit der Länge des Strings(Temp_Str) rumprobiert, da der FC 0 zurückgibt, wenn der String zu kurz ist. Nun habe ich trotz ausreichender Länge des Strings das BIE 0, egal ob ich in die DINT Variable(Temp_Dint) 2, 253, 17982 oder anderes lade. Zusätzlich kam es vor, das der selbe Codeschnipsel in 2 verschiedenen Programmen eingebaut ist, ich nenne sie kurz Prog1 und Prog2. Bei SPS 1 (Microbox PC 4xx) hat der Code nur bei Prog1 funktioniert, bei SPS 2 (CPU3xx) nur bei Prog2, und bei SPS 3 (CPU314C) bei keinem der Programme.
Ich sollte noch hinzufügen, dass ich den FC 5 in FC398 umbenannt habe Aufgrund unserer Bausteinorganisation.
Habt Ihr eine Idee, wonach ich noch schauen könnte, als nach der Stringlänge(Temp_Str)?
Wie könnte ich die Umwandlung von DInt to String im Notfall selber schreiben?
Code:
      L     DBW   18                   
      T     #Temp_Dint


      CALL  "DI_To_String"
       I      :=#Temp_Dint
       RET_VAL:=#Temp_Str


      U     BIE
      SPBN  d010

Ich danke schon jetzt für jede eurer Bemühungen. :D
 
Zuletzt bearbeitet:
RET_VAL OUTPUT STRING D, L Ergebniszeichenkette

Der Ausgangsparameter kann nur mit einer symbolisch definierten Variable belegt werden.


Nimm zum Testen mal eine globale oder statische als Ret-Val.

String im Temp macht womöglich Probleme
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
der TEMP-String ist nicht initialisiert !!!
Das heißt, dass zumindestens das Headerbyte des Strings, welches angibt wie lang der String deklariert ist, passend gesetzt werden muss. Nur durch das Anlegen der Variablen ist dies noch nicht gegeben ...

Gruß
Larry
 
Hallo,
Ich danke euch beiden Vielmals für die Vorschläge. Und werde es sobald ich die Möglichkeit habe austesten.
 
Hallöchen,

ich habe mal den Vorschlag von Larry ausprobiert und jetzt funktioniert der Code wie er sollte. Hier nochmals den Code im Ganzen:
Code:
    L     10      
T     LB    48

      L     DBW   18                   
      T     #Temp_Dint


      CALL  "DI_To_String"
       I      :=#Temp_Dint
       RET_VAL:=#Temp_Str


      U     BIE
      SPBN  end

Ich danke euch sehr :) Auf Bald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
du solltest hier nur nicht auf diese Weise den String-Header bschreiben - wenn du deine Temp-Variablen mal änderst dann funktioniert das u.U. nicht mehr.
Besser wäre :
Code:
L p#Temp_Str
LAR1
L 10
T B [AR1,p#0.0]

Gruß
Larry
 
Zurück
Oben