C#中初始化串列埠的函式定義與資料接收程式碼片段
// init serial port
private void Init_SerialPort()
{
string s;
serialPort1.Close();
for (int i = 1; i < 32; i++)
{
s = "COM" + i.ToString();
serialPort1.PortName = s;
comboBox1.Items.Add(s);
try
{
serialPort1.Open();
}
catch
{
comboBox1.Items.Remove(s);
}
serialPort1.Close();
}
serialPort1.BaudRate = 9600;
if (comboBox1.Items.Count > 0)
{
comboBox1.Text = comboBox1.Items[0].ToString();
serialPort1.PortName = comboBox1.Items[0].ToString();
}
else
{
comboBox1.Text = "";
serialPort1.PortName = uPort1;
}
Update();
}
串列埠資料接收與儲存:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
int DataLength = serialPort1.BytesToRead;
byte[] data = new byte[DataLength];
int len = serialPort1.Read(data, 0, DataLength);
byte Checksum = 0;
if ((len == 6) && (data[0] == 0xAC) && (data[1] == 0x0C))
{
Checksum = (byte)(0xFF - (0xFF & (data[0] + data[1] + data[2] + data[3] + data[4] + data[5] )));
if (Checksum == data[len - 1])
{
uUartReceiveFlag = true;
if (SaveDefaultData == false))
{
Temp_Data[0, 0] = data[2];
Temp_Data[0, 1] = data[3];
Temp_Data[0, 2] = data[4];
if (!File.Exists(TEMP_DATA_FILE))
{
Console.WriteLine("{0} does not exist.", TEMP_DATA_FILE);
return;
}
using (StreamWriter sw = new StreamWriter(TEMP_DATA_FILE, false))//fasle ,若存在則覆蓋
{
sw.WriteLine("0," +Temp_data[0,0] + "," + Temp_Data[0, 1] + "," + Temp_Data[0, 2]);
sw.Close();
}
this.BeginInvoke(new MethodInvoker(delegate()
{
richTextBox1.Text = Temp_Data[0, 0].ToString();
richTextBox2.Text = Temp_Data [0, 1].ToString();
richTextBox3.Text = Temp_Data[0, 2].ToString();
}));
}
}
else
{
this.BeginInvoke(new MethodInvoker(delegate()
{
serialPort1.Close();
uRS232Connect = false;
button7.Enabled = true;
button7.Text = "開啟串列埠";
}));
}
}
else if ((len == 4) && (data[0] == 0xAC) && (data[1] == 0x04))
{
Checksum = (byte)(0xFF - (0xFF & (data[0] + data[1] + data[2])));
if (Checksum == data[3])
{
uUartReceiveFlag = true;
}
}
}
catch
{
this.BeginInvoke(new MethodInvoker(delegate()
{
serialPort1.Close();
uRS232Connect = false;
button7.Enabled = true;
button7.Text = "開啟串列埠";
}));
}
}