22. Juli 2019, 20:24:06
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[offen] Ein- und Ausgänge in Record


normal_post Autor Thema: [offen] Ein- und Ausgänge in Record  (Gelesen 975 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

23. Mai 2018, 09:42:13
Gelesen 975 mal
Offline

Haju


Hallo,
einer Greiferroutine möchte ich die Greiferdaten (z.B.: Name, Eingang "Greifer geschlossen", Ausgang "Greifer schliessen", ....) in einem Record übergeben, Beispiel für Deklaration:

RECORD gripperDef
     string grippername;
     signaldi sOpend;
     signaldi sClosed;
     signaldi sPart;   
     signaldo sOpen;
     signaldo sClose;
     num failtime;
     num gripperType;
 ENDRECORD
 

  !-------------------------------------
  ! Greiferdeklaration gripper 01
  !-------------------------------------
  PERS gripperDef gripper01:=[
    "gripper 1", 
    diGrp2Opend, 
    diGrp2Closed,   
    diGrp2Part,     
    doGrp2Open,     
    doGrp2Close,   
    5,             
    2];   
       
diGrp2Opend, diGrp2Closed,  ... , doGrp2Open, ... sind in "Konfiguration IO-System" deklarierte Ein- / Ausgänge. Für alle Zeilen mit diesen Ein-/Ausgängen in der Persistenten gripper01 gibt es nun die Fehlermeldung:

....: Syntaxfehler(137): Erwartet: num, aber gefunden: identifier.

Hat jemand ein Idee, wie ich das Problem lösen kann?



 
  • gefällt mir    Danke

Heute um 20:24:06
Antwort #1

Werbung

Gast

23. Mai 2018, 11:05:16
Antwort #1
Offline

Micky


Hallo,
Du musst die Signalnamen als string in dem Record speichern und diese mit "AliasIO" mit einer Signaldeklaration (z.B. signaldi) in Deiner Routine verbinden. Anschließend kannst Du mit diesen Signalen arbeiten.
Mfg
Micky
  • gefällt mir    Danke
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

23. Mai 2018, 15:25:21
Antwort #2
Offline

Haju


Hallo Micky,

danke für die Hilfe. Ich wollte aber die Greiferroutine so schreiben, dass ich darin nichts an die Applikation anpassen muß. Deshalb wollte ich den Record mit den Signalnamen an die Routine übergeben - so könnte ich auch mehrere Greifer im Definitionsbereich für die Anlage definieren.
Wenn ich mit Alias arbeite, muß ich aber in der Greiferroutine Anlagensprezifisch deklarieren, oder habe ich da was falsch verstanden?

Gruß
Haju
  • gefällt mir    Danke

24. Mai 2018, 13:55:01
Antwort #3
Offline

Micky


Hallo  Haju,
wenn Du in der Greiferdefinition die Signalnamen als "string" definiert und diese an die Greiferroutine übergibst, könnte das Öffnen des Greifers wie folgt aussehen:

  PROC OpenGripper(gripperDef grp)
    VAR signaldo doOpen;
    VAR signaldo doClose;

    AliasIO grp.sOpen,doOpen;
    AliasIO grp.sClose,doClose;

    Reset doClose;
    Set doOpen;

  ERROR
    TEST ERRNO
    CASE ERR_ALIASIO_DEF:
      !Fehlerauswertung
    CASE ERR_ALIASIO_TYPE:
      !Fehlerauswertung
    CASE ERR_NO_ALIASIO_DEF:
      !Fehlerauswertung
    ENDTEST
    RAISE ;
  ENDPROC
In der Greiferroutine musst Du zuerst für jedes Signal das du benötigst, eine Variable für den Signaltyp definineren (z.B. signaldo).
Als nächstes musst du mit der Instruktion ALIASIO den realen Signalnamen mit der Signalvariablen verbinden, (z.B. doOpen)
Anschließend kannst Du die Signalvariable in der Routine wie ein ganz normales Signal verwenden, nur das hierbei das verbundene reale Signal abgefragt bzw. gesetzt wird.
Bei der Verwendung von AliasIO solltest Du die Fehlerbhandlung ausprogrammieren, so dass Du bei einem Fehler enstprechend reagieren kannst.
Mfg
Micky
  • gefällt mir    Danke
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH