Nochmal: REAL Berechnung in SPS.sub

  • 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


    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


    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

    KR10R1100sixx, KL100, KRC4 smallsize (V8.3.36), WoV 5.05

    Einmal editiert, zuletzt von SJX ()

  • Schritt für Schritt zum Roboterprofi!
  • Hallo mosci.to,


    wenn Dein Positionswert stark oszilliert, über Profinet mit 1ms Aktualisierung in ne Steuerung mit 12ms IPO, kann's wirklich sein, dass Du ein Timing Prob hast und zwischendurch was schief geht, wenn Du dies im Submitinterpreter-Takt ausführst und über 4 Zeilen verteilt liest.
    kannst ja mal testweise folgendes probieren.
    Ist umgestellt, dass Du auf einer Zeile alle Eingänge liest, ausgibst auf Ausgänge und dann Dein Spiel verdrehen, CHAR-Schreiben und Cast..... mit Ausgangsabbild betreibst. Dass ändert sich erst im nächsten Durchlauf wieder.




    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

    Einmal editiert, zuletzt von SJX ()

  • Hallo SJX,


    vielen Dank für Deine Antwort und Einschätzung.


    Das habe ich mir so ähnlich auch gedacht.
    Der Profinet Greifer aktualisiert in der Tat alle 1ms.
    Habe heute mal alle 32 Bits auf einmal in ein Integer übertragen, das dann in ein 4-Byte Array gecastet und dieses dann wiederum in einen Real Wert.
    Somit wird alles auf der IO auf einmal abgegriffen.


    SPS.sub neu




    Und siehe da: Seit einer halben Stunde läuft es ohne Probleme :)


    Problem ist also gelöst.


    Viele Grüße


    mosci.to

    KR10R1100sixx, KL100, KRC4 smallsize (V8.3.36), WoV 5.05

  • Hallo Mosci,


    du schreibst:


    "Das habe ich mir so ähnlich auch gedacht.

    Der Profinet Greifer aktualisiert in der Tat alle 1ms.

    Habe heute mal alle 32 Bits auf einmal in ein Integer übertragen, das dann in ein 4-Byte Array gecastet und dieses dann wiederum in einen Real Wert.

    Somit wird alles auf der IO auf einmal abgegriffen."


    Ich habe ein ähnliches Problem.

    Kannst du mir mal den Programmcode schicken, wie du es gelöst hast?


    vielen Dank im Voraus

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden