Roboterforum Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
08. Februar 2012, 23:25:48
Übersicht Hilfe Suche Kalender Einloggen Registrieren
News: English and international Robotsupport now on Robot Forum. Also Supported by the Moderators of the roboterforum.de

Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  Stäubli Roboter (Moderator: titan72)  |  Thema: Und es geht weiter mit den Fragen 0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Und es geht weiter mit den Fragen  (Gelesen 1321 mal)
Roland Keller
Administrator
Deluxe Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 479



« am: 03. Februar 2010, 12:56:46 »

Hallo an die Stäublisprechenden,

über die VAL3-Hilfe finde ich nichts bezüglich bahnbezogener Schaltaktionen. Bei Kuka ist das ja der Trigger when....
Suche ich an der falschen Stelle, finde nur ich nichts darüber oder gibts da in dieser Form bei Stäubli nichts?
Gespeichert

-------------
Gruß
Roland


Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.
Konrad Adenauer
titan72
Global Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 869



« Antworten #1 am: 03. Februar 2010, 13:42:36 »

Hallo,
Synchronisierung von Bewegung und Ansteuerung der E/A´s

VAL3 : Unabhängigkeit zwischen Roboterbewegung und Programmausführung (Motionstack)!!!
=> Zur Ansteuerung von Ausgängen an definierten Positionen: waitEndMove()

Beispiel:
movej(pControl,tGrip,mFast)
waitEndMove()
io:oStart=true
Gespeichert

‘Go To Statement Considered Harmful’

„Seit Jahren bin ich nun mit der Beobachtung vertraut, dass die Qualität von Programmierern eine abnehmende Funktion der Dichte von GOTO Anweisungen in ihren Programmen ist.“
Edsger W. Dijkstra

Dem haben wir nichts hinzuzufügen!
Roland Keller
Administrator
Deluxe Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 479



« Antworten #2 am: 03. Februar 2010, 16:56:19 »

Hallo Titan72,

das hatte ich schon gefunden. Es ist aber nicht das was ich suche.
Ich möchte während der Fahrt in Abhängigkeit einer Zeit oder eines Weges einen Ausgang setzen oder eine Function aufrufen.
Eben wie bei Kuka z.B. mit
Code:
TRIGGER WHEN DISTANCE=1 DELAY=-500 DO aStart=TRUE
Gespeichert

-------------
Gruß
Roland


Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.
Konrad Adenauer
kurvanov
Member
***
Offline Offline

Geschlecht: Weiblich
Beiträge: 56


« Antworten #3 am: 04. Februar 2010, 09:09:03 »

Guten morgen Roboman

Meines Wissens gibt est keine vergleichbare Funktion in VAL3.
Ich verwende immer eine paralleltask wo ich die Position des Robis teste.
Wenn der Abstand zu "MyPoint" kleiner als die eingetragenen Distanz (50mm im Beispiel) wird, setze ich den gewünschten Ausgang.
Die Synchronisation erforglt über ein Boolschen (bSet_My_Output)

Code:
//paralleltask   
   if bSet_My_Output==true
      l_pCurrentPos=here(tGreifer,world)
      if distance(l_pCurrentPos,pMyPoint)<50
        doMy_Output=true
        bSet_My_Output=false
      endIf
    endIf

Code:
//Main Task
movej(MyPoint,tGrip,mFast)
bSet_My_Output=true

Ist im Rahmen der VAL3 programmierung doch einfach !  smiley

mfG

P.S. Habe vor kurzem erfahren dass es 2 Funktionnen gibt : setMoveId() u. getMoveId().
setMoveId erlaubt die Nummerierung der Robi's Bewegung
getMoveId gibt aus wieviel Prozent  einer Bewegung schon gelaufen ist

Mehr Info sollen auf Stäubli Web site vorhanden sein
 
Gespeichert
Roland Keller
Administrator
Deluxe Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 479



« Antworten #4 am: 05. Februar 2010, 14:08:04 »

Mahlzeit,
mich überrascht mal wieder eine Fehlermeldung  nocheck

VAL3 Laufzeitfehler. Zugriff auf eine Liste mit höherem Index als die Listengröße nicht möglich

Folgender Sachverhalt:
Der eingelesene String soll auf Gültigkeit geprüft werden. Soll heissen, steht mein Zeiger einer For-Schleife auf 1 muss den eingelesenen Koordinaten ein X: vorangestellt sein. Bei 2 ein Y usw. Im Anschluss werden die ersten beiden Zeichen sowie das letzte Zeichen gelöscht.
Mein Erstversuch dies zu lösen war:

Code:
      if ((nKoordinate==1) and (sReadData[0]=="X"))
        sReadData=delete(sReadData,2,0)
        sReadData=delete(sReadData,1,(len(sReadData)-1))
        putln("Gewandelte Koordinaten: "+sReadData)           
        toNum(sReadData,nBerechneX,bResult)
        bKoordinate1ok=true
      else
        bKoordinate1ok=false
      endIf

Bereits in der If-Zeile bleibt mir das Programm mit genanntem Fehler hängen.
Was mir diese Meldung sagen will ist klar. Klar ist mir nur nicht warum  kopfkratz
Gespeichert

-------------
Gruß
Roland


Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.
Konrad Adenauer
Urmel
Global Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 743


« Antworten #5 am: 06. Februar 2010, 16:58:39 »

Hi,

bist du sicher, dass man auf Strings den []-Operator anwenden darf ? Im Handbuch finde ich dazu spontan nix.

Und wenn das UTF-8 ist, dann kann ein Zeichen 1,2,3 oder 4 Byte gross sein...   Denken
http://de.wikipedia.org/wiki/UTF-8

Also vielleicht besser

Code:
left(sReadData, 1) == "X"

statt

Code:
sReadData[0] == "X"

 ks

Grüße

  Urmel
Gespeichert
Spielkind
Stammgast
**
Offline Offline

Beiträge: 40


« Antworten #6 am: 06. Februar 2010, 19:22:02 »


Hi,

zu den Arrays in VAL3 noch eine klitzekleine Anmerkung:
In VAL3 sind alle Variablen immer ein Array, allerdings standardmäßig mit der Elementgröße 1.
Man kann also z.B. auf zwei Arten eine Bool-Variable "bTest" im Programm ansprechen:
bTest = true
bTest[0] = true
Beide Programmzeilen schreiben also "true" in die gleiche Variable (ins gleiche Element).

Zu den Strings ergibt sich daraus, dass man auf die einzelnen Zeichen in einem String nicht über ein Array zugreifen kann. Also wie Roboman schon vorgeschlagen hat, über Zeichenkettenoperatoren wie left, right, mid usw.

Warum dein Code schon in der if-Schleife hängenbleibt, erklärt dass allerdings nicht. Kann es sein, dass dein Programm bereits mindestens einmal über die Schleife gelaufen ist und dabei das Element 0 (also den gesamten String) gelöscht hat?

Und dann noch generell eine Anmerkung zum Versenden von Kommazahlen über TCP/IP oder serielle Schnittstellen:
Wenn die Gegenstelle es ermöglicht, sollte man meiner Meinung nach lieber direkt eine floating point Zahl als 4 Byte (single precision) oder 8 Byte (double precision) über den Kanal schicken - nur darf man die bytes dann nicht in einen String einlesen sondern lieber mit sioGet() in ein Num-Array.
Der Befehl "fromBinary()" nimmt nun dieses Byte-Array entgegen und interpretiert es wie im Übergabeparameter angegeben als word, dword, single float oder double float im little endian oder big endian Format.
Ein schönes Beispiel dazu findest du im VAL3-Handbuch, wenn du nach fromBinary suchst.

Gruss

Spielkind
Gespeichert
Roland Keller
Administrator
Deluxe Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 479



« Antworten #7 am: 06. Februar 2010, 21:04:31 »

Hallo,
danke schon mal für die Hilfe.
Eingelesen werden die Daten über eine Num und dann in einen String geschrieben.
Code:
Do
   nZeichenZaehler=sioGet(sEthernet,nReadData)
   if (nZeichenZaehler>-1) and (nReadData>=32)
      sReadData=sReadData+chr(nReadData)
   endIf
   bResult=nZeichenZaehler>-1
until (nReadData==13) or !bResult
putln("Gelesene Koordinaten: "+sReadData)

Daß das Programm die If-Bedingung durchläuft und den String nullsetzt hatte ich auch schon in Erwägung gezogen und deshalb einen Brakepoint gesetzt um im Debugmodus zu schauen was passiert.
Es ist definitiv so, daß er an dieser If-Abfrage hängenbleibt ohne einmal durchgelaufen zu sein.
Mal  sehen was ich dieses Wochenende noch auf die Reihe bekommen kann.
Gespeichert

-------------
Gruß
Roland


Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.
Konrad Adenauer
Roland Keller
Administrator
Deluxe Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 479



« Antworten #8 am: 07. Februar 2010, 10:27:39 »

Also vielleicht besser
Code:
left(sReadData, 1) == "X"
statt
Code:
sReadData[0] == "X"

Grüße

  Urmel

Ich hab das wohl gestern Nacht nicht mehr so richtig gelesen.
Der Vorschlag war goldrichtig. Heute Morgen schnell mal umgeschrieben und alles läuft perfekt  merci
So gaaaaaanz langsam werden mir diese Robis etwas sympathischer...zumindest bis zum nächsten Problem.
Gespeichert

-------------
Gruß
Roland


Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.
Konrad Adenauer
Urmel
Global Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 743


« Antworten #9 am: 07. Februar 2010, 10:45:33 »

Tja, die Stringfunktionen von Basic mit dem Vergleichoperator von C ...

Irgendwie ist Val3 ein Esperanto aus Basic, Pascal und C. Passt zu den Schweizern.  Mr. Green
Aber ich finde, man kann ganz gut damit arbeiten.

Dem Vorschlag von Spielkind kann ich übrigens auch nur zustimmen, toBinary / fromBinary sind eine gute Alternative zu formatierten Strings und außerdem offenbar viel performanter.
Gespeichert
Roland Keller
Administrator
Deluxe Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 479



« Antworten #10 am: 17. Februar 2010, 15:26:15 »

Tja, nun hab ich schon wieder ein kleines Problem.
Ich fahre mit dem Robi einen Punkt an.
Speicher die Koordinaten mit
Code:
 
  nDaten[0]=p1Kamera.trsf.x
  nDaten[1]=p1Kamera.trsf.y
  nDaten[2]=p1Kamera.trsf.z
  nDaten[3]=p1Kamera.trsf.rx
  nDaten[4]=p1Kamera.trsf.ry
  nDaten[5]=p1Kamera.trsf.rz
und schicke sie über
Code:
 
  toBinary(nDaten,6,"8.0b",nDatenbyte)
  sioSet(sEthernet,nDatenbyte)
zur Gegenstelle. Das Problem ist jetzt, daß die Gegenstelle den Binaercode nicht lesen kann.
Also pack ich das ganze in einen String und schicke den rüber...dachte ich zumindest. Denken
Irgendwie  bekomm es nicht auf die Reihe die  Nums nDaten[0] bis nDaten[5] in einen String zu schreiben.Embarassed
Gespeichert

-------------
Gruß
Roland


Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.
Konrad Adenauer
Urmel
Global Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 743


« Antworten #11 am: 17. Februar 2010, 15:35:57 »


Irgendwie  bekomm es nicht auf die Reihe die  Nums nDaten[0] bis nDaten[5] in einen String zu schreiben.Embarassed


Einfach so ?

Code:
sResult = ""

for i = 0 to 5
  sResult = sResult + toString("1.3", nDaten[i]) + ","
endFor

[Edit]
ok, das letzte Komma ist überflüssig, also besser so

Code:
sResult = toString("1.3", nDaten[0])

for i = 1 to 5
  sResult = sResult + "," +  toString("1.3", nDaten[i])
endFor
Gespeichert
Roland Keller
Administrator
Deluxe Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 479



« Antworten #12 am: 19. Februar 2010, 07:21:33 »


Einfach so ?


Genau, einfach so..... merci
Gespeichert

-------------
Gruß
Roland


Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.
Konrad Adenauer
Seiten: [1] Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  Stäubli Roboter (Moderator: titan72)  |  Thema: Und es geht weiter mit den Fragen « vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS