Wie steuert man die SMC800 ?
Danke, aber die Diskette mit den Programmen habe ich dabei gehabt. Ist halt wirklich sehr kompliziert. Da lobe ich mir die 3D-Step Karte von NC-Step. 4 Motoren, Takt/Richtung und fertich ! Naja, viel Erfolg, wenn Du es schaffst die Motoren sauber zu steuern lass es mich wissen, bevor ich ganz verzweifle. Ich arbeite auch noch weiter dran !
PB 5.62 / Windows 11 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
Scheint doch schwierig zu sein. Die Beschreibung ist auch sehr bedürftig.
Zwar habe ich eine einfachere Möglichkeit, aber direkt über Centroniks zu steuern wäre auch mal interessant. Also ich werde mich auch mal daran versuchen .
Hier hat schon Jemand dieses direkt unter WindowsXP angesteuert:
http://home.arcor.de/gizzel/appz/dlcnc.html
Gruß Falko
Zwar habe ich eine einfachere Möglichkeit, aber direkt über Centroniks zu steuern wäre auch mal interessant. Also ich werde mich auch mal daran versuchen .
Hier hat schon Jemand dieses direkt unter WindowsXP angesteuert:
http://home.arcor.de/gizzel/appz/dlcnc.html
Gruß Falko
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
@Then
Leider habe ich einige Teile für meine Proxxon MF70 noch nicht fertig bekommen.
Mir fehlen noch die Schrittmotorhalterungen aus Aluminium, die mir
jemand anfertigt, sowie Bohrer Ø6,35mm den ich noch bestellen musste,
um später die Achsverbindungen zum Schrittmotor aufzubohren.
Derweil habe ich mich schon mal daran gemacht, die SMC-800-Karte ins
Gehäuse mit den Anschlüssen sowie ein Kabel für das Centronics-Kabel
von Schrittmotorkarte mit SubD-15 zum iSMF-Controller anzufertigen.
Danach hatte ich noch einige Thermoprobleme mit den 4-Strang-Schrittmotoren
von Conrad. Das lag daran, weil ich zuerst auf 24V ausgelegte Schrittmotoren
und ein 24V - Netzteil und später von Conrad kräftigere Schrittmotoren
mit 0,6Nm, die aber nur 12V verkraften, gekauft habe.
Das folgende Video zeigt mein Labornetzteil, im 12V-Betieb.
Das Programm, welches der iSMF-Controllerkarte bei lag, kann einmal
mit diesen Controller über RS232 mittels einfachen Ascii-Komandos die
SMC-800 steuern, als auch direkt über LPT die SMC-800-Karte direkt ansteuern.
Habe heute beides getestet.
Die Beschreibung zu den Pascal-Source und C-Source (Nur für DOS) aus
den Programmbeispielen ist leider mieserabel ausgeführt.
Mal schauen, wie man das in PB umsetzen kann. Ich will es auf jeden Fall
versuchen
Aber hier erst mal das Video, was schon mal zeigt, das die Karte mit dem
Programmbeispiel zum iSMF prima läuft und jetzt die 3 Motoren bei
korrekten 12V und auf der Karte eingestellte Referenzspannung von
7,14V (entspricht 0,6A) an den Poti-Schleifern gegen Masse gemessen, prima läuft.
SMC-800-Video
[Edit]
Hier noch ein weiteres Video aus einem Antriebstest, wo ich diese 0,6A ; 0,6Nm ; 12V-Schrittmotoren
von Conrad mit 24V antreibe. Dabei habe ich über die Referenzspannung
and den 3 Potis auf jeweils 4,5V eingestellt um für die Schrittmotoren die maximale Leistung zu erhalten.
Proxxon Antriebstest
[/Edit]
Und hier das Programm auf den man Vectoren etc. testen kann, welches
dem iSMF-Controller beilag.
MfG Falko
Leider habe ich einige Teile für meine Proxxon MF70 noch nicht fertig bekommen.
Mir fehlen noch die Schrittmotorhalterungen aus Aluminium, die mir
jemand anfertigt, sowie Bohrer Ø6,35mm den ich noch bestellen musste,
um später die Achsverbindungen zum Schrittmotor aufzubohren.
Derweil habe ich mich schon mal daran gemacht, die SMC-800-Karte ins
Gehäuse mit den Anschlüssen sowie ein Kabel für das Centronics-Kabel
von Schrittmotorkarte mit SubD-15 zum iSMF-Controller anzufertigen.
Danach hatte ich noch einige Thermoprobleme mit den 4-Strang-Schrittmotoren
von Conrad. Das lag daran, weil ich zuerst auf 24V ausgelegte Schrittmotoren
und ein 24V - Netzteil und später von Conrad kräftigere Schrittmotoren
mit 0,6Nm, die aber nur 12V verkraften, gekauft habe.
Das folgende Video zeigt mein Labornetzteil, im 12V-Betieb.
Das Programm, welches der iSMF-Controllerkarte bei lag, kann einmal
mit diesen Controller über RS232 mittels einfachen Ascii-Komandos die
SMC-800 steuern, als auch direkt über LPT die SMC-800-Karte direkt ansteuern.
Habe heute beides getestet.
Die Beschreibung zu den Pascal-Source und C-Source (Nur für DOS) aus
den Programmbeispielen ist leider mieserabel ausgeführt.
Mal schauen, wie man das in PB umsetzen kann. Ich will es auf jeden Fall
versuchen
Aber hier erst mal das Video, was schon mal zeigt, das die Karte mit dem
Programmbeispiel zum iSMF prima läuft und jetzt die 3 Motoren bei
korrekten 12V und auf der Karte eingestellte Referenzspannung von
7,14V (entspricht 0,6A) an den Poti-Schleifern gegen Masse gemessen, prima läuft.
SMC-800-Video
[Edit]
Hier noch ein weiteres Video aus einem Antriebstest, wo ich diese 0,6A ; 0,6Nm ; 12V-Schrittmotoren
von Conrad mit 24V antreibe. Dabei habe ich über die Referenzspannung
and den 3 Potis auf jeweils 4,5V eingestellt um für die Schrittmotoren die maximale Leistung zu erhalten.
Proxxon Antriebstest
[/Edit]
Und hier das Programm auf den man Vectoren etc. testen kann, welches
dem iSMF-Controller beilag.
MfG Falko
Hey Falko, sieht gut aus. Habe auch schon 3 Motoren dran gehabt und diese zum Laufen gebracht, aber sie liefen unter PB (Windows) nicht sauber genug. Und sobald sie Last hatten, gingen sie ohne anschubsen gar nicht...
Habe ja die 3D-Step von www.NC-Step.de für 99 Euronen und die läuft super genial mit PB unter Windows - ist ja auch Takt/Richtung
Naja, lass es mich bitte wissen, wenn Du ne saubere PB-Lösung für die SMC hast.....
Habe ja die 3D-Step von www.NC-Step.de für 99 Euronen und die läuft super genial mit PB unter Windows - ist ja auch Takt/Richtung
Naja, lass es mich bitte wissen, wenn Du ne saubere PB-Lösung für die SMC hast.....
PB 5.62 / Windows 11 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
@Then
Ich bin leider noch nicht soweit mit meiner CNC-Micro-Fräse, aber diese Woche bekomme
ich spezielle Führungsbohrer, 1/4" (Ø6,35mm).
Wenn das damit klappt, kann ich bald mit der Softwareansteuerung anfangen.
Hier habe ich noch eine interessante Seite gefunden:
Mikroschrittansteuerung für SMC Schrittmotorkarten (SMC800/1500)
http://home.pages.at/pcspeed/CNCBook/so ... cmikro.htm
MfG Falko
Ich bin leider noch nicht soweit mit meiner CNC-Micro-Fräse, aber diese Woche bekomme
ich spezielle Führungsbohrer, 1/4" (Ø6,35mm).
Wenn das damit klappt, kann ich bald mit der Softwareansteuerung anfangen.
Hier habe ich noch eine interessante Seite gefunden:
Mikroschrittansteuerung für SMC Schrittmotorkarten (SMC800/1500)
http://home.pages.at/pcspeed/CNCBook/so ... cmikro.htm
MfG Falko
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
Hallo Then,
nun habe ich endlich was passendes für meine Proxxon Microfräse gefunden und gleich den Umbausatz bestellt.
Darin ist eine Steuerkarte Uni1500 (SMC o. Richtung-, und Taktsteuerung, drei Schrittmotoren sowie mechanische Teile zur Verlängerung der Achsen enthalten
Übrigens, falls du die SMC-800-Karte noch haben solltest, schau dir mal
den Tuningtip im folgenden Link an. Von 800mA auf 1,1A Leistung mit nur 3 Brücken.
http://www.usovo.de/usovoneu/include.ph ... Tuning.php
In den nächsten Tagen werde ich auch mal was nützliches mittels CNC und meiner Micorfräse von Proxxon mithilfe de Emis Interfacecontrollers und PB
auf die Beine Stellen können .
Naja, wer sehen möchte, was man schon alles mit der kleinen Proxxon
MF70 CNC schon machen kann, braucht nur unter Youtube.de im
Suchfenster "Proxxon MF70 CNC" eingeben.
Man kann diese Microfräse auch komplett fertig kaufen (Siehe Startlink,
oben), falls es jemanden interessieren sollte.
Gruß Falko
nun habe ich endlich was passendes für meine Proxxon Microfräse gefunden und gleich den Umbausatz bestellt.
Darin ist eine Steuerkarte Uni1500 (SMC o. Richtung-, und Taktsteuerung, drei Schrittmotoren sowie mechanische Teile zur Verlängerung der Achsen enthalten
Übrigens, falls du die SMC-800-Karte noch haben solltest, schau dir mal
den Tuningtip im folgenden Link an. Von 800mA auf 1,1A Leistung mit nur 3 Brücken.
http://www.usovo.de/usovoneu/include.ph ... Tuning.php
In den nächsten Tagen werde ich auch mal was nützliches mittels CNC und meiner Micorfräse von Proxxon mithilfe de Emis Interfacecontrollers und PB
auf die Beine Stellen können .
Naja, wer sehen möchte, was man schon alles mit der kleinen Proxxon
MF70 CNC schon machen kann, braucht nur unter Youtube.de im
Suchfenster "Proxxon MF70 CNC" eingeben.
Man kann diese Microfräse auch komplett fertig kaufen (Siehe Startlink,
oben), falls es jemanden interessieren sollte.
Gruß Falko
SMC 800 ansteuern?
Hallo
brauche dringend Hilfe!
Muss über die Schrittmotorsteuerkarte SMC 800 (Conrad) 2 schrittmotoren und einen Hubmagneten ansteuern. Dazu soll ich ein Windows Programm schreiben über welches ich die Karte ansprechen und Steuern kann.
Bisher hab ich noch keine ahnung wie ich die Karte anspreche.
hat da jemand erfahrung mit?
Bin für jede Hilfe dankbar!
brauche dringend Hilfe!
Muss über die Schrittmotorsteuerkarte SMC 800 (Conrad) 2 schrittmotoren und einen Hubmagneten ansteuern. Dazu soll ich ein Windows Programm schreiben über welches ich die Karte ansprechen und Steuern kann.
Bisher hab ich noch keine ahnung wie ich die Karte anspreche.
hat da jemand erfahrung mit?
Bin für jede Hilfe dankbar!
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
Re: Wie steuert man die SMC800 ?
Meine Proxxon MF70 CNC ist nun fertig und hierzu habe ich mein erstes Testprogramm geschrieben um
mit einem iSMIF - Schrittmotor - Interface die Uni1800-Karte von Usovo.de damit zu testen.
Bilder vom Umbau der Proxxon MF70: http://www.falko-pure.de/html/proxxon_cnc.html
Falls jemand eine emis Schrittmotor-Interface-Steuerung "iSMIF" sein Eigen nennt, kann ja mal diesen Sourcecode, der dem von emis nachempfunden und als PB-Quelltext hier von mir veröffentlicht wird, gerne
ausprobieren. Zwar habe ich da noch einige Schönheitsfehler aber soweit kann man das schon nutzen um von Hand einige Sachen an zu treiben. Beim Referenzieren und Frequenzen um 1Hz scheint das wohl nicht am Programm zu liegen, sondern von diesem Atmelprogramm selbst. Ich hatte die Firma Emis-GmbH auf einige Fehler angeschrieben, erhalte von denen aber keine Antwort.
Hier nun der Source und wenn ihr Verbesserungsvorschläge habt, würde ich micht freuen, wenn ihr
mir diese mitteilt.
Gruß Falko
mit einem iSMIF - Schrittmotor - Interface die Uni1800-Karte von Usovo.de damit zu testen.
Bilder vom Umbau der Proxxon MF70: http://www.falko-pure.de/html/proxxon_cnc.html
Falls jemand eine emis Schrittmotor-Interface-Steuerung "iSMIF" sein Eigen nennt, kann ja mal diesen Sourcecode, der dem von emis nachempfunden und als PB-Quelltext hier von mir veröffentlicht wird, gerne
ausprobieren. Zwar habe ich da noch einige Schönheitsfehler aber soweit kann man das schon nutzen um von Hand einige Sachen an zu treiben. Beim Referenzieren und Frequenzen um 1Hz scheint das wohl nicht am Programm zu liegen, sondern von diesem Atmelprogramm selbst. Ich hatte die Firma Emis-GmbH auf einige Fehler angeschrieben, erhalte von denen aber keine Antwort.
Hier nun der Source und wenn ihr Verbesserungsvorschläge habt, würde ich micht freuen, wenn ihr
mir diese mitteilt.
Code: Alles auswählen
; Ein Purebasicprogramm zum testen des iSMIF - Schrittmotor-Steuer-Interface,
; welche verschiedene Schrittmotorkarten ansteuern kann. Damit ist man Zeitunabhängig, was
; ansonsten das große Problem bei Windows-CNC-Steuerungen war.
; Man benötigt hierzu das spezielle Interface iSMIF von Emis --> http://www.emisgmbh.de/ismif.htm
; Die prinzipielle Vorgehensweise zur Ansteuerung des isMIF findet ihr hier:
; http://www.emisgmbh.de/ismif.htm --> ASCII - Steuerbefehle
; http://www.emisgmbh.de/antriebs/smc/ismif/ismif_prinzip.pdf --> Programmieranleitung
;
; Zu den Proceduren Senden und Lesen möchte ich mich ganz besonders bei Dark Dragon
; bedanken.
; Damit das Warten korrekt funktioniert, habe ich noch eine Procedure Warten() hinzugefügt, womit
; nun die Möglichkeit besteht, nach der Grundanleitung von Emis-GmbH eigene Steuerprogramme
; zu entwickeln.
;
; Autor und Soucecode von: Falko
; Homepage: www.falko-pure.de
; Falls ihr weitere Tips hierzu habt, würde ich mich sehr freuen, wenn ihr mir diese mitteilt.
; Teile aus diesem Source dürfen frei verwendet werden.
EnableExplicit
Define Ports.s
Define Port.l
Define Event.l
Define WindowID.l
Define GadgetID.l
Define EventType.l
Define Anzahl.l
Declare Standard()
Declare.s ReadLineSerialPort(Port,Immediately = 0)
Declare.s WriteCommand(Port, Command.s,Immediately = 0)
;- Window Constants
;
Enumeration
#Window
EndEnumeration
;- Gadget Constants
;
Enumeration
#Button_0
#String_0
#Button_1
#String_1
#Frame3D_0
#Frame3D_2
#String_2
#Button_2
#String_3
#Button_3
#Frame3D_4
#String_5
#Button_5
#String_7
#Button_7
#CheckBox_0
#CheckBox_1
#Text_0
#Text_1
#Frame3D_6
#Button_9
#String_9
#Frame3D_9
#Frame3D_11
#Radio_3
#Radio_5
#Radio_6
#Radio_7
#Text_7
#Text_8
#Text_9
#Text_10
#Frame3D_13
#Button_17
#Frame3D_14
#Radio_17
#Radio_18
#Text_20
#Text_21
#Frame3D_16
#Text_24
#Text_25
#Button_19
#Radio_23
#Radio_24
#Frame3D_20
#Text_32
#Text_33
#Button_21
#Radio_31
#Radio_32
#Frame3D_22
#Text_36
#Text_37
#Button_22
#Radio_35
#Radio_36
#Frame3D_26
#Text_44
#Button_24
#Frame3D_29
#Radio_43
#Radio_44
#Text_47
#Button_26
#String_11
#Frame3D_32
#Button_29
#Button_31
#Button_32
#Button_33
#Button_34
#Button_35
#Frame3D_34
#Frame3D_36
#Text_52
#Text_53
#Button_37
#Radio_51
#Radio_52
#Radio_57
#Text_60
#String_14
#Frame3D_38
#String_16
#String_18
#String_19
#Button_39
#Frame3D_40
#Radio_61
#Radio_62
#Text_62
#Text_63
#Text_66
#Text_67
#Text_68
#Frame3D_42
#Text_71
#Text_72
#Button_41
#Text_75
#CheckBox_3
#CheckBox_4
#CheckBox_5
#Frame3D_46
#Text_81
#Text_82
#Button_43
#Text_83
#CheckBox_8
#CheckBox_9
#CheckBox_10
#String_24
#Text_87
EndEnumeration
;- StatusBar Constants
;
Enumeration
#StatusBar_4
EndEnumeration
;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Arial", 11, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Arial", 9, #PB_Font_Bold)
Procedure Open_Window()
If OpenWindow(#Window, 297, 87, 1009, 671, "ISMiF - Datenprotokoll testen", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateStatusBar(#StatusBar_4, WindowID(#Window))
AddStatusBarField(80)
AddStatusBarField(170)
AddStatusBarField(70)
AddStatusBarField(170)
AddStatusBarField(60)
AddStatusBarField(170)
AddStatusBarField(120)
AddStatusBarField(40)
AddStatusBarField(70)
AddStatusBarField(70)
StatusBarText(#StatusBar_4, 0, "Serial Output:",#PB_StatusBar_BorderLess)
StatusBarText(#StatusBar_4, 1, "")
StatusBarText(#StatusBar_4, 2, "Serial Input:",#PB_StatusBar_BorderLess)
StatusBarText(#StatusBar_4, 3, "")
StatusBarText(#StatusBar_4, 4, "Speicher:",#PB_StatusBar_BorderLess)
StatusBarText(#StatusBar_4, 5, "")
StatusBarText(#StatusBar_4, 6, "Serielle Schnittstelle:",#PB_StatusBar_BorderLess)
StatusBarText(#StatusBar_4, 7, "")
StatusBarText(#StatusBar_4, 8, "")
StatusBarText(#StatusBar_4, 9, "")
EndIf
ButtonGadget(#Button_0, 20, 40, 123, 25, "Versionsabfrage")
SetGadgetFont(#Button_0, FontID1)
StringGadget(#String_0, 160, 40, 130, 22, "", #PB_String_ReadOnly)
SetGadgetFont(#String_0, FontID1)
ButtonGadget(#Button_1, 20, 80, 123, 24, "Statusabfrage")
SetGadgetFont(#Button_1, FontID1)
StringGadget(#String_1, 160, 80, 130, 23, "", #PB_String_ReadOnly)
SetGadgetFont(#String_1, FontID1)
Frame3DGadget(#Frame3D_0, 10, 20, 300, 98, "")
Frame3DGadget(#Frame3D_2, 10, 130, 300, 110, "")
StringGadget(#String_2, 20, 151, 60, 23, "200")
SetGadgetFont(#String_2, FontID1)
ButtonGadget(#Button_2, 100, 150, 190, 24, "Startgeschwindigkeit (Hz)")
SetGadgetFont(#Button_2, FontID1)
StringGadget(#String_3, 20, 198, 60, 23, "250")
SetGadgetFont(#String_3, FontID1)
ButtonGadget(#Button_3, 100, 197, 190, 24, "Rampenlänge (ms)")
SetGadgetFont(#Button_3, FontID1)
Frame3DGadget(#Frame3D_4, 10, 250, 300, 180, "")
StringGadget(#String_5, 20, 275, 60, 22, "600")
SetGadgetFont(#String_5, FontID1)
ButtonGadget(#Button_5, 100, 273, 190, 25, "Endgeschwindigkeit (Hz)")
SetGadgetFont(#Button_5, FontID1)
StringGadget(#String_7, 20, 313, 60, 22, "0")
SetGadgetFont(#String_7, FontID1)
ButtonGadget(#Button_7, 100, 313, 190, 24, "Bremswinkel (Grad)")
SetGadgetFont(#Button_7, FontID1)
CheckBoxGadget(#CheckBox_0, 20, 364, 13, 14, "")
SetGadgetState(#checkBox_0,1)
CheckBoxGadget(#CheckBox_1, 20, 394, 14, 15, "")
SetGadgetState(#checkBox_1,1)
TextGadget(#Text_0, 50, 361, 86, 20, "Vektorfahrt")
SetGadgetFont(#Text_0, FontID1)
TextGadget(#Text_1, 50, 392, 101, 20, "Referenzfahrt")
SetGadgetFont(#Text_1, FontID1)
Frame3DGadget(#Frame3D_6, 10, 444, 300, 130, "")
ButtonGadget(#Button_9, 20, 460, 190, 24, "Referenzoffset (XYZ)")
SetGadgetFont(#Button_9, FontID1)
StringGadget(#String_9, 230, 460, 50, 22, "25")
SetGadgetFont(#String_9, FontID1)
Frame3DGadget(#Frame3D_9, 10, 584, 300, 52, "")
Frame3DGadget(#Frame3D_11, 20, 593, 283, 34, "")
OptionGadget(#Radio_3, 26, 604, 13, 15, "")
OptionGadget(#Radio_5, 99, 604, 13, 15, "")
OptionGadget(#Radio_6, 171, 604, 13, 15, "")
OptionGadget(#Radio_7, 249, 604, 13, 15, "")
TextGadget(#Text_7, 43, 606, 30, 13, "COM1")
TextGadget(#Text_8, 116, 606, 30, 13, "COM2")
TextGadget(#Text_9, 189, 606, 30, 13, "COM3")
TextGadget(#Text_10, 267, 606, 30, 13, "COM4")
Frame3DGadget(#Frame3D_13, 329, 22, 319, 201, "")
ButtonGadget(#Button_17, 20, 510, 190, 24, "Referenzrichtung (XYZ)")
SetGadgetFont(#Button_17, FontID1)
Frame3DGadget(#Frame3D_14, 220, 490, 80, 60, "")
OptionGadget(#Radio_17, 230, 504, 13, 15, "")
SetGadgetState(#Radio_17,1)
OptionGadget(#Radio_18, 230, 524, 13, 15, "")
TextGadget(#Text_20, 252, 505, 42, 16, "negativ")
SetGadgetFont(#Text_20, FontID2)
TextGadget(#Text_21, 252, 523, 39, 13, "positiv")
SetGadgetFont(#Text_21, FontID2)
Frame3DGadget(#Frame3D_16, 543, 32, 96, 60, "")
TextGadget(#Text_24, 571, 47, 42, 16, "3-Achs")
SetGadgetFont(#Text_24, FontID2)
TextGadget(#Text_25, 571, 66, 39, 13, "Plotter")
SetGadgetFont(#Text_25, FontID2)
ButtonGadget(#Button_19, 339, 52, 190, 24, "Modus Z-Achse")
SetGadgetFont(#Button_19, FontID1)
OptionGadget(#Radio_23, 549, 46, 13, 15, "")
SetGadgetState(#Radio_23,1)
OptionGadget(#Radio_24, 549, 66, 13, 15, "")
Frame3DGadget(#Frame3D_20, 543, 93, 97, 60, "")
TextGadget(#Text_32, 571, 108, 63, 16, "Halbschritt")
SetGadgetFont(#Text_32, FontID2)
TextGadget(#Text_33, 571, 127, 59, 13, "Vollschritt")
SetGadgetFont(#Text_33, FontID2)
ButtonGadget(#Button_21, 339, 113, 190, 24, "Schrittmodus")
SetGadgetFont(#Button_21, FontID1)
OptionGadget(#Radio_31, 549, 107, 13, 15, "")
SetGadgetState(#Radio_31,1)
OptionGadget(#Radio_32, 549, 127, 13, 15, "")
Frame3DGadget(#Frame3D_22, 542, 154, 97, 60, "")
TextGadget(#Text_36, 571, 169, 42, 16, "PBL")
SetGadgetFont(#Text_36, FontID2)
TextGadget(#Text_37, 571, 188, 57, 13, "Takt/Rich")
SetGadgetFont(#Text_37, FontID2)
ButtonGadget(#Button_22, 339, 174, 190, 24, "Ansteuersignal")
SetGadgetFont(#Button_22, FontID1)
OptionGadget(#Radio_35, 549, 168, 13, 15, "")
OptionGadget(#Radio_36, 549, 188, 13, 15, "")
SetGadgetState(#Radio_36,1)
Frame3DGadget(#Frame3D_26, 329, 232, 319, 123, "")
TextGadget(#Text_44, 573, 256, 24, 16, "aus")
SetGadgetFont(#Text_44, FontID2)
ButtonGadget(#Button_24, 341, 261, 190, 24, "Signal setzen")
SetGadgetFont(#Button_24, FontID1)
Frame3DGadget(#Frame3D_29, 541, 241, 88, 60, "")
OptionGadget(#Radio_43, 551, 255, 13, 15, "")
SetGadgetState(#Radio_43,1)
OptionGadget(#Radio_44, 551, 275, 13, 15, "")
TextGadget(#Text_47, 573, 274, 39, 13, "ein")
SetGadgetFont(#Text_47, FontID2)
ButtonGadget(#Button_26, 341, 310, 189, 24, "Wartezeit (msec.)")
SetGadgetFont(#Button_26, FontID1)
StringGadget(#String_11, 549, 310, 67, 22, "0")
SetGadgetFont(#String_11, FontID1)
Frame3DGadget(#Frame3D_32, 329, 372, 319, 201, "")
ButtonGadget(#Button_29, 343, 390, 290, 24, "Reset ausführen")
SetGadgetFont(#Button_29, FontID1)
ButtonGadget(#Button_31, 343, 426, 290, 24, "Achsen sofort stoppen")
SetGadgetFont(#Button_31, FontID1)
ButtonGadget(#Button_32, 343, 461, 290, 24, "Achsen anhalten")
SetGadgetFont(#Button_32, FontID1)
ButtonGadget(#Button_33, 343, 496, 290, 24, "Pause (Fahrt unterbrechen)")
SetGadgetFont(#Button_33, FontID1)
ButtonGadget(#Button_34, 343, 533, 290, 24, "Pause beenden (Weiterfahrt)")
SetGadgetFont(#Button_34, FontID1)
ButtonGadget(#Button_35, 342, 593, 290, 33, "Programm beenden")
SetGadgetFont(#Button_35, FontID1)
Frame3DGadget(#Frame3D_34, 660, 22, 341, 118, "")
Frame3DGadget(#Frame3D_36, 883, 39, 108, 82, "")
TextGadget(#Text_52, 924, 52, 50, 16, "X-Achse")
SetGadgetFont(#Text_52, FontID2)
TextGadget(#Text_53, 924, 74, 50, 15, "Y-Achse")
SetGadgetFont(#Text_53, FontID2)
ButtonGadget(#Button_37, 679, 44, 190, 24, "Position abfragen")
SetGadgetFont(#Button_37, FontID1)
OptionGadget(#Radio_51, 902, 51, 13, 15, "")
SetGadgetState(#Radio_51,1)
OptionGadget(#Radio_52, 902, 74, 13, 15, "")
OptionGadget(#Radio_57, 902, 94, 13, 17, "")
TextGadget(#Text_60, 924, 95, 49, 13, "Z-Achse")
SetGadgetFont(#Text_60, FontID2)
StringGadget(#String_14, 680, 96, 188, 22, "", #PB_String_ReadOnly)
SetGadgetFont(#String_14, FontID1)
Frame3DGadget(#Frame3D_38, 660, 154, 341, 137, "")
StringGadget(#String_16, 680, 180, 90, 23, "400")
SetGadgetFont(#String_16, FontID1)
StringGadget(#String_18, 680, 215, 90, 23, "400")
SetGadgetFont(#String_18, FontID1)
StringGadget(#String_19, 680, 250, 90, 23, "400")
SetGadgetFont(#String_19, FontID1)
ButtonGadget(#Button_39, 820, 250, 173, 24, "Vektor fahren")
SetGadgetFont(#Button_39, FontID1)
Frame3DGadget(#Frame3D_40, 883, 170, 108, 60, "")
OptionGadget(#Radio_61, 901, 184, 14, 15, "")
SetGadgetState(#Radio_61,1)
OptionGadget(#Radio_62, 901, 204, 14, 15, "")
TextGadget(#Text_62, 923, 185, 43, 16, "Relativ")
SetGadgetFont(#Text_62, FontID2)
TextGadget(#Text_63, 923, 203, 46, 13, "Absolut")
SetGadgetFont(#Text_63, FontID2)
TextGadget(#Text_66, 777, 182, 10, 16, "x")
SetGadgetFont(#Text_66, FontID1)
TextGadget(#Text_67, 777, 219, 10, 16, "y")
SetGadgetFont(#Text_67, FontID1)
TextGadget(#Text_68, 777, 252, 10, 16, "z")
SetGadgetFont(#Text_68, FontID1)
Frame3DGadget(#Frame3D_42, 660, 305, 341, 103, "")
TextGadget(#Text_71, 931, 335, 50, 21, "X-Achse")
SetGadgetFont(#Text_71, FontID2)
TextGadget(#Text_72, 931, 360, 50, 15, "Y-Achse")
SetGadgetFont(#Text_72, FontID2)
ButtonGadget(#Button_41, 679, 354, 190, 24, "Referenzfahrt")
SetGadgetFont(#Button_41, FontID1)
TextGadget(#Text_75, 931, 384, 49, 13, "Z-Achse")
SetGadgetFont(#Text_75, FontID2)
CheckBoxGadget(#CheckBox_3, 902, 336, 14, 13, "")
SetGadgetState(#CheckBox_3,1)
CheckBoxGadget(#CheckBox_4, 902, 361, 14, 13, "")
SetGadgetState(#CheckBox_4,1)
CheckBoxGadget(#CheckBox_5, 902, 384, 14, 13, "")
SetGadgetState(#CheckBox_5,1)
Frame3DGadget(#Frame3D_46, 660, 414, 341, 159, "")
TextGadget(#Text_81, 933, 497, 50, 21, "X-Achse")
SetGadgetFont(#Text_81, FontID2)
TextGadget(#Text_82, 933, 522, 50, 15, "Y-Achse")
SetGadgetFont(#Text_82, FontID2)
ButtonGadget(#Button_43, 669, 540, 190, 24, "Dauerbetrieb")
SetGadgetFont(#Button_43, FontID1)
TextGadget(#Text_83, 933, 546, 49, 13, "Z-Achse")
SetGadgetFont(#Text_83, FontID2)
CheckBoxGadget(#CheckBox_8, 902, 498, 14, 13, "")
SetGadgetState(#CheckBox_8,1)
CheckBoxGadget(#CheckBox_9, 902, 523, 14, 13, "")
SetGadgetState(#CheckBox_9,1)
CheckBoxGadget(#CheckBox_10, 902, 546, 14, 13, "")
SetGadgetState(#CheckBox_10,1)
StringGadget(#String_24, 670, 500, 60, 22, "", #PB_String_ReadOnly)
SetGadgetFont(#String_24, FontID1)
TextGadget(#Text_87, 670, 430, 320, 60, " Ausgabe von Vektoren im Dauerbetrieb, um die Speicherfunktoinen des Controllers und die Zeichen 02 und 03 zu testen", #PB_Text_Border)
SetGadgetFont(#Text_87, FontID1)
EndIf
EndProcedure
Open_Window()
Procedure.s Warte(Port); Warte, wenn Speicher voll ist.
Protected Result.s, Ascii.a,Event.l,WindowID.l,GadgetID.l,EventType.l
ReadSerialPortData(Port, @Ascii, 1)
If Ascii = #ETX
StatusBarText(#StatusBar_4, 5, "voll")
While Ascii <> #STX
ReadSerialPortData(Port, @Ascii, 1)
Result + Chr(Ascii)
;Leider wußte ich keine andere Lösung, während dieser Schleife einen @Befehl freizulassen
Event = WindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
If Event = #PB_Event_Gadget
ElseIf GadgetID = #Button_29; Reset durchführen
If WriteCommand(0, "@R")
Debug "Reset"
EndIf
ElseIf GadgetID = #Button_31 ; Achsen sofort stoppen
WriteCommand(0, "@S")
ElseIf GadgetID = #Button_32 ; Achsen anhalten
WriteCommand(0, "@B")
ElseIf GadgetID = #Button_33 ; Pause setzen
WriteCommand(0, "@A")
ElseIf GadgetID = #Button_34 ; Pause beenden
WriteCommand(0, "@C")
EndIf
Wend
StatusBarText(#StatusBar_4, 5, "leer")
EndIf
ProcedureReturn Result
EndProcedure
Procedure.s ReadLineSerialPort(Port,immediately=0) ;Lese Rückgabe vom ismif-Interface
Protected Result.s, Ascii.a
Result = ""
If IsSerialPort(Port)
If Immediately = 0
While Chr(Ascii) <> #CR$
ReadSerialPortData(Port, @Ascii, 1)
If Chr(Ascii) <> #CR$
Result + Chr(Ascii)
EndIf
Wend
ElseIf Immediately = 1
Debug warte(Port)
While Chr(Ascii) <> #CR$
ReadSerialPortData(Port, @Ascii, 1)
If Chr(Ascii) <> #CR$
Result + Chr(Ascii)
EndIf
Wend
EndIf
EndIf
Debug "Empfangen: "+ Result
StatusBarText(#StatusBar_4, 3, Result)
ProcedureReturn Result
EndProcedure
Procedure.s WriteCommand(Port, Command.s, Immediately = 0);Sende an ismif. Bei Immediately=1
Protected Result.s ;Wird der Befehl sofort ausgeführt!
If IsSerialPort(Port)
StatusBarText(#StatusBar_4, 1, Command)
Debug "Gesendet: " + Command
If Immediately
WriteSerialPortString(Port, Command + #SOH$)
Result = ReadLineSerialPort(Port,1)
Else
WriteSerialPortString(Port, Command + #CR$)
Result = ReadLineSerialPort(Port,0)
EndIf
EndIf
StatusBarText(#StatusBar_4, 3, Result)
ProcedureReturn Result
EndProcedure
Procedure Standard() ;--- Grundeinstellungen
;auskommentierte Funktionen sind schon in der Grundeinstellung vorhanden
;WriteCommand(0,"@R");Reset
WriteCommand(0,"T1",1);Ansteuersignal: PBL-Signal=0 , Takt u. Richtungssignal=1
;WriteCommand(0,"F0",1);Halb-,Vollschrittbetrieb: Vollschritt=1 , Halbschritt=0
;WriteCommand(0,"Z1",1);Z-Achse einstellen: 1 = 3-Achssystem , 0 = Plotterbetrieb
;WriteCommand(0,"#S200",1);Startgeschwindigkeit einstellen (Vierstellig)
;WriteCommand(0,"#E25,600",1);Endgeschwindigkeit einstellen: Tabelle 1 600Hz eingetragen
;WriteCommand(0,"#E4,200",1);Endgeschwindigkeit einstellen: Tabelle 1 600Hz eingetragen
;WriteCommand(0,"#R250",1);Rampenlänge 250ms (4-stellig)
;WriteCommand(0,"#DX,0,2,4,4",1);Referenz u. Geschw.: X,negative rest aus Tabellengeschw. entnehmen
;WriteCommand(0,"#DY,0,2,4,4",1);Referenz u. Geschw.: Y,negative rest aus Tabellengeschw. entnehmen
;WriteCommand(0,"#DZ,0,2,4,4",1);Referenz u. Geschw.: Z,negative rest aus Tabellengeschw. entnehmen
WriteCommand(0,"#OX,400",1);Offset nach Referenz einstellen 35 Schritte vom Schalter wegfahren
WriteCommand(0,"#OY,400",1);Offset nach Referenz einstellen
WriteCommand(0,"#OZ,400",1);Offset nach Referenz einstellen und abschließend sofortiges Senden des Buffers
EndProcedure
SetGadgetState(#Radio_3,1)
Ports="COM1"
StatusBarText(#StatusBar_4, 7, Ports)
If IsSerialPort(0): CloseSerialPort(0): EndIf
If OpenSerialPort(0,Ports,19200,#PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
StatusBarText(#StatusBar_4, 7, Ports)
Standard()
Else
MessageRequester("Achtung!", Ports+" nicht vorhanden!")
EndIf
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
;You can place code here, and use the result as parameters for the procedures
If Event = #PB_Event_Gadget
If GadgetID = #Button_0
SetGadgetText(#String_0,Mid(WriteCommand(0,"@V") ,3))
;ElseIf GadgetID = #String_0
ElseIf GadgetID = #Button_1
SetGadgetText(#String_1,Mid(WriteCommand(0,"@X") ,3))
;ElseIf GadgetID = #String_1
ElseIf GadgetID = #Button_2 ; Startgeschwindigkeit (Hz)
WriteCommand(0, "#S"+GetGadgetText(#String_2),1)
ElseIf GadgetID = #Button_3 ;Rampenlänge (ms)
WriteCommand(0, "#R"+GetGadgetText(#String_3),1)
ElseIf GadgetID = #String_5
ElseIf GadgetID = #Button_5 ;Endgeschwindigkeit (Hz)
WriteCommand(0, "#E25,"+GetGadgetText(#String_5),1)
ElseIf GadgetID = #Button_7 ;Bremswinkel (Grad)
ElseIf GadgetID = #Button_9 ;Referenzoffset(XYZ)
WriteCommand(0, "#OX,"+GetGadgetText(#String_9))
WriteCommand(0, "#OY,"+GetGadgetText(#String_9))
WriteCommand(0, "#OZ,"+GetGadgetText(#String_9),1)
ElseIf GadgetID = #Radio_3
Ports = "COM1"
If IsSerialPort(0): CloseSerialPort(0): EndIf
If OpenSerialPort(0,Ports,19200,#PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
StatusBarText(#StatusBar_4, 7, Ports)
Standard()
Else
MessageRequester("Achtung!", Ports+" nicht vorhanden!")
EndIf
ElseIf GadgetID = #Radio_5
Ports = "COM2"
If IsSerialPort(0): CloseSerialPort(0): EndIf
If OpenSerialPort(0,Ports,19200,#PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
StatusBarText(#StatusBar_4, 7, Ports)
Standard()
Else
MessageRequester("Achtung!", Ports+" nicht vorhanden!")
EndIf
ElseIf GadgetID = #Radio_6
Ports = "COM3"
If IsSerialPort(0): CloseSerialPort(0): EndIf
If OpenSerialPort(0,Ports,19200,#PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
StatusBarText(#StatusBar_4, 7, Ports)
Standard()
Else
MessageRequester("Achtung!", Ports+" nicht vorhanden!")
EndIf
ElseIf GadgetID = #Radio_7
Ports = "COM4"
If IsSerialPort(0): CloseSerialPort(0): EndIf
If OpenSerialPort(0,Ports,19200,#PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
StatusBarText(#StatusBar_4, 7, Ports)
Standard()
Else
MessageRequester("Achtung!", Ports+" nicht vorhanden!")
EndIf
ElseIf GadgetID = #Button_17 ; Referenzrichtung (XYZ)
If GetGadgetState(#Radio_17)=0 ; negative Richtung
WriteCommand(0, "#DZ,0,4,4,4",1)
WriteCommand(0, "#DX,0,4,4,4")
WriteCommand(0, "#DY,0,4,4,4")
Else
WriteCommand(0, "#DZ,1,4,4,4",1)
WriteCommand(0, "#DX,1,4,4,4")
WriteCommand(0, "#DY,1,4,4,4")
EndIf
ElseIf GadgetID = #Button_19 ; Modus Z-Achse
If GetGadgetState(#Radio_23)=1
WriteCommand(0, "Z1",1)
Else
WriteCommand(0, "Z2",1)
EndIf
ElseIf GadgetID = #Button_21 ; Schrittmodus
If GetGadgetState(#Radio_31)=1
WriteCommand(0, "F0",1)
Else
WriteCommand(0, "F1",1)
EndIf
ElseIf GadgetID = #Button_22 ; Ansteuersignal
If GetGadgetState(#Radio_35)=1
WriteCommand(0, "T0",1)
Else
WriteCommand(0, "T1",1)
EndIf
ElseIf GadgetID = #Button_24 ; Signal setzen
If GetGadgetState(#Radio_44)=1
WriteCommand(0,"A1",1) ; Signal an
Else
WriteCommand(0,"A0",1) ; Signal aus
EndIf
ElseIf GadgetID = #Button_26 ; Wartezeit einfügen
WriteCommand(0, "W"+GetGadgetText(#String_11))
ElseIf GadgetID = #String_11
ElseIf GadgetID = #Button_29; Reset durchführen
If WriteCommand(0, "@R")
Debug "Reset"
EndIf
ElseIf GadgetID = #Button_31 ; Achsen sofort stoppen
WriteCommand(0, "@S")
ElseIf GadgetID = #Button_32 ; Achsen anhalten
WriteCommand(0, "@B")
ElseIf GadgetID = #Button_33 ; Pause setzen
WriteCommand(0, "@A")
ElseIf GadgetID = #Button_34 ; Pause beenden
WriteCommand(0, "@C")
ElseIf GadgetID = #Button_35
Event = #PB_Event_CloseWindow
ElseIf GadgetID = #Button_37 ;Position abfragen
If GetGadgetState(#Radio_51)=1
SetGadgetText(#String_14,Mid(WriteCommand(0, "@LX"),4))
ElseIf GetGadgetState(#Radio_52)=1
SetGadgetText(#String_14,Mid(WriteCommand(0, "@LY"),4))
ElseIf GetGadgetState(#Radio_57)=1
SetGadgetText(#String_14,Mid(WriteCommand(0, "@LZ"),4))
EndIf
ElseIf GadgetID = #Button_39 ;Vektorfahrt ausführen
If GetGadgetState(#Radio_61)=1; Relativ
WriteCommand(0, "L25,x"+GetGadgetText(#String_16)+",y"+GetGadgetText(#String_18)+",z"+GetGadgetText(#String_19),1)
Else ; Absolut
WriteCommand(0, "L25,X"+GetGadgetText(#String_16)+",Y"+GetGadgetText(#String_18)+",Z"+GetGadgetText(#String_19),1)
EndIf
ElseIf GadgetID = #Button_41
;Referenzfahrt ausführen je nachdem, wie die CheckBoxes aktiviert sind
If GetGadgetState(#CheckBox_3)=1 And GetGadgetState(#CheckBox_4)=1 And GetGadgetState(#CheckBox_5)=1
WriteCommand(0, "$HZXY",1)
ElseIf GetGadgetState(#CheckBox_3)=1 And GetGadgetState(#CheckBox_4)=1
WriteCommand(0, "$HXY",1)
ElseIf GetGadgetState(#CheckBox_3)=1 And GetGadgetState(#CheckBox_5)=1
WriteCommand(0, "$HXZ",1)
ElseIf GetGadgetState(#CheckBox_4)=1 And GetGadgetState(#CheckBox_5)=1
WriteCommand(0, "$HYZ",1)
ElseIf GetGadgetState(#CheckBox_3)=1
WriteCommand(0, "$HX",1)
ElseIf GetGadgetState(#CheckBox_4)=1
WriteCommand(0, "$HY",1)
ElseIf GetGadgetState(#CheckBox_5)=1
WriteCommand(0, "$HZ",1)
EndIf
ElseIf GadgetID = #Button_43
For Anzahl=1 To 5
If GetGadgetState(#Radio_61)=1; Relativ
WriteCommand(0, "L25,x"+GetGadgetText(#String_16)+",y"+GetGadgetText(#String_18)+",z"+GetGadgetText(#String_19),1)
Else ; Absolut
WriteCommand(0, "L25,X"+GetGadgetText(#String_16)+",Y"+GetGadgetText(#String_18)+",Z"+GetGadgetText(#String_19),1)
EndIf
Next Anzahl
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
WriteCommand(0, "@R")
If IsSerialPort(0):CloseSerialPort(0):EndIf
End
;