Positionsdaten und mit einem wert vergleichen

  • Hallo, bin total neu auf diesem Gebiet.
    ich möchte mit Melfa Basic z.B. eine Nadel vermessen mit einer Laserlichtschranke und die Strecke mir in mm in einer Variable schreiben.
    Danach möchte ich den Wert mit einer Vorgabe vergleichen.
    Also Nadel unterbricht den Laser und fährt weiter bis Laser nicht mehr unterbrochen ist. Die Strecke von den beiden Punkten soll gemessen werden.


    Hatte es damit versucht. Bekomme aber Syntax Error,was mache ich falsch?


    Wäre super wenn mir jemand dabei helfen könnte.



    'Nadel Durchmesser vermessen
    Def Act 1, M_In(5)= 1 GoSub *Dm1 'Interrupt
    Def Act 2, M_In(6)= 0 GoSub *DM2 'Interrupt
    '
    Spd 30 ' 30mm/s
    'Aktivieren Interrupt
    Act 1 = 1
    Act 2 = 0
    'Laser Durchfahrt
    Mov P1
    Dly 0.1
    Mvs P2
    '
    PErgebnis = PD1 - PD0
    PD3 = PEergebnis ' Ergebnis in Variable speichern
    'Berechnung Tolleranz
    If PD3 < 1.79 Then M_Out(7)=1 EndIf 'goto Homeposition
    If PD3 > 1.81 Then M_Out(7)=1 EndIf 'goto Homeposition
    '
    END
    '*******************************
    *Dm1
    PD0 = P_Curr 'Aktuelle Position XYZ Wert
    Return 0
    '
    *Dm2
    PD1 = P_Curr 'Aktuelle Position XYZ Wert
    Return 0

  • ANZEIGE
  • Hallo,



    Hatte es damit versucht. Bekomme aber Syntax Error,was mache ich falsch?


    wenn du schreiben würdest, in welcher Zeile der Syntax-Error kommt, wäre die Hilfsbereitsschaft sicher größer.


    Nach einem kurzen Blick auf das Programm fallen mir als erstes die Kommentare hinter Anweisungen auf. Wenn das neuerdings erlaubt ist, habe ich das nicht mitgekriegt.


    Grüße


    Urmel

  • Bei den Kommentaren war ich mir nicht sicher, ich schreibe meinen Code immer so, das er möglichst auch auf älteren Robotern läuft.


    Nächste Idee: Was ist mit dem Endif ? Begrenzt das nur mehrzeilige Ifs ? Was passiert beim Weglassen oder Umschreiben in mehrere Zeilen ?

  • Hallo,


    bei der Hitze kann ich nicht mehr richtig denken. :zwink:


    Du vergleichst da zwei inkompatible Typen mit dem < , die Variable ist eine Position (also Koordinaten mit Stellungsflags), das andere ein Double.


    Du könntest höchstens so etwas wie PD3.X < 1.79 schreiben. Wahrscheinlich suchst du eher etwas wie
    MAbstand = Dist(PD0, PD1)


    Grüße


    Urmel

    Einmal editiert, zuletzt von Urmel ()

  • Danke Urmel,


    Jepp das war es. Danke. Hatte nicht bedacht das alle Achsen-Positionen ausgelesen werden :angry:


    Hast du auch Ahnung von TCP Verschiebung wenn eine Nadel eine Laserlichtschranke durch fährt?
    Meine damit, wenn 2 Laserlichtschranken ( 1 in X und 1 in Y ) angebracht sind und die Nadel leicht schief ist, möchte ich den TCP dementsprechend verschieben.


    Als Anfänger kann man nur lernen.....


    Gruß Webermann

  • Hallo,



    Meine damit, wenn 2 Laserlichtschranken ( 1 in X und 1 in Y ) angebracht sind und die Nadel leicht schief ist, möchte ich den TCP dementsprechend verschieben.


    man könnte einmal eine gerade Nadel vermessen und dann eine schiefe. Das man Positionen subtrahieren kann, hast du ja schon herausgefunden. Den so ermittelten Versatz kann man auf den TCP aufaddieren. In der Variable P_Tool steht der aktuelle TCP, mit dem Befehl Tool kann man ihn setzen. Eventuell macht es Sinn bei dieser Vermessung nur die X,Y,Z Komponenten zu verwenden. Mit den Winkeln könnte es komplizierter werden.


    Grüße


    Urmel

  • Hallo Urmel,
    Danke für die Antwort. Möchte erst mal ausprobieren ob ich mit der XYZ hinkomme. Wie lautet denn der Befehl die 3 Koordinaten auszulesen ? und wie mache ich die Berechnung bzw. die Verschiebung des TCP.


    Danke nochmal Urmel


    Gruß Weberman

  • Also mit den Positionen kann man rechnen. Der Roboter wandelt die intern in Matrizen um und rechnet damit.


    Angenommen die Position Pgerade ist mit gerade Nadel geteacht und Pkrumm an der selben Stelle mit
    einer krummen Nadel. Dann geht


    PDiff = Pgerade - Pkrumm


    ' Wir ignorieren erstmal die Winkel
    PDiff.A = 0
    PDiff.B = 0
    PDiff.C = 0


    ' Der neue TCP wird aus dem alten und der Korrektur berechnet


    PNeu = P_Tool + PDiff
    Tool PNeu



    Grüße


    Urmel

  • Hi Urmel,
    werde es in 2 Wochen ausprobieren. Super Dank an dich.


    Weist Du ob es möglich ist,mit einer FX3g und Got 1000 über ein normales Netzwerk Daten zu senden und zu empfangen? wenn ja welches Modul brauche ich.


    Sonnige Grüße

  • Mit den GOT kenne ich mich nicht aus, wir verwenden richtige PCs.


    Mit der FX3U verwende ich das herstellereigne Protokoll, normales TCP geht aber wohl auch, müsste man mal die Doku inspizieren. FX3G hatte ich noch nicht.

  • Hallo Urmel,


    also der Aufbau den ich gemacht habe:
    2 Laser, einen in x Richtung einer in Y Richtung.


    möchte nun mit der Nadel in den beiden Richtungen die Laser durchfahren und wenn Laser unterbrochen wird soll die aktuelle Position ausgelesen werden.


    In den MEXTL habe ich den TCP von meinen Nadelhalter ( Nadelspitze ) eingegeben. ( Y 123.71 und Z 160 Rest alles auf Null )


    Weitere Eckdaten: Nadel Durchmesser ist 1,8 mm
    Laserstrahl ist 0,2mm


    Also wenn ich den einen Laserstrahl unterbreche habe ich immer noch 1,6mm bis zum Mittelpunkt der Nadel. Dieses müsste ich ja auch berücksichtigen.


    So nun zu meiner Frage: Wie Berechne ich das alles für den neuen TCP ?


    Komme irgendwie mit den Variablen nicht zurecht. :-|


    Und wie schreibe ich das in den neuen Tool...? Ist das neue Tool dann eine Globale Variable danach ???


    Wäre echt super wenn Du mir da helfen könntest.


    Sonnige Grüße


    Webermann

  • Nun, was du da tun willst, nennt man programmieren. Das ist gemeinhin die Tätigkeit von Roboterprogrammierern.


    Wie man mit Positionen rechnen kann, habe ich schon erwähnt. Mach dir erst mal einen Plan, z.B. auf Papier. Dann ein Roboterprogramm, wo du die Messungen machst und deine Berechnungen machst. Die speicherst du dann in eigene Variablen, deren Inhalt du dann anschauen kannst, um zu sehen ob das so stimmt.


    Wenn alles stimmt, kannst du mit dem Tool Befehl ein neues Tool setzen. Der überschreibt den Inhalt von MEXTL. Der alte Inhalt ist dann weg. Auch damit umzugehen ist Programmieren ...


    Grüße


    Urmel

  • Hallo Urmel, danke für deine Antwort.


    Also ich beabsichtige folgendes:
    Ich erstelle z.B. 3 Programme
    1 Programm = 001 und 2 Programm = 002 3 Programm = 003


    1 Programm enthält die Koordinaten Nadel gerade


    Mvs P1
    Mvs P2
    Mvs P3 'Messpunkt X
    X_X1 = P3.X ' X Wert aus P3 auslesen und in Variable schreiben
    Mvs P4
    Mvs P5 ' Messwert Y
    Y_Y1 = P5.Y ' Y Wert aus P5 auslesen und in Variable schreiben.


    Problem: die Variablen sind Global ( ich möchte die ja in Programm 2 verwenden ) und ich bekomme immer eine Fehlermeldung
    Gibt es andere Variablen die ich benutzen kann oder was muss ich tun um die Variablen die den X und Y Wert enthalten in Programm zu verwenden?


    2 Programm enthält die Fahrt der krummen Nadel


    Def Act 1, M_In(24) = 1 GoSub *Kalibx ' Interrupt
    Def Act 1, M_In(25) = 1 GoSub *Kaliby ' Interrupt
    '
    Act 1 = 1 ' Interrupt aktivieren
    Act 2 = 1 ' Interrupt aktivieren


    ' Platz für Berechnung und Teachpunkte



    '***************************************
    *Kalibx
    PX = P_Curr ' auslesen der aktuellen Position
    *Kaliby
    PY = P_Curr ' auslesen der aktuellen Position


    Problem: hier brauche ich aber nur die X und Y Werte. Wie lese ich die Werte mit P_Curr aus ? Mit P_Curr.X bekomme ich auch eine Fehlermeldung.


    danach möchte ich mit den Variablen rechnen


    z.B.


    PDiffx = X_X1 - PX
    PDiffY = Y_Y1 - PY


    Problem: Wie schreibe ich die Werte an der richtigen Stelle in MEXTL ?


    3 Programm möchte ich das neu berechnete Tool verwenden bezw. aufrufen.


    Habe nun 2 Tage rumprobiert. Deine bisherigen Tip`s sind einleuchtend gewesen.
    Hoffe du kannst mir noch ein paar Tips dazu geben.


    Mit Sonnige Grüße
    Weberman

  • Hallo,



    die Variablen sind Global ( ich möchte die ja in Programm 2 verwenden ) und ich bekomme immer eine Fehlermeldung


    globale Variablen kann man nicht einfach so anlegen. Entweder man nimmt die fertig vorhandenen, wenn man wenige braucht, ist das am einfachsten. Oder man braucht ein spezielles Programm, das die bei Hochfahren der Steuerung anlegt.



    Problem: hier brauche ich aber nur die X und Y Werte. Wie lese ich die Werte mit P_Curr aus ? Mit P_Curr.X bekomme ich auch eine Fehlermeldung.


    Du hast immer noch nicht den Unterschied zwischen Positionsvariablen und denen, die nur eine Zahl enthalten, verstanden.


    Entweder

    Code
    Mx = P_Curr.X


    oder

    Code
    Px = P_Zero
    Px.X = P_Curr.X



    Problem: Wie schreibe ich die Werte an der richtigen Stelle in MEXTL ?


    Auch das Tool ist eine Position. Du musst alle Einträge füllen und dann mit dem Tool-Befehl den neuen Wert setzen.


    Grüße


    Urmel

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