Dynamische Variablen/Array

  • Hallo Zusammen,


    Ich hätte mal eine etwas andere Knobelaufgaben. Ich habe eine Anwendung bei dem ich einen Produktbezogenen Array mit 2 Spalten verwende (1. Spalte steht für das Produkt) (2. Spalte ist eine Zähler) Problem ist jetzt, dass ich bei jedem Produkt eine andere maximale Anzahl habe. Somit würde ich die 2. Spalte in irgendeiner Form gerne dynamisch gestalten. Einfach die höchste maximale Anzahl nehmen ist hierbei nicht zielführend. Auch sonstige starre Variablen funktionieren nicht, da die maximale Anzahl auch von Durchlauf zu Durchlauf variieren kann. Wenn auch nicht unbedingt in einer 2 Spaltigeln Array ist so etwas irgendwie möglich?

  • ANZEIGE
  • Ich verstehe noch nicht ganz wofür du für zwei Informationen ein zweidimensionales Array brauchst.


    Könntest du nicht mit RECORD einen Datentypen erstellen welcher dann die Informationen enthält?


    Code
    RECORD ProductData
        num PartType;
        num Counter;
        num CounterMax;
      ENDRECORD

    Dann kannst du dir mehrere solcher Datensätze erstellen oder sogar diese in ein Array packen.


    Code
      TASK PERS ProductData Order1:=[1,7,80];
      TASK PERS ProductData Order2:=[2,128,140];
      
      TASK PERS ProductData Orders{10}:=[[1,0,80],[1,0,80],[1,0,80],[1,0,80],[1,0,80],[1,0,80],[1,0,80],[1,0,80],[1,0,80],[1,0,80]];


    Typdaten und Zählerwerte kannst du dann im Programm beschreiben.

    Code
    Order1.CounterMax:=ActualMaxCounter;
    Order1.PartType:=ActualPartType;
    Incr Orders{4}.Counter;
  • Arrays mit variabler Länge gehen nur als Übergabe an eine Routine, aber auch da liegt die Größe ja schon fest.

    Auch wenn man die Größe eines Arrays in eine Konstante oder (meine ich) sogar in eine Pers, schreiben kann hilft das nix... im Gegenteil, der Systemfehler rückt näher, erfahrungsgemäß.


    Wenn das so wichtig ist, kannst Du vielleicht mit "rawBytes" arbeiten, wäre ein entsetzliches Gefummel, würde ich sagen.


    Was ich auch gelegentlich gemacht habe, wenn sich der Inhalt der Variable in gewissen Grenzen bewegt (ganzzahlig und zweistellig) UND der "Array" nicht länger ist als 80: den inhalt des Integers als ascii betrachtet bzw. in diesen Rahmen gebracht (+33 z. B.) und hintereinander weg als String gespeichert. Stringoperationen sind noch mal was Besonderes.


    Darf ich fragen, wieso die höchste maximale Anzahl "nicht zielführend" sei? Normal ist das das einzig Zielführende.

  • Darf ich fragen, wieso die höchste maximale Anzahl "nicht zielführend" sei? Normal ist das das einzig Zielführende.

    Ja hätte ich vlt. etwas besser erklären können. Die Geschichte ist ganz schön komplex. Bisher ist das ganze meinerseits mit der höchsten maximalen Anzahl programmiert. Da jedoch die Zähler so verschieden sind (Bereich von 2-200), habe ich durch die maximale Anzahl sehr viele Leerzeilen, die das Auslesen über das Flexpendant(Programm daten) und die Übersichtlichkeit erschweren. Hatte gehofft, es gebe da einen Weg.

    Einmal editiert, zuletzt von Mishak ()

  • Ach so, jetzt verstehe ich das Missverständnis. Was ich meinte, war ein Variieren der Variablen Anzahl, sodass ich keine leeren Datenfelder habe. Sozusagen sowas:


    PERS Nahtlaenge nBepamengeProdukte{10,nNaht}


    Nur funktioniert sowas leider nicht ^^ . Man könnte zwar die Variable des Produkts in dem Rekord (Nahtlaenge) mit aufnehmen, allerdings müsste ich dann trotzdem eine unbekannte Anzahl an Nahtlaenge anlegen, was mich wieder zum ursprünglichen Problem führt und das ganze nur noch unübersichtlicher macht.

  • Wenn's jetzt nur um die Interaktion mit dem Bediener geht (den Roboter interessiert die Übersichtlichkeit ja nicht die Bohne), kannst Du Dir nicht mit der UIMsg... - Sache was basteln? Damit kriegt man wunderschöne Menüs hin und hat den Luxus, Eingaben und Ausgaben entsprechend dynamisch zu filtern.

    Wenn Du allerdings im Quelltext editieren willst, ist es eher duster.. ich hatte mal 'nen Kollegen, der liebte massiv verschachtelte Riesenarrays. Hab mir dann ein UltraEdit-Script gemacht, wo ich den entprechenden Eintrag im Array einfach nach Eingabe des Index suchen konnte...

  • Was du suchst ist eine Funktionalität wie bei einer Liste.

    Die gibt es aber leider nicht, vor der Tatsache/ dem Problem stand ich auch schon mal.

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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