如何确定我们接收到的所有数据来自串口c#
本文关键字:数据 串口 我们 何确定 | 更新日期: 2023-09-27 18:07:49
当我们从连接在串行端口上的设备接收到所有数据时,我们如何知道c#中的SerialPort类?
这是我的代码。我怎么知道我收到了来自设备的所有数据?
private void button1_Click(object sender, RoutedEventArgs e)
{
p = new SerialPort("COM5");
if (!p.IsOpen)
{
try
{
p.Open();
p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
p.PinChanged += new SerialPinChangedEventHandler(p_PinChanged);
Data = "Port ouvert";
}
catch (Exception ex)
{
Data = string.Format("Erreur ouverture du port : {0}", ex.Message);
}
}}
void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var serial = (SerialPort)sender;
string line = serial.ReadExisting();
string data = string.Format("Donné recu : {0}",line);
Data = data;
strb.Append(line);
}
您认为如何接收到所有数据?
例如,我们有一个医疗设备,用来发送文本行到串行连接的打印机(其中一个旧的针式打印机每次只能打印一行,并保持在同一页上),我们用计算机取代了打印机,并制作了一个软件,可以在TextArea中附加来自串行端口的文本行。
以这种方式,您应该侦听串行端口并检测以适当的换行代码终止的新行并处理该新行,但您必须保持连接并查看随后是否有其他数据传入。
我会说这取决于你的设备,如果你知道一旦它完成某个操作将发送给你一个特殊的代码,然后检查该代码,否则就保持连接并听取所有传入的数据
可以查看SerialDataReceivedEventArgs.EventType
属性。如果是SerialData.Eof
,则很可能意味着所有数据都已接收。
串口有一种发送数据的方式。它将它放入缓冲区,并将继续读取,只要缓冲区可以清空,协议可以发送数据。
您所询问的内容高于串行端口的水平。您需要知道要与之通信的设备类型的接口。你必须知道当你听完的时候,设备会告诉你什么。您还需要为没有发送所需的所有数据的情况编写错误处理代码。