C# 串口助手开发 笔记

1.禁止下拉框输入:属性中的DropDownStyle设置为DropDownList

2.在textbox中16进制数显示两位:a.ToString("X2");

3.获取电脑上可用的端口号:string[] ports = System.IO.Ports.SerialPort.GetPortNames();

4.将获取到的串口号添加至下拉框:comboBox1.Items.AddRange(ports);

5.弹出消息框: MessageBox.Show();

6.剔除字符串中的空格:str = str.Replace(" ", "");

7.获取串口中可读字节数:int len = serialPort1.BytesToRead;

8.文本框追加显示数据:textBox1.AppendText();

9.清空文本框中内容: textBox1.Clear();

10.文本框中换行: textBox1.AppendText(“\r\n”);

11.程序发布没有证书:使用office工具的VBA数字证书,生成一个证书。

12.代替委托的新方法(调用textBox1.AppendText 报错:线程间操作无效: 从不是创建控件“textBox1”的线程访问它):

Invoke((new Action(() =>
    {//C# 3.0以后代替委托的新方法
        if (checkBox1.Checked)    //16进制显示
        {
            textBox1.AppendText(byteToHexStr(buff));
        }
        else    //字符串显示
        {
            textBox1.AppendText(Encoding.Default.GetString(buff));
            textBox1.Clear();
         }
    }
)));

13.USB插拔检测:

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x0219) //设备改变
    {
        if (m.WParam.ToInt32() == 0x8004)    //USB拔出
        {
            string[] ports = System.IO.Ports.SerialPort.GetPortNames();//重新获取串口
            comboBox1.Items.Clear();          //清除comboBox里面的数据
            comboBox1.Items.AddRange(ports);  //给comboBox1添加数据
            serialPort1.Dispose();            //释放掉原先的串口资源
            comboBox1.SelectedIndex = 0;      //选择第一个端口
        }
        else if (m.WParam.ToInt32() == 0x8000)    //usb接入
        {
             string[] ports = System.IO.Ports.SerialPort.GetPortNames();//重新获取串口
             comboBox1.Items.Clear();        
             comboBox1.Items.AddRange(ports);
             comboBox1.SelectedIndex = 0
                    }
                }
            }
            base.WndProc(ref m);
        }
}

 14.ModbusCRC16检验位生成:

//eg:01 03 00 02 00 02 
//-->01 03 00 02 00 02 65 CB
private void ModbusCRC16(byte[] data)
{
    UInt16 tmp = 0xFFFF;

    for (int i = 0; i < 6; i++)
    {
        tmp = (UInt16)(data[i] ^ tmp);
        for (int j = 0; j < 8; j++)
        {
            if ((tmp & 0x01) != 0)
            {
                tmp >>= 1;
                tmp ^= 0xa001;
            }
            else
            {
                tmp >>= 1;
            }
        }
    }
    data[6] = (byte)(tmp & 0xFF);
    data[7] = (byte)(tmp >> 8);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C#串口助手程序的示例代码: ```csharp using System; using System.IO.Ports; namespace SerialPortDemo { class Program { static SerialPort _serialPort; static void Main(string[] args) { try { _serialPort = new SerialPort(); _serialPort.PortName = "COM1"; // 串口名称 _serialPort.BaudRate = 9600; // 波特率 _serialPort.DataBits = 8; // 数据位 _serialPort.Parity = Parity.None; // 校验位 _serialPort.StopBits = StopBits.One; // 停止位 _serialPort.Handshake = Handshake.None; // 握手协议 _serialPort.Open(); // 打开串口 Console.WriteLine("Serial port opened!"); while (true) { string input = Console.ReadLine(); if (input.ToLower() == "exit") break; _serialPort.WriteLine(input); // 发送数据 Console.WriteLine("Sent: " + input); string output = _serialPort.ReadLine(); // 接收数据 Console.WriteLine("Received: " + output); } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (_serialPort != null && _serialPort.IsOpen) _serialPort.Close(); // 关闭串口 } } } } ``` 这个程序使用了C#的`SerialPort`类来实现串口通信。在`Main`方法中,它打开了一个名为COM1的串口,并且设置了波特率为9600,数据位为8,校验位为无,停止位为1,握手协议为无。 程序进入一个无限循环,等待用户从控制台输入数据。当用户输入数据后,程序将其发送到串口,并等待接收到响应。用户可以通过输入"exit"来退出程序。 在`try`块中,我们使用`SerialPort.WriteLine`方法将数据发送到串口,并使用`SerialPort.ReadLine`方法等待串口返回响应。在`catch`块中,如果出现异常,程序将打印错误消息。在`finally`块中,我们使用`SerialPort.Close`方法关闭串口。 请注意,在使用`SerialPort`类之前,您需要将`System.IO.Ports`命名空间添加到您的项目中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值