|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Bernd Jäger
Anmeldungsdatum: 21.11.2016 Beiträge: 9 Wohnort: Giesdorf
|
Verfasst am: 21.11.2016, 11:05 Titel: CNC Maschinensteuerung von 1991 |
|
|
Hallo hier im Forum. Ich wende mich mal an euch weil ich etwas Q-Basic Hilfe brauche. Überall wo ich mit meiner Frage war, hat man nur den Kopf geschüttelt, wenn das Wörtchen DOS fiel.
Ich arbeite seit 1991 mit einer CNC Fräse von Isel, die Ihre Q-Basic Befehle von einem Win98 Rechner bekommt.
Das hat auch immer problemlos funktioniert. Die Rechner wurden mind. 8mal ausgetauscht.Und die verwendete Seagate Platte mit 200 MB hat vor kurzem nach 25 oder mehr Jahren das zeitliche gesegnet und dabei den letzten Rechner anfang des Jahres mit ins Nirwana genommen.
Das gröste Problem was sich danach stellte, war das auftreiben einen Rechners mit win 98, eine Rs232 Schnittstelle in guter Kondition.
oder jemanden zu finden der sowas Hat was funzt.
Aber war erfolgreich. gleich 2 Stk gefunden.
Lange Rede kurzer Sinn:
Habe die Programme in Basic angehangen.Die Steuern durch abarbeiten einer Datei den Controller c142.
Die Syntax ist:
DOWN(q-Basic Prg) teil1(Frräsdatei).out(ext) (Root von 1991)
oder ergo
D1 Teil1.out (edited Version.)
Die Basic Programme im Anhang...
Leider kann ich nur noch mit dem ursprünglichen DOS Programm DOWN fräsen .(ohne Drehzahleingabe und Ref Fahrt zum Schluss. Das funktioniert ist aber lästig.
Ich hatte ein Programm etwas modifiziert, das man die Drehzahl eingeben konnte und wieder abschaltete und zum Nullpunkt zurückfuhr....was 25 Jahre funkttionierte.
Nach Wechsel des Rechners lässt sich x,y,z und Spindeldrehzahl im Programm D1 eingeben.Er fährt auch zum Referenzpunkt und x,y,z, Werte, startet dann aber keine Spindeldrehzahl, fragt nach Return und nix geht mehr.Das Basicprogramm habe ich beigefügt.Compiliert habe ich natürlich auch immer noch...
Ich vermute das irgendwas mit Autoexec.bat oder config.sys verkehrt ist.Einen Ramdrive? habe ich angelegt.Irgend ein String am falschen Platz..???
Ist bestimmt nur ne ganze Kleinigkeit,es ging mit dem alten Rechner vorher alles.
Die Down.bas is die 25 Jahre alte Ursprungsdatei..
Vielen Dank für eure Mühe.
Ich hab einen C142 Controller und einen 300? Spindelmotor
Bernd Jäger
DOWN.BAS habs falsche kopiert.lol ohne Drehzahl,funktioniert ja also unwichtig.
OPEN "down.cfg" FOR INPUT AS #3
INPUT #3, xs
INPUT #3, ys
INPUT #3, zs
CLOSE #3
OPEN COMMAND$ FOR RANDOM AS #1
OPEN "com1:9600,n,8,1" FOR RANDOM AS #2
INPUT "Verschiebung in x "; xver
INPUT "Verschiebung in y "; yver
INPUT "Verschiebung in z "; zver
INPUT "Spindeldrehzahl "; rpm
PRINT #2, "@07": GOSUB 1000
PRINT #2, "@0R7": GOSUB 1000
PRINT #2, "@0M"; xver * xs; ",3000,"; yver * ys; ",3000,"; zver * zs; ",3000,0,30"
GOSUB 1000
PRINT #2, "@0n7": GOSUB 1000
PRINT "Fr„serh”he einstellen, Return fr weiter .."
GOSUB 1000
100 INPUT a$
PRINT #2, "@0b 65530,rpm"
GOSUB 1000
numcom = 1
CLS
LOCATE 10, 10
flen = LOF(1) / 128
PRINT "Es sind an Prozent abgearbeitet:"
DO WHILE NOT (EOF(1))
LINE INPUT #1, a$
fpos = INT(100 * LOC(1) / flen)
LOCATE 10, 60: PRINT USING "#####"; fpos;
PRINT #2, a$
DO WHILE LOC(2) < 1
c$ = INKEY$
IF c$ = CHR$(27) THEN END
LOOP
b$ = INPUT$(1, 2)
LOCATE 12, 60: PRINT b$;
IF b$ <> "0" THEN PRINT "Fehler:"; b$: INPUT d$
LOOP
PRINT #2, "@0b 65530,0"
END
1000 IF LOC(2) = 0 THEN 1000
b$ = INPUT$(1, 2): IF b$ = "0" THEN RETURN
PRINT "Fehler "; b$: INPUT d$: RETURN
HIER die
D1.BAS
OPEN "down.cfg" FOR INPUT AS #3
INPUT #3, xs
INPUT #3, ys
INPUT #3, zs
CLOSE #3
OPEN COMMAND$ FOR RANDOM AS #1
OPEN "com1:9600,n,8,1" FOR RANDOM AS #2
INPUT "Verschiebung in x "; xver
INPUT "Verschiebung in y "; yver
INPUT "Verschiebung in z "; zver
INPUT "Spindeldrehzahl "; rpm
PRINT #2, "@07": GOSUB 1000
PRINT #2, "@0R7": GOSUB 1000
PRINT #2, "@0M"; xver * xs; ",3000,"; yver * ys; ",3000,"; zver * zs; ",3000,0,30"
GOSUB 1000
PRINT #2, "@0n7": GOSUB 1000
PRINT "Fr„serh”he einstellen, Return fr weiter .."
GOSUB 1000
100 INPUT a$
PRINT #2, "@0b 65530," + STR$(rpm)(Die Ref Fahrt Macht er noch den STR$ nicht)
GOSUB 1000
FOR i = 10000 TO 0
LOCATE 1, 1
PRINT " "
LOCATE 1, 1
PRINT i
NEXT i
numcom = 1
CLS
LOCATE 10, 10
flen = LOF(1) / 128
PRINT "Es sind an Prozent abgearbeitet:"
DO WHILE NOT (EOF(1))
LINE INPUT #1, a$
fpos = INT(100 * LOC(1) / flen)
LOCATE 10, 60: PRINT USING "#####"; fpos;
PRINT #2, a$
DO WHILE LOC(2) < 1
c$ = INKEY$
IF c$ = CHR$(27) THEN END
LOOP
b$ = INPUT$(1, 2)
LOCATE 12, 60: PRINT b$;
IF b$ <> "0" THEN PRINT "Fehler:"; b$: INPUT d$
LOOP
PRINT #2, "@0b 65530,0"
END
1000 IF LOC(2) = 0 THEN 1000
b$ = INPUT$(1, 2): IF b$ = "0" THEN RETURN
PRINT "Fehler "; b$: INPUT d$: RETURN _________________ Nur tote Fische schwimmen mit dem Strom |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 21.11.2016, 14:43 Titel: |
|
|
Hallo und willkommen hier im Forum!
Vorneweg: ich hab von deinem Fachgebiet quasi keine Ahnung (nur ein paar simple CNC Programme auf EMCO Maschinen jemals geschrieben) und das von dir genannte Steuergerät ist mir völlig unbekannt.
Glücklicherweise gibt's vom Hersteller noch eine ordentliche Dokumentation, die ich hier gefunden hab:
https://www.isel.com/de/downloads/dl/file/id/3906/c142_4_1_hardware_beschreibung_komplett.pdf
Oder Englisch: https://www.isel.com/en/downloads/dl/file/id/4261/c142_4_1_hardware_manual_complete.pdf
Der einzige signifikante Unterschied zwischen den zwei Programmen ist die Zeile, die du rot markiert hast. Beim ersten Programm lautet die:
Code: | PRINT #2, "@0b 65530,rpm" |
beim zweiten Programm hingegen:
Code: | PRINT #2, "@0b 65530," + STR$(rpm)
'und noch eine Zähschleife 10000 bis 0 dessen Sinn sich mir allerdings nicht erschließt (außer dass Zeit vergeht) |
Wenn man in die Doku schaut scheinen jedoch beide Varianten falsch.
Die Doku auf Seite 101 sagt uns dass mit dem Befehl "@0b 65530" ein Byte an der Adresse 65530 gelesen wird. Der Befehl erwartet jedoch lt. Doku keine zusätzlichen Parameter, also kein ",rpm" und auch kein STR$(rpm). Wenn hingegen an die Speicheradresse geschrieben werden soll, dann sollte der Befehl lt. Doku "@0B" lauten (man beachte Groß/Klein-Schreibung) und nimmt dann auch einen zusätzlichen Parameter mit dem Wert (wie im zweiten Programm).
Ich bezweifle daher dass dein Programm in dieser Form jemals funktioniert hat. Vielleicht ist das funktionierende Programm mit der Festplatte gestorben und dein Backup ist älter bzw. unterscheidet sich vom ursprünglichen Programm auf dieser Platte?
Um das Problem zu beheben wirst du dich wohl in die Ansteuerung des C142 Steuergeräts einlesen müssen, außer jemand hier würde zufällig dieses Gerät kennen (was ich aber so gut wie ausschließen würde).
Fehler beim Betriebssystem (also z.B. der Konfiguration in config.sys und autoexec.bat) würde ich mit großer Wahrscheinlichkeit ausschließen. Der Fehler liegt ziemlich sicher in deinem Programm. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
|
Bernd Jäger
Anmeldungsdatum: 21.11.2016 Beiträge: 9 Wohnort: Giesdorf
|
Verfasst am: 21.11.2016, 15:31 Titel: |
|
|
Hi erstmal Danke für die Antwort.
Muss noch einiges zur Klärung beitragen.
Der Ausdruck @0b 65530 ist die sogenannte Referenzfahrt.da fahren alle Motoren an die Grundstellung heran, deshalb wird auch zum Schluss wieder in Grundstellung gefahren.
Die Zeitschleife ist dafür da, daß der Controller überhaupt mit der Arbeit nachkommt.Sonst geht alles viel zu schnell.Jeder einzelne Schritt des FräsProgramms wird auch am Bildschirm angezeigt.
Kann man herausfinden was mit der Drehzahl (welcher String ist das überhaupt) die ich eingebe passiert,bzw wo wird diese abgelegt und dem Controller übermittelt? etwa in D: abgelegt?
es gibt die down.cfg die enthält die Grundconfiguration für die Schrittmotorensteps die sieht einfach aus 80,80,80,D: untereinander geschrieben.auch ist da ein Laufwerksbuchstabe für D: vermerkt.(Ramdrive.)
Ich hab da echt nur wage Vorstellungen was ich machen könnte..
die Jungs bei Isel Electronic haben schon abgewunken...
Die Programmversion werde ich unabhänig noch mal überprüfen.
Danke _________________ Nur tote Fische schwimmen mit dem Strom |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 107
|
Verfasst am: 21.11.2016, 15:56 Titel: |
|
|
Zitat: | DOWN.BAS habs falsche kopiert.lol ohne Drehzahl,funktioniert ja also unwichtig. |
Wie sieht die richtige (funktionirende?) DOWN.BAS-Datei aus? |
|
Nach oben |
|
|
Bernd Jäger
Anmeldungsdatum: 21.11.2016 Beiträge: 9 Wohnort: Giesdorf
|
Verfasst am: 21.11.2016, 16:12 Titel: |
|
|
Die suche ich heute noch raus..da Kann man sich sowas von vertun...lol
Ich kann mich so dunkel erinnern,das ich vor 25 Jahren zu dem ersten DOWN Programm nur die Drehzahleingabe(Spindeldrehzahl) und die Rückfahrt nach Ende mit Abschalten des Spindelmotors eingefügt habe.Das ist das hier:PRINT #2, "@0b 65530,0" _________________ Nur tote Fische schwimmen mit dem Strom |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 107
|
Verfasst am: 21.11.2016, 16:26 Titel: |
|
|
Testweise kannst du den rpm Wert direkt eingeben:
Code: |
'wenn rpm 4711 ist
PRINT #2, "@0b 65530,4711"
|
|
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 21.11.2016, 18:07 Titel: |
|
|
Bernd Jäger hat Folgendes geschrieben: | Der Ausdruck @0b 65530 ist die sogenannte Referenzfahrt.da fahren alle Motoren an die Grundstellung heran, deshalb wird auch zum Schluss wieder in Grundstellung gefahren. | Bist du dir da wirklich sicher? Laut Dokumentation Seite 90 ist der Befehl für die Referenzfahrt aller 3 Achsen "@0R7" - und das wird im Programm auch vorher ausgeführt.
Bernd Jäger hat Folgendes geschrieben: | Die Zeitschleife ist dafür da, daß der Controller überhaupt mit der Arbeit nachkommt.Sonst geht alles viel zu schnell.Jeder einzelne Schritt des FräsProgramms wird auch am Bildschirm angezeigt. | Ok, das kann ich nachvollziehen.
Bernd Jäger hat Folgendes geschrieben: | Kann man herausfinden was mit der Drehzahl (welcher String ist das überhaupt) die ich eingebe passiert,bzw wo wird diese abgelegt und dem Controller übermittelt? etwa in D: abgelegt? | Wie du im Programm siehst wird der Wert nur in der einen Zeile verwendet, die ich in meiner ersten Antwort herausgegriffen habe. Dort wird der Wert zu einem Befehl zusammengestellt, wie von HorstD anhand eines Beispiels veranschaulicht. Sonst passiert nichts mit dem Wert, er wird also insbesondere nicht in eine Datei geschrieben o.ä.
Wenn von mir verlinkte Dokumentation zu deinem Gerät passt, dann würde ich wirklich noch einmal empfehlen sich dort einzulesen und die Befehle, die dein Programm an das Steuergerät sendet, einzeln nachzuvollziehen. Denn derzeit stimmen die Informationen von dir nicht mit jenen in der Dokumentation überein. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
|
Bernd Jäger
Anmeldungsdatum: 21.11.2016 Beiträge: 9 Wohnort: Giesdorf
|
Verfasst am: 21.11.2016, 21:36 Titel: |
|
|
Also grundsätzlich gebe ich Dir in allen Dingen recht...@Ob 65530,rpm ist die drehzahlübergabe an den Spindelmotorcontroller.weiss ich jetzt.
seit meinem Schlaganfall verwechsel und vertue ich mich leicht.s
seltsam ist nur das dieses D1.exe Programm bis zum Wechsel des Computers einwandfrei lief. Vorher war auf dem PC noch win95 installiert.jetzt ist win98. obs daran liegt?
Hier nochmal die Uralt Down Datei ohne Spindeldrehzahl und ohne Rückfahrt bei Programmende, die ich jetzt benutze.
OPEN "down.cfg" FOR INPUT AS #3
INPUT #3, xs
INPUT #3, ys
INPUT #3, zs
CLOSE #3
OPEN COMMAND$ FOR INPUT AS #1
OPEN "com1:9600,n,8,1" FOR RANDOM AS #2
INPUT "Verschiebung in x "; xver
INPUT "Verschiebung in y "; yver
INPUT "Verschiebung in z "; zver
PRINT #2, "@07": GOSUB 1000
PRINT #2, "@0R7": GOSUB 1000
PRINT #2, "@0M"; xver * xs; ",3000,"; yver * ys; ",3000,"; zver * zs; ",3000,0,30"
GOSUB 1000
PRINT #2, "@0n7": GOSUB 1000
PRINT "Fr„serh”he einstellen, Return fr weiter .."
100 INPUT a$
numcom = 1
CLS
LOCATE 10, 10
flen = LOF(1) / 128
PRINT "percent of commandosdownloaded: "
DO WHILE NOT (EOF(1))
LINE INPUT #1, a$
LOCATE 1, 1: PRINT a$
fpos = INT(100 * LOC(1) / flen)
LOCATE 10, 60: PRINT USING "#####"; fpos;
PRINT #2, a$
DO WHILE LOC(2) < 1
c$ = INKEY$
IF c$ = CHR$(27) THEN END
LOOP
b$ = INPUT$(1, 2)
LOCATE 12, 60: PRINT b$;
IF b$ <> "0" THEN PRINT "Fehler:"; b$: INPUT d$
LOOP
END
1000 IF LOC(2) = 0 THEN 1000
b$ = INPUT$(1, 2): IF b$ = "0" THEN RETURN
PRINT "Fehler "; b$: INPUT d$: RETURN
_________________ Nur tote Fische schwimmen mit dem Strom
Zuletzt bearbeitet von Bernd Jäger am 21.11.2016, 21:44, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1213 Wohnort: Ruhrpott
|
Verfasst am: 21.11.2016, 21:42 Titel: |
|
|
Hallo Bernd Jäger!
Ich habe mir die Referenz einmal angesehen und kann auf die Schnelle folgendes sagen:
1) Code: | Print #2, "@0b 65530," | ist definitiv NICHT die Referenzfahrt (sondern Code: | Print #2, "@0R7": GoSub 1000 | )
2)
65530 ist die Speicheradresse der Schaltausgänge A2.1 ... A2.8. Mit Code: | Print #2, "@0b 65530 | wird der Inhalt dieser Speicherstelle gelesen. Zum Schreiben müsste die Zeile (IMHO) lauten: Code: | Print #2, "@0B 65530," + Str$(rpm) | (Mit großem "B")
Zum Abschalten des Motors und zur Rückfahrt müsste dann (ebenfalls IMHO) am Programmende stehen:
Code: | ...
Print #2, "@0B 65530,0": GoSub 1000
Print #2, "@0R7": GoSub 1000
End |
Ich hoffe, das hilft dir weiter.
Gruß
grindstone
PS: Es gibt (für FreeBasic) Treiberdateien, mit denen die serielle Schnittstelle auch mit WinXP und höher verwendet werden kann. Damit ließe sich die Fräse auch mit einem modernen Rechner ansteuern. Da der Rechner nur Befehlsstrings an den Controller sendet (also keine zeitkritischen Signale) müsste das sogar mit einem USB - Interface gehen.
Beim Umschreiben des Quellcodes auf FB (der Aufwand ist minimal) wäre ich ggf. gerne behilflich. _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Bernd Jäger
Anmeldungsdatum: 21.11.2016 Beiträge: 9 Wohnort: Giesdorf
|
Verfasst am: 22.11.2016, 00:36 Titel: |
|
|
Jetzt erstmal herzlichen Dank für eure Aufmerksamkeit.
@grindstone: wenn ich mir das Programm "D1.bas " im ersten Beitrag anschaue, ist es doch eigentlich das was ich brauche? oder?
Da steht nur ein kleines b bei Print #2, "@0B 65530," + Str$(rpm) den anderen natürlich auch..
ich compililier das mal morgen und probiers aus..melde mich dann wieder wenns das war...
Danke dafür...ich wäre froh wenn ich was neueres hätte..was ist FB ?lol FreeBasic ich "TROLL", sag ja, ich steh ab und zu auf dem Schlauch..
Das grundsätzliche Problem ist der Postprozessor des CAD CAM Programms ,der mir die erzeugten Nci Fräsfiles genau für dieses DOwn Programm erzeugt.Deshalb werde ich wohl dabei bleiben müssen.
Bernd
btw. ihr macht so schöne Programme, ich bau Flugmodelle mit der Fräse.Bei youtube gibts meine Konstruktionen zu sehen.
https://www.youtube.com/user/5minEpoxy _________________ Nur tote Fische schwimmen mit dem Strom |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1213 Wohnort: Ruhrpott
|
Verfasst am: 22.11.2016, 02:58 Titel: |
|
|
Ich bin beeindruckt! (Oder wie man hier im Ruhrgebiet sagt: "Boh ey!" )
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 22.11.2016, 11:56 Titel: |
|
|
Bernd Jäger hat Folgendes geschrieben: | Das grundsätzliche Problem ist der Postprozessor des CAD CAM Programms ,der mir die erzeugten Nci Fräsfiles genau für dieses DOwn Programm erzeugt.Deshalb werde ich wohl dabei bleiben müssen. |
Wenn du auf FreeBasic umsteigst ändert sich ja nichst am Verhalten deines Programms. Im Idealfall kannst du den Code 1:1 übernehmen und verwendest einfach FreeBasic anstatt QuickBasic um die EXE zu erzeugen. Die so erzeugte EXE ist dann auch auf allen modernen Windows Versionen lauffähig und rückwärtskompatibel bis Windows 95.
Andererseits, wenn du sonst noch weitere Programme verwendest du nur in DOS bzw. Windows 95/98 laufen, dann macht es wohl keinen Sinn dieses eine Programm jetzt umzustellen wenn du das alte System sowieso noch für andere Programme brauchst. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
|
Bernd Jäger
Anmeldungsdatum: 21.11.2016 Beiträge: 9 Wohnort: Giesdorf
|
Verfasst am: 22.11.2016, 12:23 Titel: |
|
|
Ist eigentlich nur das hier angesprochene Down programm.Alles andere mach ich auf einem Win2000 Rechner und schieb nur die Down datei rüber.Den win98 benutze ich rein zur Mahinensteuerung.Da wird der nicht gestört von irgend etwas anderen und kann vor sich hin fräsen.wenn er denn funktioniert, aber das kriege ich mit eurer Hilfe hin..
Bernd _________________ Nur tote Fische schwimmen mit dem Strom |
|
Nach oben |
|
|
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 22.11.2016, 13:24 Titel: |
|
|
Bernd Jäger hat Folgendes geschrieben: | Die Zeitschleife ist dafür da, daß der Controller überhaupt mit der Arbeit nachkommt.Sonst geht alles viel zu schnell.Jeder einzelne Schritt des FräsProgramms wird auch am Bildschirm angezeigt. |
Dazu würde ich aber keine FOR-NEXT-Schleife verwenden da die vergehende Zeit von der CPU Geschwindigkeit abhängt. Wenn dein neuer (gebrauchter) Rechner schneller ist als dein alter, wird auch viel weniger Zeit vergehen. Hier würde ich ein Sleep MSec ein setzen, so vergeht immer die selbe Zeit, egal wie schnell der Rechner ist. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1213 Wohnort: Ruhrpott
|
Verfasst am: 22.11.2016, 13:45 Titel: |
|
|
Sleep ist zum Erzeugen von exakten Verzögerungszeiten nicht wirklich geeignet. Besser und (sehr viel) genauer ist es, die Verzögerungsschleife mithilfe des Timers zu realisieren: Code: | Dim As Double delay
...
delay = Timer + .01 'Timer + <gewünschte Verzögerungszeit in Sekunden>
Do While delay > Timer
Loop
... | Damit ist auch sichergestellt, daß die Verzögerung nicht von Compiler wegoptimiert wird.
Gruß
grindstone
PS: Außerdem bedeutet die Zeitangabe beim Sleep - Befehl in QBasic Sekunden und nicht, wie in FB, Millisekunden. _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1213 Wohnort: Ruhrpott
|
Verfasst am: 22.11.2016, 14:59 Titel: |
|
|
@Bernd Jäger:
In Ermangelung der geeigneten Hardware ungetestet, könnte das Programm in FB ungefähr so aussehen: Code: | Dim As Integer xs, ys, zs, xver, yver, zver, rpm, numcom, flen, fpos
Dim As Double warten
Dim As String a, b, d
Declare Sub komm(text As String, port As Integer)
Open ExePath + "\down.cfg" For Input As #3
Input #3, xs
Input #3, ys
Input #3, zs
Close #3
Open Command For Binary Access Read As #1
Open Com "com1:9600,n,8,1,RS,DS0,CS0,CD0" For Binary As #2
Input "Verschiebung in x "; xver
Input "Verschiebung in y "; yver
Input "Verschiebung in z "; zver
Input "Spindeldrehzahl "; rpm
komm("@07", 2)
komm("@0R7", 2)
komm("@0M"+ Str(xver * xs) + ",3000," + Str(yver * ys) + ",3000," + Str(zver * zs) + ",3000,0,30", 2)
komm("@0n7", 2)
Print "Fr„serh”he einstellen, Return fr weiter .."
komm("", 2)
Input a
komm("@0B 65530," + Str(rpm), 2)
warten = Timer + 3.0 'hier eine geeignete wartezeit eintragen
Do While Timer < warten
Locate 1, 1, 0
Print warten - Timer; " "
Loop
Cls
Locate 10, 10
flen = Lof(1) / 128
Print "Es sind an Prozent abgearbeitet:"
Do While Not (EOF(1))
Line Input #1, a
fpos = Int(100 * Loc(1) / flen)
Locate 10, 60: Print Using "#####"; fpos;
Print #2, a
Do While Loc(2) < 1
If InKey = Chr$(27) Then End
Loop
b = Input(1, 2)
Locate 12, 60
Print b;
If b <> "0" Then
Print "Fehler:"; b
Input d
EndIf
Loop
komm("@0B 65530,0", 2)
End
Sub komm(text As String, port As Integer)
Dim As String b, d
Print #port, text
Do While Loc(port) = 0
Loop
b = Input(1, port)
If b = "0" Then
Return
Else
Print "Fehler "; b
Input d
Return
EndIf
End Sub
|
Da ich davon ausgehe, daß du (noch ) kein FB auf deinem Rechner installiert hast, habe ich zum Ausprobieren das compilierte Programm nach
http://users.freebasic-portal.de/grindstone/Codes/Fraese/Fraese2.exe
hochgeladen. Es müsste mit allen Windows - Versionen ab 95 laufen.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Zuletzt bearbeitet von grindstone am 23.11.2016, 02:12, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
Bernd Jäger
Anmeldungsdatum: 21.11.2016 Beiträge: 9 Wohnort: Giesdorf
|
Verfasst am: 22.11.2016, 19:31 Titel: |
|
|
Huch, damit hab ich garnicht gerechnet.@grindstone DANKE werds probieren!!!
Ich bin noch am Lesen und Verstehen der Isel controlleranleitung.
ich sag sofort Bescheid wenn sich was tut.
Danke nochmals an alle.
Bernd _________________ Nur tote Fische schwimmen mit dem Strom |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1213 Wohnort: Ruhrpott
|
Verfasst am: 23.11.2016, 01:57 Titel: |
|
|
Bernd Jäger hat Folgendes geschrieben: | Huch, damit hab ich garnicht gerechnet | Ich sag doch: Der Aufwand ist minimal.
Leider hatte sich trotzdem noch ein Fehler eingeschlichen. Ich habe das korrigiert und auch die Fraese2.exe neu hochgeladen. Jetzt müsste es funktionieren (zumindest ist jetzt mit dem Oszi ein Ausgangssignal am COM - Port zu messen).
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 23.11.2016, 13:31 Titel: |
|
|
grindstone hat Folgendes geschrieben: | PS: Außerdem bedeutet die Zeitangabe beim Sleep - Befehl in QBasic Sekunden und nicht, wie in FB, Millisekunden. |
Stimmt ja, hab ich gar nicht mehr dran gedacht.
Ich hab festgestellt das es unter QBASIC besser ist mit dem TIMER zu Arbeiten, nicht wegen der Präzision, sondern wegen der weit geringeren CPU Auslastung. Mit FB sieht das allerdings anders aus, da steigt die Auslastung beim TIMER auf über 60%, bei SLEEP singt sie auf rund 3%!
Welche Zeiten erforderlich sind muss Bernd Jäger natürlich selber entscheiden. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1213 Wohnort: Ruhrpott
|
Verfasst am: 23.11.2016, 18:44 Titel: |
|
|
Natürlich steigt bei der Verwendung des Timers die Auslastung des zugeteilten Prozessorkerns auf Vollanschlag, da hier pausenlos eine leere DO - LOOP - Schleife durchlaufen wird.
Aus der Erfahrung würde ich sagen: Alles, was unter 100 ms liegt, ist ein Fall für die Timer - Methode, bei Zeiten > 1 Sekunde ist SLEEP geeigneter, und bei allem, was dazwischen liegt, hängt es von der Anwendung ab, was besser ist.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|