使用控件SerialPort读取串口的信息,网上很多例子不能用,写一个能用的。
初始化界面添加如下信息:
public Form1()
{
InitializeComponent();
serialPort1.ReceivedBytesThreshold = 19;//这个接收数据的缓冲值,根据具体情况而定。
serialPort1.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
}
添加一个打开串口的按钮,内容如下。
private void btnOpen_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
}
else
{
serialPort1.PortName = "com4";//端口号
serialPort1.BaudRate = 9600;//波特率
serialPort1.Parity = Parity.None;//校验位
serialPort1.DataBits = 8;//数据位
serialPort1.StopBits = StopBits.One;//停止位
try
{
serialPort1.Open();
}
catch (Exception ex)
{
serialPort1 = new SerialPort();
MessageBox.Show(ex.Message);
}
}
btnOpen.Text = serialPort1.IsOpen ? "Close" : "Open";
btnSend.Enabled = serialPort1.IsOpen;
}
添加一个发送按钮:
private void btnSend_Click(object sender, EventArgs e)
{
int s;
byte[] data = { 0x01,0x03,0x00,0x00,0x00,0x07,0x04,0x08 };//发送数据的指令也是根据具体情况而定
serialPort1.Write(data,0,data.Length);
}
接受数据的信息:
void _serialPort_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
int flag = 0;
string str = "";
byte[] s = new byte[19];
SerialPort port = (SerialPort)sender;
//接受数据的位数
int received_count = 0;
while (port.BytesToRead>0)
{
byte b = (byte)port.ReadByte();
s[received_count] = b;
received_count++;
}
this.Invoke((EventHandler)(delegate { richTextBox1.Text = richTextBox1.Text + "\n" + byteToHexStr(s) ; }));
}
哪里不懂可以留言。