Array of Byte to string umwandeln(Dint to String) (FC5 ! FC16 ! FC38)

sb9674

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Bei mir im DB14 ist als typ STRUCK definiert und in Position 32 also db14.dbd32 ist ein ARRAY[1..12] Of Byte, und das schreiben diese Position 32 erfolgt in FB113 , (ich bin leider erst Anfänger im Step7 )
ich kann dir erzählen was ist gemacht habe: ich habe in fb113 diese FC5 hinzugefügt, habe als Input db14.dbd32 eingegeben, und im OUTPUT “ RETV_VAL“ wollte ich wieder diese DB14.DBD32 eingeben damit ich das Ergebnis als String bekomme ., es war nicht möglich wegen die Fehler Meldung :< COMILER INFORMATION : UNGÜLTIGER PARAMETER IM AUFRUF >
dann habe ich in die Schnittstelle in der Temporären Daten einen Name “ERGEBNIS“ als String [12]definiert, und danach habe ich gehofft dass ich diese ERGEBNIs laden kann und dann zu DB14.DBD32 transferiere , leider Kamm wieder ein Fehlermeldung : <VARIABLE HÖHEREN TYPS KANN NICHT VERWENDET WERDEN>
und kann mir bitte jemanden sagen wie ich weiter komme und ob was ich bis jetzt gemacht habe richtig oder nicht??
ich Hoffe Ihr könnt mich weiter helfen.

Danke
MFG
I.S






FB113
Code:
[U]Netzwerk Nr 4 :Schreiben die Werte in DB14[/U]
U       T          121
FP      #STAT8
SPBN  M002
L       DB14.DBD 32
L       1
+D
T       DB14.DBD 32
T       DB14.DBD 4 "DB_PMT".WSID_1 -- Werkstück ID
U(
L       DB14.DBD 32
L       L#99999999
>D
)
SPBNB M004
L       L#1
T       DB14.DBD 32
T       DB14.DBD 4 "DB_PMT".WSID_1 -- Werkstück ID
M004: NOP 0
L       DB14.DBD 32
L       L#50
MOD
L 0
<>D
SPB M003
S      DB14.DBX 13.1 "DB_PMT".WS1NIO_1 -- Werkstück 1 NIO (Werkstückstatus)
R      DB14.DBX 13.0 "DB_PMT".WS1IO_1 -- Werkstück 1 IO (Werkstückstatus)
SPA M005
M003: NOP 0
R     DB14.DBX 13.1 "DB_PMT".WS1NIO_1 -- Werkstück 1 NIO (Werkstückstatus)
S     DB14.DBX 13.0 "DB_PMT".WS1IO_1 -- Werkstück 1 IO (Werkstückstatus)
M005: NOP 0
L 1
T     DB14.DBW 0 "DB_PMT".KOORD -- Koordinierungswort
M002: NOP 0
 
CALL FC 5 GP_DIAG -- Diagnosis alarm and Modul failure
I :=DB14.DBD32
RET_VAL:=#ERGEBNIS


DB14
Code:
 [U]Adresse          Name              Typ                   Anfangswert[/U]
 
+13.7            RES137            BOOL                 FALSE               
+14.0            SANRT_1        ARRAY[1..18] 
*1.0 BYTE
+32.0 S         ENRT_1         ARRAY[1..12] 
*1.0 BYTE
+44.0            LIRT_1         ARRAY[1..10] 
*1.0 BYTE
+54.0           SANFT_1       ARRAY[1..18] 
*1.0 BYTE
+72.0           SPSTAT_1        BYTE               B#16#0

Db 14 Komplet ist angehängt.
Danke
 
Zuletzt bearbeitet:
Junge, Junge,
war gar nicht leicht, deinen Beitrag zu lesen ...

In deinem Programm arbeitest du nicht wirklich mit Einzel-Bytes sondern mit DINT's. Schön wäre es dann, wenn du diese Variablen im DB dann auch als DINT deklarierst - dann kann der Wandlungs-FC (FC5 DINT_to_String) auch etwas damit anfangen, denn dieser macht eine Typprüfung an der Schnittstelle. Um das Wandlungs-Ergebnis dann irgendwo hinschreiben zu können muß in dem DB dann natürlich die Ziel-Variable auch als STRING mit entsprechender Länge deklariert sein.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Habe bei mir im Programm die Position 32 (db14.dbd32) als Dint deklariert, aber die Sache, das heißt beim FC5
Gilt als Beispiel: DB14.dbd32 als Eingang und als Ausgang wollte ich es auch im DB14.DBD32 schreiben, aber das geht nicht .
Als anhang ist die DB14 und die FB113 .
Danke
Gruss
Sam
 
Zuletzt bearbeitet:
... wie ich schon geschrieben habe :
Um das Wandlungs-Ergebnis dann irgendwo hinschreiben zu können muß in dem DB dann natürlich die Ziel-Variable auch als STRING mit entsprechender Länge deklariert sein.
... und diese Variable kann und darf natürlich nicht die schon vorher genannte gleiche Adresse sein - soll heißen, dass du in deinem DB mindestens noch den einen (wahrscheinlich aber noch ein paar mehr STRING's) mit einbauen mußt ...
Wie sieht es aus ...?
 
Hallo
Habe das Ergebnis in ein neue DB6 schreiben lassen , bei mir war String länge10, habe ich den zerlegt , dann jede Byte(DB6.DBB0 bis DB6.DBB10) in neue DB9 transferiert und es hat funktioniert , aber kann man das ganze String[10] zum Beispiel ohne Zerlegung nicht anzeigen ? oder sollte das irgendwie gehen ?
Gruß
sam
 
visialisierung , meinst du wie winncc oder HMI Pro CS ,da ich auch jetzt ein simulator von sinumerik 840D SL aber da muss ich dort auch einzelne bit eingeben, damit ich zur ergebnis komme .
Gruss
Sam
 
hallo
ja das kenne ich aber eine anzeige des gesamten String ohne zerlegung Von einzelnen Byte ist nicht machbar ,Zum Beispiel : DB1.DBX0.0 ....
 
Nein ... maximal in Doppelwort-Breite !!!
Du könntest also in Volkers VAT auf noch DWORD eintragen und die als Zeichen darstellen lassen - dann würdest du immer 4 Zeichen auf einmal zusammenhängend sehen können. Mehr geht nicht - das hat sich Siemens halt so ausgedacht und festgelegt ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Als Krücke kann man den String auch byteweise aufsteigend in der VAT angeben, dann bekommt man den String senkrecht angezeigt. Nicht wirklich toll, aber halbwegs lesbar.

Gruss Hagen
 
Zurück
Oben