25.07.2013 Views

EKG Opsamling Rapport - Hjemmesider på Ingeniørhøjskolen i Århus

EKG Opsamling Rapport - Hjemmesider på Ingeniørhøjskolen i Århus

EKG Opsamling Rapport - Hjemmesider på Ingeniørhøjskolen i Århus

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Distribueret opsamling og præsentation af <strong>EKG</strong> målinger.<br />

Multidisciplinær SW-Ingeniøropgave<br />

af<br />

Jesper Rosholm Tørresø<br />

<strong>Ingeniørhøjskolen</strong> i <strong>Århus</strong><br />

August 2008.<br />

Jesper Rosholm Tørresø: 20060653 Side 1 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Indholdsfortegnelse<br />

Indholdsfortegnelse..............................................................................................................................2<br />

Forord...................................................................................................................................................3<br />

Konceptuelt oplæg for opgaven ”<strong>Opsamling</strong> og præsentation af <strong>EKG</strong> målinger”. .............................3<br />

System til indsamling og præsentation af sundhedsdata..................................................................3<br />

Overordnet generel systemarkitektur...........................................................................................3<br />

System med ”Kine Myo ECG” måleudstyr. ....................................................................................5<br />

Hospitalsdomænet........................................................................................................................5<br />

Sundhedscenterdomænet..............................................................................................................6<br />

Privatsfæredomænet.....................................................................................................................7<br />

<strong>Opsamling</strong> <strong>på</strong> konceptuelt oplæg.....................................................................................................8<br />

Use Cases der ønskes udført ................................................................................................................8<br />

Use Case ”<strong>EKG</strong> måling”..................................................................................................................8<br />

Kommentarer til Use Case ”<strong>EKG</strong> måling”. .................................................................................9<br />

Use Case ”Visning af <strong>EKG</strong> diagram” ..............................................................................................9<br />

Kommentarer til Use Case ”<strong>EKG</strong> måling”. .................................................................................9<br />

Beskrivelse af det udførte system. .....................................................................................................10<br />

Indledning ......................................................................................................................................10<br />

HealthCare@Central ”Persistence” service. ..............................................................................11<br />

”RealTimeKMUI” komponenten <strong>på</strong> Base Station PC. ..............................................................17<br />

HealthCare@Central ”Kine ECG Presenter”.............................................................................19<br />

Udviklings- og deploymentmiljø. ..............................................................................................23<br />

Konklusion.........................................................................................................................................23<br />

Mål. ............................................................................................................................................23<br />

Komponentorienteret udviklingen. ............................................................................................23<br />

SIH sammenhæng. .....................................................................................................................24<br />

Generelt......................................................................................................................................24<br />

Jesper Rosholm Tørresø: 20060653 Side 2 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Forord.<br />

Oplægget til denne multidisciplinære SW-ingeniøropgave er givet <strong>på</strong> følgende hjemmeside<br />

http://staff.iha.dk/jrt/TIMUDSWP/ under betegnelsen ” Opgave 1. System til præsentation af<br />

indsamlede måledata fra SIH systemet” og ” Opgave 3. Datacentreret referencemodel for en<br />

serviceorienteret SIH infrastruktur ”.<br />

Konceptuelt oplæg for opgaven ”<strong>Opsamling</strong> og præsentation<br />

af <strong>EKG</strong> målinger”.<br />

Udbredelsen af informationsteknologiske systemer (IT) inden for sundheds- og plejeområdet i<br />

Danmark er en opgave, der har været i gang stort set siden elektronisk databehandling, EDB, er<br />

blevet taget i brug i den offentlige og private forvaltning. IT-systemerne har spillet og spiller særligt<br />

rollen som administrative systemer og som planlægnings- og styringsværktøjer, men samtidigt har<br />

det procesudstyr, apparater, instrumenter etc., som bruges i selve sundheds- og plejearbejdet<br />

gennemgået en udvikling, hvor computere er blevet en vigtig del af og for apparaternes funktion.<br />

Integrationen mellem de to domæner, administrativ IT og IT-baseret procesudstyr, er ikke en<br />

disciplin, som har foregået i stor stil, sideløbende med de to først nævnte domæners udvikling.<br />

Denne opgave er et forsøg <strong>på</strong> at vise et eksempel <strong>på</strong>, hvorledes en sådan integration kan udføres.<br />

System til indsamling og præsentation af sundhedsdata.<br />

Nuværende elektroniske patientjournalsystemer (EPJ) er fokuserede <strong>på</strong> dokumentation af<br />

behandlinger <strong>på</strong> sygehusene, via data opsamlet og indlagt i EPJ'en af sygehuspersonalet.<br />

Denne opgave har som grundlag, at vise en mulig automatisering af dataopsamling med mulighed<br />

for efterfølgende visning af indsamlede ”sundhedsdata”.<br />

Som en, i hvert fald i Danmark, utraditionel fremgangsmåde opsamles data i hjemmet eller <strong>på</strong> det<br />

sted hvor den person, som data opsamles, fra befinder sig, hvorfra data så distribueres/formidles<br />

videre til hospitalets patientjournal system.<br />

Casen der bruges er opsamling af elektrokardiografiske data (<strong>EKG</strong> data) for et hjertes rytme.<br />

Præsentationen af data skal være et diagram 1 fra en <strong>EKG</strong>-målingssensor. <strong>EKG</strong> sensoren skal om<br />

muligt fungere i en SIH HealthCare systeminfrastruktur I [1]. I denne opgave af valgt en Kine Myo<br />

ECG sensor, se beskrivelsen i afsnit Fejl! Henvisningskilde ikke fundet..<br />

Opgaven udføres i samarbejde med Systematic System Engineering A/S, med kontakt til Per Leth<br />

Jensen. Systematic har et ønske om at vise <strong>EKG</strong> signaler i deres EPJ system "Columna".<br />

Overordnet generel systemarkitektur.<br />

Den overordnede arkitektur til et system for dataopsamling og visning er bestående af de tre<br />

komponenter vist i Fejl! Henvisningskilde ikke fundet.. Kort beskrevet er disse tre komponenter:<br />

1. Columna EPJ komponenten i form af en Systematic Columna Server. Præsentationen af<br />

indsamlede måledata skal kunne vises i en indlejret HTML/HTTP Browser (eller via anden<br />

teknik/princip) <strong>på</strong> en Columna klient (ikke vist i diagram), idet data ikke umiddelbart skal<br />

indgå, som bilag i EPJ patientjournalerne. Udvælgelse af data skal om muligt foregå gennem<br />

Columna. Systematics Columna EPJ komponenten har således en formidlingsfunktion.<br />

2. HealthCare Persistence komponenten, som er en Dataservice Server under SIH<br />

HealthCare, og tilbyder en Webservice-HTTP / REST-HTTP 2 baseret service for beskrivelse<br />

1 <strong>EKG</strong> diagrammer er omfattet af en helt fastlagt standard for visning af <strong>EKG</strong> signalet<br />

2 REST = Representational State Transfer<br />

Jesper Rosholm Tørresø: 20060653 Side 3 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

af indsamlede data og til at hente data i et simpelt visnings format, dvs. HTML side med<br />

grafik. Det er endvidere via HealthCare Persistences Webservice, at opsamlede data<br />

persisteres.<br />

3. HealthCare Application komponenten, som virker sammen med målingsudstyret, og som<br />

via SIH HealthCare’ infrastruktur kommunikerer med Dataservicen i punkt 2. Personen der<br />

er vist, er den person, som der ”måles” <strong>på</strong>, men også samtidig repræsentationen af selve<br />

måleudstyret (her Kine Myo ECG).<br />

Figur 1 Generelt system til automatisering af opsamling og præsentation af sundhedsdata fra et hjem til et<br />

hospital (Navngivning lånt fra IHA SIH HealthCare projektet)<br />

Jesper Rosholm Tørresø: 20060653 Side 4 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

System med ”Kine Myo ECG” måleudstyr.<br />

Indeldningsvis skal det bemærkes at udviklingen af komponenterne HealthCare@Application og<br />

HealthCare@Persistence fra Figur 1 er i fokus for denne opgave. Columna EPJ komponenten skal<br />

”kun” konfigureres 3 , og da der benyttes en webapplikation, som præsentationskomponent, er<br />

bindingen til enheden, der viser data meget svag. Resten af denne rapport omtaler derfor<br />

fremviserne, som ”ikke andet” end en HTTP-HTML browser, eksempelvis Internet Explorer eller<br />

Firefox.<br />

Systemet kan geografisk være spredt over tre forskellige domæner Privatsfære, Sundhedscenter og<br />

Hospital, som vist i Figur 2, og dette er den type placering, der arbejdes med i dette projekt.<br />

Figur 2 Mulig geografisk placering af enheder i Kine Myo ECG System.<br />

Den geografiske opdeling er betinget af fuld adgang til Internettet (Internet Service Provider ISP<br />

forbindelserne i Figur 2), men en sådan opdeling er ikke et krav for systemet. Privatsfæren kunne<br />

ligeså godt være en sengestue <strong>på</strong> hospitalet og Sundhedscenteret en del af hospitalets IT-server<br />

park.<br />

Domænerne beskrives således<br />

Hospitalsdomænet<br />

Centreret omkring Columna Serveren, der benytter sin egen database <strong>på</strong> EPJ DB serveren.<br />

Systematics Columna Server er baseret <strong>på</strong> Java Enterprise Edition (Java EE) og afvikles <strong>på</strong> en IBM<br />

Websphere Application Server, en såkaldt flere lags klient-server virksomhedsapplikation.<br />

3 Denne opgave er bundet til den aktuelle version, der er installeret af Columna systemet.<br />

Jesper Rosholm Tørresø: 20060653 Side 5 26-08-2008<br />

Radioforbindelse


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Klienterne, der er vist til venstre i Hospitalsdomæner, er her en række forskellige PC’er, som via<br />

Java Web Start teknologien afvikler EPJ systemet overfor personalet <strong>på</strong> hospitalet. Det er ved hjælp<br />

af disse klienters indlejrede http-html browser, at de opsamlede data fra Kine Myo ECG (KME)<br />

måleudstyret skal vises. EPJ-klienterne er funktionsmæssigt fuldt afhængige af opsætning af serversiden<br />

i systemet, og det er derfor konfigurationen <strong>på</strong> server-siden, der bestemmer hvilken adgang<br />

klienterne får til resten af systemet, HealthCare@Persistence, i denne opgave. Sagt <strong>på</strong> en anden<br />

måde, adgangen fra EPJ klienter til HealthCare@Persistence komponenten foregår indirekte<br />

gennem Columna Serveren.<br />

Databasen er en Oracle RDBMS server, og ikke har nogen direkte betydning i denne opgave.<br />

Sundhedscenterdomænet<br />

Dette domænes opgave er populært sagt at formidle data mellem ”producent”/ måleudstyr og<br />

”forbruger”/fremviser. Problematikker, som koblingen mellem en person og det måleudstyr, der er<br />

tilknyttet denne person løses tilsvarende i dette domæne. De to servere, der er vist i Figur 2, er for<br />

HealthCare DB’ vedkommende en Microsoft 2003 SQL Server (MSSQL) og for<br />

HealthCare@Central’ vedkommende en Microsoft Internet Information Services ver. 6.0 (IIS) med<br />

ASP.NET ver. 3.5.<br />

Sundhedscenterdomænet og Privatsfæredomænet har en tæt kobling omkring funktionalitet i SIH<br />

HealthCare projektet og tilsvarende i dette projekt, men kan/skal alligevel kunne fungere<br />

uafhængigt af hinanden. De to enheder HealthCare@Central og base stationen HealthCare@Home<br />

står for koblingen mellem de to domæner. Base stationen beskrives nærmere i Fejl!<br />

Henvisningskilde ikke fundet. afsnittet.<br />

Komponenten HealthCare@Persistence (se Figur 1) er en primær komponent <strong>på</strong><br />

HealthCare@Central. I dens nuværende udgave (pr. juni 2008) er dens opgave, at stille et service<br />

interface til rådighed for persestering i og fremskaffelse af data fra databasen. I dette projekt<br />

udvides komponenten med en fremvisningskomponent ”Kine ECG Presenter” (se Figur 4).<br />

Jesper Rosholm Tørresø: 20060653 Side 6 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Privatsfæredomænet<br />

Det mest ”uformelle” af de tre domæner. Valget af Kine Myo ECG udstyret, se Figur 3, er et udtryk<br />

herfor. Kine’ trådløse <strong>EKG</strong> måler betyder, at personen der får målt sit <strong>EKG</strong> kan fungere i en næsten<br />

normal hverdag uden at skulle håndtere en masse ledninger, papirstrimler med <strong>EKG</strong> målinger etc.<br />

Figur 3 ”Hjemme i Privatsfæren” Set fra venstre vises ”HealthCare@Home Base Station” med dette projekts HealthCare@Application<br />

RealTimeKMUI applikation i drift. Nederst midterst og forrest ses Kine’ <strong>EKG</strong> måler til placering <strong>på</strong> brystkassen <strong>på</strong> personen i fokus. Via<br />

trådløs forbindelse overfører <strong>EKG</strong> måleren data til Kine’ Base Station, den blå enhed i midten til højre. Kine base stationens antenne ses helt<br />

til højre og bag <strong>på</strong> enheden ses RS232C forbindelsen til HealthCare@Home Base stationen.<br />

Den lille enhed, som ses forrest <strong>på</strong> billedet, skal af og til placeres foran <strong>på</strong> Kine Base stationen for<br />

at få opladet sit batteri.<br />

HealthCare@Home basestationen er i dette projekt en ganske almindelige bærbar PC, hvor<br />

HealthCare@Application applikationen ”RealTimeKMUI” er udviklet til at kunne fungere sammen<br />

med Kine Base stationen og HealthCare@Persistence. RealTimeKMUI er uden sammenhæng med<br />

SIH projektets framework for en Basestation 4 . ”RealTimeKMUI” fungerer med eller uden<br />

HealthCare@Persistence komponenten.<br />

Kine udstyret kan måle <strong>på</strong> een afledning, den såkaldte sinusrytme. Når RealTimeKMUI<br />

applikationen foretager en måling, vises resultat i realtid <strong>på</strong> en <strong>EKG</strong> graf <strong>på</strong> basestationens skærm,<br />

så personen, der måles <strong>på</strong>, eller andre interesserede kan følge med i forløbet. Applikationen er<br />

udviklet til at foretage en tidsbegrænset måling, som gemmes og tages frem til senere visning.<br />

Bogstaveligt talt skal systemet kunne erstatte den slags målinger, hvor resultatet gemmes <strong>på</strong> en<br />

papirstrimmel.<br />

En måling <strong>på</strong> Kine udstyret fungere ved at RealTimeKMUI applikationen via den medfølgende<br />

Kine driver beder Kine Basestationen starte en optagelse i et angivet tidsrum f.eks. 30 sekunder.<br />

<strong>EKG</strong> målingerne foretages med en samplefrekvens <strong>på</strong> 625 Hz. Via Kine driveren afleveres i blød<br />

realtid datablokke med 117 målinger (.NET float a 4 byte) til applikationen. I takt med at<br />

målingerne modtages sendes de til grafen <strong>på</strong> skærmen og lagres sekventielt i modtaget rækkefølge<br />

applikationen. Når målingen er færdig bliver opsamlede data formateret til en graf, der gemmes<br />

4 Efter dette projekts udviklingsfase porterede Jasper Molkte Nygaard efterfølgende RealtimeKMUI applikationen til<br />

SIH Basestations Framework.<br />

Jesper Rosholm Tørresø: 20060653 Side 7 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

lokalt <strong>på</strong> HealthCare@Home Basestationen, som et billede og sendes til HealthCare@Persistence,<br />

både som billede og som binære data.<br />

<strong>Opsamling</strong> <strong>på</strong> konceptuelt oplæg.<br />

Lægger op til at indgå i serviceorienteret arkitektur (SOA) og benytter derfor løs kobling mellem<br />

komponenter, komponenter med høj kohæsion (begrænset funktion), og så vidt muligt asynkron<br />

interaktion/kommunikation.<br />

Use Cases der ønskes udført<br />

Use case i dette projekt er ikke nødvendigvis et (/er ikke) udtryk for et brugerdrevent behov.<br />

Systemet der udvikles <strong>på</strong> er et prototypesystem, så use casene bruges mere som krav til, hvad der er<br />

brug for af funktionalitet.<br />

Da systemet for dataopsamling omfatter to ret løst sammenhængende dele, selve<br />

dataopsamlingsdelen (producentdelen) og fremviserdelen (forbrugerdelen) omfatter dette projekt to<br />

use case som ønskes udført. Det to use cases kaldes:<br />

1. ”<strong>EKG</strong> Måling”<br />

2. ”Visning af <strong>EKG</strong> diagram”<br />

Use Case ”<strong>EKG</strong> måling”<br />

Denne use case gennemføres i Privatsfæredomænet.<br />

Forudsætninger for dens gennemførelse er at:<br />

• HealthCare@Home Basestationen er tændt og at RealTimeKMUI applikationen er startet.<br />

• Den serielle forbindelse mellem RealTimeKMUI og Kine Basestationen er til stede.<br />

• Kine Basestationen og Kine ECG måleren har forbindelse (Batteriet er opladt <strong>på</strong> ECG<br />

måler) og måleren er <strong>på</strong>klæbet korrekt <strong>på</strong> brystkassen af personen der skal måles <strong>på</strong>.<br />

• Hvis data senere skal fremvises <strong>på</strong> hospitalets EPJ, skal HealthCare@Home Basestationen<br />

internetforbindelse være åben og samtidig skal HealthCare@Central serveren i<br />

Sundhedscenterdomænet være i drift.<br />

Use Casen forløber således:<br />

1. Der vælges et tidsinterval for målingens varighed. I denne udgave vælges mellem 30 sek., 1<br />

min., 1,5 min og 2 min.<br />

2. Det bestemmes nu, om målings data skal gemmes hhv. lokalt som billede <strong>på</strong> basestationen<br />

og centralt <strong>på</strong> Sundhedscenteret. Billede der gemmes lokalt kan også vælges sendt til<br />

Sundhedscenteret.<br />

3. Målingen startes.<br />

4. En <strong>EKG</strong> graf vise dynamisk resultatet <strong>på</strong> basestationens skærm.<br />

5. Efter ca 15 sek. indsvingningstid begynder dataopsamlingen.<br />

6. Når måleintervalstiden er udløbet sker følgende<br />

a. Hvis ønsket, oprettes et billede af <strong>EKG</strong> diagrammet, der gemmes lokalt <strong>på</strong><br />

basestationen (En almindelig billedfremviser vil herefter kunne vise diagrammet).<br />

b. Hvis data skal sendes til Sundhedscenteret overføres de rå måledata hertil<br />

c. Hvis angivet sendes også billedet fra punkt a til Sundhedscenteret.<br />

Jesper Rosholm Tørresø: 20060653 Side 8 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Kommentarer til Use Case ”<strong>EKG</strong> måling”.<br />

Meget mere automatisering for ”målepersonen” måske ønskeligt. Beror <strong>på</strong> fremtidig infrastruktur i<br />

SIH HealthCare projektet.<br />

Use Case ”Visning af <strong>EKG</strong> diagram”<br />

Visningen af <strong>EKG</strong> måledata i form af diagrammer generet under Use Case ”<strong>EKG</strong> måling” betragtes<br />

som eksterne data i forhold til Columna EPJ systemet, idet de ikke er målt og dermed kvalificeret af<br />

hospitalets personale.<br />

Forudsætninger for use casens gennemførelse er at:<br />

• Internetforbindelse til Sundhedscenterdomænet skal være åben og samtidig skal<br />

HealthCare@Central serveren være i drift.<br />

• EPJ systemet er konfigureret til at åbne for adgangen til HealthCare@Central serveren og<br />

EPJ klienten indlejrede browser skal være i stand til at vise en normal HTML hjemmeside<br />

med billeder.<br />

Alternativt kan en ganske almindelig browser som MS IE eller Firefox<br />

bruges i stedet for EPJ klienten.<br />

• Personnummeret for den person, der skal vises <strong>EKG</strong> diagrammer for, er kendt for EPJ<br />

brugeren og der er diagrammer til rådighed (Use Case ”Ekg Måling” er udført <strong>på</strong> forhånd)<br />

Use casen forløber således:<br />

1. Via Columna EPJ systemet vælges funktionen, som kan vise eksterne måledata (Den<br />

indlejrede http-html fremviser.<br />

2. Herefter angives CPR nummeret for den person <strong>EKG</strong> diagrammer skal vises for.<br />

3. Der vælges mellem to former for visningsforløb<br />

a. Visning af alle diagrammer for valgte person<br />

I. Ældste diagram vises først og via ”frem” eller ”tilbage” funktionen<br />

bladres mellem mulige diagrammer<br />

II. Afhængig af diagrammets varighed rulles der frem og tilbage i<br />

diagrammet.<br />

b. Visning af en liste med hvilke diagrammer der findes for <strong>på</strong>gældende person.<br />

I. Via listens oplysninger om tidspunkt for optagelse af diagrammet kan<br />

der nu vælges et diagram til visning<br />

II. Afhængig af diagrammets varighed i tid rulles der frem og tilbage i<br />

diagrammet<br />

4. En ny persons data skal vælges og der vendes tilbage til punkt 1.<br />

Kommentarer til Use Case ”<strong>EKG</strong> måling”.<br />

Udvælgelsesmekanisme er meget simpel. Data overføres til visning i EPJ vha. CPR nummer.<br />

Jesper Rosholm Tørresø: 20060653 Side 9 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Beskrivelse af det udførte system.<br />

Indledning<br />

En række beslutninger taget omkring arkitekturen af <strong>EKG</strong> opsamlingssystemet <strong>på</strong>virker selve<br />

designet af systemet. Valget af en komponent og service orienteret arkitektur sikre en lav kobling<br />

og særligt løs kobling mellem komponenterne. Så længe de enkelte komponenter enten<br />

implementere eller benytter en given service som specificeret, så står udførelsen af en given<br />

komponent ret åbent/frit.<br />

I dette projekt har valget af host platform, dvs. computer og operativsystem, været en afgørende.<br />

Faktor. At driveren til Kine Base stationen er udført i C# .NET har en afgørende indflydelse <strong>på</strong><br />

valget af programmeringsplatform og sprog til udførelse af HealthCare@Home Base Stationen, som<br />

ikke overraskende udføres med C# .NET.<br />

Den nuværende udgave af SIH projektets HealthCare@Central komponenter/services bruger også<br />

C#. NET og den nye komponent, der tilføjes, udføres således også i C#.NET. Som en<br />

webapplikation, hvilket sikre en løs, skalerbar og meget åben kobling til fremvisere/aftagere af<br />

<strong>EKG</strong> måledataene. Figur 4 viser den faktiske komponentarkitektur for systemet.<br />

«Offentlig Host»<br />

sih2.sn.iha.dk<br />

«PC'er»<br />

Columna Klient<br />

Persistence<br />

«C# .NET»<br />

HealthCare@Central<br />

«C# .NET Webapplication»<br />

Kine ECG Presenter<br />

HTTP Server<br />

EPJ Klient HTML Browser<br />

WSDL //http:sih2.sn.iha.dk/HealthCare@Central/Persistence/Service.asmx?wsdl:<br />

«Webservice»<br />

HTTP Soap<br />

«Windows XP»<br />

Base Station PC<br />

«Kontrol Enhed»<br />

Kine Myo Base Station<br />

«C# .NET»<br />

RealTimeKMUI<br />

«Seriel/COM port»<br />

Kine Data Protokol<br />

Data Service<br />

«Radio Link»<br />

Unit Channel<br />

Firmware<br />

URL http://sih2.sn.iha.dk/HealthCare@Central/Persistence/EcgSelectorUsr.aspx:<br />

«Måler»<br />

ECG Unit<br />

Figur 4 Komponenter og serviceinterfaces i Kine Myo ECG systemet. URL og WSDL til services er vist som<br />

noter i diagrammet.<br />

Person in focus<br />

Komponenterne for dette projekt er beskrevet i det efterfølgende. Rækkefølgen for udviklingen af<br />

komponenterne har været:<br />

1. Persistence service, som <strong>på</strong> forhånd var under udvikling til andre projekter. Som følge af det<br />

iterative udviklingsforløb sammen med RealTimeMUI, ændres komponenten noget under<br />

dette projekt.<br />

Jesper Rosholm Tørresø: 20060653 Side 10 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

2. RealTimeKMUI, der er basereret <strong>på</strong> Kines demosystem af samme navn. Den allerede<br />

eksisterende Peristence service kunne umiddelbart integreres i komponenten, da dennes<br />

dataopsamling var klar til brug.<br />

3. Kine ECG presenter blev <strong>på</strong>begyndt udvikling, så snart en <strong>EKG</strong> måling fra Kine MYO ECG<br />

var gemt i HealthCare Databasen vha. Peristenceservice.<br />

HealthCare@Central ”Persistence” service.<br />

Første udgave af SIH Projektet HealthCare@Central Persistence service er en Webservice baseret<br />

grænseflade til en relationsdatabase (RDB), opbygget som vist i Figur 5. En databaseopbygning<br />

som er inspireret af ISA-88 standarden for industrielle produktionssystemer og foreslået af i AFP af<br />

Søren Rasmussen og Rune Søe-Knudsen. II<br />

HistoryLog<br />

EquipInclude<br />

EquipmentID<br />

ClassEquipmentID<br />

Description<br />

RecordID<br />

EquipmentID<br />

UTC<br />

LocalTime<br />

RecordAlias<br />

NewValue<br />

OldValue<br />

EngrUnits<br />

Block<br />

EquipElement<br />

EquipmentID<br />

EE_Type<br />

EE_Level<br />

Description<br />

ContainedIn<br />

Figur 5 HealthCare Databasens Relationer (Tabeller) og Relationships<br />

EquipLink<br />

EquipmentID<br />

ToEquipmentID<br />

Description<br />

EquipProperty<br />

EquipmentID<br />

PropertyID<br />

PropertyValue<br />

EngrUnits<br />

Description<br />

Princippet for databasens opbygning er i stor grad inspireret af det objektorienterede princip, hvor<br />

der bruges klasser og objekter for hhv. typer og fænomener/instanser, og hvor sammenhørigheden<br />

mellem klasser udtrykkes ved nedarvning eller aggregering og komposition, mens objekter kun<br />

benytter aggregering og komposition.<br />

I HealthCare Databasen defineres ”klasser” og ”objekter” i ”EquipmentElement” relationen<br />

vha. attributten ”EE_Type” hhv. med værdien ”1” eller ”2”. Type ”1” enheder skal ses som<br />

metaenheder, beskrivende enheder, og type ”2” enheder skal ses, som faktiske enheder.<br />

Nedarvning er ikke mulig i en RDB, men erstattes af et inkluderings-relationship mellem de<br />

forskellige enheder, som findes i EquipElement relationen. De forskellige ”inkluderinger”, som er<br />

nødvendige, er angivet i EquipInclude relationen vha. af en sammensat primærnøgle, hvor den ene<br />

halvdel EquipmentID referer til enheden der ”nedarver” og den anden halvdel ClassEquipmentID<br />

referere til den enhed (”Superklassen”) der ”nedarves” fra.<br />

En tilsvarende konstruktion er brugt til aggregering/komposition, hvor relationen EquipLink<br />

angiver de nødvendige sammenkoblinger. Igen EquipmentID angiver her enheden der ”linkes” fra<br />

og ToEuipmentID angiver enheden der ”linkes” til.<br />

Jesper Rosholm Tørresø: 20060653 Side 11 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Konkrete datafelter eller egenskaber for de forskellige klasser og objekter (enheder), der<br />

optræder i et systemet, angives i EquipProperty relationen. Hver eneste enkelt felt eller egenskab<br />

tildeles sit eget unikke ID PropertyID, som vha. af en sammensat primærnøgle kobles med<br />

EquipmentID til ejerenheden i EquipElement relationen. En egenskab <strong>på</strong> en type ”1” enhed, klasse,<br />

betragtes som en logisk egenskab, mens en egenskab <strong>på</strong> en type ”2” enhed er den faktiske værdi for<br />

en givne enheds egenskab.<br />

Der er ingen bindinger i databasen, der gør at en type ”2” enhed skal inkludere en eller flere type<br />

”1” enheder, eller have alle eller kun de egenskaber, som den type ”1” enheder, der inkluderes,<br />

angiver. 5<br />

Datalogninger i forhold til en given enhed (EquipElement) gemmes i HistoryLog relationen, hvor<br />

hver enkelt logning får sin egen unikke identifikation, RecordID, og knyttes til enheden, der logges<br />

<strong>på</strong>, via en reference til EuipmentID i EquipElement relationen. I HistoryLog er feltet Block et<br />

såkaldt BLOB (Binary Large OBject) og alle former for måledata kan derfor gemmes heri.<br />

Brugen er de enkelte felter i relationerne er beskrevet nærmere i forbindelse med de metoder, der<br />

tilbydes i webservicen.<br />

Webservice Persistence opbygning er baseret <strong>på</strong> Microsofts Webservice og LINQ-to-SQL<br />

faciliteter inkluderet i .NET 3.5 platformen og VisualStudio 2008 samt nogle Stored Procedures og<br />

Functions i MS SQL 2003 databasen, og derved opbygget med en relativ enkel 2 lags lagdelt<br />

arkitektur, hvor lagene er afspejlet i komponenterne vist i Figur 6. Webinterfacet er udført i<br />

komponenten Service.<br />

Figur 6 Komponentarkitektur for Persistence Service<br />

Databasen opbygning er vist i Figur 5. Al adgang til databasens relationer, ”Stored Procedures” og<br />

”Functions” sker gennem DataClassesDataContext komponenten.<br />

Service komponenten er kodet i sin egen C# klasse, klassediagrammet ses i Figur 7. To<br />

hjælpeklasser er tilføjet til brug for Service komponenten, PersonalDataSelector og<br />

RawDataDTO.<br />

5 Opsætningen af modellen for konkret system kræver et ”administrationsværktøj” der håndterer de forskellige regler.<br />

Dette værktøj/system er endnu ikke udviklet.<br />

Jesper Rosholm Tørresø: 20060653 Side 12 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

PersonDataSelector er klasse for kobling/mapning mellem selve problemdomænet og den rå<br />

generiske database. I dette projekt bruges een metode der omsætter et CPR nummer til en unik<br />

systemidentifikation (EquipmentID). For sammenkobling af udstyr og personer se senere [Set en ref<br />

her]<br />

RawDataDTO er en simpelt databærende klasse (Data Transfer Object), som bruges til via<br />

Webservice, at overføre en persons persisterede måleresultat fra HealthCare@Ccentral til en<br />

aftagerapplikation.<br />

Figur 7 Klassediagram for Persistence service. Klasserne DataClassesDataContext, EquipElement, HistoryLog,<br />

EquipPorperty og getPersonMeasureDataResult er generet af .NET LINQ to SQL.<br />

Service interfacet, sih2.sn.iha/HealthCare@Central/Persistence/Service.asmx, tilbyder pt.<br />

metoderne som er vist i Figur 8, der også beskriver funktion bag hver metode. De komplette<br />

signature beskrives ikke her, da er ”selvdokumenterende” efter import og kodegenerering fra<br />

WSDL filen.<br />

Jesper Rosholm Tørresø: 20060653 Side 13 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

• getBindId Endnu ikke komplet metode, men nuværende udgave returnerer et mulig NFC 6<br />

tag <strong>på</strong> baggrund af en enheds unikke EquipmentID.<br />

• getEquidId Returnerer en enheds unikke EquipmentID udfra enhedens MAC 7 adresse.<br />

• getLogId Pba. af en enheds EuipmentID returneres det unikke EquipmentID for den<br />

person enheden er tilknyttet. Sammenkoblingen af udstyr og en person foregår via en<br />

såkaldt CareProcess en abstrakt enhed hvortil man ”linker” personer og udstyr. Der er<br />

kun tilknyttet en person til en CareProcess<br />

• getRawData Returnere alle persisterede målinger fra et givent tidsinterval og en given<br />

person angivet ved dennes EquipmentID (evt. hentet med getLogID metoden).<br />

• getUniqueId Returnere MAC adressen for en enhed ud fra dennes EquipmentID.<br />

• rawDataByteSec Metode for persistering af en sekvens af byte. Benytter en typestærk<br />

parameterliste for enkel datakonvertering.<br />

• rawDataFloatSec Metode for persistering af en sekvens af floats. Benytter en typestærk<br />

parameterliste for enkel datakonvertering.<br />

• rawDataTimeSec Anden udgave af en metode til persistering af data. Alle parametre <strong>på</strong><br />

nær tidsstempling angives via byte arrays, hvilket giver en åben men også besværlig type<br />

håndtering<br />

• rawDataSec Første udgave af en metode til persistering af data. Alle parametre angives<br />

via byte arrays, hvilket giver en åben men også besværlig type håndtering<br />

• setPair Tom metode til fremtidig brug<br />

Figur 8 Metode <strong>på</strong> Persistence service.<br />

Mange af metoderne er ”kun” første iteration i forhold til SIH projektet. Primærer fokus har i<br />

foråret 2008 været rettet mod indrapporteringsmetoderne præfikset med ” rawData..”.<br />

Ideen bag metoderne er, at en enhed, producent, med så få oplysninger og så simpelt som muligt<br />

kan aflevere en ”bunke data” fra en person til persistering. Signaturen for en af de fire ”rawData”<br />

metoder er vist her i C# .NET syntaks, forskellen for de andre tre er brugen af type i signaturen:<br />

[WebMethod ]<br />

public string rawDataFloatSec(float[] data, DateTime time,string logtype, long personid,<br />

long sensorid, long secid)<br />

{…<br />

hvor data er sekvensen af måledata, time er tidspunktet for datamåling, logtype er typen af måling,<br />

personid unik ID, EquipmentID, for personen der er målt <strong>på</strong>, sensorid er unik ID for måleenhed<br />

bag målingen og secid til fremtidig brug for ”krydscheck” af korrekt sensor etc. Returværdien er en<br />

string som enten returnere en unik id, RecordID, for den gemte måling eller en simpel fejlbesked.<br />

Der er i metoderne <strong>på</strong> ingen måde taget hensyn til kontekst for målingen, format af data og den<br />

videre brug disse, data betragtes udelukkende som enkle binære datablokke. Det forudsættes at<br />

sensor og person er korrekte sammenhørende og at logtype er bestemt i sammenhæng med hhv.<br />

producent og aftager, eksempelvis for dette projekt som "Kine ECG rawdata" for en binære rå data<br />

målesekvens og "Kine ECG paper" for et <strong>EKG</strong> diagram i form af et JPEG billede.<br />

CareProcess princippet.<br />

En ”CareProcess” er moduleringsbegrebet 8 for omsorg og er scenariet, der omfavner udførelsen en<br />

sundhedsopgave overfor en person. En CareProcess omfatter, som den vigtigste del, den person<br />

6 NFC Near Field Communication<br />

7 MAC adresse MediaAccesControl adresse, bruges særligt ved Ethernet og Bluetooth netværk.<br />

Jesper Rosholm Tørresø: 20060653 Side 14 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

sundhedsopgaven drejer sig om, samt det udstyr, kontrolenheder, computere og programmer som<br />

indgår i processens afvikling.<br />

ISA88 database standardens generiske designkoncept betyder at der ikke er ”bundet” regler ind i<br />

dens database struktur. ISA88 er udviklet til batchproduktion der skal kunne gentages og<br />

dokumenteres for korrekt udførelse etc. eksempelvis medicinfremstilling.<br />

Da ISA88 er udviklet til store virksomheder med national og international udbredelse opstiller<br />

standarden en model for distributionen af produktionen, der skal beskrives og dokumenteres. Denne<br />

model passer til databasestrukturen i Figur 5. Modellen er overført til SIH HealthCare projektet og<br />

danner indtil videre basis for, hvorledes Persistence servicen virker.<br />

Modellen for distribution for både ISA88 og SIH er vist i Figur 9. Modellen benytter syv niveauer<br />

for graden af distribution og pakkerne vist i diagrammet afspejler fra niveau et, logiske domæner<br />

ned til niveau syvs konkrete enheder i tråd med principperne for lagdeling, med abstrakte toplag og<br />

konkrete bundlag. I databasen indeholder EquipElemt relatione en felt EE_Level som netop<br />

angiver enhedens konkrete niveau.<br />

ISA88 konceptet skal ikke omtales her, og pakkerne til højre i Figur 9 er ”kun” med som<br />

illustration.<br />

SIH distributionsmodellen er en hovedsageligt hierarkisk opbygget træstruktur. Domænet ”Public”<br />

<strong>på</strong> niveau 1 er omverdenens systemer i forhold til HealtCare projektets systemer. Columna EPJ<br />

systemet hører til her og repræsentere et hospital. På niveau 2 er ”Central” domænet og her<br />

begynder HealthCare systemet at optræde, Sundhedscenteret og HealtCare@Central services tilhøre<br />

dette domæne, se Figur 2. De to nævnte domæner betragtes både som logiske og konkrete, vist<br />

skraveret i modellen.<br />

8 At modulere begrebet ”Omsorg” er en næsten umulig/halsløs opgave, derfor bruges den mere tekniske betegnelse<br />

CareProcess som afspejler nogle simple arbejds- eller funktionsgange og noget udstyr.<br />

Jesper Rosholm Tørresø: 20060653 Side 15 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Figur 9 ISA88 inspireret distributionsmodel for SIH HealthCare projektet. Skraverede pakker er både logiske<br />

og konkrete domæner. Prikkede pakker er rent logiske organisatoriske domæner. Den ternede pakke er<br />

software<br />

Jesper Rosholm Tørresø: 20060653 Side 16 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

De to efterfølgende domæner Home, <strong>på</strong> niveau 3, og CareProcess, <strong>på</strong> niveau 4, er rent logiske<br />

organisatoriske størrelser, vist prikket, og bruges, indtil videre, som bindeleddene mellem udstyr,<br />

systemer og personer. Næste domæne ”Base” <strong>på</strong> niveau 5 er konkret som computeren,<br />

basestationen, hvor<strong>på</strong> HealthCare@Home applikationerne afvikles. ”Sensor/Device/Person”<br />

domænet <strong>på</strong> niveau 6 er ligeledes konkret idet alt udstyr samt personen, der benytter udstyret, hører<br />

til her. Sidste domæne ”Agent” <strong>på</strong> niveau 7 er et softwaredomæne og HealthCare@Home<br />

applikationerne er tilhørende her. ”Agent” domænet vil få betydning i forbindelse med<br />

opbygningen af Framework’et til Basestationen og Centrale services.<br />

I dette projekt og nuværende udgave af Persistence service er fokus <strong>på</strong> sammenkoblingen af de tre<br />

domæner ”CareProcess”, ”Base” og ”Device/Sensor/Person” samt <strong>på</strong> kommunikationen mellem<br />

”Base” og ”Central” domænerne.<br />

En række CareProcess’er, forskelligt udstyr og personer er oprettet i databasen og via EquipLink er<br />

udstyr og en person koblet til en CareProcess. I Figur 10 er vist et udtræk fra EquipInclude<br />

relationen.<br />

EquipmentID ToEquipmentID Description Kommentar (Ikke i DB)<br />

489 789 Basestation Nr 1<br />

539 789 CareProces til Hansen<br />

564 789 <strong>EKG</strong>/Puls til Hansen<br />

664 789 SIH Centrak Nr 1<br />

714 864 CP CSOmron BP<br />

839 864 CareProcess Fru Hansen<br />

989 789 Kardiogram som "Strimmel"<br />

1114 1339 CorSicence Corbelt to<br />

Villadsen Proces<br />

1314 1339 Villadsen to Villadsens Care<br />

Proces<br />

1364 1339 Hidalgo Equivital to Villadsen<br />

Personen ”Hansen” 489 og<br />

dennes udstyr knyttet<br />

sammen i CareProcess nr<br />

789<br />

”Fru Hansen” 839 og<br />

CareProcess nr 864<br />

Hansen og dennes CP igen<br />

Jens Villadsen 1314 og<br />

CareProcess nr 1339<br />

Figur 10 Indhold af EquipLink. Viser CareProcess'er med koblede personer og enheder <strong>på</strong> nuværende tidspunkt<br />

at SIH projektet. EquipmentID referer til enheder fra EquipElement relationen.<br />

Tre enheder er blevet brugt i dette projekt. Personen ”Hansen” med EquipmentID ”489” tilføjet en<br />

egenskab ”CPRNR” = 2101814365, Kine måleudstyr med EquipmentID ”989” og slutteligt en<br />

CareProcess med EquipmentID ”789”.<br />

”RealTimeKMUI” komponenten <strong>på</strong> Base Station PC.<br />

Udførelsen af ”RealTimeKMUI” er vist i Figur 11. Arkitekturen er baseret <strong>på</strong> en realtimedemo<br />

prototype fra Kine, som er ændret og udvidet med de to klasser ”Form2” og ”HealthCareCental”<br />

samt en Web reference dk.iha.webhotel7.Service(), som forbinder ”HealthCentral” med<br />

HealthCate@Central Persistence servicen.<br />

Realtidsafviklingen af applikationen er styret vha. i alt fire tråde, hvoraf to er aktive under måling.<br />

Interaktionsdiagram, sekvensdiagram, er vist i Figur 12. Trådende kommunikere indbyrdes ved<br />

hjælp af C#.NET delegates, asynkrone kald, som sutomatisk er trådsikretsikret.<br />

Behandlingen af datablokkene, 117 .NET float, som Kine Base stationen i blød realtid sender til<br />

applikationen omfatter to funktioner. Scope klassen, som udfører visning af et tidsvindue, x antal<br />

målinger, i ”Realtidsgrafen”, og HealthCareCentral klassen der udfører en komplet lagring af data<br />

fra hele måleintervallet, eks 30 sek. samplet med 625 Hz svarende til 18750 målinger.<br />

Jesper Rosholm Tørresø: 20060653 Side 17 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Rå binære data gemmes i hhv. en private List datakollektion, der sendes til<br />

HealthCare@Central, som et array vha. List.ToArray();<br />

Formateringen af data benytter .NET System.Drawing standard fremgangsmåden via Graphics til<br />

visning <strong>på</strong> skærm, GraphicsPath til formatering til en graf samt Bitmap og Image til formatering<br />

af billeder. Grafen, der som billede, gemmes lokalt i en fil og sendes til Centralen, konverteres via<br />

MemoryStream’s.<br />

Skaleringen af det endelige <strong>EKG</strong> diagrams billede sker til JPEG format med en højde <strong>på</strong> 400 pixels<br />

og en bredde <strong>på</strong> 4800 pixel per 30 sek. Selve grafen der er dannet er skaleret i forhold største og<br />

mindste måleværdi, således at alle værdi vises inden for de 400 pixel højde. Formatering er ikke<br />

normaliseret i forhold til standarden for <strong>EKG</strong> diagrammer.<br />

Arkitekturen er langt fra endelig (”perfekt”), men tjener også kun et formål som prototype<br />

dataopsamling.<br />

Form2<br />

RealTimeKMUI<br />

frmMain<br />

HealtCareCentral Scope<br />

KineMyoDriver<br />

HealthCare@Central<br />

Persistence<br />

UserControl<br />

Figur 11 RealTimeKMUI’s klassediagram.<br />

Refresher<br />

KineLib.dll<br />

KineMyoDriver.dll<br />

Jesper Rosholm Tørresø: 20060653 Side 18 26-08-2008


måletid etc. er<br />

valgt<br />

Person i fokus<br />

Start måling<br />

Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Main Thread<br />

form2<br />

Brugerens<br />

grænseflade<br />

”Form2.cs”<br />

central<br />

StartRecording<br />

ShowDiaglog<br />

Send data til Central<br />

Gemmer og<br />

konvertere alle data<br />

lokalt og <strong>på</strong> Central<br />

”HealtCareCentral.cs<br />

”<br />

Kaldet stopper<br />

tråden i måletiden<br />

ConvertSampleData<br />

AddData(buf)<br />

Windows for<br />

Realtime visning<br />

”frmMain.cs”<br />

Jesper Rosholm Tørresø: 20060653 Side 19 26-08-2008<br />

frm<br />

Local Thread RunKmUI<br />

scope<br />

Init (”Serial”)<br />

StartRecording (sec)<br />

Local Thread<br />

ekgToolbox_OnDataRecievedEvent(buf,index)<br />

AddData (buf,index)<br />

Timerstyret <strong>EKG</strong><br />

Graf kontrol<br />

”Scope.cs”<br />

Update Window<br />

Kine Base Driver<br />

”KineMyoDriver.cs”<br />

ekgToolbox<br />

Local Thread<br />

Init<br />

117 float’s<br />

Figur 12 RealTimeKMUI Interaktionsdiagram. Når en måling foretages er ”scope” tråden og ”ekgToolbox”<br />

trådene eneste aktive tråde. Tilgangen til ”scope” data er beskyttes af to låse, således at trådene under ”scope”<br />

og ”ekgToolbox” ikke føre til ødelagte data, når de tilgår objektet.<br />

Refresher<br />

Kine Base<br />

HealthCare@Central ”Kine ECG Presenter”<br />

”Kine ECG Presenter” er en delkomponent af den samlede ”Persistence” komponent.<br />

Som et første forslag til en simpel framework arkitektur til HealthCare@Central’ applikationer<br />

opstilledes en ikke teknisk fokuseret model, som er vist i Figur 13 og som er inddraget i udførelsen<br />

af ”Kine ECG Presenter”. Kort fortalt opdeler den viste arkitektur sig i tre dele, vist med lodrette<br />

streger i diagrammer. Princippet bag frameworket er kort at både andre systemer og applikationer<br />

samt brugere skal kunne benytte services <strong>på</strong> fra frameworket, ”Service” og ”Brugegrænseflade”<br />

delene. Koordineringen af servicerne sker gennem ”Central Control” i ”Kontrol og data”, hvor også<br />

specifik databehandling, som eksempelvis billede- og grafikformatering, sker. Frameworket er pt.<br />

udført vha. ASP.NET frameworket.<br />

Dette projekt omfatter de hvide komponenter. ”Persitence” komponenten er beskrevet i afsnit<br />

HealthCare@Central ”Persistence” service. ”Kine ECG Presenter” klassediagrammet er vist i figur<br />

Figur 14, og komponenten er en enkel webapplikation.


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Service Kontrol og data Brugergrænseflade<br />

Persistence<br />

Subskriber<br />

ECG Presenter<br />

sih2.sn.iha.dk<br />

Central Application Framework<br />

Central Control<br />

DataBase Acces<br />

ECG Formatter<br />

Persistence User<br />

Subscriber User<br />

ECG Presenter User<br />

Figur 13 Iteration 1 <strong>på</strong> Central Framework arkitektur. Gråtonede komponenter er ikke med i dette projekt.<br />

Figur 14 Klassediagram for Kine ECG Presenter komponent. Klasserne KineECGFormatter og<br />

DataClassesDataContext implementer hhv. komponenterne ”ECGFormatter” og ”DataBase Access” i Figur 13.<br />

Jesper Rosholm Tørresø: 20060653 Side 20 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Fordelen ved webapplikationen er, som nævnt tidligere er, at den stort set kan afvikles i en hvilken<br />

som helst browser.<br />

”Kine ECG Presenters” eneste opgave er, at fremfinde og vise lagrede <strong>EKG</strong> diagrammer i form af<br />

JPEG billeder i HealthCare Databasen af ”RealTimeKMUI” applikationen.<br />

Indgangssiden er ”ECGSelectorUsr.aspx” og afhængig af, om der vælges enkeltvisning eller<br />

visning af alle diagrammer (se afsnit ”Use Cases der ønskes udført”), redirigeres til hhv.<br />

”ECGPresenterUsrSingle.aspx” eller ”ECGPresenterUsr.aspx”. Forskellen i de to ”linjer” i ”Kine<br />

ECG Presenter” er kontrollen med, hvilke måling der vises.<br />

Diagrammet/-erne <strong>på</strong> de to ”Presenter” sider vises i en HTML Iframe, der tillader brugerne er<br />

scrolle vertikalt gennem diagrammet uden at skulle scrolle hele ”Presenter” siden. De to sider,<br />

”IframeImageLoad.aspx” og ”IframeImageLoadSingle.aspx”, er siderne der vise ”Presenternes”<br />

Iframe.<br />

”Iframe siderne” er udelukkende opbygget med en Image ASP.NET kontrol og tildeles i ”Code<br />

Behind” delen indholdstypen (ContentType) "image/jpeg" , hvilket gør det muligt at sende/skrive<br />

et JPEG billede direkte ind <strong>på</strong> siden til Image kontrollen via ASP.NET Response.OutputStream.<br />

JPEG billederne fremfindes gennem ”KineECGFormatter.cs” klassen, der står for<br />

databaseadgangen, søgning <strong>på</strong> og omformateringen af de binære billeder fra databasen til JPEG<br />

billedeformatet. Formateringen af binære data til JPEG sker vha. .NET System.Drawing biblioteket.<br />

Billeddata sendes i appklikationen via en .NET memorystream og ”pumpes” derfor simpelt ind <strong>på</strong><br />

”Iframe sider” som beskrevet tidligere.<br />

Kontrollen med, hvilken måling/ hvilket billede der vises, sker vha. af data gemt i ASP.NET<br />

Session og ”Iframe sidernes” Page_Load metoder. Se nærme beskrivelse i Figur 15 og Figur 16.<br />

protected void Page_Load(object sender, EventArgs e) // ECGSelectorUsr.aspx<br />

{<br />

KineECGFormatter formatter;<br />

if (!IsPostBack)<br />

{<br />

formatter = new KineECGFormatter();<br />

Session["KineECGFormatter"] = formatter; // Fremskaf og formatter data.<br />

Session["NoOfPapers"] = 0; //Antal billdeder ved ”Vis alle målinger”.<br />

Session["BrowserIndex"] = (int)0; //Den første i rækken. Bruges samme med DB index<br />

Session["PaperPersonId"] = 0L; //EuipmentID for Person der er valgt.<br />

Session["SingleRecID"] = 0L; //Måling der vises ved ”Udvælg måling”.<br />

}<br />

}<br />

Figur 15 Session data for visning af billeder og kontrol med udvælgelse. Page_Load metoden gælder for<br />

ECGSelectorUsr.aspx” siden.<br />

Lidt ”ASP.NET julelege” er brugt i forbindelse med ”Udvælg måling” funktion (ASP.Net Button<br />

Button2) .<br />

ASP.NET kontrollen GridView er tilføjet ”ECGSelectorUsr.aspx” siden med ”Select” egenskaben<br />

sat, men uden initial binding til en datakilde/database tabel, hvorfor GridView kontrollen ikke vises<br />

derfor automatisk, når siden kaldes. Ved aktivering af ”Udvælg måling” knappen, ASP.NET Button<br />

kontrol, tilføjes en datakilde til GridView’et, i form af et udtræk fra HealthCare databasen<br />

HistoryLog. Ved ”reload” af ”ECGSelectorUsr” siden vises GridView’et nu med relevante data.<br />

GridView Select funktion håndteres af GridView2_SelectedIndexChanged metoden. De to<br />

metoder bag udvælgelsen er vist i Figur 17.<br />

Jesper Rosholm Tørresø: 20060653 Side 21 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

protected void Page_Load(object sender, EventArgs e) // IframeImageLoad.aspx<br />

{<br />

KineECGFormatter formatter;<br />

Response.ContentType = "image/jpeg";<br />

MemoryStream memStream = new MemoryStream();<br />

formatter = (KineECGFormatter)Session["KineECGFormatter"];<br />

int noofpapers = formatter.CountKinePaperECG((long)Session["PaperPersonId"]);<br />

Session["NoOfPapers"] = noofpapers;<br />

formatter.KinePaperECGFormatterMS((long)Session["PaperPersonId"],<br />

(int)Session["BrowserIndex"], memStream);<br />

memStream.WriteTo(Response.OutputStream); // Send billede til Iframe siden<br />

}<br />

protected void Page_Load(object sender, EventArgs e) // IframeImageLoadSingle.aspx<br />

{<br />

KineECGFormatter formatter;<br />

Response.ContentType = "image/jpeg";<br />

MemoryStream memStream = new MemoryStream();<br />

formatter = (KineECGFormatter)Session["KineECGFormatter"];<br />

formatter.KinePaperECGFormaterMSSingle((long)Session["SingleRecID"],<br />

memStream);<br />

memStream.WriteTo(Response.OutputStream); // Send billede til Iframe siden<br />

}<br />

Figur 16 Iframe sidernes Page_Load metoder.<br />

protected void Button2_Click(object sender, EventArgs e) // “Udvælg måling”<br />

{<br />

if (setPersonId(TextBox1.Text))<br />

{<br />

DataClassesDataContext db = new DataClassesDataContext();<br />

var showlist = from meas in db.HistoryLogs<br />

where ((meas.EquipmentID == (long)Session["PaperPersonId"]) &&<br />

(meas.EngrUnits == "Kine ECG paper"))<br />

select new { meas.RecordID, meas.EquipmentID,<br />

meas.LocalTime,meas.EngrUnits,<br />

meas.UTC, meas.RecordAlias };<br />

GridView2.DataSource = showlist;<br />

GridView2.DataBind();<br />

}<br />

}<br />

protected void GridView2_SelectedIndexChanged(object sender, EventArgs e) // ”GridView Select”<br />

{<br />

GridViewRow row = GridView2.SelectedRow;<br />

long paperselect = long.Parse(row.Cells[1].Text); // RecordID/Måling der skal vises<br />

Session["SingleRecID"] = paperselect;<br />

GridView2.DataSource = null;<br />

GridView2.DataBind();<br />

Response.Redirect("./ECGPresenterUsrSingle.aspx");<br />

}<br />

Figur 17 Koden bag udvælgelsesfunktionen <strong>på</strong> ”ECGSelectorUsr” serversiden.<br />

Jesper Rosholm Tørresø: 20060653 Side 22 26-08-2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Udviklings- og deploymentmiljø.<br />

De to komponenter, ”HealthCare@Central Persistence” og ”Kine ECG Presenter”, er udført i et<br />

samlet udviklings- og deployment miljø. ”RealTimeKMUI” er udført, som en selvstændig<br />

uafhængig komponent og applikation. Udviklingsmiljøet er vist i Figur 18.<br />

Subversion https://svn2.iha.dk/svn/sih/@central_jrt/trunk/Persistence:<br />

«VS2008 Solution»<br />

Persistence<br />

sih2.sn.iha.dk<br />

Deploy<br />

Development<br />

Persistence<br />

Kine ECG Selector<br />

Subversion https://svn2.iha.dk/svn/sih/@home_jrt/trunk/EPJECG:<br />

«VS2008 Solution»<br />

<strong>EKG</strong><br />

i9400-002.iha.dk VS2008<br />

Development PC<br />

Development and deploy<br />

Jesper Rosholm Tørresø: 20060653 Side 23 26-08-2008<br />

Type<br />

RealTimeKMUI<br />

Figur 18 Udviklings- og deployment-miljø. Udvikling foregår med Microsoft Visual Studio 2008 IDE og med<br />

versionsstyring via Subversion.<br />

Konklusion.<br />

Mål.<br />

Målet med opsamling og visning af <strong>EKG</strong> data i en ægte distribueret sammenhæng er ramt.<br />

Målingerne fra Kine MYO ECG udstyret opsamles i Privatsfæren, sendes til Sundhedscenteret og<br />

kan vises i en browser. Den endelige integration med Columna EPJ er ikke af prøvet, idet der endnu<br />

forstår en opgradering af EPJ systemet. 9<br />

Nogle punkter fra oplægget er ikke blevet udført, muligheden for at via et serviceinteface at<br />

foretage udvælgelse af måledata, ”Webservice Control” vist i Figur 1, eller at foretage en<br />

abonnering <strong>på</strong> måledata, når disse gemmes vha. Persistence servicen.<br />

”RealTimeKMUI” komponenten indeholder nogle delvist udviklede mekanismer for start og stop af<br />

målinger, men disse er ikke færdige og bruges ikke (To knapper <strong>på</strong> brugerens billede er disablet).<br />

Brugereren kan starte en måling og venter så denne afslutning. Da SIH projektet Basestations<br />

framework skal tage over omkring brugerinteraktion, er den videre udvikling lagt her.<br />

Komponentorienteret udviklingen.<br />

Målet med opsamling og visning af <strong>EKG</strong> data i en ægte distribueret sammenhæng er ramt.<br />

Den gennemgående komponentorienterede orientering i såvel oplæg, systemarkitektur og design af<br />

kode har sammen med C#.NET platformen gjort udførelsen af de forskellige dele i systemet til<br />

”<strong>Opsamling</strong> og præsentation af <strong>EKG</strong> målinger” til en forholdsvis simple opgave. Og fremtidige<br />

udgaver af systemet er også rimelige enkle at iterere videre <strong>på</strong>, idet de enkelte hovedkomponenter,<br />

se Figur 4, kan ændre og udvikles uafhængigt af hinanden.<br />

9 Er under udførelse pr 15. august 2008


Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Eksempelvis, for adgangen til Kine Base stationen, har den komponent orienterede driver gjort det<br />

yderst enkelt at fortage en dataopsamling.<br />

SIH sammenhæng.<br />

Peristence service er gennemgåede en udvikling underprojektet dels med udgangspunkt i dette<br />

projekt, men også udfra tilbagemeldinger fra andre projekter. Funktioner omkring, identifikation,<br />

sammenkoblingen af udstyr og personer, samt lagring af mange målinger med ofte ret store<br />

datamængder, 300kB til 1,5mB, er blevet udviklet og afprøvet gennem dette projekt, efter devisen<br />

”Hold det simpelt”.<br />

Brug af en service orienteret arkitektur og en central service letter og vil lette fremover meget<br />

arbejdet med at udvikle HealthCare@Home Applikationer.<br />

Dette projekt har lang fra fulgt SIH projektet hvad angår hjemme delen, men som tidligere nævnt<br />

har Jaspe Molke Nygaard portet ”RealTimeKMUI” til SIH frameworket. Et forhold som skal<br />

fremhæves i denne sammenhæng er Kine håndtering af de serielle porte, hvor deres driver selv<br />

finder frem til hvilken serielport Kine Base Stationen er koblet <strong>på</strong>. Den form for selvstændighed<br />

harmonerer ikke med SIH Basestations framework, idet dette selv bestemmer og tildeler<br />

kommunikationsforbindelser til applikationerne. Kine driveren bør ændres til at bruge den seriel<br />

port/ data stream SIH frameworket tildeler.<br />

Administrationen af HealthCare Databasen er et område hvor nogle administrationsværktøjer er<br />

<strong>på</strong>krævet. I dette projekt er benyttes nogle manuelt oprette enheder og sammenkoblinger. Dette er<br />

som sådan transparent for applikationerne, der benytter Persistence og HealthCare@Central, men <strong>på</strong><br />

sigt, og her og nu, er regler og deres implementation, for hvorledes SIH HealthCare projektet skal<br />

virke essentielle for det videre forløb.<br />

Den foreslåede databaseatruktur og CareProcess paradigmet anses for en brugbar og<br />

holdbar/skalerbar løsning.<br />

Generelt.<br />

Projektet har været sjovt at arbejde med, og for udviklerens side har særligt kodningen af grafik<br />

funktionerne været lærerige.<br />

Et problem omkring filer og grafik <strong>på</strong> ”Kine ECG Presenter” komponenten ramte et ”sort hul” i<br />

Microsoft .NET System.Drawing. Det var ganske enkelt ikke muligt at gemme et billede i en fil <strong>på</strong><br />

hosten hvor<strong>på</strong> komponenten afvikles. Fejlen skyldes, vist nok, at grafik behandles i Windows OS<br />

lager og at låsningen af lageret er skrøbelig. Oprindelig skulle webapplikationen have brugte en<br />

Ajax komponent til visning af diagrammer baserede <strong>på</strong> filer, hvilket ville have givet en særdeles<br />

hurtigt visning af og bladning mellem diagrammerne. Denne teknik blev fraveget til fordel for en<br />

teknik, hvor et billede hentes fra databasen og skrives direkte <strong>på</strong> hjemmesiden, hver gang det skal<br />

vise, en lidt langsommere løsning, som dog også fjernede et problem med fil oprydning <strong>på</strong><br />

webserveren.<br />

Under arbejdet med Ajax viste der sig flere ”huller” i Ajax implementation, idet de enkelt Ajax<br />

komponenter ikke har den fulde tilgang til ASP.NET frameworket, eksempel Session objeket med<br />

dettes oplysninger, hvilet også gjorde at Ajax blev afskrevt i denne omgang.<br />

Som sædvanlig viste Webservice sin styrke med hensyn til simpel implementation og brug, men det<br />

er ikke nogen nyhed.<br />

Jesper Rosholm Tørresø<br />

Jesper Rosholm Tørresø: 20060653 Side 24 26-08-2008


I Se reference SW dokument om SIH<br />

II Sørens og Runes projekt<br />

Multidisciplinær SW-Ingeniøropgave. Teknisk IT, IHA/AU 2008<br />

Jesper Rosholm Tørresø: 20060653 Side 25 26-08-2008

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!