Forum: PC-Programmierung 2-3D Programm Datenstruktur


von Mr. CNC (Gast)


Lesenswert?

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.

von gast (Gast)


Lesenswert?

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

von 2920 (Gast)


Lesenswert?

Delphi ? GLScene, zu finden unter : http://glscene.sourceforge.net

von Simulierer (Gast)


Lesenswert?

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.

von 2921 (Gast)


Lesenswert?

> 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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Stinke S. (stinke)


Lesenswert?

> 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.

von 2921 (Gast)


Lesenswert?

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.

von 2921 (Gast)


Lesenswert?

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.

von Mr. CNC (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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 .

von Mr. CNC (Gast)


Angehängte Dateien:

Lesenswert?

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...).

von Mr. CNC (Gast)


Lesenswert?

geht. (fehlte noch ;-) )

von Durchblicker (Gast)


Lesenswert?

@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.

von 2921 (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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.

von 2922 (Gast)


Lesenswert?

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 ...

von Spess53 (Gast)


Lesenswert?

Hi

@Gast
Würde mich mal interessieren, was du mit C/C++ machen kannst, was z.B. 
mit Delphi nicht geht.

MfG Spess

von Duck und weg (Gast)


Lesenswert?

>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.

von Spess53 (Gast)


Lesenswert?

Hi

Dazu kommt noch,das man bei dem Niveau der heutigen Absolventen ein Team 
braucht um einen Programmierer zu ersetzen.

MfG Spess

von Torsten (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Mr. CNC (Gast)


Lesenswert?

@ Torsten
Danke für den Code. Leider kann ich nicht compilieren, da die Datei 
"U_MyProcFunc.pas" bzw. "U_MyProcFunc.pas" fehlt!

von Mr. CNC (Gast)


Lesenswert?

> "U_MyProcFunc.pas" bzw. "U_MyProcFunc.pas" fehlt!

Soll natürlich "U_MyProcFunc.pas" bzw. "U_MyProcFunc.dcu" heißen.

von Torsten (Gast)


Angehängte Dateien:

Lesenswert?

Entschuldigung.Die Unit wird von mehreren
Programmen benutzt und stand in einem anderen
Verzeichnis.Jetzt sollte es funktionieren.

von Mr. CNC (Gast)


Lesenswert?

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.

von Torsten (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.