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.
1 | >Eher im Gegenteil. Mit C++ & ASM kannst mal den Strick bestellen. |
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 ...
Hi @Gast Würde mich mal interessieren, was du mit C/C++ machen kannst, was z.B. mit Delphi nicht geht. MfG Spess
>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.
Hi Dazu kommt noch,das man bei dem Niveau der heutigen Absolventen ein Team braucht um einen Programmierer zu ersetzen. MfG Spess
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.
@ Torsten Danke für den Code. Leider kann ich nicht compilieren, da die Datei "U_MyProcFunc.pas" bzw. "U_MyProcFunc.pas" fehlt!
> "U_MyProcFunc.pas" bzw. "U_MyProcFunc.pas" fehlt!
Soll natürlich "U_MyProcFunc.pas" bzw. "U_MyProcFunc.dcu" heißen.
Entschuldigung.Die Unit wird von mehreren Programmen benutzt und stand in einem anderen Verzeichnis.Jetzt sollte es funktionieren.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.