DINT in WorkVisual (KRC4)

  • Servus Forum,


    für meine Abschlussarbeit muss ich eine Beckhoff EL3403-Klemme über Profibus an der KUKA KRC4 konfigurieren. Hardwareseitig dürfte alles laufen (siehe Projektstruktur).


    Allerdings plane ich nun,den Wirkleistungsinput des EL3403-Moduls einer Systemvariable zuzuordnen. Das Problem, vor dem ich stehe, sind die inkompatiblen Datentypen:
    Die EL3403 gibt die Wirkleistung in DINT aus. Als Typen für die Analogen System-Eingangsvariblen stehen nur folgende zur Verfügung:


      • UNKNOWN

      • SINT

      • USINT

      • INT

      • UINT


    Hättet Ihr eine Idee, wie ich die Messdaten der Beckhoffklemme in der KRC4 verarbeiten kann?


    Vielen Dank!

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,


    leider stehe ich immernoch vor dem gleichen Problem. Die F1 Dokumentation gibt mir zwar Auskunft darüber, was ich zu tun habe, aber nicht, was die jeweilige Aktion bewirkt und wie ich sie nutzen kann. Daher möchte ich nochmal nachfragen. In WorkVisual kann ich die Bit-Wortbreite verändern, und angeben, ob nur positive Integer übertragen werden sollen, siehe Bild1 im Anhang. Allerdings verstehe ich nicht, was die Änderung der Bit-Breite mit meinem Analogen Signal macht:
    Laut Beckhoff muss die übertragene Integer mit einem Skalierungsfaktor (0,001*Stromverhältnis*Spannungsverhältnis) versehen werden, um auf die gemessene elektrische Leistung zu kommen. Was ändert sich denn, wenn ich die Bitwortlänger reduziere?


    Ferner gibt es in Work-Visual die Möglichkeit, einen Skalierungsfaktor für Analoge Eingänge zu definieren, siehe Bild 2. Was bedeutet dieser werden, der defaul-mäßig auf 32767 gesetzt ist?


    Ich würde mich sehr über Eure Hilfe freuen, da ich meine Messungen möglichst zügig durchbekommen muss. :)

  • Wenn du die Bit-Breite änderst, dann wird dein Analog Signal nicht richtig eingelesen. 16Bit Integer kann einen Wert von max.
    +/- 32767 haben. Ohne Vorzeichen wäre 65535. Das ist mit dem Kalibrierungsfaktor gemeint.

    Einmal editiert, zuletzt von Spiral ()

  • In dem Fall ordne ich da immer die 32 Bit einer Gruppe von Eingängen zu, lese den Integerwert ein und mache die Umrechnung im Roboterprogramm (oder SPS.SUB) selber. Nix da mit Analogeingängen (geht anscheinend wohl nur bis 16 bit) und nix da mit Skalierung, Vorzeichen ja/nein und pi pa po. :zwink:


  • In dem Fall ordne ich da immer die 32 Bit einer Gruppe von Eingängen zu, lese den Integerwert ein und mache die Umrechnung im Roboterprogramm (oder SPS.SUB) selber. Nix da mit Analogeingängen (geht anscheinend wohl nur bis 16 bit) und nix da mit Skalierung, Vorzeichen ja/nein und pi pa po. :zwink:


    Ich verstehe wohl den Ansatz, stehe aber leider auf dem Schlauch, wie ich das umsetzen kann.


    Mein Ziel wäre es, die korrekte Integer aus der Klemme auszulesen und in den Robotertrace zu speichern. Die Umrechnung in die gemessene Leistung und auch andere Umrechnungen kann ich dann in Matlab durchführen.
    Aus Euren bisherigen Antworten sehe ich nun zwei Möglichkeiten, um die Double-Integer korrekt zu speichern:
    [list type=decimal]

    • Ich teile die 32 Bit DINT in zwei 16 Bit UINT und speichere diese im Trace. Dann könnte ich aus beiden UINT in Matlab die gewünschte DINT herausrechnen. Dazu muss ich doch die DINT der Beckhoff-Klemme schlicht und ergreifend in zwei 16-Bit-Blöcke teilen und diese in zwei UINT-Variablen in der Robotersteuerung speichern, richtig? Aber wie kann ich denn aus zwei 16-Bit Integern eine vorzeichenbehaftete 32Bit-Integer generieren?

    • Ich speichere jedes Bit in den Trace. Dafür benötige ich dann 3x32 Bool-Variablen. Und könnte in sie in Matlab konvertieren.

    [/list]
    Methode 2 klingt für mich irgendwie einfacher. Könnt Ihr meinem Gedankengang zustimmen?

  • Ach so, im WorkVisual /EA Verschaltung/ KRC E/A´s/Digitale Eingänge 32 Bits selektieren rechte Maustaste auf Gruppieren klicken und DINT auswählen. Jetzt kannst du mit DINT von der Klemme verschalten. Dann im Roboter Programm
    SIGNAL AI_Wert_Beck $IN[1] TO $IN[32]
    Jetzt kannst du über AI_Wert_Beck den Wert von der Klemme auslesen.

    Einmal editiert, zuletzt von Spiral ()


  • Ach so, im WorkVisual /EA Verschaltung/ KRC E/A´s/Digitale Eingänge 32 Bits selektieren rechte Maustaste auf Gruppieren klicken und DINT auswählen. Jetzt kannst du mit DINT von der Klemme verschalten. Dann im Roboter Programm
    SIGNAL AI_Wert_Beck $IN[1] TO $IN[32]
    Jetzt kannst du über AI_Wert_Beck den Wert von der Klemme auslesen.


    Danke, das hat schonmal funktioniert. Wenn ich diesen gruppierten D-INT habe, werden dann die Messwerte direkt als Integer im Trace gespeichert, oder muss ich die gespeicherten Werte nochmal durch eigenen Code in Integer umrechnen? :)

  • Großen Dank für Eure Hilfe,
    ich habe die Angelegenheit nun so gelöst, dass ich die 3*32Bit der Leistungs-DINT im Trace speichere und diese als Zweierkomplement in Matlab in eine Integer wandle. Funktioniert einwandfrei :).

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