-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: gefahren Schrittzahl abrufen in Delphi mit apdcomport

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2004
    Beiträge
    15

    gefahren Schrittzahl abrufen in Delphi mit apdcomport

    Hallo,
    Kann mir jemand einen Tipp geben wie ich in Delphi 3, die gefahren Schritte bei RM-Motor mit dem #rmp Befehl ermittle, Ich bekomme jedesmal irgendwelche falschen Zahlen oder Buchstaben zurück. und wie kann ich Abfragen ob ein Befehl fertig ausgeführt wurde. Im Beispielprogramm kommt ein Ok zurück.
    Motor drehen, Geschwindigkeit , Strom funktioniert sonst alles.
    Danke
    MFG

  2. #2
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Wenn ein Befehl korrekt verstanden wurde kommt ein ok zurück. Aber wenn eine bestimmte Anzahl von Schritten ausgeführt werdne soll, dann kommt bereits vorher das ok zurück um das Programm nicht zu blockieren.
    Ob die Schritte bereits alle ausgeführt wurden läßt sich derzeit in der Software nicht abrufen. Man könnte eventuell die Schrittanzahl abrufen, daran würde man es ja sehen.
    Wenn die Schritte abgerufen werden muss eigentlich nur der String der zurückgegeben wird ausgewertet werden. Ich glaub in der ersten Zeile war die Anzahl und in der zweiten zeile ein OK. Steht aber in der Anleitung auch irgendwo.
    Wie du die Dekodierung in Delphi hin bekommst kann ich dir allerdings nicht sagen. Mit ein paar Stringfunktionen sollte es aber nicht weiter schwierig sein.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2004
    Beiträge
    15
    Danke für deine Antwort
    ich habe das Problem mit der Delphi Umsetzung.
    Wieviele Zeichen und in welchen Format gibst du den Wert zurück ? bei der
    Schrittzahl und das OK (2 mal Char ) ?

    Motor um 600 Schritte drehen lassen mache ich so ( das funktioniert ) :

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    ApdComPort1.Output := '#rmz' + char(1) + char(8 + char(2); // Motor drehen
    end;

    Das auslesen der gefahren Schritte

    procedure TForm1.Button8Click(Sender: TObject);
    var
    empfangsbuffer: longint;
    begin
    ApdComPort1.Output := '#rmp' + char(1); // Motor stoppen Strom an
    // hier war mal ne Warteschleife
    ApdComPort1.GetBlock(empfangsbuffer,4);
    //empfangsbuffer:= ApdComPort1.getchar();
    Label1.Caption := inttostr(empfangsbuffer);
    end;

    Auch wenn der Motor steht und ich drücke den button kommen immer verschiedene Wert raus. Je nach Vereinbarung Zeichen oder Zahlen
    MfG

  4. #4
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Von Delphi hab ich leider keine Ahnung, daher kann ich es nich konkret sagen.
    Du darft jedenfalls die Bytes nicht binär auswerten denn die Schritteanzahl wird im Klartext (ASCII) übertragen. Die Byte-Anzahl kann also immer etwas anders sein. EInfach String einlesen bis "OK" kommt und dann die erste Zahl aus String interpretiereren.
    Du kannst es ja mit dem PC RS232 Steuerprogramm mal selbst austesten, dort siehst du die Rückgabe im LOG Fenster unten.
    Also wenn Motor steht, dürften eigentlich keine unterschiedlichen Zahlen raus kommen, prüf das mal mit dem PC-Steuerprogramm.

    Gruß Frank

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2004
    Beiträge
    15
    Danke für Deine Antwort
    Ich bin davon ausgegangen das nur 2 Char von dem RN-Motor kommen.
    (aber da kommt ja viel mehr) Ich kann nun alles auslesen. Zwar noch nicht ganz so, wie ich das will, aber das wird schon, hoffe ich [-(
    MfG

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2004
    Beiträge
    15
    Hallo,
    die Abfrage ob der Motor fertig ist klappt jetzt, nur habe ich ein Problem das es viel zu lange dauert bis die Schnittstelle anwortet, wenn ich nur einen Schritt ausgebe und auf das fertig warte dauert es 1 Sekunde, bei 50 Schritten ist das auch 1 Sekunde, es ist fast egal welche Geschwindigkeit ich den Motor gebe. Nun habe ich bemerkt das ich auch mehrere Befehle hintereinander geben kann (ohne Abfrage wie weit er ist) und er macht es trotzdem richtig z.b so :
    if Motor_SendSteps(1, strtoint('1')) then // Hier wird nur gefragt ob der
    if Motor_SendSteps(1, strtoint('2')) then // Motor den Befehl bestätigt
    if Motor_SendSteps(1, strtoint('200')) then // hat
    if drehrechts(1) then // drehrichtung ändern
    if Motor_SendSteps(1, strtoint('50')) then
    if Motor_SendSteps(1, strtoint('10')) then
    Sobald der Motor aber den Befehl zur Drehrichtung ändern bekommt macht der das sofort und unterbricht (in diesen Beispiel) die ausgabe der 200 Schritte ändert die Drehrichtung und macht vermutlich mit den restlichen Schritten von den 200 weiter. Meine Frage: ist das im Programm auf dem Chip so vorgesehen oder mache ich was falsch. ISt es möglich an dieser Baugruppe noch mechanische Endabschalter abzufragen ?
    Vielen Dank
    MfG

  7. #7
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Hi robby05!
    Die Schrittzahl wird beim Richtungswechsel auf 0 gesetzt, das ist ja in den meisten Fällen auch sinnvoll so.
    Ich verstehe nicht so ganz genau was du überhaupt vor hast mit der Abfrage - aber vielleicht liegt das daran das ich schon im Halbschlaf bin

    Der Grundgedanke den ich bei dieser Funktion hatte war folgender: Man gibt dem Roboter den Befehl in eine bestimmte Richtung zu fahren. Danach braucht sich das Hauptprogramm nicht mehr um den Schrittmotor kümmern, die Motoren steuert ja alleine RN-Motor. Der Controller kann also seine ganze Rechenzeit für andere Aufgaben nutzen, zum Beispiel um ständig die Hindernis-Sensoren zu prüfen. Wird nun ein Hindernis festgestellt (durch Sharp Snsor, Ultraschall, Kontakt oder was auch immer), dann wird der Stop Befehl an RN-Motor geschickt. Danach kann der Controller in aller Ruhe RN-Motor befragen wieviel Schritte gefahren wurden. Daraus kann nun der Controller die gefahrene Strecke und auch ungefaire Position berechnen. Danach dreht er den Roboter um einen bestimmten Winkel (je nach Aufgabe) und startet fahrt wieder erneut.
    Die Abfragezeit von ein paar ms sind da eigentlich völlig nebensächlich.

    Das war mein Vorhaben. Aber da du das ganze offenbar mit PC steuerst weiss ich nicht was du für ein Ziel hast. Vielleicht musst du einfach das Grundkonzept überdenken. Du kannst Dein Projekt ja mal näher beschreiben.
    Wie eben geschildert ist es eigentlich recht einfach Endabschalter in dem normalen Steuerprogramm abzufragen, irgendwas muss das ja auch zu tun haben

    Gruß Frank

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2004
    Beiträge
    15
    Hallo Frank,
    danke für deine Antwort.
    Ich möchte die Ansteuerung für eine CNC Fräse nutzen.
    Ich lese mir einen Text als Bild in ein Programm und erstelle mir daraus die Befehle welche ich benötige um die Fräse zu überzeugen den Text auszufräsen. Ich habe also zur Ausgabezeit eine Tabelle mit den Koordinaten die jeder der 3 Motoren anfahren soll, die ich dann nacheinander ausgeben will.
    Nun mache ich folgendes, ich gebe den Schritt aus und warte auf ein OK dann gebe ich den nächsten Schritt aus (das können 100 Schritte in einen Befehl aber eben auch bloß einer sein.)
    Im Programm hatte ich dann zusätzlich noch die Schritte abgefragt und erst wenn diese fertig waren, bin ich ins Hauptprogramm zurück und das dauert eben ewig, zumindest ist das nicht vertretbar wenn ich nur wenige Schritte ausgebe. Da brauchte ich 7 Tage um alles abzufahren.
    Nun kommt eben mein Problem, ohne der zweiten Abfrage weiß ich nicht ob der Motor fertig ist, wenn nun ein Befehl zur Richtungsänderung kommt löscht er mir die noch offenen Schritte. Ohne Richtungsänderung ist es kein Problem da konnte ich im Test mehr als hundert Befehle hintereinander so absetzen. (Wobei ich auch hier noch nicht die Grenze kenne) Es kann natürlich nun auch sein das der Motor bei einer Änderung der Geschwindigkeit auch die Schritte zurück setzt.
    Während der Berechnung der Befehle lohnt sich eine Ausgabe nicht, da diese ja nicht lange dauert.
    MfG

  9. #9
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Hi robby05,

    aha, jetzt ist es schon klarer. Ja für eine CNC-Fräse ist die Firmware in RN-Motor eigentlich nicht sehr sinnvoll. Das Board wurde je vor allem in Hinblick auf Robotik-Anwendungen entwickelt, denn für CNC gibts ja schon eine ganze Reihe von Boards, speziell für Robotik gab´s noch garnix weil den meisten Herstellern die Zielgruppe viel zu klein ist.

    Von daher ist zumindest das Betriebsystem von RN-Motor für deine CNC-Anwendung nicht so toll geeignet. Die Anforderungen die zu unterschiedlich. Man müsste also eine neue Firmware für RN-Motor schreiben um auch das besser lösen zu können. Leider fehlt mir momentan die Zeit, aber wer AVR programmieren kann, kann sich hier vielleicht was ausdenken.
    Es kommt im nächsten Jahr noch ein weiteres Motorboard raus, das wäre dann eventuell für deine Anwendung günstiger.

    Oder wie gesagt Firmware-Änderung - damit kann man auch RN-Motor an fast alles anpassen. Aber es müssen dann Atmel Mega8 Kentnisse vorhanden sein.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2004
    Beiträge
    15
    hallo frank,

    ist für das Betriebssystem der Quellcode erhältlich ?
    Wenn ich richtig verstanden habe, brauchte ich zum programmieren nur ein Kabel und die Software oder ?

    MfG

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •