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:

Unterschiedlichen Satzaufbau speziell formatiert darstellen
Gehe zu Seite Zurück  1, 2
 
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
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 12

BeitragVerfasst am: 29.12.2020, 02:57    Titel: Antworten mit Zitat

Sooo, habe jetzt zum ersten mal Sätze aus einer Datei eingelesen erfolgreich.

Jetzt muss ich noch raus finden wie ich beim Abspeichern die Satznummern 1 bis 9 zweistellig darstellen kann - also anstatt 1 2 ....9 -> 01 02 ...09

Dann muss ich noch paar Kleinigkeiten fertig machen und kann dann die V1.0 oder vor mir aus auch "PreRelease" von meinem Programm zur Verfügung stellen grinsen Da ist jetzt erstmal das aller nötigste fertig, der Rest wird dann nach und nach verändert und hinzugefügt, zum Beispiel eine ordentliche Editierfunktion um die CNC-Sätze nachträglich zu verändern ohne komplett neu schreiben zu müssen was ja dreael hier ganz richtig angemerkt hat.
Ideen habe ich da noch viele wie dass es mal ein extra Menü für die Werkzeugverwaltung geben soll - also eine Tabelle in die man für jedes Werkzeug die Maße einträgt und von dieser Liste aus dann automatisch einen Programmsatz (TOOL DEF) erstellen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1050
Wohnort: Ruhrpott

BeitragVerfasst am: 29.12.2020, 13:30    Titel: Antworten mit Zitat

derampcsitzt hat Folgendes geschrieben:
Die Sub "lblset" ist von mir noch nicht erstellt - das was da drin steht war nur ein Test grinsen also einfach ignorieren
Das habe ich auch nur mitgepostet, damit du siehst, wo im Programm der Schnippsel hinkommt.

derampcsitzt hat Folgendes geschrieben:
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.
Wenn du einmal einen scheuen Blick auf die Umsetzung von TOOL DEF werfen würdest: Es werden zwei Zeilen eingelesen und verarbeitet. Korrigier mich, wenn ich etwas falsches sage, aber da bei der Eingabe der Parameter alle Angaben Pflichtangaben sind, gehe ich davon aus, daß jeder Zyklus eine feste Anzahl von Zeilen hat, wie sie in dem auskommentierten Block
Code:
'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
zu sehen sind (ich habe alle Zyklen durchprobiert und mir dann jeweils den Inhalt von cncprg.txt angesehen). Daher ist es eindeutig, wieviele Zeilen das Programm bei jedem Zyklus lesen muß.

derampcsitzt hat Folgendes geschrieben:
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
Die Art des Zyklus kannst du an der Zyklenkennung erkennen, mit der jede Zeile beginnt, und die ist eindeutig, ebenso die Anzahl der Zeilen für jeden Zyklus. Es reicht also die erste Zeile aus, um zum entsprechenden CASE zu verzweigen, wo dann -falls erforderlich- die restlichen Zeilen eingelesen und verarbeitet werden können.

derampcsitzt hat Folgendes geschrieben:
Jetzt muss ich noch raus finden wie ich beim Abspeichern die Satznummern 1 bis 9 zweistellig darstellen kann - also anstatt 1 2 ....9 -> 01 02 ...09
Code:
sn$ = "1"
sn$ = Right$("0" + sn$, 2)
Print sn$

sn$ = "21"
sn$ = Right$("0" + sn$, 2)
Print sn$
Allerdings bin ich jetzt etwas irritiert. Der Inhalt von cncprg.txt hat doch keine Zeilennummern, daher bin ich davon ausgegangen, daß diese erst beim Übertragen an die Maschine erzeugt werden. Somit kannst du die Zeilennummern von einer eingelesenen Datei einfach ignorieren, weil sie beim Übertragen sowieso neu erzeugt werden. Oder irre ich mich da?

derampcsitzt hat Folgendes geschrieben:
...eine Tabelle in die man für jedes Werkzeug die Maße einträgt und von dieser Liste aus dann automatisch einen Programmsatz (TOOL DEF) erstellen kann.
Gute Idee. lächeln

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
derampcsitzt



Anmeldungsdatum: 25.12.2020
Beiträge: 12

BeitragVerfasst am: 29.12.2020, 19:38    Titel: Antworten mit Zitat

Das mit dem Blockweise einlesen habe ich verstanden nur habe ich mich bewusst dagegen entschieden weil es sein kann dass wenn ein Programm eingelesen wird der Block nicht vollständig ist (Man kann an der Maschine beim Programm erstellen nämlich so einen Block teilweise löschen oder überschreiben - der Programmlauf funktioniert dann nicht mehr aber das Programm steht so im Speicher dann)
Ich lese also die Zeilen - unabhängig ob es ein mehrzeiliger oder einzeiliger Zyklus ist - einzeln ein.

Die Zeilennummern werden in der txt-Datei immer mit abgelegt und von der Maschine so ein- und ausgelesen.

Ich hab mir jetzt von meiner Maschine nochmal ALLE verschiedenen Zyklen ausspucken lassen, sieht dann so aus (die einzelnen Zyklen sind durch Leerzeilen getrennt):


Code:
08  TOOL CALL 0    Z  S 0,000   

29  A X-9999,000 R+ F9999 M99

30  I Y+9999,000 R- F9999 M99

35  STOP                  M99   

37  CYCL DEF 1.0 TIEFBOHREN     
38  CYCL DEF 1.1 ABST  -999,000
39  CYCL DEF 1.2 TIEFE -9999,000
40  CYCL DEF 1.3 ZUSTLG-9999,000
41  CYCL DEF 1.4 V.ZEIT 9999,000
42  CYCL DEF 1.5    F9999       

44  CYCL CALL             M99   

46  LBL 255                     

48  CALL LBL 255 REP 9999 /9999

50  TOOL DEF 255     L +9999,000
51  TOOL DEF 255     R +9999,000 

55  CYCL DEF 2.0 GEWINDEBOHREN 
56  CYCL DEF 2.1 ABST  -9999,000
57  CYCL DEF 2.2 TIEFE -9999,000
58  CYCL DEF 2.3 V.ZEIT 9999,000
59  CYCL DEF 2.4    F9999       

61  CYCL DEF 3.0 NUTENFRAESEN   
62  CYCL DEF 3.1 ABST  -9999,000
63  CYCL DEF 3.2 TIEFE -9999,000
64  CYCL DEF 3.3 ZUSTLG-9999,000
65  CYCL DEF 3.4    X  +9999,000
66  CYCL DEF 3.5    Y  +9999,000
67  CYCL DEF 3.6    F9999       

69  CYCL DEF 4.0 TASCHENFRAESEN
70  CYCL DEF 4.1 ABST  -9999,000
71  CYCL DEF 4.2 TIEFE -9999,000
72  CYCL DEF 4.3 ZUSTLG-9999,000
73  CYCL DEF 4.4    Z  +9999,000
74  CYCL DEF 4.5    X  +9999,000
75  CYCL DEF 4.6    F9999       

77  CYCL DEF 5.0 POL           
78  CYCL DEF 5.1 A  X  +9999,000
79  CYCL DEF 5.2 A  Y  +9999,000

81  CYCL DEF 6.0 POLAR-KOORD.   
82  CYCL DEF 6.1 A P.R.+9999,000
83  CYCL DEF 6.2 A P.W.+180,000
84  CYCL DEF 6.3    F9999 M99   

91  CYCL DEF 9.0 VERWEILZEIT   
92  CYCL DEF 9.1 V.ZEIT 9999,000
                     
151 CYCL DEF 1.0 TIEFBOHREN     
152 CYCL DEF 1.1 ABST  -2,000   
153 CYCL DEF 1.2 TIEFE -2,000   
154 CYCL DEF 1.3 ZUSTLG-1,000   
155 CYCL DEF 1.4 V.ZEIT 1,000   
156 CYCL DEF 1.5    F60
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1050
Wohnort: Ruhrpott

BeitragVerfasst am: 30.12.2020, 13:38    Titel: Antworten mit Zitat

derampcsitzt hat Folgendes geschrieben:
Das mit dem Blockweise einlesen habe ich verstanden nur habe ich mich bewusst dagegen entschieden weil es sein kann dass wenn ein Programm eingelesen wird der Block nicht vollständig ist...Ich lese also die Zeilen - unabhängig ob es ein mehrzeiliger oder einzeiliger Zyklus ist - einzeln ein.
Das würde -so wie ich dich verstehe- die Sache aber extrem unübersichtlich machen. Besser ist es, für jeden Zyklus einen eigenen CASE-Block zu schreiben, in dem dieser entweder komplett abgearbeitet oder als fehlerhaft erkannt und entsprechend behandelt werden kann. Als Beispiel hier ein CASE-Block für CYCL DEF 3. (7 Zeilen), mit Überprüfung auf fortlaufende Zeilennummern und korrekte Zykluskennung für jede Zeile (vielleicht fallen dir ja noch weitere Kriterien ein):

Code:
      Case 9 'CYCL DEF 3.
         zeilennummer% = Val(g$) 'zeilennummer der 1. zeile
         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) + " " + parse$(2)
         
         Line Input #2, g$ 'zweite zeile holen
         'überprüfen auf fortlaufende zeilennr und korreke zykluskennung
         If (Val(g$) <> zeilennummer% + 1) Or (InStr(g$, zyklen$(9)) = 0) Then
            ? "FEHLER" : Sleep : End 'fehler
         EndIf
         a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
         pa$ = Mid$(g$, a%)
         Call parser
         satztemp$(2) = parse$(1) + " " + parse$(2) + " " + parse$(3)
         
         Line Input #2, g$ 'dritte zeile holen
         'überprüfen auf fortlaufende zeilennr und korreke zykluskennung
         If (Val(g$) <> zeilennummer% + 2) Or (InStr(g$, zyklen$(9)) = 0) Then
            ? "FEHLER" : Sleep : End 'fehler
         EndIf
         a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
         pa$ = Mid$(g$, a%)
         Call parser
         satztemp$(3) = parse$(1) + " " + parse$(2) + " " + parse$(3)
         
         Line Input #2, g$ 'vierte zeile holen
         'überprüfen auf fortlaufende zeilennr und korreke zykluskennung
         If (Val(g$) <> zeilennummer% + 3) Or (InStr(g$, zyklen$(9)) = 0) Then
            ? "FEHLER" : Sleep : End 'fehler
         EndIf
         a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
         pa$ = Mid$(g$, a%)
         Call parser
         satztemp$(4) = parse$(1) + " " + parse$(2) + " " + parse$(3)
      
         Line Input #2, g$ 'fünfte zeile holen
         'überprüfen auf fortlaufende zeilennr und korreke zykluskennung
         If (Val(g$) <> zeilennummer% + 4) Or (InStr(g$, zyklen$(9)) = 0) Then
            ? "FEHLER" : Sleep : End 'fehler
         EndIf
         a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
         pa$ = Mid$(g$, a%)
         Call parser
         satztemp$(5) = parse$(1) + " " + parse$(2) + " " + parse$(3)
      
         Line Input #2, g$ 'sechste zeile holen
         'überprüfen auf fortlaufende zeilennr und korreke zykluskennung
         If (Val(g$) <> zeilennummer% + 5) Or (InStr(g$, zyklen$(9)) = 0) Then
            ? "FEHLER" : Sleep : End 'fehler
         EndIf
         a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
         pa$ = Mid$(g$, a%)
         Call parser
         satztemp$(6) = parse$(1) + " " + parse$(2) + " " + parse$(3)
      
         Line Input #2, g$ 'siebte zeile holen
         'überprüfen auf fortlaufende zeilennr und korreke zykluskennung
         If (Val(g$) <> zeilennummer% + 6) Or (InStr(g$, zyklen$(9)) = 0) Then
            ? "FEHLER" : Sleep : End 'fehler
         EndIf
         a% = InStr(g$, zyklen$(x%)) + Len(zyklen$(x%)) 'zeiger hinter zykluskennung setzen
         pa$ = Mid$(g$, a%)
         Call parser
         satztemp$(7) = parse$(1) + " " + parse$(2) + " " + parse$(3)
         
      'ende des CASE blocks


Was dann bei einem erkannten Fehler passiert, ist noch mal eine andere Sache.

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
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 Zurück  1, 2
Seite 2 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