|
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: 29.12.2020, 02:57 Titel: |
|
|
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 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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1208 Wohnort: Ruhrpott
|
Verfasst am: 29.12.2020, 13:30 Titel: |
|
|
derampcsitzt hat Folgendes geschrieben: | Die Sub "lblset" ist von mir noch nicht erstellt - das was da drin steht war nur ein Test 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.
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: 29.12.2020, 19:38 Titel: |
|
|
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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1208 Wohnort: Ruhrpott
|
Verfasst am: 30.12.2020, 13:38 Titel: |
|
|
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 |
|
|
|
|
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.
|
|