Numerische Daten Trennen

  • PERS num FB6318{9}:=[110,43,10,10,15.09,12,60,0,0];
    PERS num FB224{9}:=[215,40,14,14,6.317,3.6,1,2,2];
    PERS num FB1014{9}:=[145,27,7,7,11.81,4,1,1,1];
    PERS num FB210{9}:=[110,65,0,0,15,15,6,0,0];
    PERS num FB212{9}:=[110,27,6,6,12.347,2.8,18,20,20];
    PERS num FB215{9}:=[100,18,0,0,13.59,15,8,0,0];
    PERS num FB222{9}:=[150,70,16,11,9,18,48,20,20];
    PERS num FB226{9}:=[130,58,0,0,10.45,18,40,0,0];
    PERS num FB2471{9}:=[384,54,21,33,3.574,4,25,18,20];
    PERS num FB3202{9}:=[215,34,5,14,6.317,3,1,1,1];



    Das Sind meine Daten.Da brauche ich wenn ich numerische daten aufrufe Getrennt angezegt werden sollen( nur die Obere 3).
    Geht es??


    Danke

    Einmal editiert, zuletzt von padostms ()

  • ANZEIGE
  • [size=2]Moin padostms,[/size]
    [size=2]wäre es Dir eventuell möglich einen Weg zu finden deine Frage so zu formulieren das man den Inhalt deiner Frage verstehen kann?[/size]
    [size=2]Grundsätzlich kann man Datenfelder absolut ansprechen.[/size]



    [size=2]VAR num nTest;
    [/size]
    [size=2]nTest:=FB318{6} würde dann der Variablen nTest den Wert "12" zuweisen, für die "6" kannst Du auch eine Variable definieren mit welcher Du dann beliebig den gewünschten Wert aus- bzw. einlesen kannst.
    [/size]
    [size=2]Hoffe das war dein Problem.[/size]



    [size=2]Gruß[/size]



    [size=2]Sven
    [/size]

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Sorry das meine frage unverständlich war!
    Hätte ich mehrere Type die gleiche name haben.Aufs bild sieht man die numerische daten.Wie kann ich hier nur bestimmte datenfelder anzeigen bzw. die angezeigte daten sortieren?
    PERS num FB6318{9}:=[110,43,10,10,15.09,12,60,0,0]; da brauche ich die 9 weil ich 9 parameter drinnen habe!
    Beim Produktion muss ich manchmal diese daten ändern meistens die letzte 3.Nur wenn ich die numdaten aufrufe habe 210 verschiedene FB-s drinnen.Ja kann ich mit filter auch sortieren aber mir wäre besser wenn es ein andere lösung wäre.

  • Hi,
    wenn Du den Namen des "FB" Deklaration kennst, könntest Du auch mit GetDataVal und SetDataVal die Daten ändern.
    Beispiel:
    An die Routine "ChangeFB" wird der Name der zu Ändernden Deklaration übergeben und über die optionalen Parameter "Value7", "Value8" und "Value9" die zu ändernden Werte. Der Zahlenwert hinter Value wird als Arrayindex verwendet und der Wert in das Array eingetragen.


    PROC main()
    ChangeFB "FB224"\Value7:=10\Value8:=20;
    ChangeFB "FB1014"\Value7:=3.2\Value9:=5.8;
    endproc

    PROC ChangeFB(string Name\num Value7\num Value8\num Value9)
    VAR num nArray{9};

    !Daten des Arrays lesen
    GetDataVal Name,nArray;

    !werte ändern
    IF Present(Value7) nArray{7}:=Value7;
    IF Present(Value8) nArray{8}:=Value8;
    IF Present(Value9) nArray{9}:=Value9;

    !Werte in FB zurückschreiben
    SetDataVal Name,nArray;

    ENDPROC
    Gruß
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

  • Ja diese funktion für änderung ist sehr gut,nur mich stört beim numerische daten das ich immer aufrufen muss.
    Habe dann FB-s die gleich heissen aber komplett andere bearbeitung haben.Deswegen brauche ich diese trennung

    Einmal editiert, zuletzt von padostms ()

  • Hallo,
    um die angezeigten Daten im Datenfenster auf die FB-Daten zu reduzieren, könntest Du Dir einen eigenen Datentyp anlegen. Diesen neuen Datentyp wählst Du dann am FlexPendant aus und siehst nur die FB-Daten.


    Einen eigenen Datentyp kannst Du entweder durch die Defiition eines RECORDs oder durch einen Alias-Datentyp erzeugen.


    RECORD fb_data
    num Value;
    endrecord


    PERS fb_data FB123{9}:=[[0],[0],[0],[0],[0],[0],[0],[0],[0]];


    Da der RECORD für die Aufnahme von mehreren Daten vorgesehen ist, solltest Du einen Alias-Datentyp vom Datentyp "num" erzeugen. Dieser kann dann im Programm genauso wie der Datentyp "num" verwendet werden.


    ALIAS num fb_data;


    PERS fb_data FB456{9}:=[1,2,3,4,5,6,7,8,9];



    Wenn Du nach der Größe des Arrays unterscheiden möchtest könntest Du auch mehrere Alias-Datentypen erzeugen.


    ALIAS num fb_data5;
    ALIAS num fb_data9;


    PERS fb_data5 FB456{5}:=[1,2,3,4,5];
    PERS fb_data9 FB789{9}:=[1,2,3,4,5,6,7,8,9];


    In RAPID ist es aber nicht möglich den Namen einer Datendeklaration mehrmals zu verwenden, außer die Daten sind lokal in unterschiedlichen Modulen deklariert.


    Gruß
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

  • Kann die gleiche FB nummer verwenden so das ich zb. FBAR456 definiere und FBIR456 :)


    Diese lösung ist sehr gut.


    Nochwas ,kann ich diese daten vom TP oberfläche definieren verbunden mit eine Programmierbare taste?
    Also das ein menü aufkommt wo die aktuelle FB drinnen ist zb: FBAR456 und da die daten editieren kann?
    Ist es so möglich?


    Danke nochmals für die Unterstützung!!!!

    Einmal editiert, zuletzt von padostms ()

  • Hallo,


    RAPID instruktionen können keine neuen Datendeklarationen erzeugen, d.h. das geht nur über das Datenfenster oder durch Anpassen des Moduls in dem die Daten gespeichert sind.


    Zum Ändern der Daten könntest Du eine Hintergrundtask erstellen, die auf den virtuellen Ausgang reagiert, der mit der programmierbaren Taste verbunden ist.


    Über UiMsgBox oder UiListView kannst Du dann einen Dialog anzeigen und die Daten der aktuellen FB-Daten anzeigen und ggf. ändern.


    Da Deine Arrays als Persistent deklariert sind, kannst Du mit GetDataVal auf die Datendeklaration in einer anderen Task zugreifen, indem zusätzlich die Task angegeben wird.


    Bedingung hierzu ist, dass Du den Namen des aktuellen Arrays der Menütask zur Verfügung stellst (z.B. über eine Persistente die in beiden Tasks deklariert ist).


    Sobald die Daten geändert sind, kannst Du sie mit SetdataVal wieder zurück in die andere Task schreiben.


    Alternativ könntest Du Dir auch eine FlexPendant Applikation in C# mit Visual Studio 2008 und der FlexPendant-SDK erstellen, so dass Du auch neue Daten erzeugen und ändern kannst.


    Gruß
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

    Einmal editiert, zuletzt von Micky ()

  • Ergänzung zur Thema!
    Habe vieles ausprobiert was Ihr vorgeschlagen habts!Danke dafür.
    Immer wieder kommen neue Fragen,Probleme.
    Also mit der Gleiche FB-s wird nicht gehen, weil beim Produktion ist schwierig eine extra Name zu geben und habe nur numerische datenfelder.Dazu muss ich alle FB-s umbenennen.Sind sehr viele!!
    Wisst Ihr mehres von der laden ,speichern und unload funktion?Damit habe ich auch experimentiert aber bekomme nur Fehlermeldungen.Des würde mir helfen weil da könnte ich gleiche daten benutzen.Oder sehe ich es Falsch?
    Danke Im Voraus

  • Statusbericht!
    Trennen von numerische daten funktioniert!Habe mit ALIAS gemacht.Geht super!!
    Ausser wenn ich 2 gleiche numersiche habe da schreibt immer duplikate symbol.
    Habe ausprobiert wenn ich umbenenne dann geht aber ausser zahl kann ich nix anderes eingeben.
    ZB:
    CASE 1144A:
    Lagerdaten_zuweisen(FB1144A);geht nicht
    CASE 1144:
    Lagerdaten_zuweisen(FB1144);
    Ein andere idee währe dass ich die module immer lade und speichere dann würde gehen mit die gleiche namen.
    Hat jemand von Euch erfahrung dabei?Kann man testen welche modul geladen wurde bzw welche aktiv ist??
    Danke im Voraus!

    Einmal editiert, zuletzt von padostms ()

  • Hallo,
    du könntest die Funktion "ModExist" zum Prüfen ob ein Modul bereits vorhanden ist verwenden.
    Mfg
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

  • Hallo!
    Habe diese variante mit Daten laden und ein 2. mit Unterstützung von ABB!!
    Beim 2. Variante werden die daten im String definiert und im Array geschrieben.
    Des Funktioniert auch!
    Danke an Alle für die Hilfe!

    Einmal editiert, zuletzt von padostms ()

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