您的位置:首页 > 编程语言 > C#

[C#基础]Serialport收发信息

2013-01-14 10:09 113 查看
调用库:

using System.IO.Ports;

创建serialport对象并设置,当然也可以直接拖serialport控件然后设置属性:

public SerialPort test = new SerialPort();
test.PortName = "COM1"; //串口名称
test.BaudRate = 38400; //波特率
test.Parity = Parity.None; //校验位
test.DataBits = 8; //数据位
test.StopBits = StopBits.One; //停止位
test.RtsEnable = true; //确定是否使 Request To Send (RTS) 线有效,一般设置为true
test.ReadTimeout = 100; //读数据时限


设置完之后就可以用了,首先打开/关闭操作
//打开
if (!test.IsOpen)
test.Open();

//关闭
test.Close();

然后是接受数据部分,由Serialport对象自带的data_received完成,收下来分类然后存到相应的list中

假设接受的数据为

数据头长度(高位)长度(低位)数据段结束符
0x010x000x10...0xee
public void test_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
         try
            {
                int n = test.BytesToRead;
                byte[] temp = new byte
;
                test.Read(temp, 0, n);
                buffer.AddRange(temp);

              while (buffer.Count > 0)
                {
                    if (buffer[0] == 0xee) //如果看到ee,认为是结束符号,跳过
                    {
                        received_data.Add(buffer[0]);
                        buffer.RemoveAt(0);
                    }
                    else if (buffer[0] == 0x01) //如果看到01,认为是数据头
                    {
                        if (buffer.Count >= 4)
                        {
                            int len = (buffer[1] << 8) + buffer[2]; //获得长度
                            if (buffer.Count >= len + 4)
                            {
                                byte[] print = new byte[len];
                                for (int j = 0; j < len; j++)
                                {
                                    print[j] = buffer[3 + j];
                                }
/*
对数据操作,这边我将他转换成字符然后存到另一个list中
                                print_info.Add(System.Text.Encoding.Default.GetString(print));
*/
                                buffer.RemoveRange(0, 4 + len);

                            }
                            else
                            {
                                break;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }

                }
            }
                
            catch (Exception err)
            {
                MessageBox.Show(err.Message, "连接错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //return "";
            }
            finally
            {
                //test.close();
            }
}

发送部分,这里的strToByte是自己写的,将字符转换成byte然后发送

public string op_port(string send, int received_len)
{
    string received = "";
    byte[] t = new byte[send.Length / 2];
    t = strToByte(send);
    
    if (!test.IsOpen)
    {
        test.Open();

    }
    
    test.Write(t, 0, send.Length / 2);

    for (int i = 0; i < received_len; i++)
    {
        received += Convert.ToString(received_data[0], 16).PadLeft(2, '0');
        received_data.RemoveAt(0);
    }

    return received;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: