Hallo,
ich habe für CNC-Simulationszwecke eine Anwendung unter Delphi
geschrieben. Dieses Programm hat einen Arbeitsbereich (50cmx50cm) und
eine Auflösung (0,1mm). Auf diesem Arbeitsbereich liegt ein zu Werkstück
(z.B. Alublock) mit Abmessungen. Nun wird das Werkstück bearbeitet
(z.B. Fräsen, Bohren etc).
Das ganze ist über eine Bitmap (X,Y-Koordinate) abgebildet. Die Z-Achse
wird über die Farbinformation dargestellt (250-Graustufen: weiß-->
0.1mm; Schwarz --> -25,0mm, 5 weitere Farben für Arbeitsbereich,
Werkstück (0.0mm), Schablone,...).
Nun zur eigentlichen Frage:
Wenn ich den Arbeitsbereich und die Auflösung vergrößern will, wächst
die Bitmap Größe sehr stark an. Dadurch verlangsamt sich die
Ausführgeschwindigkeit enorm.
Die Bitmap wurde unter anderem deshalb gewählt, weil sich zwei Bitmaps
(Pixel) leicht miteinander vergleichen lassen.
Beispiel:
Fräser (Bitmap X,Y,Z(Farbe)) an Stelle X,Y-Werkstück wird spanend
bearbeitet, wenn Fräser Z-Koordinarte größer ist als Bitmap Z-Koordinate
(Farbinfo), dann ist die Fräser Z-Koordinate die neue Farbe des Bitmap
Pixels.
Welche andere Möglichkeit gibt es (Vectorgrafik, Listen)?
Wie machen es andere Programme?
Danke für Tipps.
Schau dir mal von Artsoft die Demo von Mach3 an.
Wie genau die das gelöst haben, weiß ich natürlich nicht. Spontan würde
ich vorschlagen, dass du dir mal OpenGL oder auch Fear2D anschaust.
Dann wird die Grafik vielleicht auch interessanter
CNC-Simulation??
Das dürfte ziemlich kompliziert sein. Gerade wenn es in den 3D-Bereich
geht.
Mit delphi wirst du da auch keine Chance haben. Das geht nur mit c/c++
o. asm.
Die Software Mach hat außer einer einfachen Strichdarstellung keine
CNC-Simulation.
Das Thema CNC-Simulation ist so kompliziert, dass weltweit nur wenige
Firmen so etwas entwickeln.
Eine Firma ist z.B. http://www.machineworks.com/ . die liefern fertige
Blibiotheken zur Integration im in der eigenen Software.
Dort kauft die Oberliga der CAM-Hersteller ein. Von Mastercam bis
Cimatron über Esprit zu Topsolid, also fast alle. Allerdings kostet das
bestimmt nicht wenig und muss letztendlich auf dem Preis deiner Software
aufgeschlagen werden. Ob das deine Kunden auch bezahlen wollen, ist
fraglich.
Wenn es dir nur um 2D geht, kannst du aber auch bei dem Entwickler von
Palmill anfragen:
http://freenet-homepage.de/palmill/index.htm
Der hat so eine 2D Bitmapsimulation in seiner Software.
> Mit delphi wirst du da auch keine Chance haben. Das geht nur mit c/c++
o. asm.
Eher im Gegenteil. Mit C++ & ASM kannst mal den Strick bestellen.
>Das Thema CNC-Simulation ist so kompliziert, dass weltweit nur wenige>Firmen so etwas entwickeln.
Auch das stimmt ueberhaupt nicht. Das Ganze ist viel einfacher als
angenommen. Allerdings nicht mit bitmaps. Dafuer nimmt man immer
Vektorformate. Und Vergleiche werden im Mathematik gemacht und nicht mit
Bildern oder Bitmaps. Heisst die Simulation laeuft auf einem
physikalischen Modell. Jeder moderne Game Programmierer hat das drauf.
2921 wrote:
>> Mit delphi wirst du da auch keine Chance haben. Das geht nur mit c/c++> o. asm.>> Eher im Gegenteil. Mit C++ & ASM kannst mal den Strick bestellen.>>>Das Thema CNC-Simulation ist so kompliziert, dass weltweit nur wenige>>Firmen so etwas entwickeln.>> Auch das stimmt ueberhaupt nicht. Das Ganze ist viel einfacher als> angenommen. Allerdings nicht mit bitmaps. Dafuer nimmt man immer> Vektorformate.
Kommt drauf an, was du simulieren willst.
Mir scheint du hast nicht mitgekriegt, dass der OP den
tatsächlichen Materialabtrag der durch die Bearbeitung
ensteht simuliert. Und das ist alles andere als trivial
wenn man es nicht mit einer 'Bitmap' macht. Dazu brauchst
du nämlich einen 3D Solid modelling Kern. Und bei den
Problemstellungen, die sich in der CNC Simulation ergeben
muss der Solid Kern schon mächtig gut sein und mit den
pathologischen Fällen (schleifende Schnitte) klar kommen.
Oder eben man macht den Bitmap Ansatz. Wir haben das vor
20 Jahren nicht mit Bitmaps an sich gemacht, sondern mit
einer Dexel-Struktur. Hinter jedem 'Pixel' verbirgt sich eine
Liste in der Materialabschnitte gespeichert sind. D.h. anders
als bei einer reinen Bitmap kann man da auch Hinterschneidungen
machen. Jedes 'Pixel' hat damit eine Datenstruktur um
1D-Solid modelling machen zu können.
> Und Vergleiche werden im Mathematik gemacht und nicht mit> Bildern oder Bitmaps. Heisst die Simulation laeuft auf einem> physikalischen Modell. Jeder moderne Game Programmierer hat das drauf.
Ein Game Programmer ist aber nicht dafür verantwortlich, wenn
der Fräskopf in die Spannvorrichtung knallt und die CNC
Maschine erst mal defekt ist.
> Und Vergleiche werden im Mathematik gemacht und nicht mit> Bildern oder Bitmaps.
Doch doch, das wird gemacht :)
Weil einfacher. Anschließend werden aus den Kanten Chaincodes extrahiert
die weiter verarbeitet werden können. Es kann Skaliert und
Rotiert werden was das zeug hält, nur vergleichen, das ist schwierig :)
Such mal unter "morphologische Bilder" oder ganz allgemein
"Bildverarbeitung".
Welche programmiersprache du verwendest ist Wurst wenn sie einen
Wrapper für OpenGL anbietet und den gibts sogar für Lisp ugh.
Das Solidmodelling als Visualisierung ist trivial gegenueber einer
finiten Elemente Simulation des Zerspanungsvorganges. Wenn der Poster
das machen will kann er das sagen, muss ich nicht hinter
Visualisierungen verstecken.
Ein Gameprogrammer implementiert die Physik natuerlich nur soweit wie es
noetig ist, es muss halbwegs realsitisch, und natuerlich spektakulaer
aussehen. Man kann immer etwas realistischen und detailgetreuer werden
mit simulationen. Eine Frage des Rechenzeitaufwandes.
Wollte sagen ... Wenn einfach ein Span runterkommen muss, damit es nach
einem Span aussieht, dann macht man den Span als Modell in OpenGL. Aber
Pixelware in OpenGL ist nicht passend bis schwierig. Das Naechste nennt
sich Textur. reicht aber nicht fuer einen Span. Wie macht man ein Medell
fuer einen Span ? Entweder mit finiten Elementen, das muss man nnachher
eh nachpruefen, koennt ja sein, dass gewisse Materialparameter nicht
stimmten, oder man schaut sich phenomenologisch an, wie das geht und
macht ein Modell davon.
Zuerst einmal Danke für die Beiträge.
> CNC-Simulation??> Das dürfte ziemlich kompliziert sein. Gerade wenn es in den 3D-Bereich> geht.
Wie ich schon in meinem Eröffnungsbeitrag schon geschrieben habe, habe
ich ein solches Programm schon geschrieben. Funktioniert sehr gut, nur
wenn die Bitmap anwächst (Größe des Arbeitsbereichs (X,Y,Z) und höhere
Auflösung) wird es sehr langsam.
GLScene (Heightfield) ist ein guter Tipp, wenn es wirklich 3D sein soll.
Doch da gilt das gleiche Problem wie bei einer Bitmap - im Gegenteil die
Ausführungsgeschwindigkeit ist noch schlechter, und der Resourcenhunger
noch größer.
Palmill kenne ich. Die Idee, die dahinter steckt diente mir als
Grundlage. Nur meine Simulation ist besser ;-)
Der ganze G-Code Interpreter (DIN66025) steckt in der µC-Hardware. Diese
Hardware mit Interpreter ist mein eigentliches Projekt.
Um diesen Interpreter testen zu können dient das PC-Programm. Die
Ansteuerung der Schrittmotoren (Richtung und Schritte) wird entweder an
die CNC-Maschine (Bearbeitung) oder über RS232/USB an den PC-gesendet
(Simulation). Das Programm simuliert letztendlich die CNC-Maschine.
Damit ist eine effizientes Debuggen/Testen des Interpreters möglich -
ohne Mechanik.
kbuchegg hat es richtig erkannt:
> Mir scheint du hast nicht mitgekriegt, dass der OP den> tatsächlichen Materialabtrag der durch die Bearbeitung> ensteht simuliert.
Das bleib der Traum eines jeden Hobbyentwicklers-- Mit sprachen wie VB
und Delphi das zu machen, was die Profis mit c/c++ programmieren. Wenn
die Programme Laufzeitrelevant werden, hört das Träumen aber auf. Alles
was mit Animation oder Simulation zu tun hat, sollte nicht mehr mit
diesen Anfängersprachen programmiert werden .
Als Anlage ein kleiner Screenshot, damit man sich vorstellen kann was
ich meine (schlechte Qualität aufgrund der JPEG-Komprimierung).
> Das bleib der Traum eines jeden Hobbyentwicklers-- Mit sprachen wie VB> und Delphi das zu machen, was die Profis mit c/c++ programmieren. Wenn> die Programme Laufzeitrelevant werden, hört das Träumen aber auf. Alles> was mit Animation oder Simulation zu tun hat, sollte nicht mehr mit> diesen Anfängersprachen programmiert werden.
Im Prinzip stimme ich Dir zu, aber was viele "Profis" vergessen, ist
dass man mit Sprachen wie Delphi nicht nur Komponenten verwenden kann,
sondern beliebig in die Tiefe (Untiefen) gehen kann. So kann man z.B.
beliebigen C-Code (Pointerarithmetik) integrieren. Das mache ich immer,
wenn Hardware-Programme (µC in C programmiert) und PC-Software identisch
sein sollen (Kommunikationsprotokolle), oder wenn, wie Du schon
schreibst, es um Optimierungen (Laufzeitverhalten,
Speichermanagement...).
@Gast
>Wenn die Programme Laufzeitrelevant werden, hört das Träumen aber auf. Alles>was mit Animation oder Simulation zu tun hat, sollte nicht mehr mit>diesen Anfängersprachen programmiert werden .
Du hast keine Ahnung. Auch fuer Delphi, VB und diesen ganzen Quatsch
gibt es gute Bibliotheken fuer diverse Probleme. Dann ist die Frage wie
effizient der erzeugte Code ist, drittrangig, da es nur noch auf die
Qualitaet der Bibliothek ankommt. Vorausgesetzt du stellst dich bei
ihrer Verwendung nicht zu dumm an.
@2921
>Ein Gameprogrammer implementiert die Physik natuerlich nur soweit wie es>noetig ist, es muss halbwegs realsitisch, und natuerlich spektakulaer>aussehen. Man kann immer etwas realistischen und detailgetreuer werden>mit simulationen. Eine Frage des Rechenzeitaufwandes.
Spiel doch einfach weiter dein WoW oder verschwende deine Zeit vor der
Glotze. Im CNC-Bereich geht es nicht um realistisch und bunt, sondern um
richtig und exakt. Das verstehst du als Gameprogramming-Experte leider
nicht.
Realistisch und exakt .. so, so.
Ich bin nicht Gameprogrammer. Wir kamen drauf, da die Aussage im Raum
stand, realistische 3D Vektorgrafik sei zu abgehoben, zu
resourcenintensiv und das sei eine Domaine von sehr wenigen Leuten. Das
ist sie definitv nicht. 3D Visualisierungen sind nicht wirklich
schwierig. Man kann von Grund auf beginnen, mit OpenGL und die
Mathematik selbst beistellen. Das ist der lange Weg. Der kuerzere Weg
ist eine Library oben auf dem OpenGL drauf zu haben, die die Geometrie,
die Transformationen und die Visualisierung schon bereitstellt. zB
GLScene. Wenn so eine Library nicht alles genauso kann, muss man eben
etwas Hand anlegen, und eine fehlende Komponente selbst schreiben. Eine
Visualisierung muss nur so realistisch sein wie noetig, nicht sogut wie
moeglich. Da kann man bei der Physik etwas weglassen, wie die
Gameprogrammer das tun, oder eben auch nicht. Man muss einfach bedenken
wenn man die Visualisierung mal drauf hat ist die Physik das Schwierige.
Da kann man immer nochmals was drauftun, und nochmals einen Monat oder
ein Quartal reinwerfen. Kupfer zB hat als zaehes Material eine rabiate
Eigenerwaermung bei spanabhebender Verarbeitung. Wenn man das nun
mitnehmen will, dh die Waermeentwicklung, die Waermeverteilung, die
dadurch entstehende zusaetzliche Ausdehnung berechnen will, kann man das
alles mit finiten Elementen machen, das hat aber mit der effektiven
Visualisierung wenig zu tun.
Snacker sagt ich nur. Du hast keine Ahnung. Ich programmiere in einem
Team an so einer Simulation und das ist wirklich heftig. So einen
Witzbold wie dich könnten wir noch gebrauchen. Ein bisschen Heiterkeit
ist bei uns ist immer gefragt. Und wenn du auch noch Kaffee kochen
kannst, hätten wir bestimmt einen Job für dich.
Aha. Das soll nun ein Wettbewerb im Anpissen werden. Wenn du Simulation
und Visualisierung davon nicht trennst wird's eh nie was. Und wenn die
Visualisierung das Schwierige ist, muss die Simulation fast trivial
sein. Dh Elektrodynamik und Fluiddynamik sinds nicht ...
>Würde mich mal interessieren, was du mit C/C++ machen kannst, was z.B.>mit Delphi nicht geht.
Na. Monatelang sich herausreden, weshalb das Projket noch nicht fertig
ist. Mit C/C++ geht alles mindestens 3 bis 4 mal laenger.
Ich bin zufällig auf der Seite gelandet.Ich habe vor einigen Jahren
eine einfache Fräs-Simulation programmiert.Die Rechner damals waren
für Gleitkomma-Berechnungen zu langsam.Da kammen nur ganze Zahlen
in Frage.Mein Programm basiert auf Arrays.In einem Array werden
die Z-Werte des Rohteils gespeichert.Im anderen Array wird der
aktuelle Fräser abgespeichert.Während der Simulation werden nur
die Arrays miteinander verglichen.Aus dem Rohteil-Array wird am
Ende ein Polygonennetz erzeugt und im OpenGL Fenster angezeigt.
Wenn man das Programm ausprobieren möchte,müssen die
Verzeichnisse für die CNC- und Fräserdateien gesetzt sein.
Vielleicht kann ich mit meinem Programm jemanden weiterhelfen.
Da der Dateianhang zu groß war,habe ich die EXE Dateien
rausgenommen.Es muß also mit Delphi noch compiliert werden.
Danke Torsten, jetzt klappt das übersetzen.
Nicht schlecht! Das hast Du auch nicht an einem Nachmittag geschrieben
;-)
Muss mir den Code mal in Ruhe ansehen.
Ich werde wohl meine Simulation über ein verkettete Liste realisieren
und das ganze in einen MemoryStream ablegen. Das hat den Vorteil, dass
nur Koordinaten, die bearbeitet wurden abgespeichert werden müssen.
Somit ist der Speicherbedarf (Memory) erheblich kleiner.
Den Code bitte nicht so genau ansehen.War mein erstes
Programm.Immer wenn ich Zeit und Lust hatte, habe ich
weiter prorammiert.Verkettete Listen sind natürlich der
bessere Weg.Ich bin damit gescheitert.Ab einer bestimmten
Größe wurde der mit "new" angeforderte Speicher ohne
Fehlermeldung nicht mehr bereitgestellt.Der Effekt trat auch
bei "ReAllocMem" und "TMemorystream auf".Da reichen
meine Kenntnisse einfach nicht aus.Na dann viel Spaß
beim Programmieren.