C#串口开发案例:迈瑞血球分析仪

本文分享了迈瑞血球分析仪BC-5120的串口开发经验,详细介绍了如何使用HL7协议解析设备传输的数据,包括样本信息、检验结果和直方图数据,并提供了完整的解析代码。

 

分享一个去年做的迈瑞血球分析仪BC-5120的串口开发,如果感兴趣可以留言或者私信,我再继续写其他检验设备的接口开发。

设备BC-5000和BC-5150应该都是通用的协议。详细内容请看传输协议。协议使用HL7,内容超复杂自行百度学习,不懂也没关系。

下载:数据传输协议、采集的数据、报告单的照片以及说明书上对项目的定义

下载:源代码涉及的类库、方法(2020年7月29日新增)

2020年7月29日在文末新增完整解析源代码。

先看看报告单:

看一下用AccessPort串口工具接收的数据:

在程序中获取串口数据byte[] data,删除前后多余的02后,首先判断开始标记:0B,结束标记:1C 0D。然后将数据流转化成字符串,消息段用0D分隔,转换成数组。

data = TrimByte(data, 0x02);//消除前后多余的02字节
if (IsBegin(data, 0x0B) && IsEnd(dataBuffer[id].Data, new byte[] { 0x1C, 0x0D })
{
    string txt = Encoding.Default.GetString(data);//数据流转成字符串
    txt = txt.SubString(1,txt.Length-3);//消除前后标记
    string[] Segment = txt.Split((char)0x0D);//用分隔符0D对消息段分组
}

消息段:段内的字段之间用“|”分隔。

string[] Field = Segment[i].Split('|');

MSH消息段,需要的内容:字段[10]消息控制ID=13(用于发送成功消息),字段[14]类型=P样本,Q质控

MSH|^~\&|||||20191123121334||ORU^R01|13|P|2.3.1||||||UNICODE PID|1||^^^^MR PV1|1 OBR|1||12|00001^Automated Count^99MRC|||

messageID = Field[9];//消息控制ID
type = Field[10];//P样本,Q质控

OBR消息段,字段[4]样本号=12,字段[8]日期=20191123115806

OBR|1||12|00001^Automated Count^99MRC|||20191123115806|||||||||||||||||HM||||||||1

SampleNo =  Field[3];//样本号
DateTime = Field[7];//日期yyyyMMddHHmmss

OBX消息段,检验结果保存在这里,字段[4]项目名称,字段[6]结果。其他结果依次获取。

OBX|5|NM|6690-2^WBC^LN||12.36|10*9/L|4.00-10.00|H~N|||F

string itemName = Field[3].Split('^')[1];//只需要名称缩写
string itemValue = Field[5];//检验结果

获取WBC白细胞直方图数据:从“Base64^”开始是以字符串保存的图像Base64数据,需要转换成图像。红细胞和血小板直方图以及散点图类似。

OBX|31|ED|15008^WBC Histogram. BMP^99MRC||^Image^BMP^Base64^Qk1ObgAAAAAAAAYCAAAoAAAApQAAAKUAAAABAAgAAAAAAEh

bmp = Base64ToImage(itemValue.Substring("^Image^BMP^Base64^".Length));//获取直方图

完成后需要向仪器发送成功消息:

string ack = string.Format(@"MSH|^~\&|LIS||||{0}||ACK^R01|{1}|P|2.3.1||||||UNICODE
MSA|AA|{2}", Cvt.Date14(DateTime.Now), messageID, messageID);//messageID是前面获取的消息控制ID
args.SendData = Encoding.UTF8.GetBytes(ack);//发送串口数据

下面是完整的解析代码,因为是LIS系统的一部分,代码并不简洁,其中分类线等数据并没用上:

/// <summary>
/// 迈瑞BC-5000,5120,5150血球分析仪数据解析
/// </summary>
/// <param name="id">检验设备名称或者ID,用于缓冲区</param>
/// <param name="data">串口数据</param>
/// <returns>检验结果类</returns>
public static DataArgs MindrayBC5000(string id, byte[] data)
{
    if (data.Length == 1 && data[0] == 2)//过滤0x02
    {
  
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值