LIS 解码程序开发手册
本手册对整个 LIS 都有所讲解,但重点还是放在 LISLiod 上面。从整个程序的框架的架
构,到每个配置文件的说明,每种解码算法的好处等,一一的让你学会 LISLiod。
完成一台仪器,一般是四个步镞,1。分析仪器,2。分析原始数据,3。编写 LIS 解码程
序,4。调试
一、分析仪器大概有以下几点
1. 会看仪器
2. 熟悉 LIS 系统的流程
3. 会做线
4. 一些基本的沟通
5. 注意卫生。
二、分析原始数据,这是总过流程中最困难,也是最关键的一个环节。原始数据不只是 TXT
文本,还有数据库等其他格式的文件。有四个步骤:
1.找出每个标本的起始符与结束符
2.找出每个标本的日期和样本号
3.找出每个项目数据或图象数据对应的位置
4.最后总结,得到规律。
三、所谓 LIS 解码程序(LISLoid),就是一段小的程序,自动的完成把仪器做完标本所产生
的有用数据(往往这些数据都比较复杂难以看懂,所以才叫解码)存入到 HIS 和 LIS 系统里面,
使 HIS 和 LIS 系统能够灵活的调用这些数据。做一个桥梁把仪器和 HIS 和 LIS 系统连在一
起。
LISLoid 是由舞个基本的部分组成:
1. 通信程序。
2. 解码算法程序。
3. 插入数据库的程序
4. 报告程序。
5. 历史备份
四、调试,除了完善 LISLiod,还有报表格式的调整,打印机等测试。
分析仪器
1. 会看仪器,不是要你学会怎样使用仪器,而是根据实际的情况把这台仪器定位到我们解
决它的四个位置中,哪四一个位置?
第一,仪器已经很旧,一些取数据的接口已经损坏,使用次数很少。象这类型的仪器迟
早会要淘汰去,做了意义也不大,所以对这些仪器我们采用“手工项目”,直接手工填
写数据,保存到 LIS 系统,解码程序也就省了。
第二,中小型的仪器,一般都是有 COM 接口的,标本的样本号由仪器本身输出。对这
种我们用通信程序直接截取数据进行解码。(如:电解质仪器,尿液分析仪。。。。)
第三,很先进的大仪器,这种一般都比较复杂,就算能用通信程序截取到数据,我们对
它进行完全解码也比较困难,而仪器一般都自带有一套操作软件,所以我们从它的软件
中做接口,大部分仪器在这方面都留有接口,可以找说明书,也可以直接打电话询问仪
器产家。(通常的接口有:本地数据库,result 文件。。。。)
最后,还有一些非常特需的仪器,旧,用的少,有复杂的图象,没有上面所说的接口。
这种就不能用常规的方法解决,如:利用钩子程序,直接截取它的结果,利用截屏的程
序获取图象。。。
、
2. 熟悉 LIS 系统的流程,这个非常重要,因为要使一台仪器能正常运行,需要对 LIS 系统
进行很多的配置,只有正确的配置好了,仪器里的数据才会准确无误的传入到 LIS 系统。
“lis 模块功能”,“LIS 软件流程”,“LIS 系统库表”,“LIS 项目实施文档”,“培训教材”
等这些都要认真阅读,最好还要能够掌握 LIS 数据库里的所有表结构。
3. 会做线,首先知道接线的规则,有 25 钟的接口,9 钟的,公母匹配。。。。。认真阅读
“RS-232-C 详解”文档,对通信程序的理解也很有帮助。学会这个可以节哟成本。
4. 沟通很重要,因为我们要做的仪器,现在都已经正在正常使用,你首先就要调查清楚每
台仪器的使用时间,然后调试仪器,这些都需要每台仪器的操作员配合的。所以沟通显
得有所必要。
5. 注意卫生,检验科,是医院所有地方最需要注意的地方。不过也没有那么可怕,多注意
一下,不要随便乱碰拿什么东西,进出一定洗手。一般就不会有什么问题。
原始数据分析
对 TXT 文本的数据分析就一定会用到“原始数据分析”这个工具,会把数据转化为 ASCII
码用网格定位的显示出来,还能颜色区分特需字符,精确定位字符。下面我们看具体的列子:
这是一台型号为 FA-150 的尿液分析仪取出的原始数据,用记事本打开。在用“原始数据分
析”打开看看。
(图一)
现在我们结合这两个工具找出我们需要的数据。
一般开始符和结束符都是一些特需的字符,会用红色表示出来,通过图二,我们就可以看得
出他们的
(图二)
开始符为 13,13,2,13,13,10 结束符 3 (用 ASCII 码表示)
日期的开始位为 6 结束位 25
标本号 49---51
60----74
GLU
82----96
BIL
KET
104----118
126----140
SG
148----162
BLD
170----184
PH
PRO
192----206
214----221
URO
236----250
NIT
LEU
258----272
还有我们发现每个标本的长度相等都是 276 位
根据这些规律我们就可以写出算法来得到每个项目对应的数据
下面我们接着来分析一个数据库的数据.
数据库是哪来的了?有这个数据库当然就有和它匹配的软件,这套软件一般是由仪器产商提
供的一套软件和仪器一起买出,通常这套软件都是一个小型的 LIS 系统,也就是这台仪器的
通讯程序和解码程序都已经集合在这套软件里面了,所以我们就没必要自己再重新给这台仪
器安装一个通讯程序,然后再编写一个对应的解码程序。这样不但费力,更重要的是自己写
的肯定是没有产商的这套程序准确。我们就不能走这条路了,有条更简单快截的方法,就是
直接访问产商软件的数据库,把标本的结果取出来就可以了。和数据库做接口有几个前提条
件,1。了解它的数据库类型,是 ACESS 数据库了,还是其他类型的数据,并找到它通过
ADO 连接他的驱动程序。2。看它是否设了密码,如果有就的象产商获取。3。分析掌握它
的表结构,如果自己分析不出来,也要找产商要。
下面我们来看这台 ACESS 数据库的-----酶标仪
这是它的所有表名。
现在我们来分析它的表结构,找出对我们有用的表和他们之间的关系。
上图是我们需要的三个表的表结构,下图是三个表之间的关系。
Tb_method 项目表,本仪器所做的所有仪器的项目
Tb_plate 一次标本做了多少个项目
Tb_plate_data 一个项目做了多少个标本和他们结果值
通过上面的分析,可以用下面的方法来解决。
因为这种仪器做标本是成套成套的做的,一次至少就是几十个上百个,所以我们记录上次做
完后他的最后 ID 不能保存样本表的 ID,要保存板子表的 ID。我们记录 TB_PLATE 表的
PLATE_ID 字段,下次解码就只要解上次记录的后面的数据。
LISLiod 学习
LIS 解码程序(LISLoid),就是一段小的程序,自动的完成把仪器做完标本所产生的有
用数据(往往这些数据都比较复杂难以看懂,所以才叫解码)存入到 HIS 和 LIS 系统里面,使
HIS 和 LIS 系统能够灵活的调用这些数据。做一个桥梁把仪器和 HIS 和 LIS 系统连在一起。
即使是一段小程序,为了编写的方便和理解,把这段程序分开来解释。共四个部分,前
台界面操作显示,解码类,数据插入数据库类,配置文件操作类。
一,前台界面:
主 界 面 上 有 五 个 按
钮,分别是:HELP,SET,DECODE,DUG,STOP。HELP 就是显示帮助文档,SET 修改
配置文件和解码启动方式,DECODE 点击开始解码图标变蓝,STOP 停止解码,DUG 调试
显示单个样本解码结果。其中还有一个隐藏配置方式快捷键 F9,显示该解码程序是和哪台
仪器匹配,仪器的哪些项目。右键菜单》恢复。下面显示一个文本框,显示当前样本解码后
的结果。
二,解码类:
解码类又分为了一次解码和二次解码,一次解码主要是把原始数据里项目的值取出来存
入 DATAXML,二次解码就是把一次取出的项目结果再次进行分析,合并特定公式或特定
条件,最后得到的是最终需要的结果存如 DATAXML。
public class DataDeCode
{
public delegate void DataInsertEventHandler(object sender, EventArgs e);
///
/// 数据插入数据库事件
///
public event DataInsertEventHandler DataInsert;
///
/// 解码进度事件
///
public delegate void FrmTrayIconChangeEventHandler(int trye,int allcount,int
nowcount);
public static event FrmTrayIconChangeEventHandler FrmTrayIcon;
///
/// 存放最后得到的数据
///
public string DataXML=null;
private string resultfilename=@"result\"+DateTime.Now.ToString("yyMMdd")+".txt";
///
/// 数据库连接
///
//private System.Data.OleDb.OleDbConnection conn=null;
public DataDeCode()
{
}
public void decode()
{
this.DataXML=null;
DataXML=DataXML+"";
DataXML=DataXML+"
";
this.loadXML();
DataDeCode.FrmTrayIcon();
DataXML=DataXML+"";
PublicClass.outxml_Appendfile(resultfilename,DataXML);
PublicClass.BindDataXML(DataXML);
if(this.DataInsert!=null)
this.DataInsert(this,EventArgs.Empty);
PublicClass.updateNode();
}
///
/// 得到的数据存入XML中
///
///
///
///
private void loadXML(string sd,string name,string codename,int num)
{
this.DataXML=DataXML+"
"+sd+"";
}
}
上面的 DataDeCode 类就是一次解码类,
decode()为解码方法,界面上的 DECODE 按钮就是首先调用这个方法。
Decode方法中有些常用的功能方法,
1.this.loadXML();就是把取到的结果构建成XML文档形式。
2.DataDeCode.FrmTrayIcon();方法是在界面上显示解码的进度,按百分比这样显示。
3.PublicClass.outxml_Appendfile(resultfilename,DataXML);方法是备份这次解码的结果。以后还可以
本地查询结果。