Einzelnen Beitrag anzeigen

markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#52

Re: Ablauf für Fräsmaschine programmieren

  Alt 5. Okt 2008, 18:15
Zitat von urbanbruhin:
ja super, ich glaube die Kommunikation in eine Richtung (PC -> µC) funktioniert schonmal!!
Dann werde ich jetzt noch die andere Richtung vornehmen, und dann hab ich schonmal ein Fundament
Gratuliere!
Zitat von urbanbruhin:
Ich habe aber grad noch gesehen, dass man mehrdimensionale Arrays verwenden kann, wäre das nicht sehr nützlich in dieser Hinsicht? Die Erste Dimension kann z.B. den Befehl angeben (z.B. G01 aber in vereinfachter Form -> 1 Byte gross), und 3 weitere dimensionen geben X, Y, und Z-Position an. Allerdings müsste ich dafür ein Array of Integer nehmen um genügend grosse Zahlen speichern zu können (Maximum ist 65535 - bei einer Genauigkeit [1 Schritt] von 0,005mm gäbe das einen Verfahrensweg von 327mm).

Bei M-Befehlen oder so Sachen müsste man halt für jeden befehl eine Zahl zuordnen, damit man mit einem Integer-Array arbeiten kann, aber der PC vereinfacht den G-Code ja sowieso, dann kann er ja auch gleich alles in Zahlen angeben.

Oder bin ich da vollkommen auf dem Holzweg?
Jein
Wie die Vereinfachung von mir angedacht war, hast du schon Begriffen. Ich bin mir aber noch nicht ganz darüber im klaren, wie ich die G-Codes zwischenspeichere.
Das Problem ist, dass du hier schon von multidimensionalen Arrays träumst, du hast es aber mit einem µC zu tun, da hast du nicht viel RAM!
Mein ATMega168 hat 1KB SRAM, dein ATMega128 bietet dir das vierfache.

Deshalb gibt es bei nur einen einzigen Satz FiFo-Funktionen, der mit Bytes (uint8_t) arbeitet und die Möglichkeit bietet, "items" aus mehreren Bytes zu speichern. Für die RS232-Kommunikation ist das etwas überdimensioniert, ich kann den gleichen Code aber auch nutzen, um G-Code oder Motion-Control Datensätze (Structs, in Delphi Record) ablegen.

So kann ich zum Bleistift für die Motion-Control bei kleineren Schritten (Kreis!) dann Byte-große Bewegungsparameter verwenden, wenn ich wieder Linien mit einem größeren Bewegungsfeld und größeren Werten, dann benutze ich das selbe Array mit anderer Fifo-Konfiguration für weniger aber größere Datensätze.

Auf jeden Fall läuft es auf ein Array of Record raus, ich bin nur noch am überlegen, wie ich das ganze mit unterschiedlich großen Records vereinbaren kann. Einfach nur ein Array of int oder ähnlichem halte ich für nicht den richtigen Weg.

Wie gesagt, im Moment bin ich gerade dabei, die ganzen Fälle und Möglichkeiten durchzuspielen und mir ein Bild davon zu machen, wie ich den "arbeitenden" Teil der Firmware stricke.

mfG
Markus

PS: Noch ein wichtiger Punkt: Meide Fließkommaarithmetik (single) wie der Teufel das Weihwasser. Wenn du anfängst, zu dividieren oder sonstige Berechnungen mit Fließkommazahlen anzustellen, kannst du jegliche Träume von hohen Geschwindigkeiten komplett knicken.
Diese Operationen dauern im Vergleich zu den normalen Integer-Typen vielfach länger, vor allem die Kreisberechnung könntest du damit knicken, da schaffst du keine 80.000 Schritte in der Sekunde (für Kreise mit einem Radius kleiner 10.000 Schritte), die ich im Moment bei 20Mhz erreiche.
Markus
  Mit Zitat antworten Zitat