Module kết nối dữ liệu cổng COM

Một phần của tài liệu Xây dựng hệ thống thông tin trong phòng xét nghiệm (Trang 78)

7. Chương 7: Chương trỡnh S-LIS

1.1Module kết nối dữ liệu cổng COM

Tạo một project mới, đặt tớn cho form ban đầu lă MainForm, đđy lă form hoạt động chớnh của chương trỡnh. Lấy điều khiển Serial Port thả văo MainForm ta được điều khiển SerialPort1. Ta thiết lập cõc thuộc tớnh mặc định cho SerialPort1 phự hợp đối với kết nối mõy SYSMEX như sau:

Hỡnh 7-1: Thiết lập thuộc tớnh mặc định của cổng COM

Name: SerialPort1 BaudRate: 9600 DataBits: 8 Handshake: None Parity: None PortName: COM1 StopBit: One

Người sử dụng cú thể thiết lập cõc tham số kết nối cổng COM qua form COMSetting:

Hỡnh 7-2: Cấu hỡnh cổng COM theo người sử dụng

Cõc hăm cần dựng:

+ GetSerialPortNames(): Hăm năy xõc định cõc cổng COM cú trớn mõy tớnh vă đưa tớn cõc cổng năy văo ComboBoxPort để cho người sử dụng chọn cõc cổng hợp lệ.

+ GetSerialPortConnectionData(): Hăm năy cú nhiệm vụ lấy tất cả cõc thụng số kết nối cổng COM do người sử dụng thiết lập, bao gồm: Cổng kết nối (PortName), tốc độ truyền (BaudRate), số bit trong khung dữ liệu (DataBits), Chế độ bắt tay (Handshake), bit kiểm tra(Parity), bit chặn(StopBit).

+ Hăm xử lý sự kiện nỳt OK được ấn, hăm năy sẽ gọi hăm

GetSerialPortConnectionData() vă đúng form COMsetting lại

+ Hăm khởi tạo cõc giõ trị ban đầu khi form COMSetting được gọi, sẽ gõn cho cổng COM cõc giõ trị được chọn sẵn để thuận tiện cho việc thiết lập của người dựng. Hăm năy sẽ gõn cõc cõc giõ trị:

BaudRate = 9600 DataBits = 8 Parity = None StopBit = 1

1.2 Module đún, phđn tớch vă hiển thị dữ liệu

Nhiệm vụ của module năy lă điều khiển đúng/mở cổng COM, thu nhận chuỗi dữ liệu đến, phđn tớch tõch ra cõc trường tương ứng với cõc kết quả xĩt nghiệm, thực hiện việc hiển thị kết quả trớn măn hỡnh.

Lưu đồ thuật tõn của Module năy như sau:

Hỡnh 7-3: Lưu đồ thuật tõn đún, phđn tớch vă hiện thị dữ liệu

Trớn Mainform ta đặt cõc Label, Texbox, DateTimePicker để hiển thị cõc giõ trị nhận được như sau:

Hỡnh 7-4: Main form hiển thị cõc giõ trị nhận được

+ Để thực hiện việc đúng mở cổng COM ta khai bõo một cờ nhớ

OpenStatus kiểu bool để lưu giữ trạng thõi đúng/mở của cổng COM. Để lưu trữ cõc giõ trị của kết quả xĩt nghiệm ta khai bõo thớm cõc đại lượng như sau:

- Định dạng ngăy giờ được sử dụng: “dd/MM/yyyy, HH:mm tt”

- Thời gian xĩt nghiệm: TestTime kiểu Date - Cõc đại lượng xĩt nghiệm:

SID (Sample ID): ID của mẫu xĩt nghiệm kiểu Integer

WBC, RBC, HGB, HCT, PLT, PCT, MCV, MCH, MCHC, RDW, MPV, PDW, PcLYM, NoLYM, PcMON, NoMON, PcGRA, NoGRA cõc kết quả xĩt nghiệm nhận được kiểu double.

Cõc hăm được sử dụng:

+ Cõc hăm đúng vă mở cổng COM: OpenCOM(),CloseCOM() lăm nhiệm vụ mở vă đúng cổng COM thụng qua kiểm tra giõ trị của biến trạng thõi

+ Hăm xử lý sự kiện nỳt Open được ấn, sẽ gọi cõc hăm OpenCOM()

hoặc CloseCOM() đồng thời thay đổi trạng thõi của Label thụng bõo tỡnh trạng đúng hay mở của cổng COM.

Tương tự ta cũng cú một hăm như thế trớn Menu Chức năng cho người dựng cú thể điều khiển việc đúng mở cổng COM qua Menu chớnh.

+ Dữ liệu nhận được chứa trong xđu StrRec. Ta cần xđy dựng cõc hăm để xử lý xđu năy. Cú 2 định dạng dữ liệu xuất ra của mõy SYSMEX lă ABX vă ARGOS tựy theo thiết lập trớn mõy vă ta xđy dựng hăm xử lý ứng với từng trường hợp sau đú kết hợp lại thănh một hăm thống nhất cú khả năng tự động nhận dạng loại dữ liệu để xử lý tương ứng đối với từng trường hợp.

- Đối với xđu ARGOS ta sử dụng cõc hăm:

SplitArgosString(): Cú nhiệm vụ tõch xđu ARGOS tại cõc vị trớ xuống dũng tạo thănh cõc mảng chứa cõc xđu kớ tự, mỗi mảng sẽ chứa một đại lượng xĩt nghiệm cần quan tđm.

GetInvidualArgosData():Sử dụng cõc hăm xử lý xđu để tõch ra cõc trường dữ liệu tương ứng với cõc kết quả xĩt nghiệm SID, DateTime, WBC, RBC,… đối với định dạng ARGOS

- Đối với xđu ABX ta sử dụng cõc hăm:

SplitAbxString():Cắt xđu ở vị trớ kớ tự thứ 6, lă kớ tự ngăn cõch cõc trường tạo ra một mảng cõc chuỗi kớ tự, mỗi mảng sẽ chứa một đại lượng xĩt nghiệm cần quan tđm.

GetInvidualAbxData(): Lấy cõc giõ trị kết quả xĩt nghiệm từ mảng xđu ABX thu được bằng cõc hăm xử lý xđu

+ Hăm FillData() hiển thị cõc kết quả xĩt nghiệm lớn cõc đối tượng TexBox vă DateTimePicker ứng với cả 2 xđu ARGOS vă ABXtừ cõc thụng số nhận được qua hai hăm GetInvidualArgosData(), GetInvidualAbxData().

+ Hăm xử lý sự kiện cú dữ liệu ở cổng COM: SerialPort1_DataReceived

thực hiện việc đọc xđu dữ liệu thu được, nhận dạng xđu lă ABX hay ARGOS, phđn tõch dữ liệu ra thănh cõc trường rồi hiển thị.

Hăm năy kiểm tra xem, khi cú dữ liệu đổ đến cổng COM sẽ đọc cho đến kớ tự mờ 03 (ETX) vă gõn xđu văo biến StrRec, kiểm tra xem dạng xđu nhận

được lă ABX hay ARGOS rồi gọi cõc hăm xử lý dữ liệu tương ứng, cuối cựng sẽ hiển thị cõc dữ liệu nhận được lớn cõc TextBox vă DateTimePicker.

1.3 Module chẩn đõn kết quả xĩt nghiệm

Module năy cú nhiệm vụ xem xĩt cõc giõ trị xĩt nghiệm nhận được cú nằm trong dải cho phĩp hay khụng để đưa ra cảnh bõo bằng cõch tụ đỏ giõ trị đú đồng thời sẽ in ra một dũng chữ cảnh bõo về cõc giõ trị nằm ngoăi dải, giỳp cho việc chẩn đõn dễ dăng vă thuận tiện hơn. Lấy vớ dụ, lượng Bạch cầu (WBC – White Blood Cell) đối với một người bỡnh thường nằm trong khoảng 3.5 ữ 10 x 109 /lit, nếu giõ trị bạch cầu thu được trong xĩt nghiệm lă 2.5 x 109 / lit (bạch cầu thấp) thỡ cú nghĩa lă nằm ngoăi dải bỡnh thường giõ trị năy sẽ được bụi đỏ để dễ dăng quan sõt vă chẩn đõn.

Module năy cần khai bõo cõc hằng số ứng với giới hạn dải cho phĩp như sau: Const WBCmin = 3.5, WBCmax = 10.0

Const RBCmin = 3.8, RBCmax = 5.8

Const HGBmin = 110, HGBmax = 165

Const HCTmin = 0.35, HCTmax = 0.5 Const PLTmin = 150, PLTmax = 390 Const PCTmin = 0.1, PCTmax = 0.5

Const MCVmin = 80, MCVmax = 97

Const MCHmin = 26.5, MCHmax = 33.5

Const MCHCmin = 315, MCHCmax = 350

Const RDWmin = 10.0, RDWmax = 15.0 Const MPVmin = 6.5, MPVmax = 11.0

Const PDWmin = 10.0, PDWmax = 18.0 Const PcLYMmin = 17.0, PcLYMmax = 38.0 Const PcMONmin = 3.0, PcMONmax = 10.0 Const PcGRAmin = 33.0, PcGRAmax = 76.0

Const NoLYMmin = 1.2, NoLYMmax = 3.2

Const NoMONmin = 0.3, NoMONmax = 0.8

Const NoGRAmin = 1.2, NoGRAmax = 6.8 Cõc hăm cần sử dụng:

+ Hăm CheckData() kiểm tra xem giõ trị đú cú nằm trong dải bỡnh thường hay khụng, nếu cú giõ trị ngoăi dải, giõ trị đú sẽ được bụi đỏ vă thụng số nằm ngoăi dải tương ứng sẽ được thớm văo một label để cảnh bõo.

Hăm CheckData() được gọi trong sự kiện SerialPort1.DataReceived, kết quả thấy được như trớn hỡnh, trong đú cõc giõ trị ngoăi dải HCT, MCHC, %LYM, %MON, #LYM được bụi đỏ.

Hỡnh 7-4: Module chẩn đõn kết quả xĩt nghiệm

1.4 Module kết nối cơ sở dữ liệu SQL server 2005 để lưu trữ cõc kết quả xĩt nghiệm kết quả xĩt nghiệm

Hỡnh 7-5: Tạo database

DataSet Name lă S-LISDataSet

Hỡnh 7-6: Đặt tớn database

+ Chọn Server Explorer, chọn CSDL S-LIS.mdf, chọn table vă chọn tạo mới bảng như hỡnh vẽ:

Hỡnh 7-7: Tạo bảng kết quả

Đặt tớn bảng lă Result dựng để chứa cõc kết quả xĩt nghiệm. Cõc cột của bảng vă kiểu dữ liệu được cho như trong hỡnh dưới

Hỡnh 7-8: Bảng kết quả trong database

Tạo một form mới tớn lă FrmResult dựng để chứa bảng CSDL. Kĩo bảng Result trớn DataSouces văo form ta được bảng ResultDataGridView dựng để hiển thị dữ liệu.

Hỡnh 7-9: Bảng kết quả xĩt nghiệm

Xđy dựng hăm StoreResult() để lưu kết quả xĩt nghiệm văo CSDL

Tại MainForm, ứng với sự kiện dữ liệu đến cổng COM ta gọi hăm StoreResult()

để lưu dữ liệu một cõch tự động văo CSDL mỗi khi cú kết quả đổ ra.

1.5 Module tỡm kiếm dữ liệu

Một trong những yớu cầu quan trọng đối với việc lưu kết quả xĩt nghiệm văo CSDL lă khả năng truy vấn, tỡm kiếm. Việc tỡm kiếm nhằm hai mục đớch chớnh:

+ Giỳp cho việc đõnh giõ, tổng kết cõc xĩt nghiệm

Bộ phận kiểm định cú thể lăm cõc bõo cõo số xĩt nghiệm cú trong một khoảng thời gian nhất định, hay số xĩt nghiệm cú lượng hồng cầu lớn hơn một giõ trị xõc định, vv..

+ Nhằm tra cứu tiền sử bệnh nhđn

Khi một bệnh nhđn đến cơ sở y tế xĩt nghiệm lần thứ hai trở đi nhưng quớn mất kết quả xĩt nghiệm cõc lần trước thỡ chỳng ta cú thể tỡm kiếm bản ghi về thụng tin xĩt

nghiệm trước của bệnh nhđn dựa trớn nhưng thụng tin biết được về ngăy giờ, ID mẫu xĩt nghiệm,…

Lưu đồ thuật tõn của module tỡm kiếm:

Ta xđy dựng cõc Query cho CSDL thụng qua Query Builder. Vớ dụ cho một Query tỡm kiếm theo SID như sau:

Tương tự ta xđy dựng cõc query tỡm kiếm theo cõc giõ trị khõc, vă được bảng cõc query như sau:

Hỡnh 7-12: Bảng cõc query

Từ đú ta xđy dựng cõc hộp thoại tỡm kiếm tương ứng với cac trường hợp như sau:

Cõc module tỡm kiếm yớu cầu người dựng nhập đỳng loại dữ liệu thỡ mới tiến hănh tỡm kiếm. Nếu người dựng khụng nhập gỡ sẽ cú hộp thoại yớu cầu nhập văo.

Hỡnh 7-14: Hộp thoại yớu cầu nhập thụng tin nếu khụng nhập

Nếu nhập sai kiểu dữ liệu cũng sẽ cú hộp thoại cảnh bõo

Hỡnh 7-15: Hộp thoại yớu cầu nhập dữ liệu khi nhập sai kiểu dữ liệu

+ Tỡm theo giõ trị chớnh xõc của SID

+ Tỡm theo dải giõ trị của của SID

Hỡnh 7-17: Tỡm kiếm theo giải giõ trị của SID

+ Tỡm kiếm theo ngăy thõng xĩt nghiệm

+ Tỡm kiếm theo giõ trị kết quả xĩt nghiệm

Hỡnh 7-19: Tỡm kiếm theo giõ trị kết quả xĩt nghiệm

1.6 Module In kết quả

Sử dụng Frint Form để in kết quả cho bệnh nhđn. Để sử dụng chức năng năy, ta chọn menu Chức năng/ In kết quảđể in kết quả. Chương trỡnh sẽ tạo ra form bõo cõo, người phụ trõch mõy cú thể chọn chức năng In kết quả để in kết quả cho bệnh nhđn. Trong kết quả xĩt nghiệm, ta cú thớm phần đõnh giõ cõc thụng số xĩt nghiệm của bệnh nhđn.

Hỡnh 7-21: Mẫu bõo cõo kết quả bệnh nhđn

1.7 Kiểm tra hoạt động của chương trỡnh

Kết nối mõy tớnh cú căi đặt S-LIS với mõy SYSMEX qua cổng COM, chạy S- LIS, giao diện khởi động của chương trỡnh như sau:

Ấn Open hoặc văo menu Chức năng/Mở cổng COM để mở cổng COM. Tiến hănh xĩt nghiệm trớn mõy SYSMEX. Sau khi xĩt nghiệm xong, mõy đổ kết quả ra vă ta thu được như trớn măn hỡnh.

Xem kết quả:

Hỡnh 7-24: Xem kết quả

Thực hiện tỡm kiếm:

Kết quả tỡm kiếm:

Hỡnh 7-26: Kết quả tỡm kiếm

So sõnh kết quả thu được bởi chương trỡnh với dữ liệu hiển thị trớn mõy, ta cú kết luận rằng chương trỡnh đờ thực hiện tốt việc bắt vă phđn chia dữ liệu mõy gửi ra.

Kết luận

Nội dung luận văn đờ tập trung văo tỡm hiểu rừ về hệ thống thụng tin y tế trong bệnh viện núi chung vă phũng xĩt nghiệm núi riớng. Từ đú, đưa cõc cõc giải phõp ứng dụng cụng nghệ thụng tin văo việc quản lý, tối ưu húa quy trỡnh lăm việc.

Dựa trớn cõc kết quả tỡm hiểu đờ đạt được, em đờ thiết kế chương trỡnh S-LIS nhằm kết nối cõc thiết bị trong phũng xĩt nghiệm. Ở phiớn bản đầu tiớn, chương trỡnh chỉ mới kết nối được với mõy xĩt nghiệm huyết học tự động SYSMEX của hờng Roche Diagnostics Health Care vă cú một văi chức năng cơ bản như nhập xuất, hiện thị kết quả, truy vấn cơ sở dữ liệu.

Trong qũ trỡnh thực hiện luận văn tốt nghiệp năy, em đờ cố gắng tỡm hiểu, học hỏi thớm cõc kinh nghiệm cũng như cõc kiến thức mới. Tuy nhiớn do trỡnh độ hạn hẹp của bản thđn, cũng như thời gian tỡm hiểu vă viết chương trỡnh qũ ngắn nớn chương trỡnh khụng cú nhiều tớnh năng nổi bật cũng như chưa thể đõp ứng được nhu cầu ngăy căng cao của cõc bệnh viện, trung tđm y tế hiện nay. Em mong muốn nhận được sự quan tđm, giỳp đỡ để phõt triển vă hoăn thiện chương trỡnh.

Sau cựng, em xin chđn thănh gửi lời cảm ơn T.S Nguyễn Đức Thuận, Th.S Nguyễn Việt Dũng đờ tận tỡnh hướng dẫn, giỳp đỡ em hoăn thănh luận văn năy. Em cũng xin chđn thănh gửi lời cảm ơn tới cõc thầy cụ trong Bộ mụn Cụng nghệ Điện tử vă Kỹ thuật Y sinh núi riớng, cõc thầy cụ giõo trong Khoa Điện tử viễn thụng núi chung, đờ giỳp đỡ em rất nhiều trong qũ trỡnh thực hiện luận văn năy.

Tăi liệu tham khảo

[1] Nguyễn Đức Thuận, Nguyễn Thõi Hă, Vũ Duy Hải, Đinh Thị Nhung, Phạm Đức Hiền vă Bựi Xuđn Vinh, “Băi giảng Thiết bịđiện tử Y tế - Tập 3”, 2001.

[2] Nguyễn Đức Thuận, Vũ Duy Hải vă Trần Anh Vũ, “Hệ thống thụng tin y tế”, Nhă xuất bản Bõch Khoa, Hă Nội 2006.

[3] Nguyễn Thế Khõnh vă Phạm Tử Dương, “Xĩt nghiệm sử dụng trong lđm săng”,

Nhă xuất bản Xờ hội, Hă Nội 2001.

[3] Roche Health Care, “Technical Manual SYSMEX Automated Hematology System”,

2003.

[5] John Leslie King and Kalle Lyytinen, “Information Systems – the state of the Field”, John Wiley & Son, 2006

[6] Douglas Bell and Mike Parr, “Visual Basic .NET for Students”, Addison Wesley, 2002.

[7] http://msdn.microsofts.com/en-us/library/, truy cập cuối cựng ngăy 13/05/2007 [8] http://en.wikipedia.org/, truy cập cuối cựng ngăy 28/03/2007

[9] http://www.labsoft.com.vn/, truy cập cuối cựng ngăy 25/03/2007 [10] http://www.dcsoftintl.com/, truy cập cuối cựng ngăy 29/03/2007 [11] http://vbeg.org, truy cập cuối cựng ngăy 13/05/2007

Bảng đối chiếu thuật ngữ Việt – Anh

Hospital Information System Radiology Information System

Picture Archiving and Communication System

Laboratory Information System Health Level 7

Extensible Markup Language

Standard Generalized Markup Language Sample Identification

Patient Identification White Bloodcell Count Red Bloodcell Count Hemoglobin

Hematocrit

Mean Corpuscular Volume Mean Corpuscular Hemoglobin Mean Corpuscular Hemoglobin Concentration

Red Cell Distribution Width Platelet Cell

Mean Platelet Volume Plateletcrit

Platelet Distribution Width Lymphocyte number Monocyte number Granulocyte number Lymphocyte percent Monocyte percent Granulocyte percent Hệ thống thụng tin bệnh viện Hệ thống thụng tin chẩn đõn hỡnh ảnh Hệ thống lưu trữ vă truyền ảnh Hệ thống thụng tin phũng xĩt nghiệm Chuẩn sức khỏe 7 Ngụn ngữđõnh dấu mở rộng

Ngụn ngữđõnh dấu tổng qũt tiớu chuẩn Mờ nhận dạng mẫu

Mờ nhận dạng bệnh nhđn

Lượng tế băo bạch cầu đếm được Lượng tế băo hồng cầu đếm được Lượng huyết sắc tố (Hemoglobin) Lượng Hematocrit

Thể tớch trung bỡnh tế băo hồng cầu Lượng huyết sắc tố trung bỡnh hồng cầu Nồng độ huyết sắc tố trung bỡnh trong hồng cầu

Phđn bố kớch thước hồng cầu Lượng tế băo tiểu cầu đếm được Thể tớch trung bỡnh tế băo tiểu cầu Tỷ lệ khối tiểu cầu

Phđn bố kớch thước tiểu cầu Số lượng Lympho băo

Số lượng Bạch cầu đơn nhđn Số lượng Bạch cầu hạt Phần trăm của Lympho băo Phần trăm của bạch cầu đơn nhđn Phần trăm của bạch cầu hạt

Phụ lục

Code của chương trỡnh:

1. MainForm:

Public Class MainForm

'Khai bõo biến trạng thõi cổng COM

Private OpenStatus As Boolean

'Xđu dữ liệu nhận được

Private StrRec As String

'Định dạng ngăy giờ cần hiển thị

Public datetimeformat As String = "dd/MM/yyyy, HH:mm tt"

'Cõc đại lượng xĩt nghiệm

Public TestTime As Date

Public SID As Integer

Public WBC, RBC, HGB, HCT, PLT, PCT, MCV, MCH, MCHC, RDW, MPV, PDW,

PcLYM, NoLYM, PcMON, NoMON, PcGRA, NoGRA As Double

Một phần của tài liệu Xây dựng hệ thống thông tin trong phòng xét nghiệm (Trang 78)