/[H9]/trunk/docs/Samlet/Samlet 1.doc
ViewVC logotype

Contents of /trunk/docs/Samlet/Samlet 1.doc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 285 - (show annotations) (download) (as text)
Thu Dec 13 14:05:14 2007 UTC (16 years, 5 months ago) by hedin
File MIME type: application/octet-stream
File size: 412160 byte(s)
updated embedded software description in Samlet 1.doc

1 ࡱ; 
2  !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry
3  
4  FMicrosoft Word-Dokument
5 MSWordDocWord.Document.89q
6 FMicrosoft Visio DrawingVisio 11.0 ShapesVisio.Drawing.119qb
7 [bbDefault$a$1$*$A$/B*OJQJCJmHsHPJ^JaJ_HtHnHrr Heading 1<@&
8 & F
9 & Fdh^]`<$CJ5KHaJ \nn Heading 2<@&
10 & F
11 & Fdh^]`<$ 5aJ]\hh Heading 36@&
12 & F
13 & F^]`<$ >*5aJ\BA@BAbsatz-Standardschriftart66 WW8Num2z1OJ QJ CJ^J
14 aJ** WW8Num4z0OJQJ** WW8Num6z0OJQJ*!* WW8Num7z0OJQJ*1* WW8Num7z1OJQJ*A* WW8Num7z2OJ QJ *Q* WW8Num9z0OJQJ,a,
15 WW8Num10z0OJQJ,q,
16 WW8Num12z0OJQJ88
17 WW8Num13z1OJ QJ CJ^J
18 aJ<<Default Paragraph Font** WW8Num4z1OJQJ** WW8Num4z2OJ QJ ** WW8Num5z0OJQJ** WW8Num5z1OJQJ** WW8Num5z2OJ QJ ** WW8Num6z1OJQJ** WW8Num6z2OJ QJ ** WW8Num8z1OJQJ*!* WW8Num8z2OJ QJ *1* WW8Num8z3OJQJ*A* WW8Num9z1OJQJ*Q* WW8Num9z2OJ QJ ,a,
19 WW8Num10z1OJQJ,q,
20 WW8Num10z2OJ QJ ,,
21 WW8Num12z1OJQJ,,
22 WW8Num12z2OJ QJ ,,
23 WW8Num14z0OJQJ,,
24 WW8Num14z1OJQJ,,
25 WW8Num14z2OJ QJ ,,
26 WW8Num15z0OJQJ,,
27 WW8Num15z1OJQJ,,
28 WW8Num15z2OJ QJ ,,
29 WW8Num16z0OJQJ,,
30 WW8Num16z1OJQJ,!,
31 WW8Num16z2OJ QJ ,1,
32 WW8Num17z0OJQJ,A,
33 WW8Num17z1OJQJ,Q,
34 WW8Num17z2OJ QJ ,a,
35 WW8Num20z0OJQJ,q,
36 WW8Num20z1OJQJ,,
37 WW8Num20z2OJ QJ ,,
38 WW8Num21z0OJQJ,,
39 WW8Num21z1OJQJ,,
40 WW8Num21z2OJ QJ BBWW-Default Paragraph Font6U6 Internet Link B*ph>*&)& Page NumberFFHeading ?x$OJ QJ CJPJ ^J aJ@B@ Text body@1$*$x KHPJ^J / ListA^J<"<Caption Bxx $CJ6aJ]"2"IndexC $LL
41 Overskrift Dx$OJQJCJPJ^JaJHRH Billedtekst Exx $CJ6^JaJ](b(IndeksF $^JBrB NummerlisteG^]`DqD Nummerliste2H^]`**Page No.I$a$>>>TitleJ$a$<CJ05KHaJ \8JA8SubtitleK$a$CJ6aJ]HHHanging IndentL^]$`$$$BottomMCJ((
42 Contents 1N@@
43 Contents 2O^]`@@
44 Contents 3P^]`@@
45 Contents 4Q^]`@@
46 Contents 5R^]`@@
47 Contents 6S^]`@@
48 Contents 7T^]`@@
49 Contents 8U^]`@@
50 Contents 9V^]`,r,Header W z&, ,Footer X z&FFTable Contents Y1$*$ $ OJ QJ PJ88 KodeSektion
51 Z6>*`a`Indholdsfortegnelse 10"[ %
52  ^ ]`00 Tabelindhold\ $BBTabeloverskrift ]$a$ $5\,, Rammeindhold^J1J Contents 10"_ %
53  ^ ]`>> Table Heading `$a$ $5\00Frame contentsa
54 = i:w,,ZZZZZZZZZZZZZZZ\,@
55 xvsĨ|7*`   ( :%p2B YoHqrbu"wXz|4~ڃ̉`<j2l
56 +G\Vk:xj,6,zr2j !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU
57 yzBQS|!#=NPje6hj(CEr)AC]L^`z HWY L q s 
58 
59 
60 1
61 I
62 K
63 e
64 ~
65
66
67
68
69
70  ) : ; `***|j\ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX::X29<ATW[!8@P( 
71 
72 
73  `qqC" <
74 C i#pT_toc37_toc87_toc110_toc145_toc153_toc159_toc417_toc437_toc499_toc689_toc776_toc825_toc897_toc929_toc939_toc942_toc948_toc964_toc979_toc997H %*/EHI`jb
75 I 
76 H %*/EHI`jb
77 I   
78
79   .OJ QJ CJ^J
80 aJl.......)))()()()...OJQJ)))()()()...OJQJOJQJOJQJoOJ QJ OJQJOJQJoOJ QJ OJQJOJQJoOJ QJ .........OJQJOJQJ.OJQJ 
81 WW8Num2WW8Num3WW8Num4WW8Num5WW8Num6WW8Num7WW8Num8WW8Num9WW8Num10WW8Num11WW8Num12@55556x6y66666666*7+777777b8c8k8888$9%909|9}99@:A:F::::+;,;6;;;;;<<'<r<s<<<<<
82 = ==P=Q=_=======I>J>Y>>>?????/@0@9@@@@AAA^B_BBBBBBwCxCCCCCCCCpDqD{DDDWE\EEEEEE[`c`o`p`w```````a aa*a+a5aFaGaaaaaaaab'b(bQbvbwbbbbbccJccccccdMdNdzdddd
83 e e,ePeQe|eee f`fafffffgg5ggggggh>h?hghhhi.i/i>ilimiziiii""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""iPGTimes New Roman5Symbol3&ArialILiberation SerifO&Lucida Sans Unicode5&Tahoma] LucidasansTimes New Roman_ DejaVu SansTimes New Roman?4Courier New;Wingdings_ StarSymbolArial Unicode MSG&Liberation Sans?DejaVu SansiLiberation SerifTimes New Roman?5Courier NewBhcfkff!!'0oDyK _toc37oDyK _toc87DyK "2.1.1.2 Kravspecifikation|outlineDyK 2.2.1.3 Tidsplan|outlineDyK 2.3.1.4 Ordbog|outlineDyK 2.4.1.5 Dagbger|outlineqDyK _toc110DyK 3.1.2.1 Valg|outlineqDyK _toc145qDyK _toc153qDyK _toc159DyK *6.1.5.1 Valg af databaseplatform.|outlineDyK 76.2.5.2 Generelle noter omkring databasedesign|outlineDyK "6.3.5.3 Tabel beskrivelse|outlineqDyK _toc417qDyK _toc437DyK $8.1.7.1 Generel beskrivelse|outlineDyK 8.2.7.2 IMEI|outlineDyK $8.3.7.3 Mulige forbedringer|outlineDyK 8.4.7.4 Funktioner|outlineqDyK _toc499DyK 8.6.7.6 Variabler|outlineDyK !8.7.7.7 Brugervejledning|outlineqDyK _toc689DyK 9.1.8.1 Beskrivelse|outlineDyK !9.2.8.2 Brugervejledning|outlineDyK 9.3.8.3 Funktioner|outlineqDyK _toc776DyK 10.1.9.1 TNTnet|outlineDyK 10.2.9.2 Design|outlineDyK 10.3.9.3 Layout.|outlineDyK (10.4.9.4 Software dokumentation|outlineqDyK _toc825qDyK _toc897DyK /10.5.9.5 Web klient bruger grnseflade|outlineqDyK _toc929qDyK _toc939qDyK _toc942qDyK _toc948qDyK _toc964qDyK _toc979DyK +12.1.11.1 Udfrelse af accepttest.|outlineqDyK _toc997DyK yK 2http://validator.w3.org/DdM+,^ `
84 
85 <A?2i6&e p!i6&e i6&e 8m (!x}Uus~{ò0(}yK%M#
86 !B˷$"t|iq -ȰԋhI0/ i&_$ ?gǯk;;7+K9/B.>K@$W&o)_ɂ?࢜"͟:(*Њv=*gr5kÇ76h}6~/7..IDj.-h;'Z. 绖ѶtѶ+۠*oOtn(:}7"Ư>om:y`|blp j/ӸQJ\=vzMr+%'J.R;[[w3n1_em_^6M[Mj}< /NkM<enWlnׇ|)}؟԰j7kS|qXGۓ&Uw*ք]:"=՞mIeu;qmXǔLܴeLپjk_&\q_ϖ>\χ>?|7`[>n'os;_ e]MkoV+عcsǑa7 AGC ̌x@+j03⻆ZO fFoP`f5D(i03^C$ fFcP `f7 
87 4uC fFeP `fĝ̌XoP `f 
88 !̌WC| fF|@̈ 
89 4q!B6Z"hj03fC" fF|@̈0D(&j03&Č@B"hWi03:CZ fF|@̈5D(&k03jC fF|@̈"h5WL fF\iP}E5D(h033̌@UnP}S4D(j03ڝ̌!Bv3#.3D(i03RC;̌!Bv3#>dP-`f%B fF!BC fF!BX"hǔ!BD"hk03BCm3#oP=̈3D(О`f 
90 4q!B\1D(О`fy/5ۆšx!B?̌x!B[ fFkP`f 
91 ̌x!B; fF@3#~@3#~@ۢ̈s 
92 ?k03lC fFeP`fęZ3#0D(̈ 
93 5q!B3#hP`f/"hh03dC] fF@;̈{̌x!B`fī 
94 P4D(4
95 CB/7D(Ў`f 
96 J fFhPUk03g 
97 ̌8@̈"h'h03XC̈c 
98 ̌8@̈ 
99 ~̌8@;IG"h4q!Bv3#5D(`f 
100 Ǎ8@;[k 
101 ̌x!B6D"hk03@Cm3#nP]̈"h5څ̌x!Bv3#dPM`fD fFkP}V{"hWh03b/C* fFL 
102 k5hPM`f@̈= 
103 4!B6U"h5xCm3#V"h_`f*Cm3#v2D(n`fc 
104 [5!BM fF,7D(j03b!Bv3#F̌"h41oPݧu@[u@[YG(k0g7ZsP-`
105 5~msP= hOh0g[SY^C\9}
106 (Vh0gJ ͠@[#hk0g j á@[h4>ms\Pm`
107 4>vmsPm`h5>OګYK5 @7 IAK9fP=(h0g}
108 }Y#msq@;f(i0g}>
109 \%9sPY_Ws>@+` h4Z' 欯sAV8(Ў`z!h]4 Zw 欯Bk0g}m
110 sׯ@5v(h0g=
111 YUd S@q |@ ǥ@6P93P(j4ڹYmsc@x3(Fj0g=&
112 Oi0g=n
113 1Y-m3#Z?B6^c4@DH@L"h`fDx\(Ю`fDa(Ю`fDf(j5:
114 5:>
115 /j03u ;hS4:
116 ǐh M̌h, fFΩm3#Z}@u fFM fFΟ6 fF[̌ȟ@[@̈9gP}G@Os@[̈P-`fDH(~̈yP-`fD\R(4:
117 %̌h ̌h7 R fFm1 fFο fF) fFcm3#6D(Vh03J fF: @[̈Vhk03j fF)@[̈Vh4m3#Z]$Pm`fD/
118 4tm3#Z3Pm`fD
119 ̌h@3#ZCP̈Vh`fzCm3#Z}RP̈Vh{4m3#ZaP`fD
120 ̌huAvH8(rUfF@ 4ۃ3#ZPk03{Z 棋 ;m]<N4+]i<86maM[xL >r z
121 +?;P,8 f<r.ts/5߼Z%5]ŵa^S;&\8n\<tYhuMO<d|eͽ7]Z. mvh-M6Be[|eͿE_"tYh/jko,W7]ڼgZ. m{j-M6BB[|e{ʭE"t o-7]fC.}eC.}7]&C.}q!MK_\g|ӥ/`|ӥ/K_\m|ӥ/>o|ӥ/>g|ӥ/K_\i|ӥ/>k|ӥ/>c|ӥ/.7Dn|ӥ/>i|ӥ/>a|ӥ/>n|ӥ/.3D"t鋏"t"tK oş"t?6D"t"t鋋 oŅ7]7] o o7]=7]<C.}ۆ7]]7]7]\C.}vC.}6C.}VC.}7] o97]lC.}q!M8K_a|ӥ/N3D"t7"t_4D'"t"t鋵7]ⵆ7]Ն7]╆7]7]7]e7]DC.}37]xC.}"C.}q!M8K_m|ӥ/2DG"t# oa7]PC.}<C.}q!MXc|ӥ/e|ӥ/2D"t鋧"t鋧"t7DO1DO2D"t} oކ7]b/C.}15D7]bl|ӥ/0D"t] o ojC.}K_d|ӥ/c|ӥ/7D o2C.}12DC.}1o|%|%|%{[M7]fK5t.ߏ|%;odMB{7])K~t7.|%{odMc}<7]Kq!t>v.|%t>O7]ϥM=|%t>o7]M|%)t>7]5M|%=tɾ7]}M3|%tɾ7]M|%&tɾ7] M|%;t7]*M|%{t7]M=|%{ t'7]rMf|%{Lt7]M|ӥ/ZhMhG7]\C.}:oEaK_.}:>oEvK_.}:_oE
122 >K_M.}:oEK_\b|ӥ/ZsMhs7]u^tֹ{|ӥ/ZMh7]u&tֹ|ӥ/ZMh7]u0tֹ|ӥ/Z_Mh#7]u;t鋫 oEoEoEWoEoEoECoEoEoE/oEӅoEwoEoEoEcoEozC.}.}.}.}.}7.}`.}.}.}.}.}=C.~yLG-:M߃qEcur]$w$]&ɖ[A6;pI˂݅; ZkºoCՊG~m{.cC1\4 ߵ\yy]qnjܑ ۑJ*]qk#s5ss5Ʈ{;Z$z( -_߅ߏ ~9\o⿄KWÇҸ>|<>
123 ǯo=xo1n;;qIYTTD=cӓhxR]tOEsѼ$R<v$I7_ \ZM!Y,yZ>A^_*K~R)DJ=٥n]ѢRuh2ZY:&zTm+EJA0J{7,{7~tgxFZJwgӿOpdwtF yN7"놧y-npz;;~՝r3 /NLbz~U\^Q*]&KE)wW74M* ss]9Tr3݆ t?@wdR\I|@rۑ^LjW%Cܜd>.I.pÓOӓ1grN&0މ/w;+1V_pܳT<枌gni<=-݃-6( ̓}װo[^^^nmko[0q $ rH.A:َ%=v="۷T1ޟvL)O\r~)r}#{\ d=^u,Ui׫n;dewzu-oɺ#r{-r-ޒMސqܞv)o;~Unro`/~I 7Z_~B_~_O~3~*c-ru>(d]$Bٟ{ݑu}NyYՒ5ke]˺nu$e]$Mu+u}Mֵ^ﲮe]ߒu'_aYWL<t.I:'U:t꒮{b#ؑ$ Š \ZLi;$%O6IpեAR`pkpqs0T.Uw:JGKRXraY׃e]ɺ%[ﲮɺUYd]$GYחd]7ɺnu]/Vtd4GmY}%ʺS=Y\@QPKC4<WOg.[:lָW3,Aur@Y3e]kd]ϕu":LuHYQe]?-:FuXYqd]ɺu':Vu녲u-:JuYaCd]ϕuu=Sui]( WPiv NLビcSc0(VӲ4
124 O`x FɺS]~Y}5V=υ}97Z}Y W-W>*E0_UQtWeOf]s l)$ to<e򌛦_}S\WyU$hFvH$Tl~tT垑ݪyF?AK+nzgO_?4w{~uV˂{(5tk&$ڧ'Oj>~Qh/;O>#ʵYE<(kka,5Dd@
125 f
126 
127 BA?2{vm;`$u Wp!Ovm;`$u vm;`$u (t@9k xXmlSU~m sl8:fdKQ!(Q,2@M:dse%h1aa0! $@ d*!DY~4`|sݽ-m)%i=_y?>=hB<:]@(\WD/_ݸaS$9Ŕhy|2&5Ɵz,t\oҼ-sP462+Z(R\R) =Ga
128 ` vMāZWZj|O4[Hh}ѷ\c*G`d_!&=Qlal/fZKͨ*J L+㴒LׁgN|ytFzBTZt}䣛w+]
129 y?<e; Z?$iLc.5㪾#>1f=|4}x܆m Cʆ\F䕘, ܲhk("']AbeğӨLN<Ibq:֏3V88D¼t:vZEpZAx+u47yN3b{c)18OTzt>ұaoD50I݄<'=kyrS=N!~ p5m'lұyn?}+s's*i; ?bn,K|7Sp*gxy4`n.%^4 5hi'Xӊq;lbye斾'ܱo.sN*%$,sAνy;wN 6<[^RMTDv(WWnq!'YE9{C}!~zsËT6h2/PsDtkǾy$EB<C  ^kZp)[H7WI8w|iܢ$x%m65c9
130 'Us)EEqeS{ v_gӰ-3X,ܹRBӅ1r^Vr[i},KpVj ,`<X},8b݄=jLF^Y1XY\ ,APއwҰk8Z-RE 'W(zoyM$!S# }TbhJ߇YVg{UW_MH:/ r[G+VߦJRFgXVbw.>K埒JwSq+wb#全[nvb>j
131 "pmV3AY&zx.xeDG$˕M5քHKcU$mIl%Qt@w&hw=A`ޜ EoXJ Hչb DsT@Juƿ ڃH`ъ2a bF%@XxD.MGR&.bbov9eiNS&$tگF)#)sgI=y$?[%5A܂EfI*="vWasDd.*f
132 
133 BA?2w0D'S p!w0D'S w0D'S kt` =Kxkl@ż%fĂEF,5)lwz DI'Bm~m<))m4ͫNU*D* DmPQ@s;w^$ڱ3sΝsι>v4mq03%m5
134  毦
135 8f<޼~:PnLs"I'EWlOm;UH@/2KDĽ<q<ezeZW^*h"ŋj%y>GD*4qc5)UdS7wwk<΋_%;he,_
136 |;䂇1Vh| Gn13v>9g[v=]GM#ΎlX/\88~wlv:̀缬GO緾W1ބ:oky7Du ~;No)[~+Ee\v=c=<9p?J{}^h]ЁaIF[^[a3GktoN8 p?|o>Oky~\ģRIwxV?:@Hr7w
137 SaV}W7҇.H>Q3:0 =wئg'M(!3?mGڛeM0vL(>^4B(oy ܟ\Xn׎ax'I$(UCh ~1>ӱW-y⨺Uji.W eLFʲ8?^ryeM"O fvD gsՇT1ge6jjuVW24c8}87+y2I̲_(_'z N.Lu:>*ـ "jCC]5F3)ǕhmS7C2szՉ,/0DcJ'Od޵''y2|!#<F1f hV$w*GUJoơ_f/Bv"v8o#SINގVD&1Vږֈ~湱t)oqxX{Rać6^wk }8"aMP&bէ2֗+,SSׇ^wg;ˮJuogKBч7?1;pa?B-0f2L~K4ǠZѐ_0kJqr>c`;>t0Haf0q\L`Kf>,OusGw%w6@c R
138 8*%OaTeP)Pҡ{n\e,,,9)#cFذUd9a+)dC R6PJVWz9Yw%|Iz0ޢ7s=ӦSX&֛0WԃO1+S hy43!lcw9?BU԰`anun-Gօ 3L⯄BJ!? l尮*rW}-Ֆkmt
139 |˭
140 U
141 +ą|<YNyîoy.4
142 o;'a/\_2Q&UFH&ZtB:ٖPX:ZˀzN_ aqԳZJ ^k4'*%e،]iaQ#el#G/xdk1z{$cۅ%ֺ/,q1fr|ËGyݧ}@BpnKWXo!׿$c?vnr2>Po[xP/ߠd;$ WiU6'WVl.;N VH'Wkl)!S+Oz6kac dLrloҾ8YtXNv?[u)_,I硔 >xPh$`gaQ£KPrji$ij) Ϗ]_A="'w-ZHgm:[j/Na3uaѱ=r خŅ{#k%?n={N3&؂\r
143 w Lf9fnϩ~bWSJ,<uisŠͲ\x'<˟,q\[7ϨL{޾{qZCGo3rN
144 y2dN/JacXsK]2c4pW3++"_k$7cۆ=mX77iC9.HȱAɏzwnvn/_,![hôNu^uea9Jkym9OcĠ}LEs^{ncv1_:*^˿Q بB>W8"-SG`reH0Zוo(fs
145 V FkJ>pk*c
146 X:з~\  f!LF#ꌟW
147 uyvMrOtmp2]kE\ٷbׯ WcV;UJ^_6@8]W-xn?+uX R$GCuOs+*aqL;ߩsݣ3ny|IZISنǃl^2[jI]K\es_-D7zܼN>-('D7??z| ϱ02?9Rp{vx3~zd@gls,å1y_tj~:R@4#wL~VSx$unq|k=O嘳s~kκUFoʻ}5tQ>q^No:4gƾC3˞[OFWx:+4*C5Ve͈p=l
148 D,y,.m:Υf~OAŚ4=Eo'3/x*+Tk&vjPoN&zG4$;k1OkNǰ`ʯ+j>ߢCYC|xokDE{VG{ayOwlQ+1mc:vG;l,, Ff1MI@Z? !dFOLe eȦdG (qf!da2^`+c_6P4>czI:GrrzA-Z<'}r_~},R#2z[<GcDh\^U<t}Y0ؗl"nve-( '^*Ptu'*FnO.cerd}$jD3pO:fSGzjJ~F]\)^Mn`R *DmD0ۣw̆l3ǂh$\p)T`q"izP:I:Z,jDk]3GƺZOO5C9Qss!s2%/4=Ԫ͉TX,g-Y+t[t0QT GHj+-6r KXFTܛ:Wp?,+vcCөf8[edx.OuLkl ܎SꊦbYiE=`ӱ e֑=v1,#2Tq/3DyD՚PI+~-||&v'7F&T>&QcZ (v>ex&hgX& ={(feI5yk9Go>Sȕ5X|"zR7tE܋;wk1n"weX vkΦ- (-7uů d]6FՉګ[^{ ,y<Cf UgRJf.IIZVM,>A*LG"2Խ&EY.- ӗhd?WUkVJrn#s̩x3x
149 ʶ%'Q#NeMQEןd<.K\Ape=`VHtJg;j:!r4820=ቬfe*2zLvW8oލukyYzܛs~-lk݃y8Fa-X~gmuǭr76~4Hp|@8k FάJ 6L|/ʏ{—n=CAW+FY{'u~9
150 +ƴ#=Ӧe`ߩj DdXU# `
151 
152 <A?2kc:cT$) Gp!?c:cT$) c:cT$) -k1xWqLTG曷 oH΅"aI޶z[[=Қr1ibN{Wrjbrg-A9kkR XKδ/ڽyoY  7f~o7}-01h3&348HfҋNc%`j27_t dOdF8Y?[Z0]<% P[! ~ hЦSux`3[a ^ Rl|Y)/@5 /A~xqn(7A πr̃'qc2@q?cO9+7B
153 ,fX0p&K¨Q/H՘Hd=gqI3{߻3}w xLYtvp,k#O?haU$^Wpc/cw*tsd{ݝJاD]y(3+`NrwwqFۂ0gs֟|iB?34 '0bNf-m.+ Y]kv(BȺ9fBujoYgS&y>a*ݾK6C<e+ y
154 ee;<";@.n/)!"l$<I>4|2-ۨWQi)h9Sb+FF(S)w""b(eb.)0U0A$aTyjE #:Yo}=>;DNϼA>z<v=7N9f wؽC4}u/S毂ӲL?h]Ivy߾,X0=i1{1[;~8j-MV6FC뼟YކkS9\dc{hXy{cB]iNd 3yN >Uc?.i>C-AM]"[i+o oU
155 (גP~@54Nz=xv ڂT FǛ(_YxRxt=t<$?[Irݐ&w@rKre̗3 _&kpX |yC36_c#,[2,]ngi$4e#z(E>TuxUDܯrnݯ sCkpq"fD{a:dݤk
156 kEzj5V[jY'(:F`ҷ:&5zn%kBlBHٲEnF_M
157 QZNuD=[4IVRFi2HreJf(E2K>/o]m|Y'r#lSd-"]4r$[f
158 H=b"<ë:>ׄdݢq\q3#yOcG䘷z,e捘~ӱ'"o1C4L }o:vyˏ[^pǭx<N}|'>zj<۸s wj<gsfϞvx[4ϲM=:NO?7aZ82u|;~w!UV7Z0ŨrzGi~gT[=3yN49˱'_g&|N(uP`;UmZ|m?'.l=E\yɾn~b_8w]?h^+ͫ6s;h^W ̯,h21HP+tbdcc,Q;X+UxV-5V|y5xAXXz:եqU/:W}YT;xWKJZU?TR)|jSI:E)nb;@`ie%_8R8bѥi|0'fsBxhNp=yD"/EKqOh+'0 U `hx
159 IndholdTorben Hørup Nielsen Normal.dotTorben Hørup Nielsen23@]@#@l)6<@=GT(qԤ˫͙߯ϑxxIJԃ||{{˟}}юmmrrı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϒϒIJǬƬ¹Ųij¹ƬƬ͙͙ΒϔƬ{{[[kkuuӇՁ͘ՁϓϓӇ}}̚llю̚ƪı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϒϑIJIJIJűöijűijűƬǬ~~ppБӇ||űˠ||̚ӇxxՁϓӇıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϒ͙ϒkkэԃԃӇ͘юӇьюԃ͘̚Հuu͘}}ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϒՁƬɤƭƮƬƬűƬƭϑ{{˞юӇ͘юՁ{{||ˠ||{{юӇ||{{Ӈ{{ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϒՁ͙{{˞юӇ͘ԃ͘{{||ӇЎı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϒՁIJȦ¸ijƬƭ͙͙ьՁϓӇ}}||Ӈю̚ԃ}}ӇϓggՁՀԃ||ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸¸ϒՁIJIJůƬǪǫ·Ƭƭ͙Ձ͘{{͘̚юuuыlluuӇՁ͘юЏюllww˝ӇЎı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϑIJƭЍ҉БӇ||{{ԄӇ||̚||͘}}{{Ӈ͘{{͘uuppюӇ͘˟Ձ{{}}ı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ı¸¸ϑ{{ǪǩƭijijŲƭijűijijǬǪՁtt~~{{Ӈ͘ԄӇ͘ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϑǬƯIJ¹űƭǬʣՂЎ}}}}ww˝ԃ{{}}˟Ӈ͘ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϑ~~yyԃԃ͘̚Հuu͘Ӈ{{ԃ{{}}ww˝Ӈ||̚Ձ̚mm||ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϑ~~ǪIJƬűijŲ¹ǬIJьЎ}}Џԃ}}҈ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϑϒыю̝Ӈюgg||ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϑϒǪǬȦø¹ǬƬΒ͗ьɣ͗||Ӈ̚ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ы͙ǪIJɣȥöɣ¹ǬIJԃԃ͘̚Հuu͘Ӈюkk{{}}wwnn||gg̚ˠԃ||͘ԃ͘Հ{{||űюԃ͘̚Հuu͘Ӈıı¸ıı¸ı¸ıı¸ıı¸ı¸ıı¸ı¸ıı¸ıı¸ı¸ıı¸ıı¸ı¸ıı¸ı¸ы͙Ǫ{{ь҉}}||{{Հԃ||Ӈьı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸¸͙ǬǪƬɦŲ·IJʣ{{ы{{Ӆ}}{{Ӈ͘юӇʣ˟Ӈ{{||ˠ||qqı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸¸͙ǪǬɤ¹ijij¹IJƯ{{Β{{vvю{{͘ˠюӇ˟ddıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸͙{{ԃԃ͘̚Հuu͘Ӈ{{ԃ{{}}ww˝Ӈ||̚Ձ̚mm||͘ԃ͘ԃӇ͘юӇ͘юԃzzՀƯՁ͘}}ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸͙ǪƬűijŲ¹űƬŰIJƯǬȥ{{Ӆ}}{{Ӈ͘юӇʣ˟Ӈ{{||ˠ||qqı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸¸͙ϓǬzzϒ}}͘ˠՁ||pp͘ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸͙~~ʣƯŰö¹ijijIJIJǬЍю̝Ӈ~~||ˠՀԃ||Ӈьı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸¸͙~~ʣǩȦøǫ¹·IJIJǬyy҉}}||{{Հԃ||Ӈьı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸¸͙͙ʣIJɦŲ·IJIJǬьэ}}˟ggӇ͘ԃ͘||Ӈ{{͘hh{{Ӈьı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸͙͙ʣƬƭƮij¹űijij¹IJIJǬы͘эՂӇı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸¸͙͙ǬΒΕww||Ӈkk˟||Ӈю{{͘vvӇ˟ю}}ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸¸͙͙ʣIJů¸ijijŲ¹ijIJIJǬԃԃ͘̚Հuu͘Ӈ{{ԃ{{}}ww˝Ӈ||̚Ձ̚mm||͘ԃ͘Ӈww˝||Ӈ{{{{Ӈ{{юԃ͘̚Հuu͘}}ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸͙͙ԃэԃՁ͗ԃ̚ԃ{{ԃ˟||Ӈю{{~~юӇ˟ю}}ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸͙ՁƯƬƭƮƬɣŲijijŲ¹ijIJƭϓь͗Ձ||Ӈ˟||Ӈю{{~~юӇ˟ю}}ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ǬǩƬɣ¹ijijijŲ¹ijʣϓыΕww||ӇkkԄӇ||ԃll͘ԃwwee~~||{{{{Ձ̚Ձ||ՁюӇ{{Ӈюggrrı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ǬϓΒϒ}}˟{{Ձ͘{{Ձ̚Ձ||ՁюӇ}}kkzzԃ͘ww˝ƪı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ȥǩIJŰöijűijijijůʣϓю̝Ձgg||ՁюӇ{{ԃ{{}}ww˝Ӈ||̚Ձ̚mm||ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ǬǩȦøijijŲ¹ʣ~~Ҋ͙ՁbbՀƯՁ͘Ӈ{{ԃ{{}}ww˝Ӈ||̚ՁՀԃ||ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸zzϒԃЏю̚Ӈww˝{{Ӈюgg||ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϓƬƬij¹ǩɥϑΒϒ}}˟{{ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ı¸yyϑьmmՁvvюӇıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϒǬůijƬ͙Ѝю̝Ձ{{||rr{{Ӈьı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸¸ϑIJǩȦøijǬ͙yyΖ˞bb||ԃqqı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϑ͙ь͗ˠ{{ю}}˟Ձrrı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϑIJƬɣIJijijǬ͙ыxxIJffюю}}Ӈϓˠ{{ՁՀԃ||ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ı¸ıı¸ıı¸ı¸ıı¸ıı¸ı¸ы͙͘||{{˟Ӈ{{||hhqqı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸ϑIJűijijij¹Ǭ͘||{{{{ԃffıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ıı¸ı¸¸͙űijijȧIJ}}}MMM___LLLˆ͑ʘ붶ӜʾʮʼM 0Caolan80 \[ <l&&v4h|f3RrR(BT,7XQ3"&8R9+^-,,dIndhold  TOC \o "1-9" \t "Heading 3;3;Heading 2;2;Heading 1;1;Overskrift 1;1;Titel;1;Overskrift 2;2;Overskrift 3;3" \h HYPERLINK \l "_toc37"Indhold 1  HYPERLINK \l "_toc87"1 Indledning 2  HYPERLINK \l "2.1.1.2 Kravspecifikation|outline"1.2 Kravspecifikation 2  HYPERLINK \l "2.2.1.3 Tidsplan|outline"1.3 Tidsplan 2  HYPERLINK \l "2.3.1.4 Ordbog|outline"1.4 Ordbog 2  HYPERLINK \l "2.4.1.5 Dagbger|outline"1.5 Dagbger 2  HYPERLINK \l "_toc110"2 Analyse 3  HYPERLINK \l "3.1.2.1 Valg|outline"2.1 Valg 4  HYPERLINK \l "_toc145"3 Systemdesign 5  HYPERLINK \l "_toc153"4 Hardware dokumentation 6  HYPERLINK \l "_toc159"5 Database dokumentation 7  HYPERLINK \l "6.1.5.1 Valg af databaseplatform.|outline"5.1 Valg af databaseplatform. 7  HYPERLINK \l "6.2.5.2 Generelle noter omkring databasedesign|outline"5.2 Generelle noter omkring databasedesign 7  HYPERLINK \l "6.3.5.3 Tabel beskrivelse|outline"5.3 Tabel beskrivelse 7  HYPERLINK \l "_toc417"6 S 
160     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 
161     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~MS Protokol beskrivelse 10  HYPERLINK \l "_toc437"7 Software dokumentation for embedded software 11  HYPERLINK \l "8.1.7.1 Generel beskrivelse|outline"7.1 Generel beskrivelse 11  HYPERLINK \l "8.2.7.2 IMEI|outline"7.2 IMEI 11  HYPERLINK \l "8.3.7.3 Mulige forbedringer|outline"7.3 Mulige forbedringer 11  HYPERLINK \l "8.4.7.4 Funktioner|outline"7.4 Funktioner 11  HYPERLINK \l "_toc499" 7.5 Definitioner 14  HYPERLINK \l "8.6.7.6 Variabler|outline"7.6 Variabler 14  HYPERLINK \l "8.7.7.7 Brugervejledning|outline"7.7 Brugervejledning 15  HYPERLINK \l "_toc689"8 Software dokumentation for Server software 16  HYPERLINK \l "9.1.8.1 Beskrivelse|outline"8.1 Beskrivelse 16  HYPERLINK \l "9.2.8.2 Brugervejledning|outline"8.2 Brugervejledning 16  HYPERLINK \l "9.3.8.3 Funktioner|outline"8.3 Funktioner 17  HYPERLINK \l "_toc776"9 Software Dokumentation for web-software 21  HYPERLINK \l "10.1.9.1 TNTnet|outline"9.1 TNTnet 21  HYPERLINK \l "10.2.9.2 Design|outline"9.2 Design 23  HYPERLINK \l "10.3.9.3 Layout.|outline"9.3 Layout. 23  HYPERLINK \l "10.4.9.4 Software dokumentation|outline"9.4 Software dokumentation 24  HYPERLINK \l "_toc825"Ecpp moduler 24  HYPERLINK \l "_toc897"vrige filer 27  HYPERLINK \l "10.5.9.5 Web klient bruger grnseflade|outline"9.5 Web klient bruger grnseflade 28  HYPERLINK \l "_toc929"10 Idriftsttelse af systemet 29  HYPERLINK \l "_toc939"11 Accepttest Specifikation 30  HYPERLINK \l "_toc942"1)Overordnet 30  HYPERLINK \l "_toc948"2)Overvgnings enhed 30  HYPERLINK \l "_toc964"3)SMS Server-software 30  HYPERLINK \l "_toc979"4)Web-interface 31  HYPERLINK \l "12.1.11.1 Udfrelse af accepttest.|outline"11.1 Udfrelse af accepttest. 32  HYPERLINK \l "_toc997"12 Konklusion 33 13 Bilag 1 Indledning Vi har fet et projekt-oplg som bestr i at lave et overvgnings system, til at overvge flis fyre. Dette system er bestilt af det svenske firma Serren AB. Overvgningen skal ske gennem en server, hvilket betyder at vi skal have noget kommunikation op at kre, som kan sende dataene fra flis fyret, dertil har vi fet udleveret et Fargo maestro 20/100 som vi kobler til et picdem2 board gennem den serielle indgang. Vi laver et addon modul til pic boardet, som simulerer et flisfyr i henhold til opgaven. Serveren vil vre en dum server, som hndterer dataene som bliver modtaget fra overvgningsenhederne og gemmer disse i databasen, samt eksekverer kommandoerne som der bliver givet fra klienten. Klienten bliver web baseret og skrives i TNTnet. grunden til at vi vlger at lave den web-baseret, er at det efter vores mening er den mest hensigtsmssige lsning. Opgavefordelingen er som flger: Da vi har tre hovedomrder og vi har tre system-elementer har vi lavet opgavefordelingen sledes: Kevin tager sig af serveren Hedin laver hardware + embedded software Torben laver web software Dette er ikke en stringent opdeling da vi selvflgelig hjlper hinanden med de forskellige opgaver efter behov. 1.2 Kravspecifikation Opgaven er lavet ud fra en kravspecifikation, der er godkendt af Serren AB. Denne kravspecifikation er vedlagt som bilag 15. 1.3 Tidsplan Projektarbejdet har er forlbet efter tidsplanen, der er at finde i bilag 12. 1.4 Ordbog For at lette lsningen af denne rapport, har vi lavet en ordbog/ordliste, der er tilfjet som bilag 13. 1.5 Dagbger Gruppemedlemmernes individuelle dagbger ligger i bilag 14. 2 Analyse Producenterne af flisfyr og denne branche som helhed er endnu ikke net s langt mht. til interfacing og datakommunikation som andre automationsbrancher ssom pumpe-branchen, hvor kunderne konstant eftersprger flere muligheder for overvgning og styring. Hvis man kigger rundt p nettet og undersger de forskellige producenter af stokerfyr og lignende fyrtyper, s vil man opdage at de fleste af denne slags fyr har ganske vist en styringsenhed med en rkke sensorer og aktuatorer tilknyttet, som giver mulighed for at overvge og styre fyrets drift p en rkke forskellige parametre. Hvis man gr ind og kigger p billederne af de forskellige fyr kan man se at disse styringer ligner hinanden til forveksling. Mange af disse fyr bliver produceret af regulre smede-virksomheder hvor at man ikke kan forvente den at finde kompetencer inden for elektronik og programmering, kombineret giver dette anledning til disse to teorier: Et givent firma har udviklet standard general-purpose styringer til denne slags fyr og at producenten af fyret s kber sdan en styring og monterer p fyret. At en fyr styring er opbygget af en standard PLC (Programmable Logic Controller) og et standard displaymodul til en sdan plc. Derved kan man relativt let f tilkoblet de forskellige inputs og outputs og f det programmeret ved at konsultere en elektriker eller anden person med erfaring inden for automation. Kigger man p specifikationerne og databladende er der ikke meget der indikerer at man kan trkke data ud fra styringen der kan bruges i en overvgningsenhed som vores. Dog er der nogle enkelte der tilbyder data via et rs232 interface og et tilhrende windows program. Ud fra opgave oplgget lyder det ikke til at Serren AB er en decideret producent af anlg, men lyder mere som en virksomhed der tilbyder reparation og anden servicering af disse anlg og gerne vil udvide denne service med et fjernovervgningssystem. Hvis at et sdan system skal tilknyttes eksisterende fyr anlg vil dette betyde at Serren AB selv skal pmontere ekstra sensorer uden om den eksisterende styring og selv srge for videre behandling af disse data. Hvis dataudvekslingen skal optimeres skal man have fat i producenten af anlggene og bede om at f lavet mere et udvidet data-interface. Dette datainterface kunne laves p flere forskellige mder: En tt integreret lsning hvor kommunikations-enheden indgr direkte i styringen, enten p selv samme print, eller som en addon til printet hvor man p simpel vis kan f fat i de relevante data. Dette vil krve et meget tt samarbejde med producenten og vil ikke vre s fleksibelt mht. til frit at vlge mellem leverandrer. En anden mde kunne vre at dataene blev leveret via en kommunikations-snitflade i form a f.eks. et RS-232 og hvor man med simple kommandoer kunne aflse styringens parametre dog uden at komplicere selve styringens opbygning og modularitet. Den tredje mulighed var at man bad producenten om at levere dataene via en industriel fieldbus og implementerede overvgningsenheden som en form for gateway imellem GSM modemet og fieldbussen. Denne lsning vil ydermere have den fordel at vi kan indsamle data fra andre enheder ssom varme cirkulationspumper, aircondition anlg osv. Serren AB kunne ogs gre det, at i stedet for at de selv str for overvgningen, kunne de ogs gre det at de slger overvgningssystemet til de strre kunder, sledes at en stor virksomhed eller en offentlig organisation selv kunne overvge sine anlg. 2.1 Valg Opgaveoplgget har ikke givet megen mulighed for at vlge hvordan dataene kommer ind til vores system, s vi aflser dataene som 4 digitale samt en analog indgang. Med hensyn til valg omkring microcontroller har vi valgt en chip fra Microchips PIC18 serie da det var dn vi var fortrolige med og vi viste at den havde de moduler vi skulle bruge ssom seriel UART og A/D konverter. Valget af kommunikationskanal imellem PIC og Serren AB s systemer var enkel, da opgaven foreskriver at dataene skal transmitteres pr SMS via GSM modems. I projektet skulle vi ligeledes bruge en database til at opbevare de indkomne data. Blandt de mange forskellige kommercielle og frie lsninger der er p markedet, har vi valgt et open source produkt med navnet PostgreSQL. Som bindeled imellem databasen har vi valgt at lave et serverprogram implementeret i C++/MFC, igen p grund af at det var elementer vi havde forudgende kendskab til. For at forenkle Serren AB s idriftsttelse af systemet valgte vi at implementere den del af systemet der skal bruges til dataudtrk og administration, som et web-interface. Derved er selve udrulningsfasen nrmest lig nul, da der ikke skal distribueres software, komponenter til de enkelte ansattes PC er. Som platform til web-interfacet har vi eksperimenteret lidt og valgt en TNTnet applikationsserver, denne platform har to klare fordele set fra vores synspunkt: t, at vi kunne genbruge vores viden inden for C og C++ programmeringssprogene og to at da modulerne bliver kompileret til maskinsprog er det en meget mere effektiv platform og kan dermed klare flere sidevisninger p samme hardware end nogle af de andre muligheder. 3 Systemdesign Systemet bestr af en microcontroller baseret overvgnings-enhed, to sms modemer, en server, PostgreSQL database samt et web administrations modul baseret p tntnet. Overvgnings-enheden bestr af en PIC microcontroller der skal aflse analoge og digitale vrdier fra fyret. De data der skal mles er kedeltemperaturen(analog), power failure, fremfrings fejl, om tanken er ved at vre tom samt om hvorvidt at der er flammer i fyrets brndselskammer. P de digitale indgange er der placeret lysdioder s at slut-brugeren kan aflse status direkte. De aflste vrdier skal afsendes til serveren via SMS. De afsendte sms er gives et unikt fortlbende nummer s at serveren kan identificere rkkeflgen. Konfiguration af enheden modtages pr sms. Serveren modtager data-rapporter fra enhederne via sms og gemmer disse i en PostgreSQL database. Serveren skal, nr den bliver trigget fra administrations-interfacet, kunne afsende konfigurations-sms'er til en eller flere enheder. Fra web interfacet kan kunden aflse de indkomne data, oprette og slette kunde-profiler samt trigge serveren til at afsende konfigurations-sms'er.  EMBED Microsoft Visio Drawing  4 Hardware dokumentation Vi har valgt at lave et addon modul til picdem2 boardet i stedet for at lave et design fra bunden, idet ingen af os har srlig meget styr p hardware, vi har dog lavet et diagram, se bilag 1, over hvilke komponenter p pic boardet vi bruger, sledes at det vil vre relativ nemt at lave et selvstndigt board. Addon boardet kan deles op i to sektioner, en som beskytter pic'en mod overspnding og en som simulerer I/O fra fyret. Diagrammer over disse to sektioner kan findes i bilag 2 og 3, samt en liste over de brugte komponenter i bilag 4. Grunden til at vi har sat en optokobler foran indgangene p pic'en er for at beskytte pic'en P den analoge indgang er vi hoppet over hvor grdet er lavest, idet vi ikke kan forsvare det hardware der skal til for at f lavet en galvanisk adskillelse mellem input fra fyret og indgangen p pic'en. Skulle det laves korrekt, skulle den variable spnding konverteres til en variabel strm, som derefter kres i gennem en liner optokobler. P den beskyttede side af optokobleren skulle den variable strm dernst konverteres tilbage til en variabel spnding, der kunne aflses med PIC'ens A/D converter. I den frdig udgave vil det dog vre mere sandsynligt at den analoge vrdi kom ind til pic styringen i form af en variabel strm i omrdet 4-20 mA. 5 Database dokumentation 5.1 Valg af databaseplatform. Vi har i dette projekt valgt at bruge PostgreSQL, som er en open source relational database mangagement system (RDBMS) som er fuld ACID compliant. ACID er en forkortelse for Atomicity, Consistency, Isolation og Durability og bruges til at beskrive hvor vidt at databasesystemet er til at hndtere database operationerne i isolerede blokke. Postgresql implementationen ligger sig tt op af SQL92/99 standarderne. 5.2 Generelle noter omkring databasedesign Da Serren AB tilbyder sine services til bl.a. institutioner og andre strre organisationer, er det vigtigt at en given kunde kan have mere end t fyr med n overvgnings enhed. Derfor er disse to entiteter splittet ud i hver sin tabel forbundet med en n til mange relation. Dette medvirker at kunden kan have lige s mange installationer som det er krvet og da hver installation har sit eget adresse-felt kan disse installationer vre fysisk placeret hvor som helst. For at sikre at alle dataene i databasen er konsistente og for at undg redundante data, er alle tabellerne normaliseret til 3. normalform. Normalisering er en flertrins proces som netop har til opgave at sikre et fornuftigt database design. For at gre designet simplere og effektivisere opslagene har vi valgt at udskifte de naturlige primre ngler med automatisk optllende tal-ngler. 5.3 Tabel beskrivelse Her beskrives tabellerne i databasen. For en grafisk reprsentation af tabellerne, se venligst bilag 8. Tabel: Customer Indeholder stamdata for Serren AB s kunder. 1 db row = 1 kunde. IDFortlbende heltal, primr ngleNameBeskriver kundens navn. Tekststreng af variabel lngde med maksimal lngde p 100 - herefter kaldet en varchar (max)AddressKundens postadresse. Varchar(255)PhonenrKundens telefonnummer. Varchar(30)ContactpersonNavnet p Serren AB s kontaktperson ved den pgldende kunde. Varchar(100) Tabel: Installation Beskriver installationen af en overvgningsenhed. En installation skal vre tilknyttet en kunde. 1 row = 1 installation IDFortlbende heltal, primr ngleDescriptionEt tekst felt hvor Serren AB, kan give den pgldende installation en kort beskrivelse eller et kaldenavn. Varchar(100)AddressAdressen p den bygning hvor installationen er monteret. Varchar(100)CustomerIDID et p den kunde som denne installation er tilknyttet. Heltal, fremmedngle i mod customer tabellen.BoilertypeEn valgfri beskrivelse af typen p det fyr der skal overvges. Varchar(100)InstallationPhoneNrTelefonnummeret p installationen. Bruges bde til at identificere indkomne log-data, men ogs nr at der skal udsendes konfigurations sms er til en installation. Varchar(30)IMEIIMEI nummeret p installationens GSM modem. Tekststreng med fast lngde p 15 tegn - herefter kaldet char(lngde)UpdaterateAngiver hvor ofte at installationen br afsende periodiske data-rapporter, angivet i minutter. Heltal.CommErrorIndikerer hvorvidt at installationen svarede tilbage p den seneste konfigurations sms. Boolean. Tabel: Logtable Indeholder de indkomne datarapporter fra installationerne. 1 row = 1 datarapport IDFortlbende heltal, primr ngleLogtimeTidspunktet hvor at datarapporten blev modtaget af serveren. Tidsstempel. TemperatureKedeltemperaturen mlt i grader Celcius. Heltal.FlamedetectorIndikerer hvorvidt at der var flammer I fyrets afbrndingskammer. Boolean.SolidFuelEmptyIndikerer om der var mere flis i flistanken. Boolean.ConveyorErrorAngiver om der var problemer med mekanismen til fremfring af brndsel. Boolean.PowerFailureAngiver om der var strmfejl p fyret. BooleanMessageNrHver bliver stemplet med et fortlbende nummer, dette nummer gemmes her. Heltal.InstallationIDID en p den installation som denne logbesked er tilknyttet. Heltal, fremmedngle imod Installation tabellen. Tabel: Command Da web-klienten og serveren ikke kommunikerer direkte sammen, bruges denne tabel til at brugerne af web-klienten kan sende kommandoer til serveren. Desuden virker tabellen som en historik over allerede udfrte kommandoer. 1 row = 1 kommando IDFortlbende heltal, primr ngleCreatedAngiver hvornr at kommandoen blev oprettet. TidsstempelExecutedAngiver hvornr at kommandoen blev udfrt af serveren. Hvis at dette felt ikke indeholder en vrdi, betyder det at den endnu ikke er udfrt. TidsstempelCommandIDAngiver hvad der skal udfres. Er vrdien 1, skal der udsendes konfigurations sms er til samtlige installationer. Hvis vrdien er 2 skal der udsendes en konfigurations sms til installationen angivet i nste felt.InstallationIDHvis CommandID er 2 bruges dette felt til at angive hvilken installation konfigurationen skal sendes til. Heltal, fremmedngle imod Installation tabellen. Tabel: Users Gemmer brugerkontiene til den administrative del af web-interfacet. 1 row = 1 bruger IDFortlbende heltal, primr ngleRealNameGemmer brugerens rigtige navn for at gre det enklere for brugeradministratoren at identificere den enkelte bruger konto. Varchar(100)UserNameIndeholder brugernavnet. Varchar(30)PasswordIndeholder brugerens kodeord, krypteret med en MD5 hash. Varchar(32)EnabledAngiver hvorvidt at kontoen er aktiv. Kan bruges til at gre en konto ubrugelig uden at fjerne den helt. Boolean.UserAdminAngiver om denne konto har rettighed til at administrere andre brugere. Boolean. Tabel: Config Indeholder de server konfigurationsparametre der skal kunne ndres via web-interfacet. 1 row = 1 konfigurations parameter. NameNavnet p parameteren. Varchar(50), primr ngle.ValueParameterens vrdi. Tekstfelt uden vre grnse. (datatype=text) 6 SMS Protokol beskrivelse Kommunikationen med vores sms modems foregr via RS232 og AT kommandoer. F.eks.  AT+COPS? som bruges til aflsning af operatr. AT kommandoer er en de facto standard til kommunikation med modemmer, udviklet af Hayes Communications. Vi har valgt at lave vores egen protokol som overbygning til sms, som ser sledes ud. Data update fra fyr: <sms counter>:<temperatur vrdi 0-100>:<flammedetektor 0/1>:<flismagasin tom 0/1>:<fremfringsfejl 0/1>:<power failure 0/1> eksempel: 4532:80:1:0:0:1 Konfigurations sms til fyr: <simpel tvrsum af modtagers IMEI>:<server tlf nummer>:<update rate i minutter> Eksempel: 43:87654321:75 Conf ok pakke: <Okay besked> Eksempel: conf ok 7 Software dokumentation for embedded software 7.1 Generel beskrivelse Softwaren p pic'en skal hndtere dataindsamlingen fra fyret, formatere det og til sidst sende det via rs232 til sms modemet, som s sender dataene til serveren. Koden til pic'en er skrevet i C. Vi har lavet 3 flowcharts, et der overordnet illustrer hvad det er koden laver, og to mere der gr mere i dybden med initialiseringen af pic board samt sms modem. Bilag 5 er den overordnede illustration, bilag 6 viser hvordan init ser ud og bilag 7 viser hvordan modem init fra pic'en forelber. 7.2 IMEI Et IMEI nummer er et unikt nummer som alle GSM og UMTS telefoner har, ligesom en MAC adresse er unik for alle netkort. 7.3 Mulige forbedringer Pin koden er hardcoded i pic'en, det er en af de ting der eventuelt kan ndres p, sledes at man kan ndre pin koden fra serveren. En af de andre oplagte forbedringer vil vre at kunne lave et timestamp p sms'erne, f.eks. ved at pic boardet foresprger efter en opdateret tid/dato, nr pic boardet er frdig med init. 7.4 Funktioner void reset_recieve_buffer() Denne funktion bruges til at reset vores to message buffere, med tilhrende countere, disse buffere bruges til at gemme de sidste to linjer data der er sendt fra modemet, for at se hvordan disse buffere arbejder i forhold til hinanden, se nedenstende illustration.  void pic18_io_init() Her bliver portene som vi skal bruge p pic'en initialiseret, det drejer sig om RA0 til A/D input, RA5 til comm Error LED samt RB1-4 til digital input. void ad_init() Srger for at initialisere A/D registreret til at bruge RA0 indgangen, lave resultatet right justified, clear ADRES[H-L] for at vre sikker p at der ikke kommer en critical tilstand lige efter opstart fordi den tror at der er 90-100 grader i kedelen. void interrupt_init() Aktiverer alle de interrupts som vi skal bruge, hvilket er, timer1 og serial recieved interruptene. void timer_init() Bruger ekstern clock, prescale er sat til 1/8 og den udlser hvert sekund. Prescale betyder at vi slipper x/y af frekvensen igennem. Den eksterne clock er for vores vedkommende p 32,768KHz, hvilket vil sige at med en prescale p 1/8 s udlses TMR1 registrene 4096 gange i sekundet. Timer1 er en 16 bit counter, som bestr af to 8 bit registre, TMR1H og TMR1L. Vi har sat dem til EFFFh, som er 4096 mindre end overrun, hvilket vil sige at timer1 interruptet bliver udlst en gang i sekundet. void rs232_init() aktiverer den serielle forbindelse, samt stter baud raten til 1200. void modem_init() Henter IMEI nummeret fra modemet, sender en pin kode, hvis den mangler og sletter eventuelle sms beskeder, hvorefter pic'en venter p at f en OK tilbage fra modemet. void on_initial_recieve() Venter p at +WIND 11 findes i serial_recieve_buffer. Nr det findes i bufferen, s er modemet initialiseret, og global_modem_init bliver sat til 1 samt message bufferne bliver resat. interrupt interrupt_handler() Er vores hoved interrupt handler, som finder ud af hvilken interrupt der er udlst, hvorefter den tilhrende funktion bliver kaldt, derefter bliver interrupt flaget sat til 0 igen, og programmet fortstter hvor det slap. void serial_recieved() Bliver kaldt nr RCIF interruptet bliver udlst. Det der sker i funktionen er at den hlder det indkommende byte i global_serial_recieve_buffer. Der er dog nogle undtagelser, hvis det der bliver modtaget, er \n, s hopper vi bare ud igen, idet vi ikke kan bruge det til noget, det samme sker ved \r hvis det er den frste karakter der bliver modtaget. Modtager vi derudover en \r, s regner vi med at det var den sidste byte i denne omgang, og vi hlder indeholdet af global_message_buffer1 ned i global_message buffer2 og til sidst hlder vi indholdet af global_serial_recieve_buffer ned i global_message_buffer1, derved har vi gjort klar til at der kan modtages mere data, mens vi arbejder med det andet. void timer1_interrupt() Bliver kaldt hvert sekund, og tller global_time_counter samt global_emergency_counter 1 op. void update_lcd() Opdaterer lcd displayet 1 gang i sekundet. void send_update() Indsamler data fra flis fyret, lgger det ned i update variablen og sender det videre til send_sms() som hndtere selve afsendelsen til modemet. void send_sms(const unsigned char* payload) Beder modemet om at sende en sms med indeholdet i payload. Nr sms'en er sendt s bliver den slettet, fra modemet, og eeprom_writer() bliver kaldt for at gemme sms_counteren. void convert_temp() Omregner vrdien fra potmeteret til grader, og gemmer det i global_temp void eeprom_writer() Skriver telefon nummeret til serveren, sms counteren samt tidsintervallet mellem status sms'erne til eeprommen. void eeprom_reader() henter dataene ud fra eeprom'en som eeprom_writer() har lagt derned. void on_recieve() bliver kaldt i bunden af main loopet, for at tjekke om vi er frdige med at modtage noget data, er vi det, og det er en sms, s henter den sms nummeret ud fra det modtagende data, hvorefter den kalder void sms_recieved() og til sidst clearer message bufferne. void sms_recieved() starter med at bne den modtagende sms. Nr den har modtaget et OK fra modemet, s er hele sms'en hentet, og vi kan begyndt at dekode den. void Delay(int time) laver et delay p time tid i sekunder, time kan dog variere fra time til time-1, idet funktionen kigger p timer1 variablen, som udlser 1 gang i sekundet, s hvis time er 1, og Delay(int time) bliver kaldt 1ms fr timer1 udlser, s varer delayet reelt kun 1ms. void main() Er vores main loop, som krer det hele. De ting som krer i while(1) lkken er et tjek p om der er nogle kritiske tilstande, hvis der er, og global_emergency_timer er over 600 sekunder, s bliver der sendt en sms, til serveren. Den srger ogs for at der bliver sendt en status sms for hver X sekund, samt at reset global_emergency_counter. while(1) tjekker ogs om der er lavet ndringer i status intervallet ol. og fr skrevet det til eeprommen A/D konverteringen sker ogs i while(1) loopet. Sidst men ikke mindst s bliver on_recieve() kaldt fra while(1) som frnvnt. 7.5 Definitioner #defineforklaring.BUFFERbruges til at bestemme lngden p vores 3 buffere til at modtage/lagre modtaget data.PWRFAILpowerfail porten.FIREDETflammedetektor porten.FEEDINGfremfrings fejl porten.EMPTYTANKtom tank porten. 7.6 Variabler Dette er s en liste af vores variabler, samt en forklaring af hvad de bruges til. Variabel navn.Forklaring.unsigned char global_Pot_Hiindeholder ADRESH.unsigned char global_Pot_Loindeholder ADRESL.unsigned char global_serial_send[BUFFER]indeholder det data der skal sendes.unsigned char global_serial_recieve_buffer[BUFFER]indeholder in kommende data.unsigned char global_tempindeholder temperaturen i forbrndingskammeret i celsius.unsigned char global_message_buffer1[BUFFER]indeholder den nyeste frdigmodtagende linje fra modemet.unsigned char global_message_buffer2[BUFFER]indeholder den nst nyeste frdigmodtagende linje fra modemet.unsigned char global_message_buffer_length1indeholder lngden af message_buffer1 arrayet.unsigned char global_message_buffer_length2indeholder lngden af message_buffer2 arrayet.unsigned char global_lcd_buf[16]indeholder det data der skal skrives ud p displayet p pic'enunsigned char global_cell_nr[15]indeholder serveren telefon nummer.unsigned char global_sms_recieve_number[3]on_recieve() gemmer sms nummeret her, det er det nummer som skal bruges for at bne sms'erne i modemet.unsigned int global_serial_byte_countercounter til at holde styr p hvor meget data der er i global_serial_recieve_bufferunsigned int global_sms_counterholder styr p hvor mange sms'er der er sendt til serverenunsigned int global_time_counterbliver talt 1 op hver gang timer1 bliver udlstunsigned int global_emergency_counterbliver talt 1 op hver gang timer1 udlses, og sat til 0 hver gang der bliver sendt en kritisk sms.unsigned int global_time_intervalindeholder tidsintervallet mellem status sms'erneunsigned int global_imei_tversumindeholder den simple tversum af imei nummeretunsigned int global_temp_update_displaybliver sat = global_time_counter efter displayet er opdateret. displayet bliver kun opdateret hvis temp_update_display != time_counterbit recieve_donebliver sat hver gang en modtagelse er frdig.bit modem_initbliver sat nr modemet melder at det er klar.bit has_imeibliver sat nr imei tvrsummen er regnet ud. 7.7 Brugervejledning Under opstart af pic og modem lyser comm error led'en... nr den slukker, s er systemet oppe at kre. Efter opstart, lyser comm error lampen hvis der kommer en error fra modemet. Temperaturen i kedelen vises p displayet, og opdateres 1 gang i sekundet. 8 Software dokumentation for Server software 8.1 Beskrivelse Serveren i dette projekt skulle ikke vre et vrktj som vi plejer, men nrmere et bindeled mellem databasen og flisfyret, som s for en god ordens skyld kan skrive noget data i et logvindue s man kan se hvad der sker. Serveren er rimelig simpel opbygget, der er en seriel wrapper til at tage sig af det alt til det serielle (genbrugt fra tidligere projekt), en Server-Settings fil til at holde det data brugeren skal kunne ndre. En container fil til at holde de klasser og variabler jeg skulle bruge rundt omkring i projektet, og en trd der str og kalder alle de ndvendige funktionen, hvis der er brug for dem, trden ligger i CFlisfyrDlg som er min hovedklasse. Da denne trde er ansvarlig for at udfre alle serverens forskellige opgaver og som flge deraf kalder en masse funktioner, har jeg kreeret et flowchart til at vise rkkeflgen af disse kald. Dette flowchart ligger som bilag 10. Desuden ligger der en UML oversigt over serial wrapper klassen i bilag 9. 8.2 Brugervejledning Nr Serren AB starter deres serversoftware har de 3 valgmuligheder, fordelt p 2 knapper: Start: Denne knap starter med at tjekke om det er ndvendigt at sende en pinkode til modemet, hvis det er det bliver den sendt og vi venter p modemet er klar, hvorefter vi fortstter start fasen. Hvis ikke det er ndvendigt med en pinkode hopper vi direkte til start fasen. I startfasen starter vi med at lse i databasen hvad serverens eget telefon nummer er, skriver det p skrmen og starter main trden som ser efter data p den serielle port, lser i databasen om der skal sendes config sms er osv. Close: Bruges til at lukke programmet pnt ned. Ved at lukke seriel og database connection og stopper main lkken. Server-Settings.ini er en fil der skal ligge i rod mappen til server softwaren, hvor man kan ndre host, database, user, password for databasen, og vlge hvilken COM-port programmet skal bruge. 8.3 Funktioner  OnInitDialog: I denne standard oprettede funktion vlger jeg at kalde StartSerial() og DBConnect, samt stte min sms counter til 0. AppendText: Da jeg ofte havde brug for at tage den tekst der var i log vinduet og tilfje en ny line og noget nyt tekst valgte jeg at lave en funktion jeg kunne kalde med den streng der skulle tilfjes i den nye linje under teksten. Da jeg alligevel har fat i alt tekst der skrives her bliver der ogs sat et tidsstempel p s det er til at se hvornr der sidst kom noget ind. Her hndterer jeg ogs autoscroll, da det normalt reagere p enter fra brugeren. CheckAcknowledges: Denne funktion bruges til at tjekke op p om der er get over 5 minutter siden vi sendte konfigurations sms en ud og der ikke er kommet svar. Frst ser vi om der er get 300 sekunder eller derover, hvis der er det tjekkes der for om der er sendt 1 retry sms ud. I tilfldet at der er sendt 1 retry sms ud vil commerror p installationen blive sat til true i databasen, hvilket resultere i installationen vil st under critical p web siden. Hvis der ikke er blevet sendt en retry sms, vil der blive sendt en og counteren tlles op, samt der vil i log vinduet blive skrevet  Retry send config to <TLFNR> . DBConnect: I denne funktion indlser jeg data fra Server-Settings filen og opretter forbindelse til databasen. DBReadCommands: Denne funktion gr ind i databasen og ser i command, hvis den stder p en linje hvor der ikke er sat nogen executed tid p returnere den id, commandid og installationid til en data container til senere brug. DBReadPhone: Denne funktion bliver kaldt med et installationsid for at kunne hente det rigtige telefon nummer, imei nr, update rate og id p installationen, og returnere det til en data container klasse. Hvis der bliver sendt et 0 med som installations id vlger den at hente hele listen frem, da de s er tegn p vi skal sende en config sms til alle installationer. DeleteSms: Denne funktion kaldes nr vi lukker serveren, og nr vi har modtaget et fastlagt antal sms er, den sender en  at+cmgd=1,3 kommando ud til modemmet for at slette alle lste, sendte og usendte sms er. HandleAcknowledge: Hvis vi modtager en  conf ok besked kalder vi denne funktion med afsenderens telefonnummer, derefter leder vi vores liste igennem efter frste forekomst af dette nummer, som vi s sletter fra listen. keepaliveandread: Vi havde skrevet i kravspecifikationen at serveren skulle hente sit eget telefon nummer i databasen, og at den ville lse i databasen hver 15. Minut for at holde sig i live. Det blev denne funktion oprettet til. Frst prver jeg at kre sql strengen  select name, value from config; , hvis det lykkedes smider jeg det hentede data i en container til senere brug. Hvis der af en eller anden rsag ikke kan fs forbindelse med databasen, lukker jeg forbindelsen og bner den igen. OnBnClickedClose: Frst sttes continueThread til 0, for at stoppe main trden i at kre videre, s bliver DeleteSms() kaldt for at rydde op. Efter en pause ser vi om der er bent for en seriel forbindelse, som vi s lukker hvis der er, og det samme sker med database forbindelsen. Til slut lukker serveren ned. OnBnClickedStart: Frst Skrives der i logvinduet at vi tjekker og indstter pinkode hvis ndvendigt, hvorefter vi kalder SetPin(), s flusher jeg data p den serielle port inden jeg fortstter. Variablen continueThread sttes til 1, keepaliveandread() kaldes, der skrives til logvinduet ( Server phonenr read from db:  + <phonenr>) og main trden bliver kaldt. readFrame: Er en lille worker funktion til at lse dataen p den serielle forbindelse, og putte det i en vector som derefter returneres. runthread: Her ser vi efter om continueThread er forskellig fra 0, hvis den er det krer vi MyMainThread(). MyMainThread: Dette er selve hoveddelen af programmet. Vi starter med at se om der er data i k p den serielle forbindelse. Hvis der er data i k, lser vi det ind og ser om det er et + i teksten, da det vil indikere at vi har fet en modem kommando ind. I tilfldet der er et plus splittes teksten op i command og tekst, samt stter en bool til true for at markere vi har en plus kommando til senere. Efter vi har splittet dataene, ser vi om teksten er  ok eller  error , da disse er status-beskeder fra modemet der ikke skal bruges til andet, end vises i logvinduet. Hvis plus bool en er true, ser vi om command indeholder  cmti eller  wind . Ved  cmti : starter vi med at lede efter et  , som kommer lige fr tallet der indikere hvilken sms der er kommet ind, nr vi har fundet det  , stter vi smscount til alt til hjre for det og fjerner  : fra enden. S generere vi AT kommandoen og sender den af sted, og efter en lille pause kalder vi ReadSms(). Ved  wind : denne del er sdan set mest lavet som en lille fail safe, hvis vi skulle vre s uheldige at f en ekstra besked ind fra modem startup. S hvis vi fr sdan en skriver vi til logvinduet  Wind modtaget og teksten som vi modtog. Ellers skriver vi den tekst vi har modtaget til logvinduet. Vi tjekker ogs op p om ResetSms er net til 20, i hvilket tilflde vi kalder DeleteSms() og skriver til logvinduet  Sms er slettet da vi nede grnsen . Der tjekkes igen om p om continueThread er positiv, hvis dette er tilfldet kalder vi DBReadCommands og splitter dataen op, samt omregner commandid til en int som vi kan tjekke op p, i tilfldet at int en er over 1 er det et tegn p vi skal bruge det installationsid der er i containeren, ellers skal der nemlig sendes en config sms ud til alle. Derefter kalder vi sendconfig(). Efter config er blevet sendt holder vi en pause, og kalder CheckAcknowledges(), efterfulgt af endnu en pause. Til sidst i main trden ser vi om der er get 900 sekunder eller derover, hvis dette er tilfldet kaldes keepaliveandread(). ReadSms: Nr vi nr ind i readsms funktionen er AT kommandoen, til at gre det, allerede blevet sendt, s vi starter med at holde en rimelig lang pause, for at sikre os hele sms ens indhold er i den serielle k. Derefter lser vi den og skriver den p skrmen samt sender den videre til SmsSplit(). SendConfig: Frst ses der efter om commandid er 1 eller noget andet, hvis den er 1 kaldes inst = DBReadPhone( 0 ); ellers kaldes inst = DBReadPhone(InstallationsID); som beskriver om det er en eller alle der skal have tilsendt en config sms. Derefter fyldes telefonnummer, imeinummer og updaterate i strenge. S udregner vi tvrsummen af imei nummeret, som vi bruger s modtagerne kan se det er en config sms til den. Derp kaldes SendSmsHead() med telefonnummeret. Som det nste opbygges smsdataene, med den udregnede tvrsum, servertelefonnummer og updaterate, som bruges nr vi kalder SendSmsData. Til sidst tjekkes op p om IDnr er forskellig fra 0, da vi s skal tilfje installationsid og telefonnummer til listen over hvem der har fet tilsendt en config sms. SendSmsData: Efter SendSmsHead har taget sig af delen med at taste at kommandoen og indstte nummeret bliver der herfra sendt den data af sted der er blevet vedlagt i en vector, nr alle dataene er sendt ud til modemmet med de sm pauser sendes kommandoen 0x1A svarende til CTRL+Z, hvilket indikere for modemmet at vi er frdige med at skrive sms en og den skal sendes af sted. Modemmets svar skrives derefter til logvinduet. SendSmsHead: Her starter jeg p at sende sms erne, frst bliver der skrevet en del af ATkommandoen til modemmet (at+cmgs= ), derefter sender jeg det telefonnummer som blev sendt med da funktionen blev kaldt, og det hele afsluttes s med at stte et  og et carriage return p, og holde en lille pause. SetPin: Her starter vi med at sende  at+cpin? kommandoen ud, og afventer svar. I tilfldet at modemmet nsten lige er blevet startet op vlger vi at sge efter  +cpin:  i dataen fra den serielle port, da der sendes noget data vi ikke skal bruge lige som modemmet starter. Hvis modemmet returnere  +cpin: sim pin lses der i Server-Settings filen og at kommandoen genereres ( at+cpin=2595 ). Dataen sendes af sted og vi starter en lykke der venter p at f  wind: 11 tilbage, hvilket indikere at modemmet er oppe og kre. Hvis modemmet returnere  +cpin: ready skriver vi  No pincode needed og hopper hurtigt videre. Der er selvflgelig ogs muligheden at vi fr noget uventet data tilbage, hvilket vil resultere i der i logvinduet vil st  Error in set pin part of the code . SmsSplit: Her modtages sms en som den sendes fra modemmet, s jeg starter med at hente afsenderens nummer ud, og fjerner derefter alt fr den egentlige besked. Frst tjekkes beskeden for om den er  conf ok , hvis dette er tilfldet gr vi videre til HandleAcknowledge med afsenderens nummer. Ellers sikre vi os at dataen er inden for de rammer vi har specificeret i vores interne sms protokol. Nr sms en er sluppet igennem dette tjek bliver den delt op ved flere gange at blive sendt igennem Splitter(). S bliver installationsid p afsender telefonnummeret fundet, og det medtagede data puttes i logtabellen. Og der skrives i logvinduet  Sms added to Log . Splitter: Splitteren har en reference til de data den skal arbejde med, den sger efter  : i teksten og returnere teksten til venstre for det, og stter den data referencen peger p til alt til hjre for  : . StartSerial: Jeg starter med at lse i Server-Settings filen hvilken COM-port der skal bruges, og bner derefter den serielle forbindelse med en fastlagt baud rate p 1200. De 1200 blev valgt for at holde det ens p server og pic. tversum : Denne funktion bruges nr vi skal sende en config sms til installationerne, da vi har valg at de ikke skal reagere p sms er hvis ikke den starter med tvrsummen af deres imei nr. s vi sender imei nummeret vi har fra databasen ned og ligger dem sammen tal for tal, og returnerer resultatet. writeFrame: Writeframe er lavet til at tage en vector med noget data, og skrive det til den serielle forbindelse, men nogle sm pauser s modemmet ikke bliver  forpustet , hvorefter det hele sluttes af med at sende en carriage return og endnu en lille pause. 9 Software Dokumentation for web-software 9.1 TNTnet Da vi har valgt en ret ukendt platform til at basere vores web-interface p, vil vi bruge lidt plads p at beskrive hvad det er og hvordan det virker. TNTnet er en http applikationsserver hvor at man programmerer sine sider og moduler i C++. C++ er er ikke just et sprog man normalt forbinder med udvikling af web-sider da man inden for dette felt har haft en prference for fortolkede sprog s som perl, php eller visual basic eksekveret under ASP containeren og senest har pyton og ruby meldt sig p banen. Dermed ikke sagt at (semi-) kompilerede sprog ikke har vrt brugt  fleks er Java ret udbredt i form af JSP & servlets. TNTnet bestr af flere forskellige komponenter. Frst og fremmest bestr det af en selvstndig http server som har til opgave at modtage foresprgsler fra brugeres klient (browser) og udlevere det nskede dokument, hvad enten det er i form at noget statisk indhold ssom et billede / html dokument, eller om det er en dynamisk side der skal eksekveres for at genere outputtet til brugeren. En dynamisk side kaldes i tntnet termer for et modul, og disse moduler ligger som kompileret c++ i dynamiske biblioteker (dynamic shared libraries). Disse libraries indlses i hukommelsen og fjernes igen alt efter behovet, dog er levetiden af en ikke lngere brugt klasse konfigurrbar. De indkomne foresprgsler bliver dispatched sledes at de hver isr bliver varetaget i en separat trd, dette er selvflgelig den mest effektive model, men medvirker samtidig at hvis man i sit modul skal vre sikker p at det kode man nu laver er trdsikkert. TNTnet serveren kan afvikles p en bred vifte af unix-lignende operativsystemer. Dernst er TNTnet ogs en samling software biblioteker og klasser som varetager mange af de funktioner man har brug for i forbindelse med udvikling til web, ssom parsning af input, generering af output, hndtering af HTTP headere, cookies og sessions. Dette bibliotek indeholder ogs de klasser og interfaces der er ndvendige for at lave et side-modul som http-serveren kan indlse og eksekvere. Desuden er der et database bibliotek som implementerer et database abstraktionslag, sledes at man ikke selv skal hndtere de enkelte database-API er ssom libmysqlclient(MySQL) eller libpq (PostgreSQL). Dette bibliotek implementerer ogs en ensartet tilgang til database metodikker ssom transactions og prepared statements. For at programmere til tntnet skal man implementere hver modul som en klasse der nedarver fra tntnet::Component. Men for at undg at man skal kende alle detaljerne omkring denne klasse og metoden til at registrere sine klasser med hoved applikationen , men ogs fordi at mange web-udviklere kan lide at blande deres HTML kode med deres eksekverbare kode. For at hndtere dette har tntnet udviklerne lavet et srligt format kaldet ecpp. En ecpp fil er basalt set en almindelig html fil, hvor at man opbygger sit modul med almindelige html koder, disse formaterings koder kaldes ogs for  tags . Denne html-tilstand kan brydes med nogle specielle tags som ecpp formatet specificere hvormed at man kan skifte mellem html og c++ kode tilstand, p samme mde som php og asp har deres egne specielle tags til disse tilstandskift. Dette illustreres bedst med et lille eksempel: Dette format kan selvsagt ikke fortolkes direkte af en c++ compiler da det ikke lngere er et standard c++ format. Derfor skal ecpp filen frst igennem en ecpp compiler. Denne compiler tager ecpp filen og ud fra indholdet genererer den en klasse der nedarver fra tntnet::EcppComponent, der igen er nedarvede fra tntnet::Component og dermed passer ind i tntnet serverens eksekveringsmnster. Outputtet fra ecpp compileren er standard C++ og kan dermed kompileres til objekt filer der kan linkes sammen til et shared library, der kan indlses af tntnet serveren. Relationen mellem .ecpp og .cpp filerne er den samme som relationen mellem .jsp og en servlet komponent for dem der er bekendte med denne type Java-udvikling.  EMBED Microsoft Visio Drawing  9.2 Design Opbygningen af web-delen er splittet ud p mange separate moduler for at gre kodningen af det enkelte modul simplere. Datatilgngeligheden er lavet sledes at alle medarbejdere hos Serren AB kan g p sitet og aflse de indsamlede data og kontakt informationer omkring de enkelte kunder. Hvis at det er ndvendigt at ndre informationer vedrrende en kunde eller kundens installationer skal man logge p systemet. Dette system har sit eget modul til brugergodkendelse og kan derfor ikke godkende brugere op imod andre systemer. Godkendelse op imod f.eks. en LDAP server kunne komme p tale p lngere sigt. De brugere der kan logge p systemet kan opdeles i 2 kategorier Almindelige administrations brugere. Brugere med denne profil kan oprette, ndre og slette brugere og deres tilhrende installationer. Udsende konfigurationer til n eller alle installationer. ndre serverkonfigurations parametre. Superbrugere, der ud over at kunne det samme som den almindelige bruger ogs kan administrere bruger accounts. Af sikkerhedshensyn br passwords aldrig sendes i klartekst og det gr de selvflgelig heller ikke her, da de alle kodes til en MD5 hash i browseren og da md5 er en envejs algoritme har hverken web-server eller databasen nogen id om hvordan at passwordet ser ud i klartekst-form. Hvis at man har brug for mere sikkerhed vil det vre et oplagt valg at kre web-applikationen via Secure Sockets Layer (SSL). Webapplikationer er forskellige fra traditionelle programmer, idet at dataene i princippet kun lever i de millisekunder at eksekveringen finder sted, kan der ikke gemmes tilstanddata internt i programmet. Derfor er den slags data ndt til at blive leveret fra request til request via browseren, som s sender dataene tilbage i form af request variable eller cookies. Login data br iflge vores mening ikke sendes frem og tilbage i denne form s derfor bruges der en metode kaldet session data, hvor at web-serveren genererer en unik id som sendes til browseren som en cookie og derved returneres ved hver efterflgende request. Nu kan session afhngige data gemmes i server softwaren i et dertil indrettet omrde som laver en mapning imellem session-id en og de gemte data. Levetiden af disse sessionsdata kan konfigureres i tntnet serveren, og er fra vores side sat til 10 minutter. Dette medvirker at en bruger automatisk logges af administrationsdelen efter 10 minutters inaktivitet. 9.3 Layout. Layoutet er lavet i et simpelt, nrmest klassisk design, med en navigationsmenu i venstre side og selve indholdet i hjre side. Da vi ikke har kendskab til Serren AB og ikke har haft adgang til brevpapir eller lignende materiale fra firmaet har vi ikke kunnet afkode firmaets grafiske profil og har vret ndsaget til selv at fastlgge farvevalg mm. For at ge lsbarheden er der til selve indholdet valgt sort tekst p hvid baggrund, imens menuen er hvid p rd baggrund som ligeledes str i skarp kontrast til hinanden. Vi har valgt at bruge en almindelig serif font til indholdet, p nr teksten i temperatur grafen hvor at vi bruger billed-generatorens standard font. Al html koden er lavet sledes at det opfylder html 4.01 transitional standarden, og kan succesfuldt valideres med www konsortiets html valideringsmaskine ( HYPERLINK "http://validator.w3.org/"http://validator.w3.org/). For at vre sikker p resultatet er det desuden blevet afprvet i en rkke forskellige browsere: Mozilla Firefox 2.0, Internet Explorer 6 & Opera 9.20 9.4 Software dokumentation Ecpp moduler Se bilag 11 for en grafisk reprsentation af flowet imellem komponenterne. header.ecpp & footer.ecpp Disse to filer har til opgave at generere alt indledende og afsluttende html der skal bruges i alle de vrige moduler. Header opbygger hele menuen og ud fra om den aktuelle bruger er logget p genereres de relevante menupunkter til administrationen. Header srger ogs for at stte to http headers som tvinger browseren og eventuelle proxy-servere til altid at hente en ny udgave af et givent dokument fra web-serveren, sledes at vi ikke risikerer at brugeren ser  gamle data. Det er op til det enkelte modul at srge for at disse to bliver kaldt p det rigtige tidspunkt. index.ecpp Et modul som ikke har andre opgaver ud over at vise en velkomstside samt at prsentere menuen for brugerne. critical.ecpp Viser alle installationer som enten har en kommunikations-fejl eller hvor at en eller flere parametre i den seneste indkomne sms er inden for det kritiske omrde. Dette gres ved frst at finde alle installationer og itererer over denne liste hvor efter at seneste sms udtrkkes for den enkelte installation. Hvis at dataene er kritiske skrives de kritiske vrdier og der linkes til installationdetails.ecpp. customerlist.ecpp Laver en liste over alle kunder registreret i systemet. For hver kunde udskrives kontakt informationer og en liste over de tilhrende installationer. Hver installation linker til installationdetails.ecpp. installationdetails.ecpp Modtager et installations id som argument, og ud fra dette id vises frst alle de essentielle data vedrrende den pgldende installation, de fleste data vises direkte i deres tekstform men indikationen af hvorvidt at der er kommunikationsfejl vises vha. bullet grafik komponenten. Dernst vises en temperatur kurve via et billed-link til temperaturegraph komponenten. Nederst p siden udskrives alle de indsamlede logdata i omvendt kronologisk orden, med grafisk fremhvning af parametrene sfremt nogle af disse er i kritisk tilstand. temperaturegraph.ecpp Dette modul fr ligeledes et installations id med som argument og bruger dette id til at finde de seneste 20 temperaturmlinger fra den pgldende installation og plottes i en kurve. For at f dataene til at st i en hensigtsmssig rkkeflge nr at de skal behandles udtrkkes de frst i en indre subquery hvorefter at min ydre query bare har til opgave at vende rkkeflgen. Dataene plottes i et billede via et 3. parts bibliotek kaldet libgd, som er et general purpose grafik bibliotek. Med dette bibliotek kan man oprette et billede fra bunden af eller indlse et eksisterende billede i hukommelsen. Nr man har et billede i hukommelsen, kan man s bruge funktionskald til biblioteket for at f tegnet forskellige grafik elementer ssom prikker, streger, cirkler, skrive tekster osv. Nr billedet er frdigt beder man biblioteket om at generere et billede til et specifikt output format (gdlib kan generere til bl.a. jpeg, png og gif) og angive hvorvidt dataene skal skrives direkte til en fil eller til et omrde i hukommelsen. Temperaturegraph har 3 forskellige faser / stadier. I frste fase oprettes billedet som et blankt billede. Der skrives overskrift og der tegnes markerings linier for hver 10. temperaturgrad. I anden fase trkkes dataene ud fra databasen og hvert punkt plottes i form af en firkant p 3x3 pixels. Hvis det nuvrende punkt ikke er den frste, tegnes der en linie fra det forrige punkt til det nuvrende. Sidste fase er at generere et billede i png-format ud fra libgd s interne bitmap-buffer. Png billedet laves med en kompressionsgrad p 1, hvilket giver det bedste forhold imellem tiden det tager at lave billedet og billedets strrelse mlt i bytes. Billedet, der genereres til en ram-buffer, udskrives direkte til TNTnet s output stream. login.ecpp Dette modul virker p sin vis p samme mde som mange af de vrige komponenter i administrationsdelen i det at modulet har til opgave bde at generere en formular til indtastning af data men den skal ogs tage imod de indtastede data nr at disse indsendes og behandle dataene. Formularen bestr af felter til hhv. brugernavn og password. Nr brugeren trykker p submit knappen krypteres passwordet med en md5 hash algoritme og dataene sendes tilbage til login komponenten. Nr login-dataene modtages verificeres disse i databasen og hvis at de var valide sttes session data der beskriver brugeren og browseren omdirigeres til index.ecpp. logout.ecpp Dette script Ryder alle sessionsdata omkring brugeren s brugeren fremstr som vrende ikke-godkendt og bliver omdirigeret til index komponenten. adm_customer_list.ecpp Dette er den frste komponent i administrationsdelen. I denne komponent, ligesom alle de vrige administrationskomponenter, undersges frst de tilhrende sessionsdata for at undersge om browseren der foresprger siden har en gyldig login-session. Hvis ikke omdirigeres til index. Dernst trkkes en liste af kunder fra databasen og udskriver disse til brugeren. For hver kunde laves der link til hhv. formularen til ndring af kunde data og en liste over kundens installationer. adm_customer_edit.ecpp Denne side bruges bde til at oprette nye kunder og til at ndre i eksisterende kunders stam-data. Om der skal laves det ene eller andet afgres ud fra det kundeid der overfres sammen med det frste kald til siden. Hvis id et er  1 s er det en ny kunde, ellers er det en eksisterende. Der opbygges en formular til indtastning af felterne navn, adresse, telefonnummer og kontakt person. Inden dataene indsendes valideres de med et JavaScript der undersger om kundenavn er p 3 karakterer eller mere. Grunden til at der ikke krves flere data end dette ene felt er at vi gr ud fra at disse stamdata ndvendigvis ogs m optrde andre steder i Serren AB s systemer, f.eks. i deres bogholderi-system. Hvis at det er en eksisterende kunde vises en knap til at slette kunden via adm_customer_delete, men brugeren sprges frst for at undg fejl-sletninger. Nr dataene bliver indsendt kigges frst p om det er en ny eller eksisterende kunde og fra dette enten oprettes en ny kunde profil i databasen eller den eksisterende kunden tilrettes med de indsendte data. Sfremt det var en nyoprettelse omdirigeres der til kunde-oversigten. adm_customer_delete.ecpp Denne komponent fr et kunde id og sletter den tilhrende kunde-profil i databasen og der omdirigeres til kunde oversigten. adm_installation_list.ecpp Denne komponent fr overfrt et kunde id via request URL en. Ud fra denne kunde id findes alle kundens installationer og disse vises i en liste hvorfra der linkes over til adm_installation_edit.ecpp. adm_installation_edit.ecpp Dette er en kombineret oprettelses-/ndringsformular og databehandler p samme mde som adm_customer_edit komponenten. De relevante data trkkes ud fra databasen og vises i formularen (medmindre at det er en nyoprettelse). Nr at dataene skal sendes tilbage til serveren via formularen verificeres de i et JavaScript ud fra flgende kriterier: Den generelle beskrivelse af installationen skal vre p 3 karakterer eller mere. Telefonnummeret skal vre et tal og hvis det ikke er 8 cifre langt sprges brugeren om det er det korrekte nummer. IMEI nummeret skal vre et tal og skal vre p 15 cifre. Opdateringsintervallet skal vre et tal og skal vre mellem 5 og 250. Ogs ved dette modul er der mulighed for at slette en installation via en knap (udfres i adm_installation_delete) Hvis det var en nyoprettelse omdirigeres til adm_installation_list komponenten. adm_installation_delete.ecpp Sletter den angivne installation fra databasen og omdirigerer til adm_installation_list.ecpp. adm_user_list.ecpp Frst kigges p om sessionsdataene beskriver en bruger der er logget ind med privilegier der omfatter brugeradministration. Dette tjek udfres ligeledes i adm_user_edit.ecpp og adm_user_delete.ecpp. Derefter vises en liste med alle brugere oprettet i systemet, og for hver bruger linkes til adm_user_edit.ecpp. adm_user_edit.ecpp Dette er en multi-funktions komponent p samme mde som adm_customer_edit.ecpp og adm_installation_edit.ecpp. Hvis der skal vises data for en eksisterende bruger hentes disse fra databasen  dog ikke passwordet  og vises i formularen. Inden formular-dataene sendes valideres de ud fra flgende kriterier Brugernavn m ikke vre blankt Hvis det er en ny bruger, m frste password felt ikke vre tomt. Hvis frste password felt indeholder en tekst-streng skal andet felt indeholde den samme streng  dette er for at undg et fejltastet password. Hvis dataene gr igennem valideringen og der er data i frste password felt, s krypteres disse med MD5 og andet password felt ryddes. adm_user_delete.ecpp Sletter den angivne bruger og omdirigerer til adm_user_list komponenten. adm_send_config.ecpp Denne side har to formularer der giver mulighed for at udsende konfigurationssms er til henholdsvis alle tilkoblede installationer eller en enkelt installation som brugeren vlger i en drop-down boks  den sidstnvne drop-down boks genereres i funktionen createInstallationSelector() i starten af filen. I bunden af siden vises hele kommando-historikken fra command tabellen sledes at brugeren kan se hvornr der sidst er udsendt sms er og hvilke der er i k til afsendelse. Begge formularer indsender dataene til adm_send_config.ecpp og i begge tilflde vil dataene blive indsat som en ny rkke i command tabellen. adm_server_config.ecpp I dette modul har brugeren mulighed for at ndre de server parameter der er almindeligt tilgngelige  hvilket p nuvrende tidspunkt kun er serverens telefonnummer. bullet.ecpp Dette er en billed-generator der genererer den farvede kommunikations indikator lampe der bruges i installationdetails komponenten. Komponenten modtager den nskede farve og strrelse og genererer et billede vha. libgd og returneres som et PNG billede. template.ecpp og adm_template.ecpp Disse to filer er skabeloner der kan bruges sfremt det skulle blive ndvendige at oprette enten en almindelig/offentlig komponent eller en administrations komponent. vrige filer dynamic/common.h Denne fil er hjemsted for nogle generelle udvidelser til C++ std::string da denne klasse fra  naturens side ikke er udstyret med funktioner til at borttrimme mellemrum og andre fyld-tegn. bool iswhitespace(unsigned char ch)  angiver hvorvidt en given char er et blanktegn (whitespace) string ltrim(string input)  fjerner alle blanktegn fra starten af strengen. string rtrim(string input)  fjerner alle blanktegn fra slutningen af strengen. string trim(string input)  fjerner blanktegn fra starten og slutningen af strengen. string nl2br(string input)  erstatter alle linieskift i en tekst streng med html tag et for et tvunget linieskift (<br>). Dette gr at tekststrenge der i databasen ligger som en streng fordelt p flere linier bliver vist som flere linier i browser vinduet. static/trim.js Indeholder en JavaScript implementation af trim() som fjerner blanktegn fra starten og slutningen af filen. static/md5.js Indeholder en JavaScript implementation af MD5 algoritmen. Denne implementation er kodet af Paul Johnston og er hjemmehrende p http://pajhome.org.uk/crypt/md5 static/stylesheet.css Layoutet p siden er defineret i dette Cascading StyleSheet (CSS) dokument. dynamic/gd-cpp/* Her ligger en C++ wrapper som indkapsler grafikbiblioteket libgd, som er lavet i rent C, i nogle relevante C++ klasser. Disse filer er lavet af Kevin Shepherd med en del input fra Torben. 9.5 Web klient bruger grnseflade Nr websiden bnes ser man ude til venstre en menu med punkterne:  Index ,  Critical systems ,  Customers & installations og  Login . Index: Denne knap bringer dig til forsiden med det knne billede. Critical systems: P denne side kan du se de systemer hvor den sidste opdatering indeholdte en kritisk tilstand. Hvis der er en installation med en kritisk tilstand kan du klikke p navnet og derved ryge ind p installationens log side. Logsiden indeholder alle de opsamlede data, samt en graf over temperaturen. Customers & installations: Denne side viser alle kunder, og under info om dem kan man se hvilke installationer de har, og komme til deres log sider ved at klikke p deres navn. Login: Bruges som en hver anden login side, denne giver adgang til vore administrations del af web klienten. Nr administrations delen startes har vi stadig de 4 muligheder fra fr, dog med logout i stedet for login. Vi fr 4 nye valgmuligheder:  Customer admin ,  Send configurations ,  Server configuration og  User admin .  User admin er dog kun aktiv hvis man er logget ind med en bruger der er bruger administrator. Customer admin: P denne side er der et link til  Create new customer og ud for hver kunde er der link til  edit customer og  manage installations . Alle 3 links sender en side hvor man kan gre hvad linket siger, create, edit og manage. Send configurations: Her kan man i en dropdown boks vlge den installation man vil sende en config sms til, ved at klikke p knappen under dropdown boksen. Hvis det ikke er hvad man nsker, er der en knap til at sende konfigurationer til alle. Server configuration: Her kan indtastes et nyt telefon nummer og trykkes p knappen  send foresprgsel for at skifte serverens telefon nummer i databasen. User Admin: Som tidligere sagt, er dette kun mulig hvis man er logget ind som bruger administrator. Her har man muligheden for at trykke p  Create new user og lave en ny bruger, eller trykke p et brugernavn og komme til en edit user side. Logout: Gr prcis hvad den siger, logger brugeren ud uden advarsel. 10 Idriftsttelse af systemet Her er nogle noter omkring hvilke skridt som Serren AB skal foretage i forbindelse med systemet, men er ogs for at give Serren AB s systemadministrator et overblik over de installerede systemer. Serverprogrammet er skrevet til i C++/MFC og skal derfor afvikles p en pc/server med en Windows variant installeret (2000 eller XP). Denne skal desuden have en seriel port til rdighed for at kunne kommunikere med GSM-modemet. Da systemet netop bruger et GSM modem til afsendelse og modtagelse af data skal serveren naturligvis stilles sledes at der er god dkning fra GSM netvrket. Denne Windows server skal ligeledes tilkobles det samme local area network (LAN) som den anden serverkomponent, Linux-serveren, befinder sig p. For at kunne tilg databasen skal der vre installeret en PostgreSQL ODBC driver. Server softwaren er udviklet p basis af version 08.02.05. For enkelthedens skyld leverer vi en pre-konfigureret Linux server med al den ndvendige software installeret, men denne kan selvflgelig integreres med anden Linux-installation hvis behovet opstr. Denne server skal tilkobles det samme LAN som Windows serveren. Blandt de mange forskellige Linux-distributioner der er p markedet har vi valgt en Debian v4.0, da denne stter sikkerhed og stabilitet i hjsdet og derfor er fremragende til serverbrug. P serveren er der installeret en PostgreSQL server v8.1.10 der kun tillader SSL-forbindelser fra netvrket. Database-superbrugeren kan kun logge p via lokale unix-sockets. For at drive web-interfacet er der installeret en tntserver samt de ndvendige libraries og databasemoduler (libgd + tntdb-pgsql). 11 Accepttest Specifikation Vi vil herunder have en accepttest specifikation, som henviser til kravspecifikationen og forklare hvordan de forskellige punkter skal testes. Henvisningerne er underpunkterne til kravspecifikationen 3.2 (Se bilag 15): Overordnet Testes ved at se om der er et picboard med addon-kort og gpsmodem til. Testes ved at starte server softwaren p computeren og se om det starter. Testes ved at g ind p websiden og logge ind og se om der kommer admin kontrol sider frem. Testes ved at se om der er en database installeret p Linux serveren. Overvgnings enhed Testes ved at aktivere de 4 switches og se om de tilkoblede leds skifter status. Testes ved at dreje potmetret i bund og derefter dreje det mod top, og aflse temperatur p LCD displayet. Testes ved at se p sammenkoblingen og konstatere det er et RS-232 interface. Udfr test 2.d.i, 2.d.ii, 2.d.iii og 2.d.iv Testes ved at afvente det antal minutter sidste config sms fra serveren satte, og se om der bliver sendt en sms. Testes ved at skifte tilstand p en af de kritiske kontakter (Power failure, Flammedetector, Fremfringsfejl) Testes ved at pille simkort ud af modemet. Og afvente hvad der sker. Testes ved at se i installations loggen i databasen om de nye sms er kommer i rkkeflge. Testes ved at sende en config sms med og se om serveren fr conf ok tilbage, og om der efter det valgte tidsrum kommer en update sms. Testes sammen med e) og ses ved at se p logvinduet p serveren. SMS Server-software Testes ved at se p sammenkoblingen og konstatere det er et RS-232 interface. Testes ved at aktivere en kritisk tilstand p fyret, og se om serveren lser smsen der bliver sendt til modemet og skriver det i logvinduet. Testes ved at se i installationsloggen fra den afsendende installation om smsen er blevet dekodet og tilfjet. Testes sammen med test 2.b Testes ved at stte web interfacet til at sende en config sms til 1 og alle personer, og se om de bliver sendt til udstyret. Testes ved der ikke skrives conf ok p en af config smserne og venter i 5 min for at se den blive sendt igen. Testes ved at vente yderligere 5 minutter, og derefter tjekke critical listen p web interfacet, hvor udstyret skal st med comm. error. Testes ved at ndre serverens telefonnummer via web interfacet og vente p serveren igen kre keepaliveandread() og lse det nye telefonnummer i logvinduet. Testes ved at vente 15min fra 2.e og se om den skriver telefonnummeret igen. Web-interface Udfr test 4.a.i, 4.a.ii og 4.a.iii Testes ved at bne  Critical systems siden og vente 2 min og se om den opdatere. Testes ved at trykke p  Customers & installations og se om der er de samme kunder som i databasen. Testes ved at trykke p en installation under en kunde og aflse dataene p skrmen. Testes ved at trykke p login og logge ind med  admin  admin Testes ved at trykke p  Customer admin og derefter  Create new customer , og oprette en test kunde, og se i databasen om den nye kunde er der. Testes ved ndre f.eks. adressen p test kunden, og se i databasen om det er blevet ndret. Testes ved slet test kunden og se om den bliver fjernet i databasen. Udfr test 4.4.a og 4.4.b Testes ved at trykke p  Send configurations og sende en config sms til en af installationerne Testes ved at trykke p  Send configurations og sende en config sms til alle installationerne. Testes ved at trykke p  Server configuration og ndre server phone nr: og derefter tjekke op p om det blev ndret i databasen. Testes under  User admin p samme mde som 4.a.iii med en test bruger i stedet. 11.1 Udfrelse af accepttest. Vi har udfrt ovenstende accepttest, og accepttest-rapporten er vedlagt som bilag 16. 12 Konklusion Forlbet i dette projekt er stort set get smertefrit. Til at starte med, kom vi vores forrige projekt i hu, og srgede for at begrnse vores opgave til et niveau vi var sikre p at vi nogenlunde ville kunne overskue. Under udformningen af kravspecifikationen havde vi nogle problemer med at f identificeret hvordan dataene til pic microcontrolleren skulle aflses, og mtte ogs ty til hjlp hos flere forskellige personer  da dette indebar en hardware viden som vi desvrre ikke selv har. Apropos hardware s m vi indrmme at omrdet omkring design og fremstilling af elektroniske kredslb p ingen mde er blandt vores strke sider. Dette har taget tid og har voldt mange frustrationer. Implementationen af softwaren er get godt, og har haft en rimelig blanding af bde kendte og nye, uudforskede komponenter. Dette har medvirket at vi alle har hstet nye erfaringer mht. til design og udvikling af software p de forskellige platforme. Tilfjelsen af en ekstra komponent i form af et GSM modem har vret ganske interessant og det har vret spndende at finde ud af hvordan det skulle bruges, og har ogs givet anledning til fremstilling af diverse kabler og debug vrktjer. Gruppearbejdet er get godt, men da dette nu er det 5. projekt hvor vi arbejder sammen i denne gruppestruktur kender vi selvflgelig hinandens styrker og svagheder. Dette medfrer at vi har vret gode til at supplere hinanden  og ved hvornr at vi skal lade hinanden vre i fred. Svendeprve rapport - Flisfyrovervgning Side  PAGE 33 af  NUMPAGE \*Arabic 33 Ecpp eksempel: <html> // starter i html tilstand <body> <{ //Nu er vi i C++ tilstand //her kan laves C++ kode }> //afslut c++ tilstand og g tilbage til html </body> </html> $&(:<>@npr*,.0jln*,jUj8UjUjUjUjUjoU'B*CJmHsHPJ^JaJ_HtH0J=jUU-B*CJmHsH5KHPJ^JaJ _HtH\9,.BDFHxz|
162   @ B D x z | ~ 4
163 6
164 8
165 :
166
167
168
169 $ & ( * 4 6 8 : j l n > @ jUj!UjUj Uj<UjUjUjUj4U'B*CJmHsHPJ^JaJ_HtH0J=U?@ B v x z | NPR
170  >@BjlnpPRT xz|
171 j Uj Uj Uj Ujw Uj Ujo
172 Uj Uj; U'B*CJmHsHPJ^JaJ_HtH0J=U?
173  :<>@NPRT68:<$&(bdfhjUj;UjUjUjUjUjdUjUj\U'B*CJmHsHPJ^JaJ_HtH0J=U?\^`b
174  *,.0`bd246Z\^` PRTtvxjUjUjUj/UjUjMUjUjkU'B*CJmHsHPJ^JaJ_HtH0J=U<xt"""2#j'~'.0p29H<*>@BBOODQUWXXXYYYY
175 Y>YXcccgXgn>noooppqHqZqqqTrpsvs֕֫ UjUjuo
176 VU+B*CJmHsHKHPJnH^JaJ_HtH,B*CJmHsH5PJ^JaJ_HtH]\'B*CJmHsHKHPJ^JaJ_HtH-B*CJmHsH5KHPJ^JaJ _HtH\#B*CJmHsHPJ^JaJ_HtH4vsssttbuzuHv`vv"wxxpyyVzlz.{{{<|N|||`}~}~4~~~`|lڃ^rf̉L`f*.-B*CJmHsH5KHPJ^JaJ _HtH\#B*CJmH sH PJ^JaJ_HtHmH sH #B*CJmHsHPJ^JaJ_HtHGĚ̛Dbޟ,$P<Ҥ>@:ĨȻ祥玥s\\\F\+B*CJmHsHKHPJnH^JaJ_HtH-B*CJmHsH6>*PJnH^JaJ_HtH4Uj3B*CJmHsHKHPJnH^JaJ_HtH-B*CJmH sH 6>*PJnH^JaJ_HtH+B*CJmHsHKHPJnH^JaJ_HtHCJPJnH^J_HtHPJnH^J_HtH'B*CJmHsHPJnH^JaJ_HtH0B*CJmHsH5PJnH^JaJ_HtH]\Ĩ6jګЭ n0ȸҹ\ƽһҤһ萻萻萐w0B*CJmHsH5PJnH^JaJ_HtH]\'B*CJmHsHPJnH^JaJ_HtH-B*CJmHsH6>*PJnH^JaJ_HtH-B*CJmH sH 6>*PJnH^JaJ_HtH+B*CJmHsHKHPJnH^JaJ_HtH-B*CJmHsH6>*PJnH^JaJ_HtH&"TjXv(NT8d<RXxj0v̴̈/B*CJmH sH PJnH^JaJ_HtHOJQJ'B*CJmHsHPJnH^JaJ_HtH/B*CJmHsHPJnH^JaJ_HtHOJQJ5B*CJmHsH5PJnH^JaJ_HtH\OJQJ0B*CJmHsH5PJnH^JaJ_HtH]\5|\|NR|Jz~|7pYYYB,Uj:B*CJmHsHPJ^JaJ_HtH,B*CJmHsH5PJ^JaJ_HtH]\-B*CJmHsH5KHPJ^JaJ _HtH\1B*CJmHsH5KHPJnH^JaJ _HtH\+B*CJmHsHKHPJnH^JaJ_HtH0B*CJmHsH5PJnH^JaJ_HtH]\/B*CJmH sH PJnH^JaJ_HtHOJQJ/B*CJmHsHPJnH^JaJ_HtHOJQJ|777RQTQVV8W:W<W>WBWZW\$]]$^p^N_<jTjpp q"q$qTqVqrrrtssښ½ʊs^^^)B*CJmH sH 6>*PJ^JaJ_HtH,B*CJmHsH>*5PJ^JaJ_HtH\0J=0J=j9U#B*CJmHsHPJ^JaJ_HtH&UB*CJmHsHPJ^JaJ_HtH Uj@MUjs
177 VU jU,B*CJmHsH5PJ^JaJ_HtH]\-B*CJmHsH5KHPJ^JaJ _HtH\$D^DBRxڳ^"\
178 "DpjD(*h$^*~~-B*CJmHsH5KHPJ^JaJ _HtH\,B*CJmHsH5PJ^JaJ_HtH]\,B*CJmHsH>*5PJ^JaJ_HtH\#B*CJmHsHPJ^JaJ_HtH)B*CJmH sH 6>*PJ^JaJ_HtH)B*CJmH sH 6>*PJ^JaJ_HtH/*LZ^68.v*,8:z|rt~HpJ.8*,02:<` 0J>U0J>0J>0J>U-B*CJmHsH5KHPJ^JaJ _HtH\,B*CJmHsH5PJ^JaJ_HtH]\#B*CJmHsHPJ^JaJ_HtH'B*CJmHsHKHPJ^JaJ_HtH>`bfhnL+B*CJmHsHPJ^JaJ_HtHOJQJ)B*CJmHsH6PJ^JaJ_HtH] 0J>U0J>0J>0J>U >.F | 8
179 ( O A#
180 O A#
181 N A#
182 N A#
183 N A#
184 O A#
185 N A#
186 O A#
187 O A#
188 O A#
189 O A#
190 N A#
191 N A#
192 
193 & F ^]`<( 8 z  n>R:O A#
194 O A#
195 N A#
196 O A#
197 O A#
198 O A#
199 N A#
200 O A#
201 O A#
202 O A#
203 O A#
204 O A#
205 O A#
206 O A#
207 N A#
208 N A#
209 O A#
210 :f`.^z
211 & F ^]` 8#
212 N A#
213 O A#
214 O A#
215 O A#
216 O A#
217 O A#
218 N A#
219 N A#
220 O A#
221 P A#
222 P A#
223 O A#
224 O A#
225 " l!n!!t"""2#$$@$:%T%%
226 & Fdh ^]`<$
227 & Fdh ^]`<$@
228 & F hh^h]`@@@@@@@@%%&&&j'~'~),..0p2r
229 & F hh^h]`
230 & F hh^h]`
231 & F ^]`
232 & Fdh ^]`<$
233 & Fdh ^]`<$ p2r244.808B9D99H<*>@@@BBB
234 & F ^]`
235 & F hh^h]`
236 & F hh^h]`
237 & F hh^h]`BBEE GGHHJJOOOOODQUWXXY
238 Y Y@@@@
239 & F ^]` Y>Y[|]6^VcXcZcccggXgkknn>noo0oo
240 & F ^]`@@@
241 & F ^]`oooopppqHq}$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$HqJqZqqqqTrVrXrrUSQ1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l rpsvsssstttbu{$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$ buduzuHvJv`vvv"wUP$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l"wxxxpyryyVzXzP1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$Xzlz.{0{2{R{{{<|>|N|||w$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$ |||`}b}~}~~4~UP$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l4~~~~`b|P1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$ڃ|w$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$ ڃ܃^`rUP$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44lfhڈ̉|$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$
242 ̉ΉLN`UP$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l`P1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$1$$406 #44l44l$G$*j
243 & F ^]`1$$406 #44l44l$G$$G$1$$406 #44l44l$G$$G$ hj“̔Δ,.0
244 & F ^]`Ě̛Dbޟ,$P<Z@ Z@ Z@ Z@$a$ @ Z@@@
245 & F ^]`<Ҥ:Ĩ6jګЭ n0ZZZZ@@@ Z@ Z@ Z@ Z@ Z@ p@ ȸҹ\ƽ
246 & F ^]`ZZZZZZZ}Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$"TVjUPY$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747jXvm1$$40%47474747Y$G$Y$G$
247 & F ^]`1$$40%47474747Y$G$ (NP}Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$T8:UPY$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747
248 d<P1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$RTX}Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$UPY$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747xzj02P1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$2v|~}Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$\^|UPY$G$1$$40%47474747Y$G$Y$G$1$$40%47474747Y$G$Y$G$1$$40%47474747NPR|Jz.0l
249 & F ^]`@@@
250 & F ^]`1$$40%47474747Y$G$lz`nFHrtZZZZ$a$
251 & F ^]`ZZRv2Z~@dpj 
252 
253 ZZZZZZZZZZ
254   NP^Xl"""d$t$&~(>)~**+ZZZZZZ+,//J1d13.3v55|77799<<(DDDG
255 & F ^]`
256 & F ^]`ZZZZGtJvJMPPJQLQNQPQRQRUVV@WBWDWZW\\\
257 & F ^]`$a$$a$\$]]$^p^N_P_bb:j<jTjVkmk
258 & F ^]`
259 & F hh^h]`
260 & F 88^8]`
261 & F 88^8]`
262 & F 88^8]`
263 & F hh^h]` Vkmlnoorrrrtsshw*x@xy4yf||$~V~:ZZZZZ
264 & F ^]`
265 & F ^]`:Ȋ4Jؒ`ĕJښHZZZZZZDԦ
266 Ȩ^DB(ȭRxZZZ
267 & F
268 hh^h]`
269 & F
270 hh^h]`
271 & F
272 hh^h]`
273 & F
274 hh^h]`ZZxPڳʶhTZZZZZ
275 & F hh^h]`
276 & F hh^h]`
277 & F hh^h]`^"\
278 (qomkZZ
279 & F hh^h]`
280 & F hh^h]`
281 & F hh^h]`
282 & F hh^h]`
283 & F hh^h]`Z
284 & F ^]` ^"Dpj
285 & F hh^h]`
286 & F 88^8]`
287 & F hh^h]`
288 & F hh^h]`
289 & F ^]`ZZ jDF(*,qo
290 & F hh^h]`
291 & F hh^h]`
292 & F hh^h]`
293 & F hh^h]`
294 & F hh^h]`
295 & F hh^h]`
296 ,hj46D"$&^|*@
297 & F hh^h]`
298 & F h^]`
299 & F ^]`LZ^6~kT@
300 & F hh^h]`@ 8^]`@
301 & F hh^h]`
302 & F h^]` h^h]`@
303 & F hh^h]`@
304 & F hh^h]`@
305 & F hh^h]`68.v*,ybO@ 8^]`@
306 & F 8^]`@
307 & F 8^]`@
308 & F 8^]`@
309 & F 8^]`@
310 & F hh^h]`@
311 & F hh^h]`@ hh^h]` ,8:z}fO@
312 & F 8^]`@
313 & F hh^h]`@ h^]`@
314 & F hh^h]`
315 & F h^]`@
316 & F hh^h]`@ hh^h]`@
317 & F hh^h]`z|r}fO@
318 & F hh^h]`@
319 & F hh^h]`@
320 & F 8^]`@
321 & F 8^]`@
322 & F hh^h]`@ h^]`@
323 & F hh^h]`@ 88^8]` rt~Hps\@
324 & F 88^8]`@
325 & F 8^]`@
326 & F 88^8]`@
327 & F 8^]`@
328 & F 8^]`@
329 & F hh^h]`
330 & F h^]`J.02u^\Z@
331 & F 88^8]`@
332 & F 88^8]`@
333 & F ^]`@
334 & F ^]`@
335 & F 88^8]`@
336 & F 88^8]`@
337 & F 88^8]` 2n8:  z|jXW
338 & F ^]`
339 & Fdh ^]`<$jlnL 8. A!"#$2P1h0p3P(20;. A!"#$2P1h0p3P(2(2 0;. A!"#$2P1h0p3P(2(2 0Visio (TM) Drawing
340 AcHiahR8 !fffMMM333IyFwͩ|oݡHxUJ:DT5I[1hXT@.
341 /UbW##_b0zGz? L\&B1r&b%U& !oM $d ) P?;H$,Q,
342 & #&J , 5& ?D#//?M?\.? CA 
343 ~,,,'q/%P6$Y6 (}k?l)?"U   U%A3# o >S@#B:_a_ReUUeUeUeUeUeUePONODN`_ReUUeUeUeUeUUeUeUU/b SR%;5OM%>Qiq;RRRRgg Rqh>Qj /A^F' %p3:|bFpT#| |
344 | vi?=Os<34x,,,/RQmeY q]U@QvovL__q____OO_OOTYA`,X@L&/d2?ɖQ3YҨsUΡ̦xΟ@$"Jʼ& ͥ*@d2A??ϟJ[D! f:45ŧ5ŷ5@ 0 0D$#  
345  Q#b ;
346 Chߠ
347 Y ,00JDNrq(NN㊮NN(NN&&uc7D)KXXFNvvK&KD#KD#-D#NHGDB$KzzDKq%iz4
348 }1T\,Eu9fdhT,W'0΢Uܮ5E0 fI$[OmOC%ߑE##HZߪ  E,3Y&4JY&5&6<s9FaBaj+h8 8?&!3"DE=T;ܯ?w?@??8&t,'5UR^LY  Y7akKt//BJhuizpsĝa.1DTcAcpvOpM KKuhdX(G:iX IT[EEh.D#E,ah-50zG#zpvb
349 aHGmc/QP K{\Hp_ hd? pA?%?7?I?[;<t5j!
350 OO*FQ///F/K]SEn%cO@OOlE$g\Ey[EO_!_3_E_W_i_{_____VB506,HM.`e^MIa,>PbQaƒ2q? a%oXIoQfdoooSEX_O-OF6EDpE66Oҟm2Hg;pbӏ_
351 ,X7R[,<WbӤ69sc Rb"a2T^<C="ACoor<G5C+=Oaﲶ2TIR`zI6;]ї@<ұwr1r / Ma&3@MZ)gQ#zƎҨVB;Z`Яܯ@u[/lsx0aq&Iy$6ḢUxzb?btb}m8~{FwƿK $ub{+ߴPXEU 5GPH]!\$j-OOOO>asuYq3~Q?WTf<6S$F_x<?5z$P !1w7dR D6c 6^5O0'^8ExEE@($'n/jR-VfuOOdo{o_0 }G9kO5oZk__((]Tq?Q$6H/~ ? qBHE?d+|=P<#qjb(Ogoyo_:_L_^_'/ӸooS;ao-W,'H=xWWCN/r?=*C8Qҵ2%N7MH:R<Wb`lmXO#o|O2u!` EܕsD"Iw_#_k_}X:Loo$6HZԁ-CC U)2b@bGqb\n¿Կڏ.@"ҡnπϒϤ϶"4FXj|v !;rWbGV -?QcuW -?Qcuv2 *<N!sGC
352 .@c Yk} //1/C/U/g/y/y"#Р///G.bLb/ ??-???Q?c?u????????OO*O<ONO`OrOOOOOOOO$ͩ_)_;_M1rn_________o"o4oGoYoko}oooooooo 1CUg)%&{p?b=~Eb -?QcuKԏ
353 .@RdvଟП⟏%'((bdk\wsb\nȯگ"5GYk}ſ׿ 1CUJqZ)砂}Ϗϡj0Aq"4@FXj|ߎ߲*<N`r)*|+MkbjbQcu*<N`r&8yy,-_qqb<{ub/"/4/F/X/j/|//////// ??1?C?U?g?y????yy.{??>@N;OMO_OqOOOOOOOos __/_A_S_e_w_______q=8\1 oqN=b;bh1oU/0Mo_oqo:-b@bG3bDbפooooojm yt 2DV rb ;0} 1CxUgd3<Ib娏8i2Џȡ1 L-?Qcuϟ
354 .@RdvЯ⯀dXw7:g4="\nT9/2 ſ׿ 1CUgϴsϬ*<N`r߄ߖߨ U56 H@RdvA$6HZl~<dFw+&C{Orq_##Yh(v'
355 Rdv_H ////A/S/e/w///d
356 o:1/(7CHx/?!?}n|E?W?i?{???/A? ???`T/L?Od'Am[YE
357 +A GkOyJUO@AQOOEY3qO贁Nk*_(Bv__ooE1o'2q7Mo_oqor6Uj(DbH{7_V03WX@SO>a@HkDvH74jooږ YDo~OOOODVhzxC(>aRM7?S?\.?pPA,6{٣*٢bbbl~ 86HZl~ÿƏ؏ B Vdvπqџ YD$6HZl~ P Э!#5GYj2225Gҿ,>Pq ϘϳϏX!"0BXj>aSzUFDfP h>$/T 6D
358 UUF~@x<?F
359 BP(?43P? J+1:{
360 bj/b::I!H? ?^  0$1!`Document,daW aY rS a[ ,pS oo lS ,sO cPn!ri*U"ek"oO to !W,b] s cY ]fw ow"ae X!!fK rQ ^!iK n(#L!e} sN",jK !ee !!sK"i(!bO !1!-,S xY 6E4g",IG0OY 90Hi2|e^ {5kU o??)!)!2)%$`S F.| <`!.kbs{kWbsFzFzkF ABB
361 HOZB K?$6߈kdz:<
362 Drag thuesapWonodwipeK.a0r)Utd upU:N:b~߿\.??a߿,h??4DH D
363   =hj8>T ]]9 AUF~? ?F\.?QR6 
364 ijYA >HTIA zz
365 Illu}`l?LJTTlvu
366 Vb3%<& <!J
367 |>bX#S?P6 "rl*5"7b%HX"rbk"%TX"*31=&S"rU5 W@S"և3145 `?Copy0igTtk(c)k20@3kM0c0oKs0f21r0#Aa0i0n.k Al>@ 8sBBe@e0vT@d6@3 /`V0s_SFB6@cTm_!#5B0`S"7- iC0r5K9M3 7?:6" b4$J<&P%&?Lh7]L@ls4>Uh 3 @)W120D,@S"JSqSF?< %3"M{8Q o.o3=`oe5ekaoqcEA3o(oc@lHzs%„'&/@l/B95#<& QOuhSqouq?@brA
368 L`@dV#%tdTAQeE9 G]pv@OS?l lA]
369 ]hhC"Q6 @b#e7b 3lqX(b\U‰Y`!S"g?**2VQ<! -S"MR6HScu~5⢯Ms'2cy51+` 0@@heҿ+RT Mll~2!!IJ2Jl15P>  PB`1s03 B`QS"1~5AAWPP`iGDu*JȲ5ABaQ2` RTBocTBQ$H6!e
370 |ȿH~5A"
371 MJk?GZG#iC %:&BpXB/A/@bb 5BeYFuc-gZc5ߜֈ{8O&@PGR_ Q);M_>m w =_H'+Zu׾ _@tBeQBZ&Fi?w/#<][n?
372 $\]ZaĬ@OD?q`SB}F<@lPD[ op?+$J% UFDfP h>$/T 6D
373 UUF~@x<?F
374 BP(?43P? J+1:{
375 bj/b::I!H? ?  0$`pProcesS ,funO tuiM nW taS UkW Bm"iO ,UlM wO hm ra X!#,dm l!,pK,jM i] e*K ,m"sM"i"d%Ab[ z!!T#-Sc uxW 6$gm"uI0OW 90#2$|e^ d55kUo9?K?B)!)!2)%$` /| <`!kbs{kbs>F4Fzk%>F >A2
376 OBu D(2OVhz~ Drag thuesapWonodwipe+.cs*Wfuci: oObl-=l)cka!dh-1
377 H D  # =ih#4>T#3 A5AUF~? ?F\.?P6 Tuv` ??uJ
378 bkrr r.AšJYMJU5 !LK@#I;!@$5 `?CopyrigTt (c])r 20~ 3r uMj ch osb Ifp"a!rd !ap ib n r AUl h(s"e eh v d/`Vj s_SFBcTm!#5N~"06!5' #%0 5K)M6G# G'? *lW btrr&/Lh=L@l>61Uhh7PY!"  *#"JT3FFFr\F
379 BM)(aOAO#"A5N_IQEEFR_Ov[R52O;EBrA
380 RS#")(le
381 @j 7heGoj@8=ook8too q(b5@MCW?0v0v H"SFAr@K\/SqMRB_<NhCFi{z,%)t@@r uGj5q5{#5"C#"mZon+EBT MKK,"!"2JK\3;%Vq>#  @!2`a!sp s.2`A#"2,%q1BXVqajGDu*5AଚbA"` R"o͒c"4ڑAEDɏ,%A"MJa?)E[4C/G## %(p&"p"!0~Rb  %BevmHY bg|4G5nX)(S&@Vq2b~߿\.??a߿,h??4D_ Q);M_>m w =_Hu+fs k}bk_J?3U}FClQ#RL!M?
382 .X]{~a<@"D,Dlfr`~&@BT[ĥpUFDf h-TYYU?~@x<?F
383 ?BP(?h P?k " <ou]ofu2/u w` C&}nect&r`D
384 e-?{
385 H
386  ^   -}|5 p`I`V?}`xa833ސ]3σ3u 33?, ?Gxpx^& This coUnetrWaumtUcl#yrebtwe h *hp3is.HDD @# =hZ#<T$#3 2 U@bX?\.uP6
387 u
388 `u bA@Wu  ):/*P mu` W?ht~SuZaJU }@-?Dt7'2"sA-tBk'2"u( 2rq?@[I ?$%ۿ?
389 @h[r&Z  "#8*AL2- br>#@L'} V6lX-1u. Bj2u2Z2j2#u9r#ULH/MB#AD5 60`Vis_SE.cTm!#20AD%`;Copy<0igTt ?D1f@M)@c<0o+@ofdBUArX@Aad@iV@n3@ f@Al@ \HsBe*+@e<0v@d3@J@=#x#
390 A G{?9#n"E!0144 M70#AHB
391 53_lj#PSV6U8l>(UhnE qJ$&9"(Fn_g5Fe#pheo'T !! Jcxo)vR2'"U75a%O3W_74b5-6R `F2 5au\@|Q:0b)`R@As)@E T@xd@Di ei=G]U6Tg'2"qV!DHAn 6SWaHw+* O`EW
392 )FtGl'#[(7F
393 \)e?fYDHlPU !"#t4b (6@Tn@ Z.}C-L@7"AU !"#$t4b (6@Tn@ Z+/}C-D@B7"A%&t4b (6@Tn@ \_/
394 A-%$37X@$X.IR@XD/IR@X/CRH<(H<(H<(XE\XL0 REXY0 RE|Xf0 R(~i"S4gf8B!Bl?4'/"Gl=./?<X/dP5Dtos0t4( U`, LSFDTyB uh$T UFb (6@FTn@Fx<?8F
395 BP(?J_P ?a/<e @?\s nu ` """u ) ( @L&d2?r-(\.,(s.sU!&/ o!! &f O1O1 ` Fl wcartm0p2
396 v?285\H?Z?l9C n0e0tB r?2?4eT>A>A uk 4
397
398 A
399 A#HA\D K DKDuKD}AK}AHAKAHAKAH1K5DAKAH
400 AKAHAK
401 AHKDAKAHAKED>AGCP>Auu -au%a}Ac.aA/aA0
402 q113qA1$qƑA21q
403 A4>q5KqAc6XqA7eq>A/Aie}uc\Ap1}cKEZeAc}AU 5yIExH?@^@@~?@֘"?ߒ?QbIaC Kqf"*<"b}Acbz*b7Bt0 
404 qQ"OXaц\M
405  V~2pXq|>כbXܛ ?smhퟨe+T "\!! 3!<n~Dߟqq"\AU%Sid01t`1pѠ
406 g4Tfx## (0X\CiX䯣qDu3a q mI
407 qTFŋ'9 WˣqσIdϙ!B &8@OS?!&!&l8DA>qU` AEmOqWA1
408 WQo勎pib!RU
409 璅×!$b!0sU_?mr7A d $6HZlDjF4@ɏۍAcb(:L^pʟݯ$6H
410 ơ2˯3//W/i/%7N`R=/?οL^ OOϦSOeOϛO4_N`r߄ߖ&8J?no"F?oj|!t!1;?:YUUCs0?R:k}HFSFB< l1Ɇl1 5 5%7If35t?v2dj8e2dkQ/// //-"/&/z/6(E&cop
411 g0l r$l1{/
412 <{SFP50?B?R5H1:Q??_??OO%O7O mOO_gɏ40SOO϶"SD)"UET?_o%o7o)Tol߇ooogoykeZqÿN`BTfxBÃ56);M͟˟Q,7I[mI[mǯٯEWiM]/ϿϞp;MW?i?ϟ?MUO?M\r߄ߨߺߜ?:_8J\n%_7_NNMSNчN!&m75Ae5%C"ObA!`!5 @@L&d2?@@ пdeQ!fAPmQ!u`u%S`sQy82 @8p
413 /@)Q"pTArw%@z3DqlrrrpSsv~15A]&A2D1LQQR.C]-T:%WApMSsxr tNL p5Azsqr Qhpfd2rqǿ?@IQϕ?GOTpJTMQP/JMUw/&ɔ5Ay8/@Ned5Ns.D")5<H2 ?FeA!#B!IuM_B_4BI_4d.A_LTAoP>oPobotoooouoooo"4wPvxb~EqϰϿsrqB0BTfxFGOяMQ!*<N`r̟ޟ&I>P%Anȯگ>@ !-#dՒ!{@ !QAA,QIdEE׹ZGvV<h3@_MM?UHMUS5BB`H!! % &!"`р5l1ZU- h|3 SNEZ6|>5PbX5b#̖m#F|5+*$5B,!,!MR !$BnD///B"O45Bn3?5SiE@e1*cpΰg ??0?#4MRKQ0 5UWEni̸?YOhdKLDjzUMQ8Z@_ %5A E\OOAd@-.'_9XR_ZӺAOT_Al_~_S ozQzk4HAI(988@tV@OS?,$#o8yn4k1 n I HHN!$"QMYxOlu%ZwBSze_P#>{',$q^eI~t?F5-Ugv:*s.`@RdvwE yѸՖyѻ//'/9/K/]/o///֯?////ίG?n{OOoOOO_O _A__e_NUUϽ_r_T՟e*8c?HZl??TOO ݃Rk?}228<AhfT>oPobotooooooo(:L^p$6HZO1<1!ԏ:)69-?` (6?@8|`R`rksA'`0f0f*ϜD ţ%&е-\?Q"\T#o2q ?/L&k?KAu;BY$F0a(,5)O!XT#0e.M#'$&դ)W ;  9xk1kw4 ??=?g5w4`?OO?Bj¨|ؕر&
414 _!3&R 76Z!IuJ<6L>!k"OO0%8cdk_#5`soo߂C+`+]cop&l*r*]&]l&nPa
415 [foxoo߬=pջ~5*ӿo>- ctZb%/<ďVɌ Ϭ.T"# -9?Q:
416 }:C5I[m 2 9u
417 w?aEB!r;%%bac@xH@@L&d2?@wnk˿W q0@ qu` `MuB `O!mꜽ٭@("G@) rp9%VB @z3PVhp%ũƕϱϺνquC%%S/e 1i%գ!4)#l lrq!ՍWVD갖!8/' tN9zs %Ӣ ќoǶѴ2r"?@IV5?+3快pt 23Ev&?a/Dsѓru<oㇵ3#$}qW07??Q?U7#%r-辵B!~B!4"4FXj|DjF4@Ͽ4FbaB!&'&8J\_q⃘&5"Ә&ߥܑba 2DVh?
418 "4u_qRdvOt ~A*`_N`sd1|QI]w rN9?@$4<@B?@H?@`^ݿde(u@`up7(:q 2` (6?@fLHFń?NؑŹboonqevoA/Q!v "r\xXvxw@/R/d/v/\w>l////د(?:9#f@-dW?i?{?1szVu??????0 O2MMROdOJA~OOOOOOOrfq9_ TqV_z_______wpZW hPcg٧2oDoVohozlonqeDCU<%I|q\yƁtג}>syy#5GY$7k}=6ŏ׏ ]CUgy&2M>՟矆> 1CUgyYP̬ S-}p`'),)|v>5*m??@~?@u%.?Q N15\"r$1C0Gե-jycߞ >59|>%bX7:F#[mvH+$"!!!$3Bn {///"34S) #5S&ared lOibc0b1ymAgP/??#4M 0p'0pCSi?GOqoM:D 8
419 B 5AyeE'OOAd$-0_'XyREK?Z_%^BQ@xu>:DIힴ88V@OS?$#\o8>)3> I JN$QMx&u'wQ z?e_4#._'$՛q?e~Xt?F5̡ȯm p:D=M|rZzaA ?@L?@Vjտń½
420 <b#(=Tn@:Ż@ȟS ς Z!߷EWiݙV~W_߰߀S '18J`/;O?z0>PWfxK@ou( zHUZU !"#U$%&,U-./0U1234567t4b (6@TnC@ TaJKC-TmBU7
421 A@XJORH<(EX7K R\_i1_PJ@?`iK.PDDaiDK.PU1( UO"D&aUAUNj )h"T}
422 +U- \ |ɉ&Q-
423 -H*=(XiwPE!Q//,/fGArial UncodeMSj (  R$fSymbol$67fWingds*7
424 fEArial"z@D/ R$fGSwimunj (  R$fGPMingLUj (  R$fGMS PGothiqcj (  R$fGDotum"j (  R$fGSylaeqnj (  R$fGEstrangelWo dsaj (  R$fGVrindqaj (  R$fGShrutqij (  R$fGM_anglj (  R$fGTunga"j (  R$fGSendyqaj (  R$fGRavi"j (  R$fGDhenu"j (  R$fGLath#j (  R$fGawutmij (  R$fGCordia Neqwj (  R$fGMS Farsiwj ( _ R$fGulim"j (  R$fETimes NwRoanz@D$CLLBCL.BCM%B$C%M5BCZM9B4CM=BCMCBDCN9B̨CLN;BTCNMBܧCN:BCO:BCHO9B<CO9BԂCO;B4CO8BăC-P9BCfP8BCP:BdCPCBDCQ>B$CYQ8BCQGBGuideTheDocPage-1"Gestur Fom aDocumentViso 90Flow NrmaVi}so 0Co}nectrViso 01Viso 02Viso 03Viso 10Vi}so 1Viso 12Viso 13Viso 20Viso 21Vi}so 2Viso 23Viso 50Viso 51Viso 52Viso 53Viso 70Viso 80Flow MarkeFlow GrayBasicCostDurationResour cRow_1visVerionProces(Dynamic onetrTextPoWsiinDocument.2Proces.4,Dynamic onetr.6Document.7Document.8.Dynamic onetr10.Dynamic onUetr1Proces.9.Dynamic onetr12.Dynamic onetr13Document.14.Dynamic onetr15883|_SE3d_SG3L_SG3DKS%G3$k TG3T@%TE3dk)TG3kBTG3kaTG3kzTG3kTG3kTG3$kTG3DkTG3dkTG3kUG3k*UG3kCUG3k\UG3kuUG3$kUG3DkUG3dkUG3kUG3kUG3k VG3k$VG3 k=V!G3$ k^VG3ļ_zVE3ܼ_VE3\@VE3d kVG3 kVG3_VE3 kVG3 _VG3DLW)G3<K>W G3@^WE3,@bWE3<@fWE34@jWE3,@nWE3ĴlrWG3dlWG3TbfW.G3DlWG3$lWG3jlX/G3klDX/G3lsXG3klX/G3klX/G3mX!G3lll Y/G
425  !"#$%&'()*+,-./01234567UfU
426 U UUUt4b (6@TnC@ O0^RC-tpB*7
427 A%t4 dpB_^
428 A-@7AJ@X^NR@dX^6RH<(H<(JE XJ` REXW` RUPT/_a C{N
429 } w"4FX,h(j5@@(;6#\y
430 K_,eBdYiUX P Q|/A<k/w
431 FC_D\9oy^i0uR$_iP1S+!Lp) 'vKhaitciQwP2ͬ <YT?g _*'"Ddidu`H%ei`.g a6Oh+'0tS `ht Grundfos A/SGrundfos A/SMicrosoft Visio@Cr:GtRAg2 EMFlRlx@VISIODrawingLQAgBh ??d(@Q(Bh@Q׏=>>EFFMNN#%%[dbfqnfqnV][^^^mnn7;:݀UVVfgg=>>݆033=>>￿oooHOM=>>ݚfqn7;:*,,7;:OWUs|ϳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳNOO .//î۳ɌbzKתת߻߻߻߻߻߻߻߻{b{b=>>MUSfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnlqkqrifqnfqnfqnfqnfqnfqnfqnfqnfqnfqnZca=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳ=>>ݳEFF),+7;:7;:7;:7;:7;:7;:7;:7;:7;:D@<YJ=UH<HC<7;:7;:7;:7;:7;:7;:7;:7;:7;:033&'&翿rwFxwFaٯ͔nɎeΗrϙtўzdzLj]dzɌcݷ͕oٯῨLj]ת͕oӢўzîɌc̹Ɍcݷˑi۳ῨɌcпզϙuզϙuῨɌcпɌc۳UVV=>>=>>=>>Ɍcݷwxx=>>=>>=>>iTxOӸEFF*,,fqnfqnOWUӢўz~~~V][mxunqkU7rL),+ݳ\ebd>r&''hroݎ{a<TPMMNN~~~fqnݺbkiooofgg\ebݍ033=>>566033MUS^^^fqns|fqn=BA7;:=BAfqnyݚfqnV][7;:7;:V][fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^$  ~~~ńWӢҟ|wFܿwFɎeLj]ϙuLj]ϙu~xxMyU}q397fqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnqrifqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnqrifqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqn@GE^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:@>:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:;=:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:7;:"%$fgga׿{ڱwFzKҟ|ńXˑjį׿Lj]ϙuMNN#%%7;:7;:7;:Lj]7;:7;:7;:^^^ϙu=>>033ݳOWU1)#zO\eb݀qM˹Zcaݺuj[~~~~~~ݎ{//-EFFEFF^^^fqnhro566=>>566hroݓ7;:=>>=>>=BA^^^fqnݠݺȚ݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^fqn݀^^^397fqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqnfqn@GE^^^՜.+,D՜.+,@ `ht  Grundfos A/S Page-1n DocumentfosProcessDynamic connector PagesMasters(`ht_PID_LINKBASE_VPID_ALTERNATENAMESA
432 FMicrosoft Visio DrawingVisio 11.0 ShapesVisio.Drawing.119q՜.+,D՜.+,P `ht Visio (TM) Drawing
433 ~vtjugR7 !fffMMM333Fwͩ}|kݝHxUJ:DT5I[1hXT@.
434 /UbW##_b0zGz? L\&B1r&b%U& !oM $d ) P?;H$,Q,
435 & #&J , 5& ?D#//?M?\.? CA 
436 ~,,,'q/%P6$Y6 (}k?l)?"U   U%A3# o >S@#B:_a_ReUUeUeUeUeUeUePONODN`_ReUUeUeUeUeUUeUeUU/b SR%;5OM%>Qiq;RRRRgg Rqh>Qj /A^F' %p3:|bFpT#| |
437 | vi?=Os<34x,,,/RQmeY q]U@QvovL__q____OO_OOTYA`,X@L&/d2?ɖQ3YҨsUΡ̦xΟ@$"Jʼ& ͥ*@d2A??ϟJ[D! f:45ŧ5ŷ5@ 0 0D$#  
438  Q#b ;
439 Chߠ
440 Y ,00JDNrq(NN㊮NN(NN&&uc7D)KXXFNvvK&KD#KD#-D#NHGDB$KzzDKq%iz4
441 }1T\,Eu9fdhT,W'0΢Uܮ5E0 fI$[OmOC%ߑE##HZߪ  E,3Y&4JY&5&6<s9FaBaj+h8 8?&!3"DE=T;ܯ?w?@??8&t,'5UR^LY  Y7akKt//BJhuizpsĝa.1DTcAcpvOpM KKuhdX(G:iX IT[EEh.D#E,ah-50zG#zpvb
442 aHGmc/QP K{\Hp_ hd? pA?%?7?I?[;<t5j!
443 OO*FQ///F/K]SEn%cO@OOlE$g\Ey[EO_!_3_E_W_i_{_____VB506,HM.`e^MIa,>PbQaƒ2q? a%oXIoQfdoooSEX_O-OF6EDpE66Oҟm2Hg;pbӏ_
444 ,X7R[,<WbӤ69sc Rb"a2T^<C="ACoor<G5C+=Oaﲶ2T<R`'67;]ї@<ұwr1r / Ma&3@MZ)gQ#zҨVB;Z`Яܯu[/lsxP0aq&&8JzUxzm 8~{FwƿKxbub{ߴXE%U 5 GPH] !O$]-OOOO>Tful3~O贁Nk?JTf/6S?]?0'^5x@E@E@@t$
445 'n/jRFfuOOo{o_0&G9O_KZk=_O_((]|Tq?Q);/q/ q58?Wf9|s???:etb< djb wOo"oOOO_/aoso;
446 o-W,'HhWWCo/?I=)<EҵNW?/M:RI<W`lm EO_%Oku!`E>1DˠI 2DVOO_&Xoo+oooo9}-P|)CeɍU=O2b@b~qbYk}_ſ׿ˏ);M_qσϕϧ%7v [mur+b{r 0BTfx 0BTfxv9r7 }5GYk}Uc &8J\n/"/y!?"I/[/m/{.bLbݠ////// ??0?B?T?f?y???????? OO-O?OQOcOuOO<OF#ͩOO(Ou1sr_)_;_M___q________oo&o8oJo\onooooooooo4)$?%7Ix[$p?by~Ebێ 0BTk}ŏ׏ 1CUgy8%&'џbd\ sb);M_q ˯ޯ&8J\nȿڿ=q(+&(8J0|ϕϧϹ%7[Ugyߝ߯ -?Qcu4))|*~ kb=gjb| 0BTfx -?Qcu"y+?,<,[qby{Cub_q//%/8/J/\/n/////////?"?4?F?X?"y-$ϐ??=tb>x??OO,O>OPObOtOO_bksOOOOO_ _2_D_V_h_z__a=8\0ٶ_a=b;bbh_U./_oor-b@b3bDbMo _oqooojmizoooobݏ١&8J\nT2-?ȀIbQY1AByq1<֏ 0BTfxjPşן 1CUgyT W3!)9ت]2\nȿڿ]ߧCUgyϋϯ -?QߵuU45 ߤ߶ߊJ@J 1CUgy'9K]oTGFw?3{bq#]#.@)h('}o@o HZl~/ /2/D/T$1a/r8/)6Hx///&n|/??$?6?H?~???2$DPT<?qd@1m[Y/E1 <GO"JErOAQOO5I3OONkO:2Iv____+E_'_2qp_oovlrvjP4R[H{`7,1_:V03@+Svz
447 [HkPWDBT[H`7@m4Voho Do'O9OKO]Ooo#5Gx3XjQeCt?C?\.?`+PAPՏk   |'}l8'9ZloSϥɏ믵 5Gd -UFDfP h>$/T 6D
448 UUF~@x<?F
449 BP(?43P? J+1:{
450 bj/b::I!H? ?  0$`pProcesS ,funO tuiM nW taS UkW Bm"iO ,UlM wO hm ra X!#,dm l!,pK,jM i] e*K ,m"sM"i"d%Ab[ z!!T#-Sc uxW 6$gm"uI0OW 90#2$|e^ d55kUo9?K?B)!)!2)%$` /| <`!kbs{kbs>F4Fzk%>F >A2
451 OBu D(2OVhz~ Drag thuesapWonodwipe+.cs*Wfuci: oObl-=l)cka!dh-1
452 H D  # =ih#4>T#3 A5AUF~? ?F\.?P6 Tuv` ??uJ
453 bkrr r.AšJYMJU5 !LK@#I;!@$5 `?CopyrigTt (c])r 20~ 3r uMj ch osb Ifp"a!rd !ap ib n r AUl h(s"e eh v d/`Vj s_SFBcTm!#5N~"06!5' #%0 5K)M6G# G'? *lW btrr&/Lh=L@l>61Uhh7PY!"  *#"JT3FFFr\F
454 BM)(aOAO#"A5N_IQEEFR_Ov[R52O;EBrA
455 RS#")(le
456 @j 7heGoj@8=ook8too q(b5@MCW?0v0v H"SFAr@K\/SqMRB_<NhCFi{z,%)t@@r uGj5q5{#5"C#"mZon+EBTM,"KK2JK\3;%Vq>#  @!2`a!sp s.2`A#"2,%q1BXVqajGDu*5AଚbA"` R"o͒c"4ڑAEDɏ,%A!MJa?)E[4C/G## %(p&"p"!0~Rb  %BevmHY bg|4G5n","X)(S&@Vq2b~߿\.??a߿,h??4D_ Q);M_>m w =_H'+fs k}bk_J?3UFkew#S`M?
457
458 V]{a @(D4Wk,e>VB@B|TRץp8$*5 7UFDfP h,TYYCUF\.?x<F
459 BP(?E P)?2o @L^^{J_@L&d2?sUB"! &B/eBH0$?w/&? )~  0 ;Q`#CBm0,link\netwBr2p 0r0pP11a0,d 0v0c 0O1^ ;
460 Yp!3u &?  ;;" ;;;gr330;G;#7Drag onut heqp
461 ad likb tw e cmGuiCaisd vOe]sBKcnTe)*`i]^o
462 9il^)n5k].b\.BP(?? M7Pfo??H D  ?h ^T,]]9 
463 AU@\.? ?@BϡP(?P6 u`u (bu]`u --+&1B=^@u` ?zu"2dTw_b .A! '8
464 P-#&,J`Uy"z!?&s?Ab?bAw#n#0O贁Nk?Fw@LU7 ;/
465 b"n#&$72?5B"7='?Z$Q=KW!Lw7W""2RW"M" 6v%n#AD5 ]`! 5@4@18`?CopyrigTt (c)@20@3@M@c@os@fBAr@Qa@i@n.@ Al)P Hs-Re*Pe@v?Pd!P ItP@qZ}PrU?|TrV"r##SOC@`сANyRu(yQ`i'`Qps-8R/d@9m @&W"$"SKbRGW"O2@AMBYq%O G&JM4{w`:AbbfM"$"\CICUMql>!Uhde A(<B#0P"J^X=r;2Kb$B"
466 B"
467 zB3-(JX4~0Kau3<BsA5dX4
468 ?@ '`0k{ 3ӎ3
469 3 MGO5/X4 qsU92PCE9X4von?&Rsr)#CE>X4h4F?@ p8̭ 3#RC[U\ArT93V]mt@hem]5rTC%MA&"$a$a2(ɤO2)֤B*\"+[RllbNN @//01@W!BAV2M]!AAAD" "` ]MPnuPa@ t>QrA]@S7a[m^$b`PBd. Nm`6[Ͽ PPr ϸO5AkGYA D?RAi@UϷEZ~APBQ߹E_;M SCRiP,Qy߀߽[U$1 L@cX߷Pe$6HBi)Pd@n@g﷼3MhR@!oVﹺYP
470 pzmB?Pn@7faLSTa@e PlPo#` AnPeiGPi@y<j& T@ [.`
471 "c򛱀ѻISeSƒbx`u AmV L "qd? r _5cTA e%r%r5rO5rErEr[UrkxerXkq<Po
472 @mtCRőeqqcu%vA\q(qqrxIoyEM3F%PA }i?R`NEWORK@WSH'PP^0 ;0Rd0s1RI^0Sla$@@X`31qBH >':)DNYqq/ue\A\Ar"(D' 4A3\Daabxα 6W6K\WaqqG` rPtrRyASTd&@xOsyA K@bVmK&\=uK$&\%5ƛ_t'SׄrsF3s͵NSYFuEeKpVp//(?/(xA\p~6?@Ig`{]otGOD@`h5rBAcb١/`Rop4a ex$JKFq*Bet ڀBڀc(CFvlAe;wbwrBtA_ oo-o(O@Yk@! ;C`<ob鉘gqHu+ 5)d5ukDWnmF|ky#DKT?
473 IS:a@oUBo=?\k PUFDf h-TYYU?~@x<?F
474 ?BP(?h P?k " <ou]ofu2/u w` C&}nect&r`D
475 e-?{
476 H
477  ^   -}|5 p`I`V?}`xa833ސ]3σ3u 33?, ?Gxpx^& This coUnetrWaumtUcl#yrebtwe h *hp3is.HDD @# =hZ#<T$#3 2 U@bX?\.uP6
478 u
479 `u bA@Wu  ):/*P mu` W?ht~SuZaJU }@-?Dt7'2"sA-tBk'2"u( 2rq?@[I ?$%ۿ?
480 @h[r6Z  "#8*AL2- br>#@L'} V6lX-1u. Bj2u2Z2j2#u9r#ULH/MB#AD5 60`Vis_SE.cTm!#20AD%`;Copy<0igTt ?D1f@M)@c<0o+@ofdBUArX@Aad@iV@n3@ f@Al@ \HsBe*+@e<0v@d3@J@=#x#
481 A G{?9#n"E&0444 M70#AHB
482 53_lj#PSV6U8l>(UhnE qJ$&9"(Fn_g5Fe#pheo'T !! Jcxo)vR2'"U75a%O3W_74b5-6R `F2 5au\@|Q:0b)`R@As)@E T@xd@Di ei=G]U6Tg'2"qV!DHAn 6SWaHw+* O`EW
483 )F_k=#\R!+7F
484 cX,Ge?foDkPUFDfP h(TPYYBUF~@x<?F
485 BP(?| P?
486 b//b@L&_d2?ct\.҆dsU:ȉH?/&k?J="ѤBS  0Kc`,dat b se, on e tiܨ"-or fUl w(cPa Iti!e^ %/UYo/?t!t!2\t%K` F/ `\i!/b7?/b7F(6>/F A2
487 ?&_ QJ /?|wxpf6lbx{s؅pwp  wwDrag onut heQp
488 idUct afl cm oUs dfr
489 >r!s(<Ia2e7`aQ GlPo e9ts.UH TD  # Uh <JT$iiY#RM>U}MUF~? ?FL&d2u?QoNuQ{` ?cu[
490 NbMV VAMA J~s$A
491 sQ   @QM Bt"MnK"NR@P'tr"
492 )Nrb#$u2&?&?r N]#K"L@R]#ҙ14e;-N`Vis_SE.c`m!#5W0106L"`?Copy ig`tW (0)020W030M0c o0of21rT0(Aa0i0n0] 0AlC@ 8UsGBe0e vY@d0M>7D00iERK_9T#3 7?i:P bJNVVV#]#0O贁7Nk?!&QMS&=]#/13FPF)"T$&_?-W)lJYAUttYYI 1Th1@-b3e3`Q(w]$m&?`0 P@#V"0'hAA
493 #'M 7& >2PS8WYmMpo*xcP&cK"8]*`ec/&@kAw$?# ? ygPV0-
494 %s"
495 Ba3U}io|4s2HqEc^o?rF`Y}v20 xrrgQxT5I oJ+f5oGnSz B zΉcgM&HqV50\.Qaԏ$a%?F r"*w hdM!q(i9]&,f$@d9/KPb
496 'c#0b"~1}BF(}0#yA&8x
497 & f 8f䳶과!rHPq
498 RU);M_qHmaxP Ā#bdz%Dї ܜEU}S*JR!ᣏċ p/8&,Aƫ sBQYasυϗϩϻHmd1 Ā"+͛ CvV5qAXz @%ߒZ @)&XqA(nU9 Yq!gfU}&&2Q<c5 cK" T%O);M |f V5V]/ r /6c~b5&8Jqq!nTQTT7q!gTQ)!$K"Q(k #?p'48/h; S` % &Bp]B4AZA_b ~5mD1+ #a#a#aqr-j2MhD #LS!5  \(}B`1s0 @B`RW1@A+?A3J5S3Du/Jo8LuѠ?7!K0S3 RYBo2c%iPEZgXW;G'2qB@F!QQZ%0_BZ!x-AF'Gga/= /
499 *5&@y{pb~߿P&d2??L(a߿i??4D_H'׿# +"x4Z~Dw+Fk,o12a2?
500 S߮3aܥO@74Dk;kP-\B3;@BU !"t4NT*"@|+.@ DV<}C-L@7"AUN!"$U%&'(U)*+,U-./0U1234t4NT*"@|+.@ C<AC-̣@,= :56t4NT*"@|+.@ dBw=
501 AJ-$37U !"7t4NT*"@|+.C@ V=C-DdBU7
502 An@m<IR@m.=IR@lm=DR@ܥm=ORH<(H<(H<(H<(nE\m> REĤm> RE4m> RE|m> R(kGSDl+B! k?)/"4k0S|k;/?Gm?>vPD$m4( U`, LSFDTyB uh$T UFNT*"@F|+.@Fx<?8F
503 BP(?J_P ?a/<e @?\s nu ` """u ) ( @L&d2?r-(\.,(s.sU!&/ o!! &f O1O1 ` Fl wcartm0p2
504 v?285\H?Z?l9C n0e0tB r?2?4eT>A>A uk 4
505
506 A
507 A#HA\DK D KDKDuK}AH}AKAHAKAHAK5D1KAHAKAHAK
508 AH
509 AKDAKAHAKED>AGPAuu=a #a1u5aF}A>aA!!A7
510 q1AA$qA#B1q
511 AFCKqAyyA/vAie}uc\uE uZe}A(a qRUuEE19~?@a?@~?@"5ⅅߎ?aC\Sc%*<1q}Abdq Ve`u7Bt005-ʉ\&
512  p~2 i &Xʇ'2q.!(H\ jUkOXKmDi+T\ !!!!n4ǯٯdq \AUAINp b0s0r0t@Ovvg @i @g-@e @h
513 0d@gD*<NB`"# &e8\}qu&
514 mIdnFŇ|B"Ӊ: HPo߿ސlDAHU@뽁AsUiOPWQQ+RU~ d 6HZlL
515 @}ijfIʏF?gf׈עb'9K]oɟ۟#5~$/k/Z/޿/ // gym)5GȀMYM
516 0d0mտ/?!?/oN`~ϴqw<N߅OOE)_G_`__=Oasg'9K]co!]E"-O#5A Rdv CV}!q}! 1CUg? /?̟?/u/?////B?;?M?_?q???=]E?OjucQ"A_oo'o9nERovo2ƑooOo-oo8SAQ&O8O\OnOO__e=\OewߠqE U_g_y_ߝ___l5|?RqA`l7wʳտ7y(U@$.{xH&d2?@BP(ԣRÝ&O x`Aw)p?(@z3,!p=LmYl~p/uC.XLXߺӓͧɊٹغ%I@a?D$6HI]Q%%$&2$?'?$=
517
518 )r*f$\\,$ɁɁ/$r1$QGS/ίঃ!A(`/
519 7Ɂ 5TC m-Pi@?/غ9P_]24f=Ҫ%)Ҁ%r%8B~"4DD-`ap????ި ت!`Otr]OoOOOިGHr
520 a<MR?Tsв0Vs~"
521 Lf4Fwvn?@ `0cf{i͈x<mŧjZ?@ p8h6edovj0101?01c{()0!"A ٹ"!o _4@W@Lclչgu `u^`A9mu7CB ZpLQHYbEXj05/6?6e/!@`s01#詒:Wi?a^ tN?zs LQzPx2!r`ۤѽ.Xt#0ONk?Fw'vV?2UA =__$_6[6LQOTɯ01o ` =դTu_?TAsQ&a$W`Fgo:o ;A Woɀ oUd1 3uU& á"x01Q\wa &e{<S+d@@ $O$UUSLRBA0#"9Q s#As;"ԟ搷!5UFUSomTiGdLQ\]WɔXW'2C=HQh!UVUUbjhXĂ1uA/B?xv!$=P&a4LRAbQQ !*A4_FX>7nSM
522 e@v
523 2!fx 5bQST3uW&݊1K!bPtګYi"dv_IIb#" /BUU܄ /JJ4#/LRe]Sd%x././\Q11T AXoyBJcQQo!kQ?kHo5=I}?v6ad6aO(:dQD
524 =@@n{Su ȏ@^ߗZ*}s;l8fno.oS8of[onogğq :&'9/ASew1Ѭ^ۯ#5Gk^Џ޿e<a<N`rτ?ϺϷ{\ q|AA q.|A) aIa,o\1}՝U@O+ ߂US?5KKH;
525 Eg]YIEo5@sթ/ ]s K[m'9KD0uQ u`?< qMUD-Q(:a!3EWi~>8??S//(R,R-^+/N(g%'?^!Q2MT$@RAc?u????`0 iHޝH@=EOHo0o+U7\n5GVR4/5 .|T b/y//////A?x/?5S*JRX/j(R?d?v????ȑ(5?>(5&OC0(F0<F@0x6A4k:Ia6IJd rq,é~ZAިHڃɠUEڅ@ɩibu6@`up`AvVcA(2\ި.gާbcTwgj"qbwoo bpWũaDfoonRr16v/B.Dj:AW `ڱ׿Ƿb tN,`zsf r6`'ϥ^2rJ?@IVJKTZDo#0O贁Nk?Fw)=4qpߐZEߘ6}H/@G@P^0q"<hʃu:I? -_'O9OKO]O|O4s?}U@`[-Q'ј\r'8Q8SڛYY,ʇ!ș0(Y+ @@MsE0NA[br5p¹Ē9qEWp$^r~反tR q0-{sc(gy(:L^pjɏ)k-`mTߩ$+(ԍA4r[[ndtߔߦuq*WeUbcA^manastrazwio
526 ga "4r^U+ș 5AQQđ,^?WOWy $FS=O $ >@$qd A,>2/]'cOKƛ5 (N.A%=ǚQ{OT{_>/?_Q_c_u____LHXCC$ɿ\b%lbu`u{e4o y+.?%==png a4qe2o??@c!a6??r1C5ȿYk}}w!/&4L^p܏$M^=oOa%yi{џ.H[60F]$ZalhǿEo% cRoZ$|h5`0 ?@pv@AIZlcYOڷbKh ܏$BZxHv,>Ao*yK}BůK]T} q1CUgy<m0h>BϡZ#GK 2!qJ~xJ1Cʆ U@ a a?oI1rZ edv5ŒaѣCaBnDA-鬣CO3בLjő!(\Xo'2`RqFH6A[6ղ7Om=ǟٟk!3EWi{]ïկ\\#/X| Ŀֿ"uϿq%I[Dm1-0ߞd/d??¼2϶9P?;/NeIO[Lu11 >%Fyrw {cs{17a{uq4'Xihyahqx!޵61r?@T@1r?OdpUP>e!up`ux `[A!VSQ!V%ج}LbS5;qHT)"pqrTUgް@z3QObUogoRpafo1on11sbch1…xQ!P".2b2:uWP'C/,R tN,P!zsV r!sQ!u$$^2r~?@I4)2~N$(#0ONk?FwSF!p ~/,'E/&6愾! /# {qs%2<g"?c _4wsDG?[(UsV ьwu]suE5!Eu脋/6ĐV5 @@2^]v@@8
527 B`U? ~y![u `Eo?<usPFcsbn{NLe4!<Nrϟ虏AY/y"<BQXb5
528 FDOkϷ
529 -5XE-5Ϟ^ϮD'E#FLKnuxse@v
530 K]oUU !"U#$%&U'()*U+,-.U/012U3456U7<=>U?@ABCDt4%NT*"@|+.C@ TZ|C-cB_b[
531 A@|ml[QRH<(EDm[ R\<j9@bZ@?j[.PDj[.PU1( UO"D&aUAUNj )h"T}
532 +U- \ |ɉ&Q-
533 -H*=(XiwPE!Q//,/fGArial UncodeMSj (  R$fSymbol$67fWingds*7
534 fEArial"z@D/ R$fGSwimunj (  R$fGPMingLUj (  R$fGMS PGothiqcj (  R$fGDotum"j (  R$fGSylaeqnj (  R$fGEstrangelWo dsaj (  R$fGVrindqaj (  R$fGShrutqij (  R$fGM_anglj (  R$fGTunga"j (  R$fGSendyqaj (  R$fGRavi"j (  R$fGDhenu"j (  R$fGLath#j (  R$fGawutmij (  R$fGCordia Neqwj (  R$fGMS Farsiwj ( _ R$fGulim"j (  R$fETimes NwRoanz@D$̊C>]LBDC].BC]%B4C]5BC^9BTCK^=B܉C^CBdC^9BC_;BtC?_MBC_:BC_:B C`9BC9`9BCr`;BC`8B,C`9BCa8B<CVa:BăCaCBLCa>B\Cb8BԂCIbGBGuideTheDocPage-1"Gestur Fom aProcesViso 90Flow NrmaVi}so 0Co}nectrViso 01Viso 02Viso 03Viso 10Vi}so 1Viso 12Viso 13Viso 20Viso 21Vi}so 2Viso 23Viso 50Viso 51Viso 52Viso 53Viso 70Viso 80Flow MarkeFlow GrayCostDurationResour cRow_1visVerionProces.3Com-linkManufctre ProductNmb ePartNumbe*ProductDes_ripinuAsetNumbrSerialNumbLocatinBuildngRoomDepart5mnShapeC5lsShapeT ySubhapeTyHasTextSolSH"visLegndSh7ap(Dynamic onetrTextPoWsiinDautbseProces.12Proces.2Proces.6,Dynamic onetr.7,Dynamic onetr.9Proces.10.Dynamic onUetr1Proces.13.Dynamic onetr14EE3DbddE3,btdG3bdG3ifd%G3bdG3@dE3 kdG3 kdG3 keG3 k0eG3 kJeG3$ kceG3D k|eG3d keG3 keG3 keG3 keG3 keG3kfG3$k+fG3DkDfG3dk]fG3kvfG3kfG3kfG3kfG3kfG3$kf!G3DkgG34@0gE3b4gE3kBgG3k\gG3bvgE3kgG3kgG3kgG34jfg G3\jfg$G3$khG3.e;h-G3DkhhG3jfh!G3dkhG3khG3bhE3khG3kiG3k!iG3jf;iG3bZiG3briE3jfi&G3.ei)G3jfi G3kiG3,@jE3$@ jE3@jE3@jE3ljG3Dl5jG3$lPjG3mkj.G3mj.G3dljG3mj/G3lkG34m0k/G
535  !"#$%&'()*+,-./0123456789:;<=>?@ABCDUbU
536 U UUUt4NT*"@|+.C@ KqqNC-eBU7
537 A%t4 cB_r
538 A-<@"7AJ@mqOR@m$r6RH<(H<(JE\ms REԵms RUPT/tbt C{N
539 } w"4FX,h(;WP@@(&`ծjf@SBjT P x/Aj<TbU
540 FCo^_oD$jg?R$\+!
541 @)̏. '\h1j՚ҮjbP2 _kT,jZ/r*'"DC ksH%j`.jt6Oh+'0lS `ht Grundfos A/SGrundfos A/SMicrosoft Visio@hC<GlR-N  EMFdRlx@VISIODrawingLQ-. ??d(8Q(.8Q0//蚔`__蚔`__]ZW蚔`__><:]ZW蚔`__><:]ZW蚔`__><:]ZW蚔`__><:]ZW蚔`__><:]ZW蚔`__><:]ZW蚔`__><:]ZW蚔`__><:]ZW蚔`__><:FCB蚔`__蚔><:><:><:><:><:><:><:aBkP>><:><:><:><:><:><:><:蚔`__Ԥ蚔`__Ԥ蚔`__0//Ԥ蚔`__ >=<Ԥ 
542     !"#蚔`__ >=<Ԥ蚔`__ >=<Ԥ蚔`__ >=<Ԥ蚔`__ >=<Ԥ蚔`__ >=<蹲{wt{wt{wtwXwb{wt{wt{wt蚔`__ >=<]ZW><:MKI{wt{wt{wtwp}wr{wt{wt{wt><:.-,~{蚔`__ >=<???pppPOO]ZW~{URP蚔`__ >=<>=< `__{wt`__{wt??>]ZX><:]ZW蚔`__ >=<>=< `__{wtٯ`__{wt??>]ZX><:]ZW蚔`__ >=<>=< `__{wtܻ{L{Lўzî`__{wt??>]ZX><:]ZW蚔`__ F@<ѿF@<>/&udY}wr~zӢQ"wFwFwFLj]ٯ~fW{wt}qWI?c[V0ZI<]ZW蚔`__ oS?eϙuϙuϙuϙueoS?ǒ_;ϙuϙuϙuϙuϙuqMvgxJ{Lϙu۳ٯc ̹ݷqMwkyUϙuϙuϙuϙuϙuϙuϙuϙuhDeQ]ϙuϙuϙuϙuϙuϙuϙuϙuY5͕o͕ohD]ZW蚔`__ >=<>=< `__{wtݷˑiwFwF]Mˑi`__{wt??>]ZX><:{wt{wt{wt{wt{wt{wt]ZW蚔`__ >=<>=< `__{wt̹զRwF`__{wt??>]ZX><:WTR'%$=;9蚔`__ >=<>=< `__{wt`__{wt??>]ZX#"!}xv蚔`__ >=</.- `__tpm]ZW`__tpm]ZW??>FDBMKI{wtĹ{wt643xsq蚔`__ >=<OOO??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>GGGjfd310蹲{wt('&蚔`__ >=<ea_.-,><:><:><:><:><:><:><:{wt蚔`__ >=<ٹ蚔`__ >=<蚔`__ >=<蚔`__ >=<蚔`__ >=<蚔`__ /.-蚔`__xww??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>GGG蚔`__蚔`__tpm`__poo??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??>??> Grundfos A/S Page-1nProcess Comm-linkosDynamic connector Databaseonn PagesMasters(`ht_PID_LINKBASE_VPID_ALTERNATENAMESA՜.+,D՜.+,\Root Entry F@CompObjjOle
543 1Table:Data
544 "_VSummaryInformation(NPUWordDocumentObjectPool_141522404 F_141794212
545 FOle
546  CompObj sObjInfo OCXNAMEcontentsVisioDocumentTAcVisioInformation"SummaryInformation(SDocumentSummaryInformation8Ole
547 CompObjsObjInfoOCXNAMEcontentsVisioDocument~vVisioInformation"SummaryInformation(SDocumentSummaryInformation8DocumentSummaryInformation8t

Properties

Name Value
svn:mime-type application/octet-stream

  ViewVC Help
Powered by ViewVC 1.1.20