Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

gcode senden und Drucken

geschrieben von DerTieja 
gcode senden und Drucken
07. April 2015 06:07
Hallo Läute,

ich möchte meinen Mendel90 über ein Cad Programm drucken lassen. Bis zum Slicen komme auch auch ohne Probleme. Allerdings bräuchte ich ein Programm das das Senden an des Drucker übernimmt. Dies soll ohne UI funktionieren, beispielsweise über das CMD mit einem "send xxx.gecode" Befehl.

Kann mir da jemand helfen confused smiley
Re: gcode senden und Drucken
07. April 2015 07:29
Das ist der Java Code mit dem ich zurzeit versuche eigene Befehle zu übertragen. (Momentan nur ein einzelner Befehl, später soll hier der gCode eingelegen werden.) Es sieht zwar so aus, als würde er sich verbinden, allerdings führt er den Befehl nicht aus...

import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class StartClass
{
static String COM_X = "COM10";
static int baud = 250000;
static SerialPort serialPort;

public static void main(String[] args) throws Exception
{
getActiveComPorts();
serialPort = new SerialPort(COM_X);
serialPort.openPort();
serialPort.setParams(baud, 8, 1, 0);
System.out.println("Port Open: " + serialPort.isOpened());
String[] potList_Pfad = SerialPortList.getPortNames(COM_X);
for(String port: potList_Pfad)
{
System.out.println(port);
}
}

public static String[] getActiveComPorts()
{
String[] potList = SerialPortList.getPortNames();
for(String port: potList)
{
System.out.println(port);
}
return potList;
}

public static void sendToPrinter(){
try
{
//G28 -> Homeposition
//M106 -> Fen on
String sTemp = "M106";
serialPort.writeString(sTemp);
if (!serialPort.writeString(sTemp))
System.out.println(sTemp +" konnte nicht gesendet werden");
if (serialPort.writeString(sTemp))
System.out.println(sTemp+" wurde gesendet");
}
catch (SerialPortException e)
{
e.printStackTrace();
}
}
}


Ausgabe:
COM3
COM4
COM5
COM10
Port Open: true
M106 wurde gesendet
Re: gcode senden und Drucken
07. April 2015 07:39
mit Python hab ich schon Programme geschrieben die Problemlos jeden Befehl an den Drucker übermitteln können.


def connect(self):
          try:
               if self.HARDWARE == 0:
                    import serial
                    
                    self.HARDWARE= serial.Serial() 
                    self.HARDWARE.baudrate = 115200
                    self.HARDWARE.timeout = 2.0
                    
                    import Config
                    self.HARDWARE.port = "COM" + str(Config.COM_Port)
                    print "COM" + str(Config.COM_Port)
                    self.HARDWARE.close()
                    self.HARDWARE.open()
                    i = 1
                    while i > 0:
                         if self.HARDWARE.isOpen() == True:
                              i = 0
                              self.Title.config(bg = "#85FF0C")
                              self.Title.config(fg = "black")
                              self.btnConnect.config(image = self.imgDisconnect)
                         else:
                              i += 1
                         if i == 10:
                              print "ERROR TIMEOUT"
                              i = 0
                              self.HARDWARE.close()
                              self.HARDWARE = 0
                                   
               
          except:
               self.disconnect()
               
          if not self.HARDWARE == 0:
               i = 1
               while i > 0:
                    i += 1
                    if self.HARDWARE.isOpen() == True:
                         Data = str(self.HARDWARE.readline())
                         if "wait" in Data:
                              i = 0
                              
                    if i == 20:
                         print "ERROR TIMEOUT"
                         i = 0
                         self.HARDWARE.close()
                         self.HARDWARE = 0
               import time
               time.sleep(0.5)
               self.COMMAND.append("M111")

     def _checksum(self, command):
          return reduce(lambda x, y: x ^ y, map(ord, command))

     def send_Command(self,command):
          
          if not self.HARDWARE == 0:
               #print ("0:",command)
               if command == "ZOFFSET":
                    self.ZOFFSET = 11
                    self.COMMAND.remove(self.COMMAND[0])
                    print ("ZOFFSET",self.ZOFFSET )
                    self.HAS_HOME = True
                    return 
               if command == "Eilvorschub":
                    #print "Eilvorschub ---------------------------" 
                    self.EV = 1
                    self.COMMAND.remove(self.COMMAND[0])
                    return 
               if command == "STOPEilvorschub":
                    self.EV = 0
                    self.COMMAND.remove(self.COMMAND[0])
                    #print "STOPEilvorschub------------------------" 
                    return 
               if "X" in command:
                    if "Y" in command:
                         if self.EV == 1:
                              command += " F1200"
                         else:
                              command += " F" +str(self.Vorschub)
               prefix = "N" + str(self.COnum) + " " + command 
               command = prefix + "*" + str(self._checksum(prefix))
               #print command
               self.HARDWARE.write(command + "\n")
               
               self.SendMode = 1
               return

Der Quellcode steht jetzt natürlich zusammenhangslos da aber wenn du ihn leicht modifizierst funktioniert er .
Re: gcode senden und Drucken
07. April 2015 07:42
Oh cool Danke Uebe!!!!!

ich bin zwar nicht so wirklich top im Programmieren aber ich denke damit komme ich gut weiter smileys with beer

Reicht das Anpassen (also können die beiden Python Files alleine arbeiten) oder muss ich die mit anderen zusammen ausführen?

1-mal bearbeitet. Zuletzt am 07.04.15 07:44.
Re: gcode senden und Drucken
07. April 2015 08:45
Siehe HIER NACH.


Bob Morrison
Wörth am Rhein, Germany
"Luke, use the source!"
BLOG - PHOTOS - Thingiverse
Re: gcode senden und Drucken
09. April 2015 10:07
@Uebe

Irgendwie komme ich damit nicht weiter und bin langsam am verzweifeln sad smiley

Könntest du doch bitte nochmal für dummer erklären, was ich mit dem quellcode machen muss um mit dem drucker zu kommunizieren? -.-
Re: gcode senden und Drucken
09. April 2015 17:11
Hallo
zuerst mal hoffe ich das du ein wenig python kannst. Ansonsten wird das erstmal nix . schon mal über die pronsole nachgedacht. War immer bei der 1. Hostsoftware dabei [www.pronterface.com].

Du benötigst python am besten 2.7 oder 2.6 und ganz wichtig lad dir das pyserial modul runter :
[pyserial.sourceforge.net]

Die haben auch sehr leichte Übungen auf ihrer Seite.

Da dein Programm wahrscheinlich nicht groß wird brauchst du keine Klassen zu verwenden. Funktionen sind jedoch meiner Meinung nach immer zu empfehlen.

import serial
import time 
Hardware = 0
CommandNumber = 0

def connect():
    Hardware = serial.Serial("COM5",19200,timeout = 2) #Definieren des USB ports
    Hardware.close()
    Hardware.open() # Verbindung herstellen
    time.sleep(1)
    if Hardware.isOpen() == True:
        print "Verbindung erfolgreich"
        return True
    else:
        print "Verbindung fehlgeschlagen"
        Hardware.close()
        return False

def disconnect():
    Hardware.close()

def _checksum(self, command):
    return reduce(lambda x, y: x ^ y, map(ord, command))
        
def sendCommand(command):
    prefix = "N" + str(CommandNumber) + " " + command 
    command = prefix + "*" + str(_checksum(prefix))        
    Hardware.write(command + "\n")
    CommandNumber +=1
    

#Programm
if connect() == True:
    i = 0
    while i < 100:
        sendCommand("G28")
        i+=1

So in die richtung würde ich gehen. Das ist nicht perfekt ,ich habs auch nicht getestet -aber es ist ein Denkansatz.

Du musst wissen das ein Drucker vor jedem Befehl eine Nummer haben will . Nach dem Datenempfang bestätigt der Drucker mit einem "OK Nummer... " oder "Resend Nummer..." diese beiden Bedingungen müssen da noch mit rein.

MFG UEBE
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen