Wie steuert man die SMC800 ?

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
Then
Beiträge: 247
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Beitrag von Then »

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 !
Benutzeravatar
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:

Beitrag von Falko »

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
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
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:

Beitrag von Falko »

@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 :wink:

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.

Bild

MfG Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Then
Beiträge: 247
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Beitrag von Then »

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.....
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 !
Benutzeravatar
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:

Beitrag von Falko »

@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
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
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:

Beitrag von Falko »

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
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Deluxe085
Beiträge: 1
Registriert: 24.11.2008 21:11

SMC 800 ansteuern?

Beitrag von Deluxe085 »

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!
Benutzeravatar
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 ?

Beitrag von Falko »

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.

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
;
Gruß Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Antworten