private const int BaudRate = 600; // 電子稱波特率
private SerialPort sp = null;
private const string PortName = "COM1";//端口號
private delegate void UpdateTextEventHandler(string data);//定義委託
private event UpdateTextEventHandler textChanged;//定義事件
private void initPort()
{
sp = new SerialPort();
try
{
sp.PortName = PortName;//端口號
sp.BaudRate = BaudRate; //波特率
sp.DataBits = 8;//數據位 8位
sp.Parity = Parity.None;//無奇偶校驗位
sp.DtrEnable = true;
sp.RtsEnable = true;
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
textChanged += new UpdateTextEventHandler(SerialPortTest_textChanged);
if (!sp.IsOpen)
{
sp.Open();
}
}
catch (Exception ex)
{
FunctionsUI.CreateErrorDialog(ex);
}
}
/// <summary>
/// 發送數據請求命令
/// </summary>
private void sendDataRequest()
{
byte[] arrByte = new byte[2];
//發送命令 1BH+70H 與電子稱通訊,讀取電子稱數據,16進制
arrByte[0] = Convert.ToByte(0x1B);
arrByte[1] = 0x70;
sp.Write(arrByte, 0, 2);
byte[] buffer = new byte[sp.BytesToRead];
}
//返回數據,對數據進行處理
void SerialPortTest_textChanged(string data)
{
//TODO
}
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
System.Threading.Thread.Sleep(500);//如果時間短了可能讀取數據不完整
byte[] buffer = new byte[sp.BytesToRead];
sp.Read(buffer, 0, buffer.Length);
string data = System.Text.Encoding.ASCII.GetString(buffer);
txtWight.Invoke(textChanged, new string[] { data }); //通過Invoke調用事件
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 關閉串口
/// </summary>
public void DisposeProt()
{
if (sp != null && sp.IsOpen)
{
sp.Close();
}
}
</pre><pre name="code" class="csharp">