Moin zusammen,
Hab hier einen KR10R1100sixx und eine KL100 an einer KRC4 smallsize (V8.3.36) stehen und versuche einen Schunk EGL PN Profinet Greifer zu integrieren.
WoV=5.05
Ausgangssituation:
Profinet Greifer hängt direkt am X66 der KRC4 - bisher keine weitere SPS.
Die Profinet Real Werte für die Position etc. des Greifers habe ich auf jeweils 32 KRC Eingänge gemapped und per Signal an vier 8-Bit Blöcke übertragen. Da die Byte Reihenfolge nicht passt, sind sie entsprechend umgedreht zugeordnet (die ersten 8 Bit der IO gehen auf das letzte Byte etc.)
Config.dat
SIGNAL EGL_APOS_B4 $IN[216] TO $IN[223]
SIGNAL EGL_APOS_B3 $IN[224] TO $IN[231]
SIGNAL EGL_APOS_B2 $IN[232] TO $IN[239]
SIGNAL EGL_APOS_B1 $IN[240] TO $IN[247]
DECL REAL EGL_ACT_POS
Alles anzeigen
Um jetzt ständig die REAL Werte für Position etc. zu zu berechnen, wandle ich die vier Bytes in der SPS.sub mittels CAST_FROM in REAL Werte um.
SPS.sub
;FOLD USER SUBROUTINE
; Integrate your user defined subroutines
DEF Update_Gripper()
CHAR EGL_BUFFER[4]
INT EGL_OFFSET
EGL_BUFFER[1]=EGL_APOS_B1
EGL_BUFFER[2]=EGL_APOS_B2
EGL_BUFFER[3]=EGL_APOS_B3
EGL_BUFFER[4]=EGL_APOS_B4
EGL_OFFSET=0
CAST_FROM(EGL_BUFFER[],EGL_OFFSET,EGL_ACT_POS)
...
Alles anzeigen
Die globale Variable EGL_ACT_POS zeigt auch brav in der Variablenübersicht z.B. den analogen Wert der Position des Greifers an.
Die Umwandlung in REAL funktioniert also grundsätzlich.
Problem:
Der Submit Interpreter crasht häufig bei der Berechnung, weil der Wert von EGL_ACT_POS ungültig ist (xxx e-39 oder ähnlich).
Wenn ich mir beim Crash die einzelnen EGL_APOS_Bx Bytes anzeigen lasse und in einen Online-Converter eingebe, kommt dabei auch ein NaN heraus. Kann nicht sagen, warum die Byte Werte nicht stimmen.
Kann es sein, daß sich einzelne Bytes während der Übergabe von den Signals in den Buffer ändern, während andere bereits übernommen wurden?
Kann mir bitte jemand auf die Sprünge helfen?
Vielen Dank im Voraus.
Mosci.to