Hallo,
ich bin stark sehbehindert und habe einen Creality CR-10S 3D Drucker. Mit meinem Sehrest kann ich die Beschriftung auf dem Display zwar nicht lesen, kann aber die Position der Markierten Zeile sehen. Mit einer sehenden Person habe ich die ganze Menüstruktur in eine Textdatei geschrieben, um den Drucker über den Drehknopf am Display bedienen zu können. Nun möchte ich den Nachfolger, da mich der CR-10S überzeugt hat. Der Nachfolger, CR-10S Pro, besitzt allerdings ein Touchdisplay, welches ich gar nicht bedienen kann. Daher habe ich ein Programm für Windows geschrieben, über welches ich dann den Drucker steuern kann. Bevor jetzt jemand mit dem Satz kommt, welches ein erneutes Erfinden eines Rades beinhaltet, möchte ich es erklären. Ich weiß, das man dieses Problem auch mit Octoprint umgehen kann. Ich habe sogar einen Raspberry mit octoprint, allerdings erreiche ich das Programm über eine Weboberfläche. Erstens kann ein Screenreader (Sprachausgabe) besser mit reinen Programmen, als mit Weboberflächen umgehen und zweitens befinden sich auf der Oberfläche von Octoprint einige Schaltflächen, die Pfeile oder andere Symbole beinhalten und ich daher nicht weiß, was diese Schaltfläche bewirkt. Außerdem kann ich mein Programm individuell auf meine, bzw. auf die Wünsche von denen anpassen, die es einsetzen. So habe ich z.B. eine Funktion eingefügt, die auf Wunsch beim Aufheizen, in bestimmten Gradintervallen Pieptöne ausgiebt. Auch kann ich festlegen, wieviele Punkte der Druckkopf beim Kalibrieren anspringen soll.
Nun zu meinem eigentlichen Problem:
Das Programm funktioniert soweit ganz gut, bis auf die Funktion "Datei drucken". Hier werden die Druckerfunktionen teilweise, falsch oder gar nicht ausgeführt. Wenn ich allerdings vor dem Senden eines Befehls auf das "ok" des letzten warte, funktioniert es. Nur wird dann jedem Befehl eine Pause eingefügt, weil das Programm ja auf das "ok" wartet. Wenn ich Haltepunkte einfüge und die entsprechende Schleife Schritt für Schritt ausführe, funktioniert es auch. Hier gibt es natürlich auch die ungewünschten Pausen. Vielleicht habe ich auch eine falsche Vorstellung von der Kommunikation über einen seriellen Anschluss. Ich dachte bisher, das es wie folgt funktioniert:
1. Port mit nötigen Parametern versehen
2. Port öffnen
3. Daten senden
3.1. Warten, bis der Sendepuffer leer ist
3.2. Neue Textzeile aus der zu druckenden Datei senden
3.3. Daten werden in den Puffer kopiert
4. Wenn Drucker wieder bereit ist, werden Daten aus dem Ausgangspuffer nachgeladen
5. Geöffnete Datei schließen
Ich habe es auch leider erfolglos versucht, den ganzen Dateiinhalt erst einmal in eine Variablen zu schreiben und diese dann als Ganzes an den Drucker zu senden.
Hier die Hauptfunktion:
Ich würde mich sehr über eine hilfreiche Antwort freuen und Danke schon mal im Voraus für eure Mühe.
*Topic verschoben*
ich bin stark sehbehindert und habe einen Creality CR-10S 3D Drucker. Mit meinem Sehrest kann ich die Beschriftung auf dem Display zwar nicht lesen, kann aber die Position der Markierten Zeile sehen. Mit einer sehenden Person habe ich die ganze Menüstruktur in eine Textdatei geschrieben, um den Drucker über den Drehknopf am Display bedienen zu können. Nun möchte ich den Nachfolger, da mich der CR-10S überzeugt hat. Der Nachfolger, CR-10S Pro, besitzt allerdings ein Touchdisplay, welches ich gar nicht bedienen kann. Daher habe ich ein Programm für Windows geschrieben, über welches ich dann den Drucker steuern kann. Bevor jetzt jemand mit dem Satz kommt, welches ein erneutes Erfinden eines Rades beinhaltet, möchte ich es erklären. Ich weiß, das man dieses Problem auch mit Octoprint umgehen kann. Ich habe sogar einen Raspberry mit octoprint, allerdings erreiche ich das Programm über eine Weboberfläche. Erstens kann ein Screenreader (Sprachausgabe) besser mit reinen Programmen, als mit Weboberflächen umgehen und zweitens befinden sich auf der Oberfläche von Octoprint einige Schaltflächen, die Pfeile oder andere Symbole beinhalten und ich daher nicht weiß, was diese Schaltfläche bewirkt. Außerdem kann ich mein Programm individuell auf meine, bzw. auf die Wünsche von denen anpassen, die es einsetzen. So habe ich z.B. eine Funktion eingefügt, die auf Wunsch beim Aufheizen, in bestimmten Gradintervallen Pieptöne ausgiebt. Auch kann ich festlegen, wieviele Punkte der Druckkopf beim Kalibrieren anspringen soll.
Nun zu meinem eigentlichen Problem:
Das Programm funktioniert soweit ganz gut, bis auf die Funktion "Datei drucken". Hier werden die Druckerfunktionen teilweise, falsch oder gar nicht ausgeführt. Wenn ich allerdings vor dem Senden eines Befehls auf das "ok" des letzten warte, funktioniert es. Nur wird dann jedem Befehl eine Pause eingefügt, weil das Programm ja auf das "ok" wartet. Wenn ich Haltepunkte einfüge und die entsprechende Schleife Schritt für Schritt ausführe, funktioniert es auch. Hier gibt es natürlich auch die ungewünschten Pausen. Vielleicht habe ich auch eine falsche Vorstellung von der Kommunikation über einen seriellen Anschluss. Ich dachte bisher, das es wie folgt funktioniert:
1. Port mit nötigen Parametern versehen
2. Port öffnen
3. Daten senden
3.1. Warten, bis der Sendepuffer leer ist
3.2. Neue Textzeile aus der zu druckenden Datei senden
3.3. Daten werden in den Puffer kopiert
4. Wenn Drucker wieder bereit ist, werden Daten aus dem Ausgangspuffer nachgeladen
5. Geöffnete Datei schließen
Ich habe es auch leider erfolglos versucht, den ganzen Dateiinhalt erst einmal in eine Variablen zu schreiben und diese dann als Ganzes an den Drucker zu senden.
Hier die Hauptfunktion:
VB.NET-Quellcode
- Private Sub DateiSendenBefehl_Click(sender As Object, e As EventArgs) Handles DateiSendenBefehl.Click
- If Verbunden Then
- DateiDialog.FileName = ""
- DateiDialog.Filter = "Alle Dateien (*.*)|*.*"
- DateiDialog.Title = "Datei auswählen"
- If DateiDialog.ShowDialog = DialogResult.OK Then
- Try
- 'Die ausgewählte Datei wird geöffnet und zeilenweise an den
- 'Drucker gesendet. Dabei wird darauf geachtet, dass
- 'der Ausgangspuffer leer ist.
- Dateiinhalt = New StreamReader(DateiDialog.FileName)
- Do Until Dateiinhalt.EndOfStream Or Not Anschluss.IsOpen
- Inhalt = Dateiinhalt.ReadLine
- X = 1
- Do Until Mid(Inhalt, X, 1) = ";" Or X > Len(Inhalt) Or Mid(Inhalt, X, 1) = vbNewLine
- X += 1
- Loop
- If X <> 1 Then
- Do Until Anschluss.BytesToWrite = 0
- Application.DoEvents()
- Loop
- Anschluss.WriteLine(Mid(Inhalt, 1, X - 1))
- End If
- Application.DoEvents()
- Loop
- Dateiinhalt.Close()
- Catch Fehler As Exception
- Using InfoFenster As New InfoFormular
- InfoFenster.Text = "Fehler"
- InfoFenster.InfoLabel.Text = "Die Datei konnte nicht an den Drucker gesendet werden"
- InfoFenster.ShowDialog(Me)
- End Using
- End Try
- End If
- Else
- Using InfoFenster As New InfoFormular
- InfoFenster.Text = "Hinweis"
- InfoFenster.InfoLabel.Text = "Es besteht keine Verbindung zum Drucker. Vergewissern sie sich, dass der Drucker eingeschaltet und die Schnittstelle verfügbar ist"
- InfoFenster.ShowDialog(Me)
- End Using
- End If
- End Sub
Ich würde mich sehr über eine hilfreiche Antwort freuen und Danke schon mal im Voraus für eure Mühe.
*Topic verschoben*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()