Teil eines ausgangs mit variable ersetzen

  • Hallo Gemeinde


    Steuerung IRC5


    Mein Problem :
    ich möchte einen teil meines ausgangsmamens variabel machen !


    ist :
    PROC Vacuum1OFF()
    SetDO Vakuum1ON,0;
    SetDO Vakuum1OFF,1;
    ENDPROC


    soll:
    PROC VacuumOFF(num VacNr)
    SetDO Vakuum(VacNr)ON,0;
    SetDO Vakuum(VacNr)OFF,1;
    ENDPROC
    Nun Meine Frage
    wie bekomme ich es hin das ich ein teil meines ausgangsnamens durch eine variable ersetze kann ! :denk:


    Danke für eure kompetente Hilfe


    Gruß Roboprog

    Die dümmsten Programmierer haben die dicksten Programme

  • ANZEIGE
  • Hallo


    schau mal in der doku nach aliasIO damit kannst du signal dann indexiert ansprechen
    signale wie gehabt in einrichten und in der z.b. Initialisierung einem AliasIO zuweisen


    Gruß Loipe

  • hi


    ich hab das mal ausprobiert aber irgendwie schnall ich das nicht


    das kann doch nicht so schwer sein


    meine idee war den status der variable VacNr in ein string zu wandeln und
    dann in eine string varible einpflegen
    z.b.
    string VNR
    string OUT
    VNR:=VacNr.text
    out:=[Vakuum+VNR+ON]
    SetDO out,0;


    oder


    SetDO Vakuum+VacNr.text+ON,0;



    so oder so ähnlich ????


    gruß Roboprog

    Die dümmsten Programmierer haben die dicksten Programme

  • Morgen zusammen,


    also ich denke es geht so nicht. Hier ein Auszug aus der Doku


    Signalxo ist ein non-value-Datentyp. Das heißt, Daten dieses Typs erlauben keine
    wertorientierten Operationen.
    Signalxi ist ein Datentyp mit einem festen Wert (Semi-Value).


    Könnte so etwas helfen ??


    PROC VacuumOFF(num VacNr)
    TEST VacNr
    CASE 1:
    SetDO Vakuum1On,0;
    SetDO Vakuum1OFF,1;
    CASE 2:
    SetDO Vakuum2On,0;
    SetDO Vakuum2OFF,1;
    ! u.s.w.
    ENDTEST
    ENDPROC

  • so hab ichs !!


    aber macht sich schlecht wenn ich das als standart schreiben will und
    an einem roboter 5 vac habe und am nächsten 10


    und was mach ich wenn ich 200 habe ?!?


    aber trotzdem danke für die info
    gruß roboprog

    Die dümmsten Programmierer haben die dicksten Programme

  • Hallo roboprog,


    Loipe hat mit der Instruktion AliasIo und dem Lesen der Doku recht (RTFM).


    Dein Programm müsste in etwa wie folgt aussehen:



    Du must zuerst eine Signaldekalaration erstellen, z.B. signaldi, dignaldo, etc. die Du im Programm verwendest. Anschließend erfolgt die Zuordnung der Signalvariablen mit dem realen Signalnamen aus der EIO.CFG mit Hilfe der Instruktion AliasIO.


    Der Zugriff erfolgt jetzt indirekt mit Hilfe der Signalvariablen aus dem Roboterprogramm (z.B. mit Set, Reset, PulseDo, etc.)


    Gemäß Handbuch gibt es einige Einschränkungen, die bei der Verwendung von AliasIO beachtet werden müssen.


    Desweiteren müssen die Signalnamen aus der EIO.CFG bekannt sein, eine Adressierung anhand der Signalnummer ist nicht möglich.


    Gruß
    Micky

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

  • RTFM hab ich gemacht junior !


    hat aber nicht so gefunzt wie ich mir das vorgestellt habe


    deshalb die frage im forum !


    ich glaube das ein forum dafür da ist das man auch einmal einfach so eine frage stellen kann


    danke für deine anregungen


    gruß roboprog

    Die dümmsten Programmierer haben die dicksten Programme

  • ...und was mach ich wenn ich 200 habe ?!?.....


    Hier mal ein mögliches Prinzip:


    1. Lege Dir eine BYTE-Feld an, was Deine Ausgänge abbildet
    VAR byte bVakMask{25};


    2. Lege dir eine Struktur an, mit der Du Deine Ausgänge konfigurieren kannst, d.h. wo du festlegst , was wann und wie angeschalten werden soll:


    3. Schreib Dir eine Schleife, die Dein Konfigurationsfeld durchläuft und in Abhängigkeit der konfigurierten Bedingungen per Befehl BitSet im BYTE-Feld dort ein Bit setzt, wo es gesetzt werden soll,
    Das ganze durchläufst Du immer einmal, wenn neue Daten kommen


    4. im Bewegungsprogramm dann die Bytemaske einfach auf die Ausgänge legen
    setgo goVIsle1_B1 , bVakMask{1};
    setgo goVIsle1_B2 , bVakMask{2};


    Das klingt jetzt kompliziert, aber wenn Du das einmal clever geschrieben hast, brachst Du dann nur noch Dein Konfigurationsfeld anwendungsspezifisch anpassen und nichts mehr programmieren oder benamen egal ob 1 oder 200 Sauger..


    dust2

  • Hallo Zusammen,


    Man kann auch Ausgänge einem Programm übergeben und diese steuern.


    PROC Vacuum(VAR signaldo doVakuumOn,VAR signaldo doVakuumOff,\switch VakuumOn | switch VakuumOff)


    IF Present(VakuumOff) THEN
    SetDO VakuumON,0;
    SetDO VakuumOFF,1;
    ELSE
    SetDO VakuumON,1;
    SetDO VakuumOFF,0;
    ENDPROC


    Im Programm kann man dann das Programm so aufrufen.


    Vacuum doVaku_1On,doVaku_1Off,\VakuumOn;
    Vacuum doVaku_2On,doVaku_2Off,\VakuumOn;


    Vacuum doVaku_1On,doVaku_1Off,\VakuumOff;
    Vacuum doVaku_2On,doVaku_2Off,\VakuumOff;


    Man könnte auch ein Datenfeld von Typ signaldo definieren und dann dieses Datenfeld ansprechen. Aber ob man ein Datenfeld mit Verweise auf Äusgänge machen kann kann ich nicht sagen? :denk:
    Könnte vielleicht so aussehen.
    PERS signaldo doVakuum_On{5}:=[doVak_1On,doVak_2On,doVak_3On,doVak_4On,doVak_5On];


    SetDO doVakuum_On{5},0;

    Für seine Arbeit muß man Zustimmung suchen, aber niemals Beifall.<br />Zitat: Charles-Louis Baron de Montesquieu

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