|
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 |
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 25.12.2020, 16:34 Titel: Unterschiedlichen Satzaufbau speziell formatiert darstellen |
|
|
Hi!
Habe ein für mich sehr großes Projekt angefangen: Es geht darum für eine alte CNC-Steuerung (Fräsmaschine) CNC-Programme zu erstellen.
Bin schon gut vorran gekommen mit meinen Anfängerkentnissen aber Fragen gibt es
Das Programm muss am Ende eine TXT-Datei sein welche einzelne speziell formatierte Sätze enthält mit den Befehlen. Es gibt 13 verschiedene Sätze die erzeugt werden können, teilweilweise wird je Satz dann EINE Zeile verwendet, bei manchen Sätzen werden aber bis zu SECHS Zeilen verwendet. Ich habe mal so ein Beispiel des fertigen CNC-Programmes hier: (Jede Zeile wird wie in Basic auch mit einer fortlaufenden Satznummer, gefolgt von Leerzeichen, geschrieben)
25 TOOL DEF 33 L +265,600
26 TOOL DEF 33 R +13,875
28 TOOL CALL 0 Z S 0,000
180 CYCL DEF 1.0 TIEFBOHREN
181 CYCL DEF 1.1 ABST -2,000
182 CYCL DEF 1.2 TIEFE -2,000
183 CYCL DEF 1.3 ZUSTLG-1,000
184 CYCL DEF 1.4 V.ZEIT 1,000
185 CYCL DEF 1.5 F60
186 LBL 0
425 STOP M05
427 CALL LBL 1 REP
428 TOOL CALL 1 Z S 800,000
431 A X+22,000 R0 F4500 M
Ich habe die einzelnen Sätze mit Leerzeilen getrennt um zu sehen welche zusammen gehören.
Ich habe ein Array mit 800 Zeilen erstellt (mit 8 Spalten) , eine ZEILE von diesem CNC-Programm wird immer in eine ZEILE von diesem Array erstellt - das heißt der Satz mit "CYCL-DEF-TIEFBOHREN" belegt dann SECHS ZEilen im Array.
Bin soweit dass mein Programm funktioniert und die Formatierung richtig statt findet.
Mich würde jetzt mal interessieren wie ein "Profi" das ganze lösen würde.
Ziel am Ende ist es ja das ganze so in eine Text-Datei zu bringen aber auch die Möglichkeit zu haben von einer Text-Datei das ganze einzulesen und zu editieren, das bereitet mir noch etwas Kopfzerbrechen wie ich die Formatierung exakt aus einer Datei einlese und in mein Array bringe ohne dass was durcheinander kommt. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 26.12.2020, 02:53 Titel: |
|
|
Hallo derampcsitzt, willkommen im Forum und frohe Weihnachten!
Meine CNC - Kenntnisse sind -zumindest was den Industriestandard angeht- zwar recht rudimentär (nennen wir es mal ein fundiertes Halbwissen ), aber ich ahne, was du vorhast und empfehle, UDTs zu verwenden. Das ist zwar -falls du noch nie damit gearbeitet haben solltest- erst einmal etwas gewöhnungsbedürftig, aber besonders bei größeren Programmen wesentlich übersichtlicher als das Hantieren mit mehrdimensionalen Arrays.
Hier mal quick (na ja... ) and dirty, wie so etwas inetwa aussehen könnte : Code: |
Dim As String datei = ExePath + "\daten.txt"
'testdatei anlegen
Open datei For Output As #1
Print #1, "25 TOOL DEF 33 L +265,600"
Print #1, "26 TOOL DEF 33 R +13,875"
Print #1, ""
Print #1, "28 TOOL CALL 0 Z S 0,000"
Print #1, ""
Print #1, "180 CYCL DEF 1.0 TIEFBOHREN"
Print #1, "181 CYCL DEF 1.1 ABST -2,000"
Print #1, "182 CYCL DEF 1.2 TIEFE -2,000"
Print #1, "183 CYCL DEF 1.3 ZUSTLG-1,000"
Print #1, "184 CYCL DEF 1.4 V.ZEIT 1,000"
Print #1, "185 CYCL DEF 1.5 F60"
Print #1, ""
Print #1, "186 LBL 0"
Print #1, ""
Print #1, "425 STOP M05"
Print #1, ""
Print #1, "427 CALL LBL 1 REP"
Print #1, ""
Print #1, "428 TOOL CALL 1 Z S 800,000"
Print #1, ""
Print #1, "431 A X+22,000 R0 F4500 M"
Close #1
Type tCNCzeile
zeilennr As Integer
parameter(Any) As String 'dynamisches parameterarray
Declare Property zeile As String
Declare Property zeile(z As String)
End Type
Property tCNCzeile.zeile As String
'wandelt den inhalt des UDT in eine textzeile um und gibt diese aus
Dim As String ausgabe = ""
Dim As Integer x
With This
If .zeilennr Then 'wenn die zeilennummer 0 ist, ist dieser UDT leer ( = unbenutzt --> leerzeile im text)
ausgabe = Str(.zeilennr) 'schreibt die zeilennummer in den ausgabestring
For x = LBound(.parameter) To UBound(.parameter) 'parameterarray auslesen
ausgabe += " " + .parameter(x) 'leerzeichen + parameter an ausgabesting anhängen
Next
EndIf
Return ausgabe
End With
End Property
Property tCNCzeile.zeile(z As String)
'zerlegt eine textzeile und schreibt die elemente in den UDT
Dim As Integer anfang, ende, x
With This
ReDim .parameter(0)
x = -1
If Len(z) Then 'keine leerzeie
z += " " 'leerzeichen anhängen, damit der parser funktioniert
ende = InStr(z, " ") 'zeiger auf leerzeichen nach der zeilennummer setzen
.zeilennr = Val(Left(z, ende)) 'zeilennummer isolieren
Do 'restlichen string auswerten
anfang = ende + 1 '"anfang"-zeiger auf anfang des nächsten parameters setzen
ende = InStr(anfang, z, " ") '"ende"-zeiger auf leerzeichen hinter dem parameter setzen
If ende = 0 Then 'kein weiterer parameter vorhanden
Exit Do 'schleife verlassen
Else
x += 1
ReDim Preserve .parameter(x) 'parameterarray erweitern
.parameter(x) = Mid(z, anfang, ende - anfang) 'parameter isoliern und in array schreiben
EndIf
Loop
EndIf
End With
End Property
ReDim As tCNCzeile ct(1) 'UDT - array anlegen
Dim As Integer index
Dim As String g, r
Open datei For Input As #1
index = 0
Do
index += 1
Line Input #1, g 'textzeile aus datei einlesen
Print g; "*" 'eingelesene zeile ausdrucken
ReDim Preserve ct(UBound(ct) + 1) 'UDT - array um ein element erweitern
ct(index).zeile = g 'textzeile in UDT - element schreiben
r = ct(index).zeile 'daten aus UDT - element auslesen und in textzeile zurückverwandeln
Print r; "*"', UBound(ct(index).parameter);" ";SizeOf(ct(index)) 'ausgelesene zeile ausdrucken
Print
Loop Until Eof(1)
Close #1
Sleep
'zur simulation der eingabe
bohren:
Data "CYCL DEF 1.0 TIEFBOHREN"
Data "CYCL DEF 1.1 ABST -2,000"
Data "CYCL DEF 1.2 TIEFE -2,000"
Data "CYCL DEF 1.3 ZUSTLG-1,000"
Data "CYCL DEF 1.4 V.ZEIT 1,000"
Data "CYCL DEF 1.5 F60"
Data "*"
Type tCNCsatz
As tCNCzeile zeile(Any)
As Integer anfangszeile
Declare Sub eingabe(art As String)
Declare Sub ausgabe(filenr As Integer, anfzeile As Integer)
End Type
Sub tCNCsatz.eingabe(art As String)
ReDim zeile(0)
Dim As Integer x = 0
Dim As String d
With This
Select Case art 'art des satzes auswählen
Case "bohren"
'zur demonstration eingabe aus DATA-zeilen. später steht hier die eingabemaske
Restore bohren
Do
Read d 'eine DATA - zeile einlesen
If d = "*" Then 'ende
Exit Do 'schleife verlassen
EndIf
ReDim Preserve .zeile(x) 'neuen UDT vom typ tCNCzeile erzeugen
.zeile(x).zeile = Str(x + 1) + " " + d 'anweisung mit zeilennummer ab 1 in UDT schreiben
x += 1 'index erhöhen
Loop
Case "werkzeug"
'...
'usw.
End Select
End With
End Sub
Sub tCNCsatz.ausgabe(filenr As Integer, anfzeile As Integer)
Dim As Integer x
Dim As String g
If filenr = 0 OrElse anfzeile = 0 Then 'fehlende angabe(n)
Return
EndIf
With This
For x = LBound(.zeile) To UBound(.zeile) 'alle zeilen des satzes
.zeile(x).zeilennr = anfzeile + x 'korrekte zeilennummer in unterarray schreiben
Print #filenr, .zeile(x).zeile 'zeile in datei schreiben
Next
End With
End Sub
'---------------------------
ReDim As tCNCsatz bohren(1) 'einen satz zur probe anlegen
bohren(1).eingabe("bohren") 'satz "bohren" erzeugen
Open ExePath + "\bohren.txt" For Output As #1 'ausgabedatei zum schreiben öffnen
bohren(1).ausgabe(1, 180) 'soeben erzeugten satz mit anfangszeilennummer 180 in datei #1 schreiben
Close #1 'ausgabedatei schliessen
Print "-----------------"
Open ExePath + "\bohren.txt" For Input As #1 'ausgabedatei zum lesen öffnen
Do 'datei ausdrucken
Line Input #1, g
Print g
Loop Until Eof(1)
Close #1
Sleep
|
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 26.12.2020, 16:39 Titel: |
|
|
Uffff hallo
Danke für die Mühe, nur scheint das was anderes zu sein, da kommen ja Befehle vor die es bei mir gar nicht gibt - das scheint dann wohl FreeBASIC zu sein oder? Ich Befasse mich nur mit QuickBasic
Hier mal ein Video von meinem Programm bisher. Was jetzt noch fehlt ist die Ausgabe in eine txt-Datei
https://www.youtube.com/watch?v=R6I5Y2q0vxM&feature=youtu.be
Wichtig ist dass man schnell nur mit Tasteneingabe die Zyklen schreiben kann. so ist die orignale Programmierung direkt an der Mschine gelöst. Da hat man für jeden einzelnen Zyklus eine extra Taste mit welcher man den Dialog beginnt und dann mit einem Zahlenblock die Eingaben vornimmt.
Meine Programm bildet dieses Schema fast genau so ab.
Servus
Markus |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 26.12.2020, 18:18 Titel: |
|
|
Grindstones Code ist in FreeBASIC, aber ich denke, das meiste kann man ohne große Probleme in QBasic "zurückübersetzen". Leider bin ich aus QBasic schon lange draußen und kann da jetzt nicht viel sagen.
Die erste Zeile kannst du in zwei Programmzeilen aufspalten (einmal das DIM und einmal die Zuweisung). Ob QBasic bei den UDTs mehr kann als nur Variablen gruppieren, weiß ich nicht - die Properties würden sich jedenfalls auch durch Prozeduren ersetzen lassen, denen man dann noch zusätzlich das entsprechende Objekt mitgeben muss. THIS kennt QBasic vermutlich auch nicht, aber das wird dann beim Umschreiben in Prozeduren sowieso hinfällig.
Vielleicht hilft dir das etwas weiter. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 26.12.2020, 19:24 Titel: |
|
|
Am besten einmal den bisherigen Quellcode zur Verfügung stellen.
Ansonsten wäre FreeBasic die bessere Wahl, weil es auch auf einem modernen Windows 10-Rechner in 64-Bit läuft, ausser Du willst ein Computermuseum mit MS-DOS 6.22-Rechnern pflegen...
Vielleicht auch bekanntgeben, in welcher Form letztlich die CNC-Maschine die Daten entgegenimmt (Diskette? Serielle Schnittstelle? Oder hätte es bereits einen USB-Port für einen Stick? Oder gar mit IP-Adresse ins LAN eingebunden?). _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 26.12.2020, 21:53 Titel: |
|
|
dreael hat Folgendes geschrieben: |
Vielleicht auch bekanntgeben, in welcher Form letztlich die CNC-Maschine die Daten entgegenimmt (Diskette? Serielle Schnittstelle? Oder hätte es bereits einen USB-Port für einen Stick? Oder gar mit IP-Adresse ins LAN eingebunden?). |
Man muss direkt den PC über die serielle Schnittstelle (v.24) verbinden und kann mittels einer Software vom Hersteller die .txt-Datei dann übertragen.
Von daher ist es also sowieso sinnvoll einen alten Rechner zu verwenden.
Ansonsten kann mein Basic-Programm auch in einer DosBox laufen auf modernem System. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 27.12.2020, 00:37 Titel: |
|
|
derampcsitzt hat Folgendes geschrieben: | ...das scheint dann wohl FreeBASIC zu sein oder? | Ja, entschuldige. Daß das hier das Unterforum QBasic ist, hatte ich glatt übersehen.
Allerdings schliesse ich mich dreael an, du solltest dir freeBasic zumindest einmal ansehen. Der FB - Compiler hat unter anderem eine QB - Option, mit der er auch QBasic - Quelltexte verarbeiten kann, du kannst also sofort loslegen.
Von den vielen Vorteilen von freeBasic möchte ich hier nur zwei aufzählen: Einmal bekommst du ausführbare .exe - Dateien, die um mindestens den Faktor 100 schneller laufen als der QB - Interpreter, zum anderen hast du die Auswahl zwischen mehreren zeitgemässen Editoren, denn der originale QB - Editor ist -zumindest meiner bescheidenen Meinung nach- nach heutigen Maßstäben eine Zumutung.
Weitere Vorteile von FB wie der Wegfall der 64kB-Grenze, eingebaute Maus- und Joystickabfrage und Zugriff auf die WinAPI seien hier nur am Rande erwähnt.
Das Umschreiben der QB-Quelltexte auf FB ist kein Hexenwerk, ich bin seinerzeit selbst umgestiegen und kann dir falls erforderlich meine Hilfe anbieten.
Trotzdem habe ich hier -für alle Fälle- den QB-Interpreter griffbereit. Wenn du deinen QB - Quelltext posten würdest (sofern es kein Geheimnis ist), könnte ich mal einen Blick drauf werfen.
Ansonsten schöne Restweihnachten und bleib gesund!
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 27.12.2020, 01:08 Titel: |
|
|
Danke für die Hilfe, werde aber wohl bei QuickBasic bleiben. Ich mag die alte Technik und arbeite damit an meinen alten Pentium-Rechnern Eigentlich habe ich gar keine Zeit für die ganzen Scherze und das Projekt hier läuft eh völlig aus dem Ruder und mich da jetzt noch mit einer "neuen" Sprache beschäftigen...
Habe da jetzt sau viel Quellcode schon geschrieben und bin soweit dass meine Inhalte in eine Datei geschrieben werden und somit das Programm eigentlich fast Einsatzbereit ist für's Erste.
Trau mich eigentlich gar nicht das ganze zu zeigen so chaotisch wie das bei mir geschrieben ist - da flieg ich hochkant ausm Forum und mein Internet wird gelöscht
Was jetzt aber wirklich noch nach extrem viel Arbeit aussieht: Beim Einlesen einer so formatierten .txt -Datei in meine Variablen (egal wie man die jetzt anlegt) steht man vor dem Problem dass man zwar Satz für Satz einliest aber man beim Einlesen NICHT weiß wie der Satz formatiert ist und somit die Trennung der einzelnen Satzteile total aufwändig wird...
Um das mal zu verdeutlichen zwei unterschiedliche Zyklen direkt aus der fertigen txt-Datei:
25 TOOL DEF 33 L +265,600
26 TOOL DEF 33 R +13,875
29 A Z+270,000 R0 F1000 M5
WEnn ich die Daten ERSTELLE wird mit Input der Nutzer nach einander nach folgenden Werten gefragt:
------erster Zyklus
welcher Zyklus? -> TOOL DEF -> kommt ins Array$(zeile,0)
Werkzeugnummer? -> 33 -> kommt ins Array$(zeile,1)
Länge? ->L+265,600 -> kommt ins Array$(zeile,2)
Radius? ->R+13,875 -> kommt ins Array$(zeile,3)
-------zweiter Zyklus
welcher Zyklus? -> A -> kommt ins Array$(zeile,0)
X /Y/ Z ? ->Z -> kommt ins Array$(zeile,1)
Wert eingeben ->+270,000 kommt ins Array$(zeile,2)
R+/R-/R0? -> R0 kommt ins Array$(zeile,3)
Vorschub? ->F1000 kommt ins Array$(zeile,4)
M-Befehl? ->M5 kommt ins Array$(zeile,5)
Das Array wird dan über eine einfache schleife auf dem Bildschirm Zeilenweise dargestellt und ebenso in die Datei gespeichert wobei die Leerzeichen IM Array mit dem eingegebenen Werten gespeichert werden(war ne riesen arbeit für jede Zyklusart eine eigene Sub zu erstellen welche die Daten richtig in das Array formatiert)
Nur wenn ich jetzt solche Sätze aus einer Datei einlesen will in mein Array - wie mache ich das? |
|
Nach oben |
|
|
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 27.12.2020, 02:59 Titel: |
|
|
Bin jetzt grade dabei meine Formatierung zu überarbeiten (Habe den Befehl "Space$(...)" Entdeckt )
Die einzelne Sätze beim Einlesen aus der Datei werde ich wohl anhand des ersten Buchstaben je Zeile unterscheiden und dann mit Programmverzweigungen entsprechen den Satz richtig formatiert in das Array einlesen - das heißt je nach Satzaufbau muss der Satz in unterschiedlich lange Teile zerlegt werden - das wird ein haufen Zählerei geben... |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 27.12.2020, 20:45 Titel: |
|
|
derampcsitzt hat Folgendes geschrieben: | Man muss direkt den PC über die serielle Schnittstelle (v.24) verbinden und kann mittels einer Software vom Hersteller die .txt-Datei dann übertragen. |
Nur zur Info: Die von mir genannte ThinkCentre M57-Hardware besitzt immer noch einen richtigen seriellen Port. Dieser funktioniert auch unter 64 Bit bestens. Kann beispielsweise mit PuTTY getestet werden.
Mittlerweile auch geeignet: Diese USB->RS232-Adapter. Mit solchen habe ich auch schon gearbeitet, z.B. Cisco-ähnliche Netzwerkhardware mittels CLI-Konsole konfigrurieren. Einen solchen würde ich auch einmal testen (kostet nur wenige Euro) und schon eignet sich auch das moderne Windows 10-Notebook für die Ansteuerung Deiner Werkzeugmaschine.
derampcsitzt hat Folgendes geschrieben: | Danke für die Hilfe, werde aber wohl bei QuickBasic bleiben. Ich mag die alte Technik und arbeite damit an meinen alten Pentium-Rechnern ;) |
Dann würde ich mich an Deiner Stelle mit Ersatz-Hardware aus EBay eindecken. ;-)
derampcsitzt hat Folgendes geschrieben: | Habe da jetzt sau viel Quellcode schon geschrieben und bin soweit dass meine Inhalte in eine Datei geschrieben werden und somit das Programm eigentlich fast Einsatzbereit ist für's Erste.
Trau mich eigentlich gar nicht das ganze zu zeigen so chaotisch wie das bei mir geschrieben ist - da flieg ich hochkant ausm Forum und mein Internet wird gelöscht :x |
Solche Ängste musst Du hier nicht haben. Jeder fängt einmal ganz vorne an.
Wir kennen zwar Deinen Quellcode nicht, aber möglicherweise trifft das Eine oder Andere aus
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Anfaengerfehler.html
zu. In Python-Tutorials liest man nicht vergeblich: "Don't repeat yourself.", d.h. Copy&Paste-Code sollte vermieden werden.
Zum eigentlichen Problem: Im Grunde genommen braucht es für so einen Editor Listen. Denn Listen (nicht mit Arrays zu verwechseln!) unterstützen Dinge wie insertElement(), append() und deleteElement(). Dann muss die .txt-Speicherroutine nur noch einen For Each über alle Listenelemente machen.
Ich meinte, dass hier im Forum auch schon FreeBasic-Projekte für Listen vorgestellt wurden. Und natürlich Java und Python kennen Listen auf jeden Fall. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 27.12.2020, 22:37 Titel: |
|
|
Den Quellcode kann ich ja hier nicht einfach so reinstellen und die Datei hochladen geht ja auch nicht hier... |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 27.12.2020, 23:04 Titel: |
|
|
Hallo,
Quellcode kannst du einfach hier rein kopieren.
Am besten du setzt in deinem Posting Code-Tags drum herum:
Aus
[code]
Print "Hallo Welt"
Sleep
End
[/code]
wird
Code: | Print "Hallo Welt"
Sleep
End |
Wenn du in QBasic deinen Quelltext im Textformat statt Binär speicherst, kannst du die BAS-Datei zum Beispiel mit dem Windows-Editor notepad öffnen und den Inhalt ins Forum kopieren.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 27.12.2020, 23:40 Titel: |
|
|
Sebastian hat Folgendes geschrieben: | Hallo,
Quellcode kannst du einfach hier rein kopieren.
Viele Grüße!
Sebastian |
Äh das sind gefühlt 3000 Seiten Quellcode und in zig verschiedenen SUB's verteilt
EDIT: Geht ja doch
Code: |
DECLARE SUB menu2 ()
DECLARE SUB polkoord ()
DECLARE SUB Pol ()
DECLARE SUB lblset ()
DECLARE SUB lblcall ()
DECLARE SUB wkzVerw ()
DECLARE SUB cyclstop ()
DECLARE SUB Vzeit ()
DECLARE SUB TCall ()
DECLARE SUB satzspeichern ()
DECLARE SUB Tiefbohren ()
DECLARE SUB Gewbohren ()
DECLARE SUB Nuten ()
DECLARE SUB Taschen ()
DECLARE SUB tooldef ()
DECLARE SUB eingzeigen ()
DECLARE SUB zeiledazu ()
DECLARE SUB satzschreiben ()
DECLARE SUB cyclcall ()
10 CLS : COLOR 10, 8
20 DIM tb$(4)
30 DIM gb$(3)
40 DIM nf$(5)
45 DIM tf$(5)
90 DIM ai$(3)
100 DIM SHARED zeileeing%: zeileeing% = 11 'Zeilennummer fr die locate "Eingabezeile"
140 DIM SHARED eingtrue% 'wird auf 1 gesetzt wenn satzschreiben aktiv
150 DIM SHARED zeile%: zeile% = 1
151 DIM SHARED satztemp$(8) 'bei Dateneingabe werden hier der Satz gespeichert
160 DIM tastea$
170 DIM SHARED inhalta$(801, 8)
DIM SHARED zyklen$(1 TO 15)
zyklen$(1) = "TOOL DEF "
zyklen$(2) = "TOOL CALL"
zyklen$(3) = "A "
zyklen$(4) = "I "
zyklen$(5) = "CYCL DEF 5."
zyklen$(6) = "CYCL DEF 6."
zyklen$(7) = "CYCL DEF 1."
zyklen$(8) = "STOP "
zyklen$(9) = "CYCL DEF 3."
zyklen$(10) = "CYCL DEF 4."
zyklen$(11) = "CYCL DEF 9."
zyklen$(12) = "CYCL DEF 2."
zyklen$(13) = "LBL "
zyklen$(14) = "CALL LBL "
180 zeile% = 1
181 FOR test% = 0 TO 100
182 FOR ywei% = 0 TO 8
183 inhalta$(test%, ywei%) = "": NEXT ywei%
188 NEXT test%
'schleifenbeginn/////////////////////////////////////////////////
300 DO UNTIL tastea$ = CHR$(27) '"q"
305
310 'IF eingtrue% = 1 THEN GOTO 506
400 tastea$ = INKEY$
410 IF tastea$ = CHR$(27) THEN CLS : END
SELECT CASE tastea$
CASE CHR$(0) + CHR$(77)
eingtrue% = 1
CALL satzschreiben
LOCATE 12, 5
CASE "<"
CALL menu2
END SELECT
IF eingtrue% > 0 THEN GOTO 430
420 SELECT CASE tastea$
CASE CHR$(0) + CHR$(82): CALL zeiledazu 'leere Zeile hinzufgen
CASE CHR$(0) + CHR$(80): zeile% = zeile% + 1 'aktuell Zeile verschieben
CASE CHR$(0) + CHR$(72): zeile% = zeile% - 1 'aktuelle Zeile verschieben
CASE CHR$(0) + CHR$(71): LOCATE zeileeing%, 5: COLOR 7, 1 'Springe zu Satz?
CASE "w"
CALL wkzVerw
GOTO 9999
'PRINT "Abbrechen mit e"
INPUT "Gehe zu Zeile (1 bis 800) ", gehe%
IF gehe% > 0 AND gehe% < 801 THEN zeile% = gehe%
END SELECT
430 IF zeile% < 1 THEN zeile% = 1
440 IF zeile% > 800 THEN zeile% = 800
CALL eingzeigen
'END IF
9999 SLEEP .1: LOOP
END
SUB cyclcall
END SUB
SUB cyclstop
650 CALL eingzeigen
52 satztemp$(0) = zyklen$(8)
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "M-Befehl eingeben (leer fr keinen)", eingabe$
IF eingabe$ = "q" THEN
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
ELSEIF LEN(eingabe$) > 0 AND LEN(eingabe$) < 3 THEN
satztemp$(1) = eingabe$
ELSEIF eingabe$ = "" THEN
satztemp$(1) = ""
ELSE GOTO 650
END IF
FOR ui% = 2 TO 8
satztemp$(ui%) = ""
NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB datinput
END SUB
SUB eingzeigen
COLOR 10, 0: CLS
'IF eingtrue% > 0 THEN LOCATE (zeileeing% - 1), 25: COLOR 7, 4: PRINT "Eingabemodus"
LOCATE 2, 6: COLOR 10, 0
az% = 2 'anfangswert fur erste Zeile auf Bildschirm
FOR aa% = -4 TO 4
IF aa% = 0 THEN COLOR 11, 6
IF zeile% + aa% < 1 THEN GOTO 900
IF zeile% + aa% > 800 THEN GOTO 900
LOCATE az%, 1: PRINT zeile% + aa%
cc% = 4
FOR schreib% = 0 TO 6
LOCATE az%, cc%: PRINT inhalta$(zeile% + aa%, schreib%)
cc% = cc% + LEN(inhalta$(zeile% + aa%, schreib%))'z„hlt cursorposition nach rechts
NEXT schreib%
900 COLOR 10, 0
az% = az% + 1: NEXT aa%
LOCATE 1, 20: COLOR 3, 1
SELECT CASE eingtrue%
CASE 0: PRINT "Hauptmen"
CASE 1: PRINT "Satz neu schreiben"
END SELECT
FOR te% = 0 TO 7
LOCATE (te% + 2), 50
PRINT satztemp$(te%)
NEXT te%
'------tempor„ren Satz bei eingabe anzeigen------
LOCATE (zeileeing% + 1), 2
FOR tf% = 0 TO 7
COLOR 3, 1: PRINT satztemp$(tf%);
NEXT tf%
LOCATE zeileeing% + 2, 1 'LINIE ERZEUGEN
FOR linie% = 1 TO 80
PRINT CHR$(61);
NEXT linie%
IF eingtrue% = 0 THEN GOTO 1004
905 LOCATE (zeileeing% + 4), 3
910 COLOR 3, 8: PRINT "|Befehl/Zyklus"; " |TASTE|"
920 COLOR 7, 8
LOCATE , 3: PRINT CHR$(179); "Werkzeug Definition "; CHR$(179); " L "; CHR$(186)
930 LOCATE , 3: PRINT CHR$(179); "Werkzeug Aufruf "; CHR$(179); " T "; CHR$(186)
940 LOCATE , 3: PRINT CHR$(179); "Absolut/Inkremental "; CHR$(179); " A/I "; CHR$(186)
950 LOCATE , 3: PRINT CHR$(179); "Polarkoordinaten "; CHR$(179); " P "; CHR$(186)
960 LOCATE , 3: PRINT CHR$(179); "Pol "; CHR$(179); " M "; CHR$(186)
970 LOCATE , 3: PRINT CHR$(179); "Tiefbohren "; CHR$(179); " B "; CHR$(186)
LOCATE , 3: PRINT CHR$(179); "STOP "; CHR$(179); " S "; CHR$(186)
LOCATE (zeileeing% + 4), 35: COLOR 3, 8
PRINT "|Befehl/Zyklus"; " |TASTE|": COLOR 7, 8
980 LOCATE (zeileeing% + 5), 35
990 LOCATE , 35: PRINT CHR$(186); "Nutenfraesen "; CHR$(179); " N "; CHR$(179)
1000 LOCATE , 35: PRINT CHR$(186); "Taschenfraesen "; CHR$(179); " D "; CHR$(179)
LOCATE , 35: PRINT CHR$(186); "Verweilzeit "; CHR$(179); " V "; CHR$(179)
LOCATE , 35: PRINT CHR$(186); "Gewindebohren "; CHR$(179); " G "; CHR$(179)
LOCATE , 35: PRINT CHR$(186); "Label setzen "; CHR$(179); " K "; CHR$(179)
1002 LOCATE , 35: PRINT CHR$(186); "Label aufrufen "; CHR$(179); " C "; CHR$(179)
LOCATE , 35: PRINT CHR$(186); "Abbruch ohne Eingabe "; CHR$(179); " Q "; CHR$(179)
1003 COLOR 10, 0
GOTO 1005
1004 FOR striche% = 0 TO 8
COLOR 7, 8
LOCATE (zeileeing% + 4 + striche%), 31: PRINT CHR$(179) '"|"
LOCATE (zeileeing% + 4 + striche%), 39: PRINT CHR$(179)'"|"
LOCATE (zeileeing% + 4 + striche%), 1: PRINT CHR$(179)'"|"
NEXT striche%
LOCATE (zeileeing% + 4), 2
COLOR 3, 8: PRINT " BEFEHL": LOCATE (zeileeing% + 4), 33: PRINT "TASTE"
COLOR 7, 8: LOCATE , 4: PRINT "vorherigen Satz anw„hlen";
LOCATE (zeileeing% + 5), 35: PRINT CHR$(24)
COLOR 7, 8: LOCATE , 4: PRINT "n„chsten Satz anw„hlen "
LOCATE (zeileeing% + 6), 35: PRINT CHR$(25)
COLOR 7, 8: LOCATE , 4: PRINT "Satz neu schreiben"
LOCATE (zeileeing% + 7), 35: PRINT CHR$(26)
COLOR 7, 8: LOCATE , 4: PRINT "Leeren Satz hinzufgen"
LOCATE (zeileeing% + 8), 33: PRINT "Einfg"
COLOR 7, 8: LOCATE , 4: PRINT "Programm Beenden"
LOCATE (zeileeing% + 9), 33: PRINT "ESC"
COLOR 7, 8: LOCATE , 4: PRINT "Springe zu Satznummer:"
LOCATE (zeileeing% + 10), 33: PRINT "Pos1"
COLOR 7, 8: LOCATE , 4: PRINT "Hilfeseite aufrufen"
LOCATE (zeileeing% + 11), 33: PRINT " H"
COLOR 7, 8: LOCATE , 4: PRINT "Dateimen aufrufen"
LOCATE (zeileeing% + 12), 33: PRINT " <"
1005 PRINT
END SUB
SUB Gewbohren
250 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Sicherheitsabstand eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(12)
satztemp$(1) = "0 GEWINDEBOHREN "
satztemp$(2) = "1 ABST " + eingabe$
ELSE GOTO 250
END IF
251 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "TIEFE eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(3) = "2 TIEFE " + eingabe$
ELSE GOTO 251
END IF
253 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Verweilzeit eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 3 THEN
satztemp$(4) = "3 V.ZEIT " + eingabe$
ELSE GOTO 253
END IF
254 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "VORSCHUB F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(5) = "4 F" + eingabe$
ELSE GOTO 254
END IF
FOR ui% = 6 TO 8
satztemp$(ui%) = ""
NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB lblcall
670 CALL eingzeigen
satztemp$(0) = zyklen$(14)
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "Label-Nr eingeben ", eingabe$
IF eingabe$ = "q" THEN
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
ELSEIF LEN(eingabe$) > 0 AND LEN(eingabe$) < 4 THEN
satztemp$(1) = eingabe$
'ELSEIF eingabe$ = "" THEN
' satztemp$(1) = ""
ELSE GOTO 670
END IF
CALL eingzeigen
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "Wiederholungen eingeben ", eingabe$
IF eingabe$ = "q" THEN
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
ELSEIF LEN(eingabe$) > 0 AND LEN(eingabe$) < 4 THEN
satztemp$(2) = " Rep "
satztemp$(3) = eingabe$
ELSEIF eingabe$ = "" THEN
satztemp$(2) = " Rep "
satztemp$(3) = "0"
ELSE GOTO 670
END IF
FOR ui% = 4 TO 8
satztemp$(ui%) = ""
NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB lblset
CLS
COLOR 9, 7
PRINT "-------------"
PRINT "N"; ""; "N"
PRINT "N"; " "; "N"
PRINT "__________"
SLEEP
END SUB
SUB menu2
DO UNTIL eing$ = "e"
eing$ = INKEY$
COLOR 0, 7: CLS
LOCATE 2, 3: COLOR 15, 5
PRINT "Speichern(S) ™ffnen(O) Laufwerk ausw„hlen(L) Hauptmen"
PRINT "-----------------------------------------------------------------"
COLOR 6, 7: PRINT "abcedne”ljha”oj"
IF eing$ = "s" THEN GOSUB 1200
'chdir
SLEEP
LOOP
GOTO 2000
'SLEEP
'END
'--------------S„tze aus Datei holen-----------------
'1100 OPEN "cncprg.txt" FOR INPUT AS #2
'for
'--------------S„tze in Datei schreiben und speichern-------
1200 OPEN "cncprg.txt" FOR OUTPUT AS #1
FOR ausg% = 1 TO 800
PRINT 1#, ausg%;
PRINT ausg%;
FOR acht% = 0 TO 7
PRINT #1, inhalta$(ausg%, acht%); ' : NEXT acht%
PRINT inhalta$(ausg%, acht%); : NEXT acht%
PRINT #1, inhalta$(ausg%, 8)
PRINT inhalta$(ausg%, 8)
NEXT ausg%
CLOSE #1
RETURN
2000 END SUB
SUB Nuten
560 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Sicherheitsabstand eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(9)
satztemp$(1) = "0 NUTENFRAESEN "
satztemp$(2) = "1 ABST " + eingabe$
ELSE GOTO 560
END IF
562 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "TIEFE eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(3) = "2 TIEFE " + eingabe$
ELSE GOTO 562
END IF
563 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "ZUSTELLUNG eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(4) = "3 ZUSTLG " + eingabe$
ELSE GOTO 563
END IF
564 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "1. Seitenl„nge eingeben mit X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
SELECT CASE LEFT$(eingabe$, 1)
CASE "x"
satztemp$(5) = "4 X " + MID$(eingabe$, 2, LEN(eingabe$))
CASE "y"
satztemp$(5) = "4 Y " + MID$(eingabe$, 2, LEN(eingabe$))
CASE "z"
satztemp$(5) = "4 Z " + MID$(eingabe$, 2, LEN(eingabe$))
CASE ELSE
GOTO 564
END SELECT
565 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "2. Seitenl„nge eingeben mit X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
SELECT CASE LEFT$(eingabe$, 1)
CASE "x"
satztemp$(6) = "5 X " + MID$(eingabe$, 2, LEN(eingabe$))
CASE "y"
satztemp$(6) = "5 Y " + MID$(eingabe$, 2, LEN(eingabe$))
CASE "z"
satztemp$(6) = "5 Z " + MID$(eingabe$, 2, LEN(eingabe$))
CASE ELSE
GOTO 565
END SELECT
566 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "VORSCHUB F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(7) = "6 F " + eingabe$
ELSE GOTO 566
END IF
'FOR ui% = 7 TO 8
satztemp$(8) = ""
'NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB Pol
780 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "POL 1. Koordinate eingeben (a/i und x/y/z Pflichteingabe! ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
SELECT CASE LEFT$(eingabe$, 2)
CASE "ax", "ay", "az", "ix", "iy", "iz"
satztemp$(0) = zyklen$(6)
satztemp$(1) = "0 POL "
satztemp$(2) = "1 " + UCASE$(LEFT$(eingabe$, 1)) + " "
satztemp$(3) = UCASE$(MID$(eingabe$, 2, 1)) + " "
satztemp$(4) = MID$(eingabe$, 3, LEN(eingabe$)) + " "
CASE ELSE
GOTO 780
END SELECT
782 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "POL 2. Koordinate eingeben (a/i und x/y/z Pflichteingabe! ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
SELECT CASE LEFT$(eingabe$, 2)
CASE "ax", "ay", "az", "ix", "iy", "iz"
'satztemp$(5) = "0 POL "
satztemp$(6) = "2 " + UCASE$(LEFT$(eingabe$, 1)) + " "
satztemp$(7) = UCASE$(MID$(eingabe$, 2, 1)) + " "
satztemp$(8) = MID$(eingabe$, 3, LEN(eingabe$)) + " "
CASE ELSE
GOTO 782
END SELECT
'FOR ui% = 5 TO 8
'satztemp$(ui%) = ""
'NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB polkoord
850 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "POLAR-RADIUS eingeben (a/i Pflichteingabe!) ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
SELECT CASE LEFT$(eingabe$, 1)
CASE "a", "i"
satztemp$(0) = zyklen$(5)
satztemp$(1) = "0 POLAR_KOORD."
satztemp$(2) = "1 " + UCASE$(LEFT$(eingabe$, 1)) + " P.R. "
satztemp$(3) = MID$(eingabe$, 2, LEN(eingabe$)) + " "
CASE ELSE
GOTO 850
END SELECT
852 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "POLAR-WINKEL eingeben (a/i Pflichteingabe! ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
SELECT CASE LEFT$(eingabe$, 1)
CASE "a", "i"
satztemp$(4) = "2 " + UCASE$(LEFT$(eingabe$, 1)) + " P.W. "
satztemp$(5) = MID$(eingabe$, 2, LEN(eingabe$))
CASE ELSE
GOTO 852
END SELECT
854 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Vorschub F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) > 0 AND LEN(eingabe$) < 5 THEN
satztemp$(6) = "3 F "
satztemp$(7) = eingabe$
ELSE
GOTO 854
END IF
856 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "M-Befehl eingeben (leer fr keinen) ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 3 THEN
satztemp$(8) = " F" + eingabe$
ELSE
GOTO 856
END IF
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB satzschreiben
eingtrue% = 1
888 CALL eingzeigen
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "Waehle Zyklus bzw Befehl "; eingabe$
CALL eingzeigen
SELECT CASE eingabe$
CASE "q"
eingtrue% = 0
EXIT SUB
CASE "l"
CALL tooldef: EXIT SUB
CASE "b"
CALL Tiefbohren: EXIT SUB
CASE "g"
CALL Gewbohren: EXIT SUB
CASE "n"
CALL Nuten: EXIT SUB
CASE "d"
CALL Taschen: EXIT SUB
CASE "t"
CALL TCall: EXIT SUB
CASE "v"
CALL Vzeit: EXIT SUB
CASE "a"
satztemp$(0) = zyklen$(3)
CASE "i"
satztemp$(0) = zyklen$(4)
CASE "s"
CALL cyclstop: EXIT SUB
CASE "k"
CALL lblset: EXIT SUB
CASE "c"
CALL lblcall: EXIT SUB
CASE "w"
CALL cyclcall: EXIT SUB
CASE "m"
CALL Pol: EXIT SUB
CASE "p"
CALL polkoord: EXIT SUB
CASE ELSE 'wird falsche eingabe gemacht springe zu Anfang der Abfrage
GOTO 888
END SELECT
889 CALL eingzeigen '----------Wert Eingabe abfragen x z oder y
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
CASE "x"
satztemp$(1) = "X"
CASE "y"
satztemp$(1) = "Y"
CASE "z"
satztemp$(1) = "Z"
CASE ELSE
GOTO 889
CALL eingzeigen
END SELECT
890 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Wert eingeben(+ bzw -eingeben!): ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
CASE ELSE: satztemp$(2) = eingabe$ + SPACE$(10 - LEN(eingabe$))
CALL eingzeigen
END SELECT
891 CALL eingzeigen: LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "R + oder - oder 0 : ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
CASE "+"
satztemp$(3) = "R" + eingabe$
CASE "-"
satztemp$(3) = "R" + eingabe$
CASE "0"
satztemp$(3) = "R" + eingabe$
CASE ""
satztemp$(3) = "R0"
CASE ELSE: GOTO 891
CALL eingzeigen
END SELECT
892 CALL eingzeigen: LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "Vorschub F eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(4) = " F" + eingabe$ + SPACE$(5 - LEN(eingabe$))
ELSE GOTO 892
END IF
893 CALL eingzeigen: LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "M-Befehl (leer fuer keinen): ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 3 THEN
satztemp$(5) = " M" + eingabe$
ELSE GOTO 893
END IF
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
999 END SUB
SUB satzspeichern
CALL eingzeigen
COLOR 5, 7: LOCATE zeileeing%, 5
INPUT "Satz: ueberschreiben:u/einfuegen:e/Abbrechen:q ", eingabe$
IF eingabe$ = "" THEN eingabe$ = "e"
IF eingabe$ = "q" THEN ERASE satztemp$: EXIT SUB
SELECT CASE satztemp$(0)
'------------Zyklen mit einem Satz speichern-----------
CASE zyklen$(2), zyklen$(3), zyklen$(4), zyklen$(8), zyklen$(13), zyklen$(14), zyklen$(15)
IF eingabe$ = "e" THEN CALL zeiledazu
FOR speich% = 0 TO 8
inhalta$(zeile%, speich%) = satztemp$(speich%)
NEXT speich%
zeile% = zeile% + 1
'-------------ToolDEF-Zyklus mit zwei S„tzen speichern---------
CASE zyklen$(1)
IF eingabe$ = "e" THEN FOR leerz% = 1 TO 2: CALL zeiledazu: NEXT leerz%
FOR erste% = 0 TO 3
inhalta$(zeile%, erste%) = satztemp$(erste%): NEXT erste%
inhalta$(zeile% + 1, 0) = satztemp$(0)
inhalta$(zeile% + 1, 1) = satztemp$(1)
inhalta$(zeile% + 1, 2) = satztemp$(4)
inhalta$(zeile% + 1, 3) = satztemp$(5)
zeile% = zeile% + 2
'----------------VZeit -Zyklus mit zwei S„tzen speichern----------
CASE zyklen$(11)
IF eingabe$ = "e" THEN FOR leerz% = 1 TO 2: CALL zeiledazu: NEXT leerz%
FOR erste% = 0 TO 1
inhalta$(zeile%, erste%) = satztemp$(erste%): NEXT erste%
inhalta$(zeile% + 1, 0) = satztemp$(0)
inhalta$(zeile% + 1, 1) = satztemp$(2)
inhalta$(zeile% + 1, 2) = satztemp$(3)
zeile% = zeile% + 2
'----------------Zyklus(Pol) mit drei S„tzen speichern-----------
CASE zyklen$(6)
IF eingabe$ = "e" THEN FOR leerz% = 1 TO 3: CALL zeiledazu: NEXT leerz%
inhalta$(zeile%, 0) = satztemp$(0)
inhalta$(zeile%, 1) = satztemp$(1)
inhalta$(zeile% + 1, 0) = satztemp$(0)
FOR speich% = 2 TO 4
inhalta$(zeile% + 1, speich%) = satztemp$(speich%): NEXT speich%
inhalta$(zeile% + 2, 0) = satztemp$(0)
FOR speich2% = 1 TO 4
inhalta$(zeile% + 2, speich2%) = satztemp$(speich2% + 4): NEXT speich2%
zeile% = zeile% + 3
'----------------Zyklus(Pol-Koordinaten) mit vier S„tzen speichern-----------
CASE zyklen$(5)
IF eingabe$ = "e" THEN FOR leerz% = 1 TO 4: CALL zeiledazu: NEXT leerz%
inhalta$(zeile%, 0) = satztemp$(0)
inhalta$(zeile%, 1) = satztemp$(1)
inhalta$(zeile% + 1, 0) = satztemp$(0)
FOR speich% = 1 TO 2
inhalta$(zeile% + 1, speich%) = satztemp$(speich% + 1)
inhalta$(zeile% + 2, speich%) = satztemp$(speich% + 3)
inhalta$(zeile% + 3, speich%) = satztemp$(speich% + 5): NEXT speich%
inhalta$(zeile% + 2, 0) = satztemp$(0)
inhalta$(zeile% + 3, 0) = satztemp$(0)
zeile% = zeile% + 4
'------------bohrzyklus --------
CASE zyklen$(7)
IF eingabe$ = "e" THEN FOR leerezeilen% = 1 TO 6: CALL zeiledazu: NEXT leerezeilen%
FOR speich% = 0 TO 5
inhalta$(zeile% + speich%, 0) = satztemp$(0)
inhalta$(zeile% + speich%, 1) = satztemp$(1 + speich%)
FOR rl% = 2 TO 8
inhalta$(zeile% + speich%, rl%) = "": NEXT rl%
NEXT speich%
zeile% = zeile% + 6
'-----------------Gewindebohrzyklus----------
CASE zyklen$(12)
IF eingabe$ = "e" THEN FOR leerezeilen% = 1 TO 5: CALL zeiledazu: NEXT leerezeilen%
FOR speich% = 0 TO 4
inhalta$(zeile% + speich%, 0) = satztemp$(0)
inhalta$(zeile% + speich%, 1) = satztemp$(1 + speich%)
FOR rl% = 2 TO 8
inhalta$(zeile% + speich%, rl%) = "": NEXT rl%
NEXT speich%
zeile% = zeile% + 5
'----------------Taschen und Nutenzyklus
CASE zyklen$(9), zyklen$(10)
IF eingabe$ = "e" THEN FOR leerezeilen% = 1 TO 7: CALL zeiledazu: NEXT leerezeilen%
FOR speich% = 0 TO 6
inhalta$(zeile% + speich%, 0) = satztemp$(0)
inhalta$(zeile% + speich%, 1) = satztemp$(1 + speich%)
FOR rl% = 2 TO 8
inhalta$(zeile% + speich%, rl%) = "": NEXT rl%
NEXT speich%
zeile% = zeile% + 7
END SELECT
ERASE satztemp$
END SUB
SUB satzspeichernalt
'--------Werkzeugdefinition---------
500 CALL eingzeigen
COLOR 5, 7: LOCATE zeileeing%, 5
INPUT "Satz: ueberschreiben:u/einfuegen:e/Abbrechen:q ", eingabe$
IF satztemp$(0) = "TOOL DEF " AND eingabe$ = "u" THEN
FOR ka% = 0 TO 3
inhalta$(zeile%, ka%) = satztemp$(ka%)
NEXT ka%
FOR ka% = 4 TO 8
inhalta$(zeile%, ka%) = ""
inhalta$(zeile% + 1, ka%) = ""
NEXT ka%
inhalta$(zeile% + 1, 0) = "TOOL DEF ": inhalta$(zeile% + 1, 1) = satztemp$(1)
inhalta$(zeile% + 1, 2) = " R ": inhalta$(zeile% + 1, 3) = satztemp$(5)
ELSEIF satztemp$(0) = "TOOL DEF " AND eingabe$ = "e" THEN
inhalta$(zeile%, 0) = "TOOL DEF ": inhalta$(zeile%, 1) = satztemp$(1)
inhalta$(zeile%, 2) = " R ": inhalta$(zeile%, 3) = satztemp$(5)
CALL zeiledazu
FOR ka% = 0 TO 3
inhalta$(zeile%, ka%) = satztemp$(ka%)
NEXT ka%
FOR ka% = 4 TO 8
inhalta$(zeile%, ka%) = ""
NEXT ka%
zeile% = zeile% + 2
'------------bohrzyklus --------
ELSEIF satztemp$(0) = "CYCL DEF 1." AND eingabe$ = "u" THEN
505 FOR kc% = 0 TO 5 'schleife fr sechs S„tze Werte zuweisen
inhalta$(zeile% + kc%, 1) = satztemp$(kc% + 1)
NEXT kc%
FOR kb% = 0 TO 5 'schleife fr sechs S„tze die leeren Stellen l”schen
FOR ka% = 2 TO 8 'je Satz Stellen 2 bis 8 l”schen
inhalta$(zeile% + kb%, ka%) = ""
NEXT ka%
inhalta$(zeile% + kb%, 0) = satztemp$(0)
NEXT kb%
zeile% = zeile% + 6
ELSEIF satztemp$(0) = "CYCL DEF 1." AND eingabe$ = "e" THEN
FOR kd% = 1 TO 6 'Platz schaffen fr sechs Zeilen
CALL zeiledazu
NEXT kd%
GOTO 505
zeile% = zeile% + 6
ELSEIF satztemp$(0) = "TOOL DEF " AND eingabe$ = "e" THEN
inhalta$(zeile%, 0) = "TOOL DEF ": inhalta$(zeile%, 1) = satztemp$(1)
inhalta$(zeile%, 2) = "0R": inhalta$(zeile%, 3) = satztemp$(5)
CALL zeiledazu
FOR ka% = 0 TO 3
inhalta$(zeile%, ka%) = satztemp$(ka%)
NEXT ka%
FOR ka% = 4 TO 8
inhalta$(zeile%, ka%) = ""
NEXT ka%
zeile% = zeile% + 2
'----Zyklen mit einer Zeile abspeichern-------
ELSEIF satztemp$(0) = "TOOL CALL " OR satztemp$(0) = "A " AND eingabe$ = "u" THEN FOR zz% = 0 TO 8 _
'OR satztemp$(0) = "LBL CALL " OR satztemp$(0) = "A " OR satztemp$(0) = "I " OR satztemp$(0) = "STOP " OR satztemp$(0) = "Verweilzeit " OR satztemp$(0) = "LBL " OR satztemp$(0) = "CALL LBL " OR satztemp$(0) = "VERWEILZEIT " AND eingabe$ = "u" THEN FOR zz% = 0 TO 8
inhalta$(zeile%, zz%) = satztemp$(zz%)
NEXT zz%
FOR yz% = 0 TO 8
satztemp$(yz%) = ""
NEXT yz%
zeile% = zeile% + 1
ELSEIF eingabe$ = "q" THEN FOR yz% = 0 TO 8
satztemp$(yz%) = ""
NEXT yz%
END IF
EXIT SUB
CALL eingzeigen
'GOTO 599
END SUB
SUB Taschen
380 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Sicherheitsabstand eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(10)
satztemp$(1) = "0 TASCHENFRAESEN "
satztemp$(2) = "1 ABST " + eingabe$
ELSE GOTO 380
END IF
382 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "TIEFE eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(3) = "2 TIEFE " + eingabe$
ELSE GOTO 382
END IF
383 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "ZUSTELLUNG eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(4) = "3 ZUSTLG " + eingabe$
ELSE GOTO 383
END IF
384 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "1. Seitenl„nge eingeben mit X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
SELECT CASE LEFT$(eingabe$, 1)
'IF LEFT$(eingabe$, 1) = "x" OR LEFT$(eingabe$, 1) = "y" OR LEFT$(eingabe$, 1) = "z" THEN
CASE "x"
satztemp$(5) = "4 X " + MID$(eingabe$, 2, LEN(eingabe$))
CASE "y"
satztemp$(5) = "4 Y " + MID$(eingabe$, 2, LEN(eingabe$))
CASE "z"
satztemp$(5) = "4 Z " + MID$(eingabe$, 2, LEN(eingabe$))
CASE ELSE
GOTO 384
END SELECT
385 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "2. Seitenl„nge eingeben mit X/Y/Z ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
SELECT CASE LEFT$(eingabe$, 1)
'IF LEFT$(eingabe$, 1) = "x" OR LEFT$(eingabe$, 1) = "y" OR LEFT$(eingabe$, 1) = "z" THEN
CASE "x"
satztemp$(6) = "5 X " + MID$(eingabe$, 2, LEN(eingabe$))
CASE "y"
satztemp$(6) = "5 Y " + MID$(eingabe$, 2, LEN(eingabe$))
CASE "z"
satztemp$(6) = "5 Z " + MID$(eingabe$, 2, LEN(eingabe$))
CASE ELSE
GOTO 385
END SELECT
386 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "VORSCHUB F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(7) = "6 F " + eingabe$
ELSE GOTO 386
END IF
'FOR ui% = 7 TO 8
satztemp$(8) = ""
'NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB TCall
705 CALL eingzeigen
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "Werkzeugnummer eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 4 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(2)
satztemp$(1) = eingabe$
ELSE GOTO 705
END IF
706 CALL eingzeigen
LOCATE zeileeing%, 5: COLOR 0, 14
INPUT "Werkzeugachse X/Y/Z eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
CASE "x", "1"
satztemp$(2) = " X "
CASE "y", "2"
satztemp$(2) = " Y "
CASE "z", "", "3"
satztemp$(2) = " Z "
CASE ELSE
GOTO 706
END SELECT
710 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "Drehzahl eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
CASE ELSE
satztemp$(3) = " S "
satztemp$(4) = eingabe$
END SELECT
FOR ui% = 5 TO 8
satztemp$(ui%) = ""
NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB Tiefbohren
450 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Sicherheitsabstand eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(7)
satztemp$(1) = "0 TIEFBOHREN "
satztemp$(2) = "1 ABST " + eingabe$
ELSE GOTO 450
END IF
451 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "TIEFE eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(3) = "2 TIEFE " + eingabe$
ELSE GOTO 451
END IF
452 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "ZUSTELLUNG eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 9 AND LEN(eingabe$) > 0 THEN
satztemp$(4) = "3 ZUSTLG" + eingabe$
ELSE GOTO 452
END IF
453 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Verweilzeit eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 3 THEN
satztemp$(5) = "4 V.ZEIT " + eingabe$
ELSE GOTO 453
END IF
454 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "VORSCHUB F eingeben ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 5 AND LEN(eingabe$) > 0 THEN
satztemp$(6) = "5 F" + eingabe$
ELSE GOTO 454
END IF
FOR ui% = 7 TO 8
satztemp$(ui%) = ""
NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB tooldef
805 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "Werkzeug Nummer eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 4 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(1)
satztemp$(1) = eingabe$ + SPACE$(6 - LEN(eingabe$))
'satztemp$(3) = eingabe$ + SPACE$(6 - LEN(eingabe$))
ELSE GOTO 805
END IF
810 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Werkzeuglaenge eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
CASE ELSE
satztemp$(2) = SPACE$(2)
satztemp$(4) = SPACE$(2)
satztemp$(3) = "L " + eingabe$
END SELECT
820 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
LINE INPUT "Werkzeug Radius eingeben : ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
CASE ELSE: satztemp$(5) = "R " + eingabe$
END SELECT
FOR ui% = 6 TO 8
satztemp$(ui%) = ""
NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB Vzeit
755 CALL eingzeigen
LOCATE zeileeing%, 5
COLOR 0, 14
INPUT "Verweilzeit eingeben: ", eingabe$
SELECT CASE eingabe$
CASE "q"
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
eingtrue% = 0
EXIT SUB
END SELECT
IF LEN(eingabe$) < 3 AND LEN(eingabe$) > 0 THEN
satztemp$(0) = zyklen$(11)
satztemp$(1) = "0 VERWEILZEIT "
satztemp$(2) = "1 V.ZEIT "
satztemp$(3) = eingabe$
ELSE GOTO 755
END IF
FOR ui% = 4 TO 8
satztemp$(ui%) = ""
NEXT ui%
CALL satzspeichern
eingtrue% = 0
FOR xi% = 0 TO 8
satztemp$(xi%) = ""
NEXT xi%
END SUB
SUB wkzVerw
COLOR 0, 7: CLS
DO UNTIL INKEY$ = "e"
eing$ = INKEY$
IF eing$ = "e" THEN
CALL eingzeigen
EXIT SUB
END IF
CLS
PRINT eing$
PRINT " WERKZEUGVERWALTUNG"
FOR a% = 1 TO 80
PRINT "=";
NEXT a%
FOR b% = 4 TO 20
LOCATE b%, 2: PRINT CHR$(179); "T"; b% - 3;
LOCATE b%, 7: PRINT CHR$(186);
NEXT b%
LOCATE 23, 2: COLOR 0, 6: PRINT " E"
LOCATE 24, 2: COLOR 0, 7
PRINT "HAUPTMENš"
SLEEP
'IF eing$ = "e" THEN EXIT SUB
LOOP
END SUB
SUB zeiledazu
CLS
FOR bb% = 800 TO zeile% STEP -1
FOR bc% = 0 TO 8
inhalta$(bb% + 1, bc%) = inhalta$(bb%, bc%)
NEXT bc%
FOR bd% = 0 TO 8
inhalta$(bb%, bd%) = ""
NEXT bd%
NEXT bb%
END SUB
SUB zeileweg
END SUB
|
|
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 27.12.2020, 23:49 Titel: |
|
|
derampcsitzt hat Folgendes geschrieben: | ...steht man vor dem Problem dass man zwar Satz für Satz einliest aber man beim Einlesen NICHT weiß wie der Satz formatiert ist und somit die Trennung der einzelnen Satzteile total aufwändig wird...
...Die einzelne Sätze beim Einlesen aus der Datei werde ich wohl anhand des ersten Buchstaben je Zeile unterscheiden und dann mit Programmverzweigungen entsprechen den Satz richtig formatiert in das Array einlesen |
Warum so kompliziert? Sieh dir mal den Stringparser aus meinem Codebeispiel an, hier auf QB umgeschrieben (und ich bleibe dabei: der QB-Editor ist eine Zumutung ). Statt für jede denkbare Variante eine eigene Programmverzweigung zu schreiben ist es viel einfacher, den Satz auf eine Normalform zu bringen, in der er sich leicht zerlegen lässt. Danach kannst du dann die einzelnen Elemente der Zeile bequem weiterverarbeiten: Code: | DATA "25 TOOL DEF 33 L +265,600"
DATA "26 TOOL DEF 33 R +13,875"
DATA "29 A Z+270,000 R0 F1000 M5"
DATA "*"
'zerlegt eine textzeile
' Dim As Integer anfang, ende, x
' Dim As String z
DO
READ z$
PRINT z$
PRINT "---"
IF z$ = "*" THEN
EXIT DO
END IF
'string fr den parser aufbereiten
z$ = z$ + " " 'leerzeichen anhängen
Do While InStr(z$, " ") 'mehrfache leerzeichen entfernen
anfang% = InStr(z$, " ")
z$ = LEFT$(z$, anfang% - 1) + Mid$(z$, anfang% + 1)
Loop
FOR x% = 1 TO LEN(z$) 'ein leerzeichen vor jedes pluszeichen setzen
IF MID$(z$, x%, 1) = "+" THEN
IF MID$(z$, x% - 1, 1) <> " " THEN
z$ = LEFT$(z$, x% - 1) + " " + MID$(z$, x%)
END IF
END IF
NEXT
FOR x% = 1 TO LEN(z$) 'ein leerzeichen vor jedes minuszeichen setzen
IF MID$(z$, x%, 1) = "-" THEN
IF MID$(z$, x% - 1, 1) <> " " THEN
z$ = LEFT$(z$, x% - 1) + " " + MID$(z$, x%)
END IF
END IF
NEXT
anfang% = 1
DO 'string auswerten
ende% = INSTR(anfang%, z$, " ") '"ende"-zeiger auf leerzeichen hinter dem parameter setzen
IF ende% = 0 THEN 'kein weiterer parameter vorhanden
EXIT DO 'schleife verlassen
ELSE
PRINT MID$(z$, anfang%, ende% - anfang%) 'parameter isoliern und in array schreiben
END IF
anfang% = ende% + 1 '"anfang"-zeiger auf anfang des nächsten parameters setzen
LOOP
PRINT
PRINT "----------------------"
PRINT
SLEEP
LOOP
SLEEP |
Im übrigen schliesse ich mich dreael an: Niemand wird dich hier schief ansehen, wenn du kein IT - Experte oder Computernerd bist.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Zuletzt bearbeitet von grindstone am 28.12.2020, 00:45, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 28.12.2020, 00:20 Titel: |
|
|
Um das Auszählen der Leerzeichen der verschiedenen Sätze komme ich nicht drum rum da ich die Sätze ja exakt nach dem Muster wieder zusammen setzen muss.
Ob dein Vorschlag funktioniert muss ich mal gucken, es gibt ja 14 verschiedene Zyklen welche diese unterschiedlichen CNC-Sätze erzeugen - manche werden eben in einer Zeile abgespeichert - andere werden in mehrere Zeilen abgespeichert. Das macht es alles so kompliziert |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 28.12.2020, 00:58 Titel: |
|
|
OK, ich sehe, was du meinst. Das Entfernen mehrfacher Leerzeichen ist keine große Sache, ich habe den Programmschnippsel oben entsprechend erweitert.
Das erneute Zusammensetzen der Zeilen dürfte doch kein Problem sein, da dein Programm das schon kann, wenn du die einzelnen Elemente entsprechend in das Array schreibst.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 28.12.2020, 01:50 Titel: |
|
|
grindstone hat Folgendes geschrieben: |
Das erneute Zusammensetzen der Zeilen dürfte doch kein Problem sein, da dein Programm das schon kann, wenn du die einzelnen Elemente entsprechend in das Array schreibst.
Gruß
grindstone |
Du hast zwar recht aber so wie ich mein Programm gemacht habe geht das nur wenn die Daten vom Nutzer eingegeben wurden. Wenn die jetzt Satzweise eingelesen werden aus der Datei geht das nicht so einfach...da muss ich mir noch was ausdenken.
Aber Danke schonmal für deine Hilfestellung. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 28.12.2020, 14:29 Titel: |
|
|
derampcsitzt hat Folgendes geschrieben: | Du hast zwar recht aber so wie ich mein Programm gemacht habe geht das nur wenn die Daten vom Nutzer eingegeben wurden. |
Das ist doch recht einfach zu erweitern. Der günstigste Ansatzpunkt scheint mir satztemp$ zu sein. Nach der manuellen Eingabe stehen die ganzen Werte dort drin und gelangen dann in das "große" Array inhalta$, aus dem dann die Ausgabedatei generiert wird. Man braucht also einfach nur die Sätze aus der externen Datei in das satztemp$-Format zurückübersetzen und kann damit arbeiten, als ob man es von Hand eingegeben hätte.
Als kleine Demonstration hab ich mal für die ersten beiden Zyklen einen Übersetzer geschrieben, den du in dein Programm einfügen kannst (du siehst schon, wo). Er hat noch keine wirkliche Funktion, es geht erst einmal nur ums Übersetzen: Code: | ...
Sub lblset
Cls
Color 9, 7
Print "-------------"
Print "N"; ""; "N"
Print "N"; " "; "N"
Print "__________"
Sleep
End Sub
Dim Shared parse$(1 To 10)
Dim Shared pa$
Sub parser
For pindex% = LBound(parse$) To UBound(parse$)
parse$(pindex%) = ""
Next
'string für den parser aufbereiten
pa$ = pa$ + " " 'leerzeichen anhängen
Do While InStr(pa$, " ") 'mehrfache leerzeichen entfernen
anfang% = InStr(pa$, " ")
pa$ = LEFT$(pa$, anfang% - 1) + Mid$(pa$, anfang% + 1)
Loop
FOR pindex% = 1 TO LEN(pa$) 'ein leerzeichen vor jedes pluszeichen setzen
IF MID$(pa$, pindex%, 1) = "+" THEN
IF MID$(pa$, pindex% - 1, 1) <> " " THEN
pa$ = LEFT$(pa$, pindex% - 1) + " " + MID$(pa$, pindex%)
END IF
END IF
NEXT
FOR x% = 1 TO LEN(pa$) 'ein leerzeichen vor jedes minuszeichen setzen
IF MID$(pa$, pindex%, 1) = "-" THEN
IF MID$(pa$, pindex% - 1, 1) <> " " THEN
pa$ = LEFT$(pa$, pindex% - 1) + " " + MID$(pa$, pindex%)
END IF
END IF
NEXT
anfang% = 1
pindex% = 1
DO 'string auswerten
ende% = INSTR(anfang%, pa$, " ") '"ende"-zeiger auf leerzeichen hinter dem parameter setzen
IF ende% = 0 THEN 'kein weiterer parameter vorhanden
EXIT DO 'schleife verlassen
ELSE
parse$(pindex%) = MID$(pa$, anfang%, ende% - anfang%) 'parameter isoliern und in array schreiben
pindex% = pindex% + 1
END IF
anfang% = ende% + 1 '"anfang"-zeiger auf anfang des nächsten parameters setzen
Loop
End Sub
Sub menu2
Do Until eing$ = "e"
eing$ = Inkey$
Color 0, 7: Cls
Locate 2, 3: Color 15, 5
Print "Speichern(S) ™ffnen(O) Laufwerk ausw„hlen(L) Hauptmen"
Print "-----------------------------------------------------------------"
Color 6, 7: Print "abcedne”ljha”oj"
If eing$ = "s" Then GoSub 1200
'chdir
Sleep
Loop
GoTo 2000
'SLEEP
'END
'zyklen$(1) = "TOOL DEF " '2 zeilen
'zyklen$(2) = "TOOL CALL" '1 zeile
'zyklen$(3) = "A " '1 zeile
'zyklen$(4) = "I " '1 zeile
'zyklen$(5) = "CYCL DEF 5." '4 zeilen
'zyklen$(6) = "CYCL DEF 6." '3 zeilen
'zyklen$(7) = "CYCL DEF 1." '6 zeilen
'zyklen$(8) = "STOP " '1 zeile
'zyklen$(9) = "CYCL DEF 3." '7 zeilen
'zyklen$(10) = "CYCL DEF 4." '7 zeilen
'zyklen$(11) = "CYCL DEF 9." '2 zeilen
'zyklen$(12) = "CYCL DEF 2." '4 zeilen
'zyklen$(13) = "LBL "
'zyklen$(14) = "CALL LBL " '1 zeile
'--------------Sätze aus Datei holen-----------------
1100 OPEN "cncprg.txt" FOR INPUT AS #2
Cls
Do
Line Input #2, g$ 'satz holen
For x% = LBound(zyklen$) To UBound(zyklen$) 'zykluskennung ermitteln
a% = InStr(g$, zyklen$(x%))
If a% <> 0 Then 'kennung gefunden, suche abbrechen
Exit For
EndIf
Next
Select Case x% 'nummer des zyklus
Case 1 'TOOL DEF
satztemp$(0) = zyklen$(x%) 'zykluskennung
a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
pa$ = Mid$(g$, a%) 'text nach der zykluskennung an parser übergeben
Call parser
satztemp$(1) = parse$(1) 'werkzeugnummer
satztemp$(3) = parse$(2) + " " + parse$(3) 'L xxx
Line Input #2, g$ 'zweite zeile holen
a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
pa$ = Mid$(g$, a%)
Call parser
satztemp$(5) = parse$(2) + " " + parse$(3) 'R xxx
Case 2 'TOOL CALL
satztemp$(0) = zyklen$(x%)
a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
pa$ = Mid$(g$, a%) 'text nach der zykluskennung an parser übergeben
Call parser
satztemp$(1) = parse$(1) 'werkzeugnummer
satztemp$(2) = " " + parse$(2) 'achse
satztemp$(3) = " " + parse$(3)
satztemp$(4) = parse$(4) 'drehzahl
Case 3 'A
'...
End Select
Loop
Close #2
Return
'--------------S„tze in Datei schreiben und speichern-------
1200 Open "cncprg.txt" For Output As #1
For ausg% = 1 To 800
Print 1#, ausg%;
Print ausg%;
For acht% = 0 To 7
Print #1, inhalta$(ausg%, acht%); ' : NEXT acht%
Print inhalta$(ausg%, acht%); : Next acht%
Print #1, inhalta$(ausg%, 8)
Print inhalta$(ausg%, 8)
Next ausg%
Close #1
Return
... |
Wenn du willst, kann ich die Routinen für die restlichen Zyklen auch noch schreiben, wenn man den Anfang (und ein paar Hilfsroutinen) einmal hat, ist das kein allzu großer Aufwand. Nur mit LBL kann ich nichts anfangen, da spielt das Programm irgendwie verrückt.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Zuletzt bearbeitet von grindstone am 30.12.2020, 14:06, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
derampcsitzt
Anmeldungsdatum: 25.12.2020 Beiträge: 14
|
Verfasst am: 28.12.2020, 20:07 Titel: |
|
|
Die Sub "lblset" ist von mir noch nicht erstellt - das was da drin steht war nur ein Test also einfach ignorieren
grindstone hat Folgendes geschrieben: |
Das ist doch recht einfach zu erweitern. Der günstigste Ansatzpunkt scheint mir satztemp$ zu sein. Nach der manuellen Eingabe stehen die ganzen Werte dort drin und gelangen dann in das "große" Array inhalta$, aus dem dann die Ausgabedatei generiert wird. Man braucht also einfach nur die Sätze aus der externen Datei in das satztemp$-Format zurückübersetzen und kann damit arbeiten, als ob man es von Hand eingegeben hätte.
Gruß
grindstone |
Ja so war mein erster Gedanke allerdings: Manche Zyklen werden beim Umschreiben von satztemp$ zu inhalta$ auf MEHRERE Zeilen verteilt
Lese ich jetzt von der Datei ein müsste ich so einen Zyklus aus mehreren Zeilen ja auch als Block einlesen um ihn in satztemp$ zu bekommen.
Habe jetzt aber eine Lösung wie ich das ganze Relativ einfach hin bekomme mit Select-Case: Ich Lese jede Zeile einzeln ein und die ersten beiden Strings werden ausgewertet - mit diesen kann ich alle 15 verschiedenen Zyklen unterscheiden und dann direkt in die inhalta$-Variable rein schreiben. Da manche Zyklen den gleiche Satzformatierung haben ist der Aufwand sehr überschaubar. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 28.12.2020, 23:12 Titel: |
|
|
Ein anderer Artikel aus meiner früheren Sammlung:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/BildschirmMasken.html
Dies als Anregung, falls das Ziel ein komfortabler CNC-Programmeditor sein soll. Würde hier Sinn machen, damit man sich z.B. per Pfeiltasten im Programm bewegen kann, um nachträglich ein beliebiger Satz ändern zu können.
Ansonsten Danke fürs Code posten. Tipp von mir (und anderen auch): Ich würde nach Möglichkeit sämtliche GOTOs eliminieren, d.h. von A bis Z strukturiert arbeiten, so dass schlussendlich auch die Einrückungen stimmen.
Ansonsten, wenn ich so eine CNC-Software bauen müsste, so würde mich die Syntax in einer Form wie EBNF als erstes interessieren.
Sieht dann ungefähr hier so aus (nicht komplett!):
Code: |
CNCProgramm = Zeile { Zeile } ;
Zeile = Satznummer Whitespace Befehl1 Whitespace Befehl2 Whitespace Argumente "<CR><LF>";
Satznummer = Ziffer { Ziffer } ;
Ziffer = "0" | "1" | "2" ... "9" ;
Whitespace = " " { " " };
Befehl1 = "TOOL" | "CYCL" ;
Befehl2 = "DEF" | "CALL" ;
|
In ungefähr einer solchen Form würde ich die Befehlssprache der Maschine einmal dokumentieren/darstellen (oder im Idealfall gibt es so etwas vom Maschinenhersteller selber bereits). => Auf Basis dieser Definition lässt sich dann der gewünschte Eingabeeditor entwickeln. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
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.
|
|