样本号1: Date:2025-07-19 09:52
Operator: 04
No. 000001
*LEU 1+ 70 Leu/uL
NIT - neg
URO - 3.5 umol/L
*PRO 2+ 1.0 g/L
pH 6.0
*BLO 1+ 25 Ery/uL
SG 1.030
KET - neg
*BIL 1+ 17 umol/L
GLU - neg
*ASC 1+ 0.56mmol/L
样本号2:
Operator: 04
No. 000004
LEU - neg
NIT - neg
URO - 3.5 umol/L
PRO - neg
pH 5.5
BLO - neg
SG 1.030
KET - neg
BIL - neg
GLU - neg
ASC - neg
样本号3:
Date:2025-07-16 10:51
Date:2025-07-09 09:50
Operator: 04
No. 000002
LEU - neg
NIT - neg
URO - 3.5 umol/L
PRO - neg
pH 6.0
BLO - neg
SG 1.010
KET - neg
BIL - neg
*GLU 3+ 60 mmol/L
ASC - neg
此样本号解析代码using Com.Huancare.Medical.Lis.Communication.ProtocolBase.Serial;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
namespace Com.Huancare.Medical.Lis.Communication.Protocol.Serial
{
/// <summary>
/// 尿液分析仪Mission U120
/// </summary>
class SerialMissionU120 : SerialSvrReceiveData
{
/// <summary>
/// 计时器
/// </summary>
System.Timers.Timer timer = new System.Timers.Timer(3000); // 1s
private string strHosID;
private string strHosEquipID;
private string strPortName;
public SerialMissionU120(string strPortName, int iBaudRate, int iDataBits, StopBits stopBits, Parity parity, int iBufferSize, string strShakeHands, string strReply, string strEndShakeHands, string strEndReply)
: base(strPortName, iBaudRate, iDataBits, stopBits, parity, iBufferSize, strShakeHands, strReply, strEndShakeHands, strEndReply)
{
this.strPortName = strPortName;
timer.Elapsed += new System.Timers.ElapsedEventHandler(SaveData);
timer.AutoReset = false;
}
StringBuilder sbCache = new StringBuilder();
private SerialPort _port;
protected override void PacketReceived(byte[] btRecData, string strHosEquipID, string strHosID)
{
timer.Enabled = false;
this.strHosID = strHosID;
this.strHosEquipID = strHosEquipID;
sbCache.Append(Encoding.ASCII.GetString(btRecData));
timer.Enabled = true;
}
private void SaveData(object sender, System.Timers.ElapsedEventArgs e)
{
string strRecData = "";
lock (this)
{
strRecData = sbCache.ToString();
sbCache.Remove(0, sbCache.Length);
}
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProcessReceiveData), strRecData);
}
private void ThreadProcessReceiveData(object objRecString)
{
string strOptMsg = "";
string ReceiveData = objRecString.ToString();
string SampleId = "";
string SampleDate = "";
string SampleAE = "";
string SampleValue = "";
StringBuilder Sb = new StringBuilder();
try
{
string[] rcvarr = ReceiveData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
string SampleNum = System.Text.RegularExpressions.Regex.Replace(rcvarr[2], @"[^0-9]+", "");//第一行字符串只保留数字
SampleId = SampleNum.Substring(0, 6);//截取长度为6,样本号
SampleDate = DateTime.Now.ToString("yyyyMMddHHmmss");
Sb.Append(SampleId).Append("|").Append(SampleDate).Append("|");
for (int i = 3; i < rcvarr.Length; i++)
{
string[] arr = rcvarr[i].Split(new string[] { " " , "\t"}, StringSplitOptions.RemoveEmptyEntries);
if (arr.Length >= 2)
{
SampleAE = arr[0];//通道号
SampleValue = arr[1];//检验结果
Sb.Append(SampleAE).Append(":").Append(SampleValue).Append(";");
}
}
Sb.Append("|");
strOptMsg = SaveReceiveData.SaveReceivePacked(this.strHosID, this.strHosEquipID, Sb.ToString());
OnReceiveDatas(this.strHosEquipID, strPortName, new ReceiveDatasEventArgs(Encoding.UTF8.GetBytes(Sb.ToString()), strOptMsg));
Sb.Remove(0, Sb.Length);
}
catch (Exception ex)
{
strOptMsg += ex.Message;
OnReceiveDatas(this.strHosEquipID, strPortName, new ReceiveDatasEventArgs(Encoding.UTF8.GetBytes(objRecString.ToString()), strOptMsg));
}
}
}
}有时会出现解析报错,写出优化后代码