开源改变世界!!

简单的发送和接收数据到 grbl #18

推推 grbl 2年前 (2023-02-09) 129次浏览
关闭
ashkan4818 打开了这个问题 2018 年 5 月 19 日 · 9条评论
关闭

简单的发送和接收数据到 grbl#18

ashkan4818 打开了这个问题 2018 年 5 月 19 日 · 9条评论

评论

简单的发送和接收数据到 grbl #18
阿什坎4818 评论了 2018 年 5 月 19 日  

你好
,我想在 C# 中为 GRBL 创建一个简单的接口。我真的很努力地做这件事,但我得不到好的结果。然后我在 Github 上找到了你,我看了你精彩的 GRBL – 绘图仪应用程序代码,我可以理解你的代码的一些事情,然后我厌倦了创建一个像你这样的简单应用程序,它能够从 GRBL 接收数据并在一个丰富的盒子上显示,因此我在下面写了这段代码
但不幸的是它仍然无法正常工作:(我真的很失望

你能帮我解决这个问题吗??我真的需要你的帮助,非常感谢 <3

################################################## #######################

`使用系统;
使用 System.Collections.Generic;
使用 System.ComponentModel;
使用系统数据;
使用系统绘图;
使用 System.IO.Ports;
使用 System.Linq;
使用系统文本;
使用 System.Threading.Tasks;
使用 System.Windows.Forms;
使用 System.IO;

namespace serial_test5
{
public partial class Form1 : Form
{
public string rxString;

    public Form1()
    {
        InitializeComponent();
    }




    private void Form1_Load(object sender, EventArgs e)
    {
        string[] ports = SerialPort.GetPortNames();
        CoMports_list.Items.AddRange(ports);
        CoMports_list.SelectedIndex = 0;
        serialPort1.DataReceived+= new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
    }



    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        while ((serialPort1.IsOpen) && (serialPort1.BytesToRead > 0))
        {
            rxString = string.Empty;
            try
            {
                rxString = serialPort1.ReadTo("\r\n");
                this.Invoke(new EventHandler(handleRXData));
                while ((serialPort1.IsOpen)) ;
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message , "can not received data");
               
            }
        }

    
    }



    public void addToLog(string text)
    {
        richTextBox1.AppendText(text + "\r");
        richTextBox1.ScrollToCaret();
    }


    private void handleRXData(object sender, EventArgs e)
    {
        char[] charsToTrin = {'<', '>', '[', ']', ' '};
        int tmp;

        if (rxString.IndexOf("ok") >=0)
        {

                addToLog(string.Format("<{0}",rxString));

            return;

        }
        else if (((tmp = rxString.IndexOf('<')) >= 0) && (rxString.IndexOf('>') > tmp))
        {
            if (scroling_chek_box.Checked)
                addToLog(rxString);
           
            return;
        }

    }



    private void Connect_btn_Click(object sender, EventArgs e)
    {

        serialPort1.BaudRate = Convert.ToInt32(baudRate_list.Text);
        try
        {
            serialPort1.PortName = CoMports_list.Text;
            serialPort1.Open();
        }
        catch (Exception er)
        {
            MessageBox.Show(er.Message, "message", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

    }

    private void timer1_Tick(object sender, EventArgs e)
    {

        if (serialPort1.IsOpen) // 
        {
            try
            {
                var dataArray = new byte[]
                {
                    Convert.ToByte('?')
                }; 
                serialPort1.Write(dataArray, 0, 1);                      
            }
            catch (Exception er)
            {

                serialPort1.Close(); 
            }
        }


    }

}

}
`

简单的发送和接收数据到 grbl #18
所有者

问题是什么 – 什么不能正常工作?

简单的发送和接收数据到 grbl #18

我在rich box中看不到GRBL状态信息,我不知道我哪里错了

简单的发送和接收数据到 grbl #18
作者
阿什坎4818 评论了 2018 年 5 月 20 日  

这是我能看到的所有状态消息:

https://ibb.co/kH4nO8

简单的发送和接收数据到 grbl #18
所有者
svenhb 评论了 2018 年 5 月 20 日 通过电子邮件  

简单的发送和接收数据到 grbl #18
作者
阿什坎4818 评论了 2018 年 5 月 20 日  

是的,我发送了一个“?” 到 grbl 获取状态报告!是的,我已经读过了……
你能写一个非常简单的代码来发送一个 g-cod 到 grbl 并在一个丰富的框中显示状态报告吗?请?

简单的发送和接收数据到 grbl #18
所有者
svenhb 评论了 2018 年 5 月 20 日 通过电子邮件  

简单的发送和接收数据到 grbl #18

我会看到这个,然后再试一次。非常感谢先生 <3

简单的发送和接收数据到 grbl #18
所有者

希望你找到了解决方案