最近参与公司开发了一款读取ECG心电接口程序

原理就是通过心电设备读取患者的心电数据 并生成ECG文件 然后通过ECG客户端程序读取ECG文件 并解析转换成图片 上传至服务器 

下边是客户端程序截图 客户端配发给个乡镇诊所 主要负责采集患者的心电数据 并压缩上传服务器 这样异地的医生通过登录心电平台 能够及时的对患者的病情做出诊疗 大致开发的时候是这个设想

医生登录服务端

心电盒设备

心电盒可以读取患者的心电数据 并生成ECG文件

但由于心电盒这种设备磁盘读取非常耗电 所以解析文件都是把文件拷贝到本地磁盘进行解析操作

由于项目是BS的  参考很多项目 ECG多数都是显示都是CS程序中 BS必须转成图片才可以 所以本地程序把ECG文件转换成了GIF图片 和滤波文件(滤波文件只能CS程序查看 这里调用的是ECGVIEW)  并压缩成BYTE[]流 通过WCF的方式

上传到服务端预览

患者的数据也是通过客户端上传过来的

读取心电盒数据的读取和读取U盘数据一样 操作很简单

   //读取U盘ECG文件 并序列化为流
        protected override void WndProc(ref Message m)
        {
            try
            {
                if (m.Msg == WM_DEVICECHANGE)
                {
                    switch (m.WParam.ToInt32())
                    {
                        case WM_DEVICECHANGE:
                            break;
                        case DBT_DEVICEARRIVAL://U盘插入                            

                            bool result = false;
                             DriveInfo[] s = DriveInfo.GetDrives();
                             foreach (DriveInfo drive in s)
                             {
                                 if (drive.DriveType == DriveType.Removable)
                                 {
                                     string path = Path.Combine(drive.Name.ToString(), "CCSDSM.ECG");
                                     if (File.Exists(path))
                                     {
                                         result = true;
                                         break;
                                     }
                                 }
                             }

                             if (!result)
                             {
                                 return;
                             }
                            if (this.WindowState == FormWindowState.Minimized)
                            {
                                this.Visible = true;//弹出MainForm

                                this.WindowState = FormWindowState.Normal;//最大化

                            }


                            if (!setRepeatOpenForm("frmMain"))
                            {
                                _frmBaseInfo = new frmMain();
                                _frmBaseInfo.Show(dockPanel1);
                            }

  



                            if (DialogResult.OK == MessageBox.Show("发现ECG心电数据,是否进行上传?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question))
                            {

                                _frmBaseInfo.btnReadXD.Enabled = true;
                                object t=null;
                                EventArgs e=new EventArgs ();
                                _frmBaseInfo.btnReadXD_Click(t, e);
                            }
                            else
                            {
                                _frmBaseInfo.btnReadXD.Enabled = false;
                            }

                                                   break;
                        case DBT_CONFIGCHANGECANCELED:
                            break;
                        case DBT_CONFIGCHANGED:
                            break;
                        case DBT_CUSTOMEVENT:
                            break;
                        case DBT_DEVICEQUERYREMOVE:
                            break;
                        case DBT_DEVICEQUERYREMOVEFAILED:
                            break;
                        case DBT_DEVICEREMOVECOMPLETE: //U盘卸载                            
                            break;
                        case DBT_DEVICEREMOVEPENDING:
                            break;
                        case DBT_DEVICETYPESPECIFIC:
                            break;
                        case DBT_DEVNODES_CHANGED:
                            break;
                        case DBT_QUERYCHANGECONFIG:
                            break;
                        case DBT_USERDEFINED:
                            break;
                        default:
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            base.WndProc(ref m);
        }

ecg解析和滤波文件的生成用的是这两个DLL dll应该是用delphi开的 如果有的朋友能给反编译出代码 记得共享一下哈

由于每种心电盒调用的DLL不一样 所以这种DLL不适用其它产品 这也是行业所欠缺的吧 我觉得 要是能统一一下就好了 共享链接

https://files.cnblogs.com/wangnannan/GifDll.rar

 https://files.cnblogs.com/wangnannan/FilterFile.rar

  

posted on 2013-12-03 10:03  longta  阅读(887)  评论(0编辑  收藏  举报