c# - 读取串口数据而不丢失任何数据和解析
问题描述
我有一个每 200 毫秒通过串行端口发送数据的系统。我正在尝试使用串行端口数据读取来读取它。我有两种类型的数据来读取和解析它。第一个数据序列如下所示
$System1;c62;23.34;E-1;E-2;-56.67;567;
第二个数据序列看起来像这样
\u0006\u0001\0d\o?\"\0$?##STA\r\nSystemLevel:Run\r\nstatus:1\r\n................ \r\n停止##
第一个序列数据将每 200 毫秒发送一次,第二个序列数据将在第一个数据序列之间每 20 秒发送一次。
我正在尝试如下读取串行端口
void ConfigcomPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
StringBuilder charSrting = new StringBuilder();
//string Data;
System.Threading.Thread.Sleep(150);
string Data = configcomPort.ReadExisting();
if (Data.StartsWith("$System1"))
{
try
{
string[] splitdata = Data.Split(';', '\r', '\n');
double.TryParse(splitdata[3], NumberStyles.Any, CultureInfo.InvariantCulture, out Position1);
double.TryParse(splitdata[4], NumberStyles.Any, CultureInfo.InvariantCulture, out position2);
supplyVoltage = splitdata[2];
if (splitdata[1].StartsWith("C"))
{
batteryStatus = BatteryStatus[1];
BatteryPercent = double.Parse(splitdata[1].Substring(1, 2));
}
NotifyDataReceived(system, value.position1);
UpdateBatteryStatus(BatteryPercent);
}
catch (Exception ex)
{
string test = ex.Message;
}
}
else
{
try
{
string[] Statussplit = Data.Split(';', ':', '\r', '\n')
//trying to parse second sequence here.
}
catch (Exception ex)
{
string test = ex.Message;
}
}
}
问题是我无法正确读取第二个序列。数据丢失。我能够接收第一个序列并对其进行解析,但在两者之间我得到了第二个没有正确接收的序列。我总是错过第二个序列中的一些数据,所以无法解析它。
有没有办法解决这个问题??我试过“bytestoread”,但还是一样。有没有最好的方法来读取所有序列并解析出来?
问候,拉姆。
解决方案
推荐阅读
- sql - 创建一个传入外键的循环函数
- html - 带有悬挂缩进的内联描述列表
- reactjs - package.json 中的主页属性
- python - Python:线图 - 在 X 轴上格式化日期?
- python - ModuleNotFoundError:在 Windows 虚拟环境中尝试使用 Pytest 和 Flask 创建测试时没有名为“app”的模块
- javascript - 为什么我们在函数中传递匿名参数?
- performance - 使用“isSomething”的最佳方式是什么?
- ios - 表格视图不显示任何内容?
- python - 多个列表比较
- c++ - 存储/转换函数指针到函数