由于在工作的过程中,经常用到串口测试工具,在测试连接硬件设备的时候一般使用usb转232来连接,但是在不同的电脑甚至不同的usb口都可能映射出不同的串口号来,在这个时候就要在设备管理器中查看当前的串口号是多少,这个操作比较繁琐,如下:
先要确定我的串口号是com4,如果这个选择不正确,后面的串口连接是不可能正常的。
那么能不能省掉这一步呢,经查找资料,可以在c#中体现,当然具体其他环境是否可以,没有查找,咱们只关注我们要关心的。下面描述下实现的过程:
1.
定义串口,我这里使用的一个我自己封装的类,可以使用getportnames来获得列表
public string[] ports; //串口列表
public YFCSerial()
{
//初始化SerialPort对象
comm.NewLine = "\r\n";
comm.RtsEnable = true; //根据实际情况吧。
received_count = 0;
send_count = 0;
ports = SerialPort.GetPortNames(); //获得串口的列表
Array.Sort(ports);//排序
HexFlag = true;
}
然后在窗口初始化的时候,将列表传递过来并显示
public form1()
{
YFCSerial serial = new YFCSerial();
serial_name.Items.AddRange(serial.ports);
if(serial.ports.Length>0)
serial_name.SelectedIndex = 0;
}
这里 还需要注意一点,以上虽然实现了可以自动查找的功能,但是有一个要求,必须是先插入usb转232,然后启动程序才行,但是我平时为了省时间,经常是先启动程序在插入usb转232,这样就不能实现了,这样需要再增加一个消息,当combox控件的dropdown的时候触发。
private void combo_comm_DropDown(object sender, EventArgs e)
{
InitPorts();
}
public void InitPorts()
{
//初始化串口
combo_comm.Items.Clear();
string[] comm_names = SerialPort.GetPortNames();
combo_comm.Items.AddRange(comm_names);
if (comm_names.Length > 0)
combo_comm.SelectedIndex = 0;
comboBox4.Items.AddRange(comm_names);
if (comm_names.Length > 0)
comboBox4.SelectedIndex = 0;
}
这样就可以完美实现了,即使在使用的过程中不小心拔出usb,再插到别的usb接口上,程序也能扫描到,完全省去从设备管理器中查找串口的步骤。
这里仅作记录和部分人参考使用,如果有其他更好的办法,欢迎留言讨论。