1.打开串口
private void btnOpenPort_Click(object sender, EventArgs e)
{
if (txtInputAddr.Text == "")
{
MessageBox.Show("请输入地址");
return;
}
try
{
if (SerialPort1.IsOpen == false)
{
SerialPort1.PortName = port_cbb.Text;
SerialPort1.BaudRate = Convert.ToInt32(baud_cbb.Text);
SerialPort1.Open();
isOpen = true;
open_btn.Text = "关闭串口";
}
else
{
SerialPort1.Close();
isOpen = false;
open_btn.Text = "打开串口";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString() + SerialPort1.PortName.ToString());
}
}
2.注册表中获取端口信息
RegistryKey keyCom = Registry.LocalMachine.OpenSubKey(@"Hardware\DeviceMap\SerialComm");
string[] sSubKeys = keyCom.GetValueNames();
port_cbb.Items.Clear();
foreach (var sValue in sSubKeys)
{
string portName = (string)keyCom.GetValue(sValue);
port_cbb.Items.Add(portName);
}
this.port_cbb.SelectedIndex = 0; //默认port_cbb ITEM中串口号
this.baud_cbb.SelectedIndex = 1; //默认baud_cbb ITEM中波特率
3.串口接收数据
//其他窗体可通过类名引用readData,例:MainForm.readData
public static byte[] readData = new byte[100];
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(20); //延时为了接收长数据
byte[] dataTemp = new byte[SerialPort1.BytesToRead];
SerialPort1.Read(dataTemp, 0, dataTemp.Length);
readData = dataTemp;
}
4.串口发送数据
1) 本窗体中,就直接调用对象
SerialPort1.Write(sendReadCmd, 0, sendReadCmd.Length);
2) 别的窗体中,需要实例化SerialPort1为静态,用窗体类名调用
MainForm中实例化SerialPort1 :public static SerialPort SerialPort1 = new SerialPort();
别的窗体调用需要实例化MainForm:
MainForm mainForm = new MainForm();
MainForm.SerialPort1.Write(sendReadCmd, 0, sendReadCmd.Length);
9009

被折叠的 条评论
为什么被折叠?



