Senden der richtigen Gcode-Zeichenfolge an einen seriellen Port?

Ich versuche, den Gcode zu sendeng28 zu meinem RepRap 3D-Drucker über die Leitungport.Write("g28");.

Mein Programm stellt eine Verbindung zum richtigen seriellen Port her. Wenn ich jedoch versuche, die Informationen als Zeichenfolge zu senden, wird der Zugriff auf den COM-Port verweigert.Dies ist seltsam, weil der serielle Port offen war, bevor der Gcode an ihn gesendet wurde. Es wurden sogar einige Daten zurückgeschickt. Was ist das Problem dort und wie könnte ich es beheben?

Unten sind die Codezeilen, die ich verwende. Hierfür steht die Liste der gcode-Befehle zur VerfügungSeite.

Ich habe versucht, eine hinzuzufügen"\n" am Ende der Zeichenfolge hat es aber nicht geklappt.

    //Fields
    List<string> myReceivedLines = new List<string>();


    //subscriber method for the port.DataReceived Event
    private void DataReceivedHandler(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        while (sp.BytesToRead > 0)
        {
            try
            {
                myReceivedLines.Add(sp.ReadLine());
            }
            catch (TimeoutException)
            {
                break;
            }
        }
    }


    protected override void SolveInstance(IGH_DataAccess DA)
    {

        string selectedportname = default(string);
        DA.GetData(1, ref selectedportname);
        int selectedbaudrate = default(int);
        DA.GetData(2, ref selectedbaudrate);
        bool connecttodevice = default(bool);
        DA.GetData(3, ref connecttodevice);
        bool homeall = default(bool);
        DA.GetData(5, ref homeall);

        SerialPort port = new SerialPort(selectedportname, selectedbaudrate, Parity.None, 8, StopBits.One); 

        port.DtrEnable = true;   
        port.Open();             

        if (connecttodevice == true)
        {
            port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            DA.SetDataList(0, myReceivedLines);
        }

        if (homeall == true)
        {
            port.Write("g28");
        }

    }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage