Einzelnen Beitrag anzeigen

100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#30

Re: Ablauf für Fräsmaschine programmieren

  Alt 29. Sep 2008, 19:25
hmm..also ich hab das bisher völlig anders gemacht würde ich sagen. Auf diese Weise wäre ein "zu langsamer" Mikrocontroller eigentlich gar nicht schlimm, ein Fräsvorgang würde einfach länger dauern aber funktionieren würde es.

Ich poste mal den relevanten Teil meines Basic-Programms, falls du willst kannst du es ja mal anschauen.
Code:
Sub OneStep(Achse As Byte, Richtung As Byte) 'Führt einfach nur einen Schritt bei einer Achse in die gewählte Richtung aus
    Select Case Achse
      Case 1 'X-Achse, F.0
        Port_WriteBit(43, Richtung) 'Richtung angeben
        Port_WriteBit(40, 1)
       ' AbsDelay(ISpeed*SpeedFactor)        ' Verzögerung in ms
        Port_WriteBit(40, 0)
        If Richtung=0 Then
          PosX=PosX-1
        Else
          PosX=PosX+1
        End If

      Case 2 'Y-Achse F.1
        Port_WriteBit(44, Richtung) 'Richtung angeben
        Port_WriteBit(51, 0)
       ' AbsDelay(ISpeed*SpeedFactor)        ' Verzögerung in ms
        Port_WriteBit(51, 1)
        If Richtung=0 Then
          PosY=PosY-1
        Else
          PosY=PosY+1
        End If

      Case 3 'Z-Achse F.2
        Port_WriteBit(45, Richtung) 'Richtung angeben
        Port_WriteBit(52, 0)
      ' AbsDelay(ISpeed*SpeedFactor)        ' Verzögerung in ms
        Port_WriteBit(52, 1)
        If Richtung=0 Then
          PosZ=PosZ-1
        Else
          PosZ=PosZ+1
        End If

      End Case
End Sub


In der Main-Prozedur:
Do While True
    GoPosX="    "
    For i=0 To 4
      GoPosX(i)=Serial_Read(0)
    Next

    GoPosY="    "
    For i=0 To 4
      GoPosY(i)=Serial_Read(0)
    Next

    GoPosZ="    "
    For i=0 To 4
      GoPosZ(i)=Serial_Read(0)
    Next

    Speed="    "
    For i=0 To 4
      Speed(i)=Serial_Read(0)
    Next

    Text="Fahre auf Position...       "
    Serial_WriteText(0, Text)
    Serial_Write(0, LF)
    Serial_Write(0, CR)

    InZahlenWandeln()

    GoToPos() ' hier wird OneStep(...) mehrmals aufgerufen

    Text="Erwarte Befehl              "
    Serial_WriteText(0, Text)
    Serial_Write(0, LF)
    Serial_Write(0, CR)
  End While
Die Prozedur GoToPos ist nur sehr schwer verständlich wenn ich den Code poste Deshalb eine kurze Erklärung:
Istposition und Sollposition von X, Y und Z werden verglichen. OneStep wird dann mit jeder Achse so häufig aufgerufen, bis die Fräse sich in der Sollposition befinden.
Bsp: Xist, Yist, Zist = 0; Xsoll = 100, Ysoll = 50 und Zsoll=25;
--> OneStep(X) wird 100 mal aufgerufen, Jedes zweite mal wird auch OneStep(Y) und jedes vierte mal auch OneStep(Z) aufgerufen.

Zu deiner Frage noch: Anfangs konnte ich das Teil so schnell laufen lassen bis es Schrittverluste gab. Dann hab ich das Programm ein bisschen abgeändert, nun gibts (höchstwahrscheinlich sehr knapp) keine Schrittverluste mehr. Also mit der maximalen Geschwindigkeit bin ich eigentlich ganz zufrieden, ich glaub nicht dass der Schrittmotor noch schneller laufen könnte.

Mit Interrupt hab ich mich noch nicht auseinandergesetzt, dohc ich habe befürchtet dass dies für eine saubere Lösung notwendig ist


Da hab ich wohl einiges zu tun um es so ähnlich hinzukriegen wie du
Naja wenigstens wird mir so nicht langweilig^^

mfg
Urban

EDIT:
was ich schon lange fragen wollte, wie greifst du im Delphi-Programm auf die RS232 zu? Benutzt du eine Komponente?
  Mit Zitat antworten Zitat