| |
|
|
- Seite 1 - |
|
Web Scanner | Hallo Freunde,
mein CNC Programm läuft soweit schon ganz gut, nun möchte ich dran weitermachen
Also: ich bin auf der Suche nach folgendem. Es gibt sogenannte HPGL Files, das sind Anweisungen die z.B auf Plotter ausgegeben werden können und dann schöne Sachen zeichnen, oder eben plotten. Ev. kennt das jemand schon? Diese Files haben ein ganz bestimmtes Format (ich glaube xxx.hgl).
Ich möchte nun: 1. Ein beliebiges HPGL-File in XProfan 10 laden 2. Die Zeichnung ( = den Plot skaliert) in einem Fenster entstehen lassen.
So theoretisch hab ich schon ne Idee, aber ev. kann ich mich an einem Beispiel von Euch festhalten und daran weiterproggen?
Viele Grüße
Euer Web |
|
|
| |
|
|
| |
|
- Seite 3 - |
|
|
E.T. | Ein bekannter von mir hat auch eine Fräse selbst gebaut (X,Y UND Z-Steuerung). Da könnt ich ja auch mal nachfragen, wie er das alles gemacht hat. Wenn ich mich richtig erinnere, bearbeitet er alles mit Corel, die Steuerung ist dann ein DOS-Programm.
Mario |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 05.07.2008 ▲ |
|
|
|
|
| Ah, ich hatte im Paket auf einen Screentshot gehofft weshalb mir die Dateigröße Spanisch vorkam. |
|
|
| |
|
|
|
GDL | Hi Web
Es geht um Europlatinen (100*160 mm). - Isolationsfräsen - 0,6 mm Durchm. Bohren bei 1mm Kupferauge - 0,8 mm Durchm. Bohren bei 1,5 mm Kupferauge - 1,3 mm Durchm. Bohren bei 2 mm Kupferauge
Bei 2seitigen Platinen obige Schritte doppelt (Löcher müssen exakt die Lötaugen auf beiden Seiten treffen).
Derzeit stelle ich die Platinen so her - UV Belichtung - Entwickeln - Ätzen - Bohren mit einer Hochdrehzahl-Ständerbohrmaschine mit Spezialspannfutter.
Da dies sehr zeitraubend und Bohrer-Abbrech intensiv ist, wurde mal über Alternativen nachgedacht.
Servus Georg |
|
|
| |
|
|
|
Web Scanner | Hi Georg,
für Leiterplatten in kleinen Serien gibt es doch eigentlich preiswerte Anbieter, oder bin ich da falsch informiert?
Die Fräserei von Leiterplatten lohnt sich (wahrscheinlich) für Serien eher nicht, da das Isolationsfräsen doch recht lange dauert und ziemlich Fräserverschleissend (bei FR4) ist. Dasselbe gilt auch für die Bohrer. Bei Ebay gibts dann immer die aussortierten Fräser ud Bohrer, die noch für Holz und Kunststoff scharf genug sind.
Für einzelne Muster kann es wieder passend sein, da man nicht den ganzen Weg der Herstellung über das Ätzen gehen muß.
Das Bohren ist natürlich mit eine CNC ein Klacks, solange der Boher hält. Besser wäre es (wenn möglich) sich auf einen mittleren Bohr Durchmesser festzulegen. Die Umspannerei ist nicht gerade beliebt, und man muß nicht so viele verschiedene Bohrergrößen vorhalten.
Grüße
Web |
|
|
| |
|
|
|
GDL | Hi,
habe es fast schon befürchtet.Platinendienst ist zu teuer.Brauchen ca. 300 Platinen mit untershiedlichem Layout. Mit der Ätztechnik kann ich ja noch leben.Für das Bohren muss ich mir halt was überlegen.
Servus Georg
Edit: Die Bohrergrößen sind Bauteile bedingt. |
|
|
| |
|
|
|
Web Scanner | Hi Georg,
kennst Du die Tanbo von Elektor?
= Tangential - Bohr - Maschine
Das wäre ev. was zum Leiterplattenbohren ? Ich weiß allerdings nicht was das Ding kostet. Ev. Selbstbau möglich? Als das Gerät neu war, fand ich das Konzept sehr interessant.
[...]
Grüße
Web |
|
|
| |
|
|
|
RGH | RGH
Web Scanner@Roland, hast Du eventuell schon was in Deinem Archiv gefunden? Web Gib mir bitte noch etwas Zeit bis zum Wochenende! Gruß Roland
Hallo, es tut mir leid, aber offensichtlich habe ich den erwähnten Quellcode nicht mehr. Da das HPGL-Format aber ein reines ASCII-Format ist, sollte es in XProfan nicht allzu schwer sein, ein Programm zu schreiben, dass die Datei einliest und auf dem Bildschirm darstellt. Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 07.07.2008 ▲ |
|
|
|
|
Web Scanner | Hallo Roland,
kein Problem, vielen Dank fürs Suchen.
Ich warte mal noch ab, was IF vorhat dazu zu proggen, Ansonsten lege ich erstmal los und werde weitere Fragen haben
Grüße
Web |
|
|
| |
|
|
|
| @Georg: Schau mal [...] vom Mitglied [...] - vlt. ensteht da etwas?
@WebS: Einen Loadergrundstock kann ich dafür gerne heute Abend (zuhause) aufbereiten und hier posten. |
|
|
| |
|
|
|
| Funktioniert
Orignalsource im Paket, hier die enh: KompilierenMarkierenSeparierenSET(errorLevel,-1)
proc LASTSUBSTR
PARAMETERS S$,D$
RETURN (SUBSTR$(S$,LEN(S$,D$),D$))
endproc
proc NOTLASTSUBSTR
PARAMETERS S$,D$
RETURN DEL$(S$,LEN(S$,D$),1,D$)
endproc
proc NOTFIRSTSUBSTR
PARAMETERS S$,D$
RETURN DEL$(S$,1,1,D$)
endproc
proc SETSUBSTR
PARAMETERS S$,N&,D$,NS$
RETURN INS$(NS$,DEL$(S$,N&,1,D$),N&,D$)
endproc
proc FTOA
PARAMETERS F!
RETURN +SUBSTR$(STR$(F!),1,.)
endproc
proc STRI
PARAMETERS F!
RETURN SUBSTR$(STR$(F!),1,.)
endproc
proc TSND
PARAMETERS V&
var S$=STRI(V&)
var L&=LEN(S$)
var T&=(L&-1)3
WHILELOOP T&
S$=INS$(.,S$,L&-&LOOP*3+1)
ENDWHILE
RETURN S$
endproc
proc STOALLOWEDCHARS
PARAMETERS S$,ALWDCHRS$
var C&=LEN(S$)
var I&=0
IFNOT C&
RETURN
ENDIF
WHILE 1
INC I&
IFNOT INSTR(SUBSTR$(S$,I&),ALWDCHRS$)
S$=DEL$(S$,I&,1)
DEC I&
DEC C&
ENDIF
IF I&=C&
BREAK
ENDIF
ENDWHILE
RETURN S$
endproc
proc WHILE_REPLACE
PARAMETERS S$,FROM$,_TO$
WHILE INSTR(FROM$,S$)
S$=TRANSLATE$(S$,FROM$,_TO$)
ENDWHILE
RETURN S$
endproc
proc SARRTOSTRING
PARAMETERS ARR$[],E$
var C&=SIZEOF(ARR$[])-1
IF C&<0
RETURN
ENDIF
var S$=
WHILELOOP 0,C&
S$=S$+ARR$[&LOOP]+E$
ENDWHILE
RETURN S$
endproc
proc FGETFILEEXT
PARAMETERS FLE$
IFNOT INSTR(.,FLE$)
RETURN
ENDIF
RETURN LASTSUBSTR(FLE$,.)
endproc
proc FGETFNAMEFROM
PARAMETERS S$
RETURN LASTSUBSTR(S$,\)
endproc
proc FGETPATHFROM
PARAMETERS S$
RETURN NOTLASTSUBSTR(S$,\)+\
endproc
proc FGC
PARAMETERS FLE$
IF %PCOUNT<1
RETURN
ENDIF
var B&=FILESIZE(FLE$)
IF B&<1
RETURN
ENDIF
DECLARE MEM#
DIM MEM#,B&
var R&=BLOCKREAD(FLE$,MEM#,0,B&)
var S$=CHAR$(MEM#,0,R&)
DISPOSE MEM#
RETURN S$
endproc
proc FPC
PARAMETERS FLE$,S$
IF %PCOUNT<1
RETURN
ENDIF
IF %PCOUNT<2
S$=
ENDIF
var L&=LEN(S$)
IF L&=0
var FH&=ASSIGN(FLE$)
REWRITE FH&
CLOSE FH&
ASSIGN FH&,
RETURN
ENDIF
DECLARE MEM#
DIM MEM#,L&+1
STRING MEM#,0=S$
BLOCKWRITE FLE$,MEM#,0,L&
DISPOSE MEM#
endproc
proc FMKDIR
PARAMETERS DNAME$
IF %PCOUNT<1
RETURN
ENDIF
IF DIREXISTS(DNAME$)
RETURN 2
ENDIF
MKDIR DNAME$
RETURN DIREXISTS(DNAME$)
endproc
proc FDELETE
:!>Löscht die Datei fname$ und liefert als Rückgabewert den Erfolg der Operation.
PARAMETERS FNAME$
IF %PCOUNT<1
RETURN
ENDIF
IFNOT FILEEXISTS(FNAME$)
RETURN 2
ENDIF
var FH%=ASSIGN(FNAME$)
IFNOT FH%
RETURN 0
ENDIF
ERASE #FH%
ASSIGN #FH%,
RETURN 1-FILEEXISTS(FNAME$)
endproc
proc FTRYDELETE
PARAMETERS FLE$,MSTIMEOUT&
IF %PCOUNT<1
RETURN
ENDIF
IF %PCOUNT<2
MSTIMEOUT&=8000
ENDIF
IFNOT FILEEXISTS(FLE$)
RETURN 1
ENDIF
IF FDELETE(FLE$)
RETURN 1
ENDIF
MSTIMEOUT&=MSTIMEOUT&+&GETTICKCOUNT
WHILE 1
SLEEP 100
IF FDELETE(FLE$)
BREAK
ENDIF
IF &GETTICKCOUNT>MSTIMEOUT&
BREAK
ENDIF
ENDWHILE
RETURN 1-FILEEXISTS(FLE$)
endproc
proc FCHDIR
PARAMETERS DNAME$
var OP$=LOWER$(GETDIR$(@))
IF DIREXISTS(DNAME$)
CHDIR DNAME$
ENDIF
RETURN IF(LOWER$(GETDIR$(@))=DNAME$,1,0)
endproc
WINDOWSTYLE 1 | 2 | 4 | 8 | 16 | 512
CLS
USERMESSAGES $0010,$0014
var HPIC&=CREATE(hHPGLPic,FGC(1.plt),400,400,$FFAA99)
IFNOT HPIC&
MESSAGEBOX(Bild konnte nicht erzeugt werden.,,4096)
ENDIF
DRAWPIC HPIC&,10,10;0
WHILE 1
WAITINPUT
SELECT %UMESSAGE
CASEOF $0010
BREAK
ENDSELECT
ENDWHILE
end
subproc CREATE.HHPGLPIC
PARAMETERS __HPGLDATA$,PICWIDTH&,PICHEIGHT&,BGCOLOR&
RETURN HPGL.CREATEHPIC(__HPGLDATA$,PICWIDTH&,PICHEIGHT&,BGCOLOR&)
endproc
proc HPGL.CREATEHPIC
PARAMETERS __HPGLDATA$,PICWIDTH&,PICHEIGHT&,BGCOLOR&
DECLARE CMDS$[]
CMDS$[]=EXPLODE(TRIM$(WHILE_REPLACE(TRANSLATE$(TRANSLATE$(__HPGLDATA$,;,x0A),x0D,x0A),x0A+x0A,x0A)),x0A)
var C&=SIZEOF(CMDS$[])
IFNOT C&
RETURN 0
ENDIF
IF (C&=1) AND (CMDS$[0]=)
RETURN 0
ENDIF
var PEN.ISDOWN%=0
var PEN.CURRENT%=0
var PEN.LINETYP%=0
var PEN.X!=0
var PEN.Y!=0
DECLARE CMDLINE$[]
var I&=0
DECLARE PAINTLIST$[]
var S$=
WHILELOOP 0,C&-1
S$=INS$(,,TRANSLATE$(TRIM$(WHILE_REPLACE(CMDS$[&LOOP], , )), ,,),3)
IF LEN(S$)=3
S$=DEL$(S$,3,1)
ENDIF
CMDLINE$[]=EXPLODE(S$,,)
SELECT UPPER$(CMDLINE$[0])
CASEOF IN
CASEOF WU
CASEOF VS
CASEOF PW
CASEOF SP
PEN.CURRENT%=VAL(CMDLINE$[1])
CASEOF LT
IF SIZEOF(CMDLINE$[])>1
PEN.LINETYP%=CMDLINE$[1]
SELECT CMDLINE$[1]
CASEOF 1,2,3,4,5,6
USEPEN 0,0,1
OTHERWISE
USEPEN 0,0,1
ENDSELECT
ENDIF
CASEOF PA
IF SIZEOF(CMDLINE$[])>1
WHILELOOP 0,(SIZEOF(CMDLINE$[])-1)*0.5-1
HPGL.CREATEHPIC.PEN.MOVETO(VAL(CMDLINE$[&LOOP*2+1]),VAL(CMDLINE$[&LOOP*2+2]))
ENDWHILE
ENDIF
CASEOF PU
PEN.ISDOWN%=0
IF SIZEOF(CMDLINE$[])>1
WHILELOOP 0,(SIZEOF(CMDLINE$[])-1)*0.5-1
HPGL.CREATEHPIC.PEN.MOVE(VAL(CMDLINE$[&LOOP*2+1]),VAL(CMDLINE$[&LOOP*2+2]))
ENDWHILE
ENDIF
CASEOF PD
PEN.ISDOWN%=1
IF SIZEOF(CMDLINE$[])>1
WHILELOOP 0,(SIZEOF(CMDLINE$[])-1)*0.5-1
HPGL.CREATEHPIC.PEN.MOVE(VAL(CMDLINE$[&LOOP*2+1]),VAL(CMDLINE$[&LOOP*2+2]))
ENDWHILE
ENDIF
ENDSELECT
ENDWHILE
C&=SIZEOF(PAINTLIST$[])
IFNOT C&
RETURN 0
ENDIF
DECLARE PAINTDATA$[]
var VMINX!=0
var VMINY!=0
var VMAXX!=0
var VMAXY!=0
var FX!=0
var FY!=0
var FXX!=0
var FYY!=0
var VSET%=0
WHILELOOP 0,C&-1
PAINTDATA$[]=EXPLODE(PAINTLIST$[&LOOP],x0A)
SELECT PAINTDATA$[0]
CASEOF line
FX!=VAL(PAINTDATA$[1])
FY!=VAL(PAINTDATA$[2])
FXX!=VAL(PAINTDATA$[3])
FYY!=VAL(PAINTDATA$[4])
HPGL.CREATEHPIC.PAINTDATA.SETMINMAX(FX!,FY!)
HPGL.CREATEHPIC.PAINTDATA.SETMINMAX(FXX!,FYY!)
CASEOF arc
ENDSELECT
ENDWHILE
var XD!=VMAXX!-VMINX!
var YD!=VMAXY!-VMINY!
IF VMAXX!=0
RETURN 0
ENDIF
IF VMAXY!=0
RETURN 0
ENDIF
var SX!=(PICWIDTH&-10)/XD!
var SY!=(PICHEIGHT&-10)/YD!
var VSX!=VMINX!*SX!
var VSY!=VMINY!*SY!
var HPIC&=CREATE(hNewPic,PICWIDTH&,PICHEIGHT&,BGCOLOR&)
IFNOT HPIC&
RETURN 0
ENDIF
STARTPAINT HPIC&
WHILELOOP 0,C&-1
PAINTDATA$[]=EXPLODE(PAINTLIST$[&LOOP],x0A)
SELECT PAINTDATA$[0]
CASEOF line
FX!=VAL(PAINTDATA$[1])*SX!-VSX!+5
FY!=VAL(PAINTDATA$[2])*SY!-VSY!+5
FXX!=VAL(PAINTDATA$[3])*SX!-VSX!+5
FYY!=VAL(PAINTDATA$[4])*SY!-VSY!+5
USEPEN 0,0,0
LINE FX!,FY! - FXX!,FYY!
CASEOF arc
ENDSELECT
ENDWHILE
ENDPAINT
RETURN HPIC&
proc HPGL.CREATEHPIC.PAINTDATA.SETMINMAX
PARAMETERS X!,Y!
IFNOT VSET%
VSET%=1
VMINX!=X!
VMAXX!=X!
VMINY!=Y!
VMAXY!=Y!
RETURN
ENDIF
IF VMINX!>X!
VMINX!=X!
ENDIF
IF VMAXX!<X!
VMAXX!=X!
ENDIF
IF VMINY!>Y!
VMINY!=Y!
ENDIF
IF VMAXY!<Y!
VMAXY!=Y!
ENDIF
endproc
proc HPGL.CREATEHPIC.PEN.MOVE
PARAMETERS X!,Y!
IF PEN.ISDOWN%
HPGL.CREATEHPIC.PAINTLIST.ADD(line+x0A+STR$(PEN.X!)+x0A+STR$(PEN.Y!)+x0A+STR$(PEN.X!+X!)+x0A+STR$(PEN.Y!+Y!))
ENDIF
PEN.X!=PEN.X!+X!
PEN.Y!=PEN.Y!+Y!
endproc
proc HPGL.CREATEHPIC.PEN.MOVETO
PARAMETERS X!,Y!
IF PEN.ISDOWN%
HPGL.CREATEHPIC.PAINTLIST.ADD(line+x0A+STR$(PEN.X!)+x0A+STR$(PEN.Y!)+x0A+STR$(X!)+x0A+STR$(Y!))
ENDIF
PEN.X!=X!
PEN.Y!=Y!
endproc
proc HPGL.CREATEHPIC.PAINTLIST.ADD
PARAMETERS TODO$
TODO$=TODO$+x0A+STR$(PEN.CURRENT%)+x0A+STR$(PEN.LINETYP%)
PAINTLIST$[SIZEOF(PAINTLIST$[])]=TODO$
endproc
endproc
end
|
|
|
| |
|
|
|
Dieter Zornow | Was geht an deinem Programm, 1.plt ist ein perfekter Kreis, den ich bei deinem Prog nicht erkennen kann. Vielleicht nach 20 Schnaps
Anbei Screenshoot von der Orginaldatei 1.plt |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 11.07.2008 ▲ |
|
|
|
|
Web Scanner | @IF das Programm hat viel Arbeit gemacht...ich weiß es genau -..nur bei mir erscheint ein Kringel und kein Kreis- beim Programmstart
Weil ich es wieder mal nicht erwarten konnte, habe ich mir inzwischen eine eigene Inputroutine geschrieben. Meine Version ist sicher nicht ganz so profi, wie die deine gemacht, aber funktioniert ganz gut.
Es geht auch für mehrere Elemente - also 100 Kreise oder Quadrate usw .usf. Ich denke auch, es ist bei so einer komplexen Thematik nicht so einfach, ganze Programmteile dazuzunehmen, deren Funktion man nicht 100% blickt.
Das Nächste wird sein, das man:
1. das angezeigte Bild verschieben kann 2. in das Bild zoomen kann 3. die verschiedene Vektoren anclicken kann und an den Endpunkten in verschiedene Richtungen ziehen kann und das ganze wiederum speichern kann....
Es gibt noch viel zu tun
Grüße
Web |
|
|
| |
|
|