[英]C# SerialPort class receives incorrect data
我目前有一個使用 VB6 代碼制作的程序,該程序使用 MSCOMM 控件從串行端口拉回數據。 這設法從我的串行端口成功接收數據,其中連接了 Denso BHT-904B 設備。
我現在正在嘗試將此代碼移至 C#,以便它適合我正在開發的新軟件。 為此,我使用了 SerialPort 類。 但是,問題是當我打開端口時,數據接收事件僅在設備無法通信時觸發(我猜這是由於超時)。 然后在事件中接收到的數據是'↑↑↑↑↑'。
我的 SerialPort 控制設置如下:
我在表單控件后面使用的代碼是:
namespace BHTTestingDotNet
{
public partial class Form1 : Form
{
private string rxString;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
serialPort.DtrEnable = true;
serialPort.Encoding = Encoding.Default;
serialPort.DataReceived += serialPort_DataReceived;
serialPort.ErrorReceived += serialPort_ErrorReceived;
serialPort.Open();
}
private void serialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
{
MessageBox.Show(e.ToString());
}
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
var serialPort = (SerialPort)sender;
var test = serialPort.BytesToRead;
SerialPort sr = (SerialPort)sender;
rxString = sr.ReadExisting();
this.BeginInvoke(new EventHandler(displayText));
}
private void displayText(object o, EventArgs e)
{
txtBHT.AppendText(rxString);
}
}
}
我已經嘗試將RtsEnable
和DtrEnable
都設置為true
但這沒有任何區別。
更新 - 我現在已更改為設備上的協議設置,但我現在只接收管道和返回符號,例如: |||||¬
我經常使用 SerialPort 類,為了我的目的,我制作了自己的類
公共類 SerialPortDataSource : SerialPort
其中 SerialPort.DataReceived 處理程序調用此方法:
private void SerialPortDataSource_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
if (BytesToRead > 0)
{
var buffor = new byte[BytesToRead];
Read(buffor, 0, buffor.Length);
_receivedBytes = buffor;
//wConsole.WriteLine(ArrayExtension.ToString(buffor));
var dataLogger = DataLogger;
if (dataLogger != null)
{
dataLogger.WriteLine("- DR - {0}", true, BitConverterExtension.ToHexString(buffor));
}
if (OnDataReceived != null)
{
OnDataReceived(this, buffor);
}
}
}
catch (InvalidOperationException)
{
// sometimes DataReceived event is invoked after port is closed which causes InvalidOperationException
}
}
這種方法在許多具有各種串行端口設置的應用程序中對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.