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
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