usb to serial not working

时间:2015-05-05 17:39:52

标签: c# winforms serial-port

这是我第一次在C#应用程序中集成Serial到USB,所以请原谅我这听起来像是一个愚蠢的问题。 我有IV级激光。我正在将它集成到我的C#应用​​程序中。 我的问题是我可以连接到激光器,我可以将数据发送到激光器,但我不能从激光器获得任何回报。

    private void Bt_Start_Click(object sender, EventArgs e)
    {
                SerialPort serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
                serialPort.Handshake = Handshake.XOnXOff;
                serialPort.DtrEnable = true;
                serialPort.RtsEnable = true;
                serialPort.ReadTimeout = 500;
                serialPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
                ConenctToLaser("COM3", serialPort);
    }

    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
            SerialPort sp = (SerialPort)sender;
            byte[] buffer = new byte[sp.BytesToRead];
            int bytesRead = sp.Read(buffer, 0, buffer.Length);
            var message = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            MessageBox.Show(message);
    }

    public void ConenctToLaser(string port, SerialPort serialPort)
    {
        StreamReader openfile = new StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\commands.txt");
        if (serialPort.IsOpen == false)
        {
            serialPort.Open();
            string command = "";
            command = openfile.ReadLine();
            while(command!=null)
            {
                byte[] buffer = Encoding.ASCII.GetBytes(command);
                serialPort.Write(buffer, 0, buffer.Length);
                command = openfile.ReadLine();
            }
        }
    }

commands.txt包含我的命令。哪个是 \ r MTT \ r MCM \ r SPR300 \ r 在不同的线上 当我将这些命令发送到激光器时,我所得到的就是回声。所以实际上当我发送(" MTT \ r")时我应该恢复硬件的温度。当我在putty中测试我的硬件时,它可以返回上面的所有命令。这里是他们提供的.pdf中的一个命令的定义。 激光温度命令:MTT \ r \ n 描述:激光实际激光温度以XX.X degC 表示

经过几个小时的研究,我找到了问题的答案。从我在网上看到的情况来看,微软的SerialPort课程似乎并不适用于所有的串行硬件。所以我需要使用包装类来使用Win32 API。 我发现这篇文章解释了如何使用Win32类与串行设备进行通信。它还有一个包装器来调用Win32方法。您可以阅读所有相关内容并从以下链接下载所有代码。 https://msdn.microsoft.com/en-us/magazine/cc301786.aspx

希望这可以帮助那些遇到同样问题的人。

0 个答案:

没有答案