Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

CNC Maschinensteuerung von 1991
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Bernd Jäger



Anmeldungsdatum: 21.11.2016
Beiträge: 9
Wohnort: Giesdorf

BeitragVerfasst am: 21.11.2016, 11:05    Titel: CNC Maschinensteuerung von 1991 Antworten mit Zitat

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

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 21.11.2016, 14:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Bernd Jäger



Anmeldungsdatum: 21.11.2016
Beiträge: 9
Wohnort: Giesdorf

BeitragVerfasst am: 21.11.2016, 15:31    Titel: Antworten mit Zitat

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 verwundert verwundert
_________________
Nur tote Fische schwimmen mit dem Strom
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 107

BeitragVerfasst am: 21.11.2016, 15:56    Titel: Antworten mit Zitat

Zitat:
DOWN.BAS habs falsche kopiert.lol ohne Drehzahl,funktioniert ja also unwichtig.


Wie sieht die richtige (funktionirende?) DOWN.BAS-Datei aus?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bernd Jäger



Anmeldungsdatum: 21.11.2016
Beiträge: 9
Wohnort: Giesdorf

BeitragVerfasst am: 21.11.2016, 16:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 107

BeitragVerfasst am: 21.11.2016, 16:26    Titel: Antworten mit Zitat

Testweise kannst du den rpm Wert direkt eingeben:
Code:

'wenn rpm 4711 ist
PRINT #2, "@0b 65530,4711"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 21.11.2016, 18:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Bernd Jäger



Anmeldungsdatum: 21.11.2016
Beiträge: 9
Wohnort: Giesdorf

BeitragVerfasst am: 21.11.2016, 21:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 21.11.2016, 21:42    Titel: Antworten mit Zitat

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. lächeln
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Bernd Jäger



Anmeldungsdatum: 21.11.2016
Beiträge: 9
Wohnort: Giesdorf

BeitragVerfasst am: 22.11.2016, 00:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 22.11.2016, 02:58    Titel: Antworten mit Zitat

Ich bin beeindruckt! Daumen rauf! (Oder wie man hier im Ruhrgebiet sagt: "Boh ey!" grinsen )

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 22.11.2016, 11:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Bernd Jäger



Anmeldungsdatum: 21.11.2016
Beiträge: 9
Wohnort: Giesdorf

BeitragVerfasst am: 22.11.2016, 12:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 22.11.2016, 13:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 22.11.2016, 13:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 22.11.2016, 14:59    Titel: Antworten mit Zitat

@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 zwinkern ) 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Bernd Jäger



Anmeldungsdatum: 21.11.2016
Beiträge: 9
Wohnort: Giesdorf

BeitragVerfasst am: 22.11.2016, 19:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 23.11.2016, 01:57    Titel: Antworten mit Zitat

Bernd Jäger hat Folgendes geschrieben:
Huch, damit hab ich garnicht gerechnet
Ich sag doch: Der Aufwand ist minimal. grinsen

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 23.11.2016, 13:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 23.11.2016, 18:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz