串行端口读取失败';t在C#中工作
本文关键字:工作 读取 失败 串行端口 | 更新日期: 2025-01-25 09:48:52
我正在开发C#windows应用程序。它可以从称重桥机读取重量到串行端口。但是,我的代码不起作用。我正在尝试从互联网下载的许多示例。我的代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
namespace SerialPortTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
String a = "";
private void button1_Click(object sender, EventArgs e)
{
serialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
if (serialPort1.IsOpen == false)
{
serialPort1.Open();
}
timer1.Start();
button1.Enabled = false;
button2.Enabled = true;
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
a = a + serialPort1.ReadExisting();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (a.Length != 0)
{
textBox1.AppendText(a);
a = "";
}
}
private void button2_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen == true)
{
serialPort1.Close();
button2.Enabled = false;
button1.Enabled = true;
}
}
private void Form1_Load(object sender, EventArgs e)
{
if (serialPort1.IsOpen == true)
{
button1.Enabled = false;
button2.Enabled = true;
}
else
{
button1.Enabled = true;
button2.Enabled = false;
}
}
}
}
我的代码中有什么错误,任何人都可以帮助我任何工作代码。提前感谢。
您没有为serialPort1注册serialPort1_DataReceived。
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
您可能需要从流中提取二进制数据,而不是将数据作为字符串读取?
以下是DataReceived事件处理程序中的一些代码示例。。。
int nb = serialPort1.BytesToRead;
if (nb > 0)
{
byte[] buffer = new byte[nb];
serialPort1.Read(buffer, 0, nb);
// Depending on the structure of the binary data ...
int number1 = BitConverter.ToInt32(buffer, 0);
int number2 = BitConverter.ToInt32(buffer, 4);
// etc.
}