Microsoft Word diplomna rabota su ppd 12. doc



Pdf просмотр
страница2/2
Дата06.07.2022
Размер1.28 Mb.
#114757
ТипДиплом
1   2
diplomna rabota SU PPD 12
Свързани:
Ivanov 0110 IMd

Глава I система за централизиран контрол и управление на транспортните средства.
Такива системи са комбинация от вградени в автомобилите устройства за позициониране и контрол и компютърни системи обработващи данните идващи от тях с цел да ги съхранят и впоследствие да ги предоставят във вид лесен за възприемане и обработка от човек или друга компютърна система осъществяваща някакъв вид дейност базирана на тези данни.
За да изпълнят високите изисквания на днешното време към тях, компютърните системи за контрол и управление на превозни средства
(КУПС), се нуждаят от постоянен, надежден и високоскоростен канал и метод за обмен на данни с навигационните устройства инсталирани в превозните средства. Този канал е важна и неизменна част от една такава система, служещ освен за събиране на данни, но и за дистанционен контрол на целия автомобил чрез навигационното устройство. За да бъде правилно оценена неговата роля в една такава система, е необходимо да се познава нейната същност и проблемите, който възникват при изграждането й. Затова в тази глава съм си позволил да опиша накратко значението на компютърните системи за КУПС и технологиите които те използват, както и нуждата от усъвършенстване на съществуващите такива системи.
Дипломната работа е структурирана по следния начин –
Въведение – описва проблема, който се решава; структурата на системи за КУПС и начините за комуникация и позициониране използвани в тях.
Цели и задачи – поставя изискванията към метода за обмен на данни, за да може той да реши проблемите споменати в предходната глава; описва задачите, които се поставят в отговор на тези изисквания.
Структурно описание – представя процеса на проектиране на всеки един компонент от софтуерния модул реализиращ метода за обмен на данни.
Описание на имплементацията – описва конкретната реализация на софтуерния модул направена следвайки проекта от предходната глава.


Въведение
7
Ком пре пютърни системи за управление на флот от возни средства
Глобализацията в 21-ви век е процес, който бавно, но сигурно променя облика на нашия свят и начина, по който живеем. Едно от малкото добри неща, които тя носи след себе си, е възможността човек да получава все по-добри стоки и услуги, покриващи неговите индивидуални предпочитания и изисквания. Зад всичко това обаче стои една огромна машина от хора, компании, стоки, превозвачи и др., които трябва да намерят общ език и бърз и ефективен начин за сътрудничество и организация, за да осигурят на хората това, от което те се нуждаят. В технологичната ера, в която живеем, какъв по-добър начин за организация и контрол на превозните средства би могло да има от компютрите и системите, които могат да се изградят с тяхна помощ?
Системите за управление на флот от превозни средства не са нещо фундаментално ново. Напротив. Като всяко друго нещо те са еволюирали от трудемкото и доста неточно записване на ръка на маршрути, изминати километри, разход на гориво и т.н до Интернет базираните системи за контрол на превозни средства 24 часа в денонощието 7 дни в седмицата, които виждаме днес.
Фиг. 1 Примерна схема на Интернет базирана система за КУПС
GSM network
Internet
Автомобил с вградено навигационнио устройство
Централна компютърна система за проследяване и контрол на превозни средства
GPRS
SMS
CSD
SMS
CSD
TCP/IP
TCP/IP
GPS сателити за определяне на географската позиция


Въведение
8
Една такава примерна система би изглеждала по начина показан на фиг.1. Географската позиция на автомобила се определя чрез GPS сателити и вграден в навигационното устройство GPS приемник. След това тези данни могат да се предадат веднага към централния сървър на системата по един от показаните канали на GSM мрежата, чрез вграденият в устройството GSM модул. Друга възможност е данните да се натрупат в устройството и след това да се пратят накуп към централния сървър, вариантите са много и зависят от изискванията на приложението.
От своя страна сървърът също може да изпраща данни към устройството, представляващи някакви команди. Данните могат да се обменят под формата на текстови съобщения, по един или няколко канала паралелно.
Компютърните системи за контрол и управление на превозни средства са в състояние да покрият високите изисквания за бързина, точност и простота на използване, които съвременните условия на живот им поставят. Някой от техните ключови предимства са:
• централизираност – с използване на някой от позициониращите методи, разгледани в следващата точка и възможностите за предаване на данни, които съвременните GSM мрежи предлагат, една компютърна система за КУПС дава възможност за съхранение и обработка на данните за практически неограничен брой превозни средства на едно единствено място.
• точност на отчитане и драстично намаляване на раходите по транспорта – вградените устройства за позициониране, освен възможност за снемане на местонахождението и предаването на тези данни на централна компютърна система, могат да включват и възможност за точно аналогово или цифрово измерване и контрол върху различни показатели на превозното средство (изминати, километри, разход на гориво, ниво и налягане на маслото, температура на двигателя и т.н). Отчитането и съхраняването на тези данни се прави без каквато и да било човешка намеса, което елиминира възможността за недоброжелателното им модифициране, като по този начин спестява изключително много средства на работодателите.
• увеличаване на ефективността
– знаейки точното местонахождение и състояние, по всяко време, на всички превозни средства една компютърна система за КУПС дава възможност за извършването на прецизна логистика, а следователно и по-ефективна работа на превозните средства и повече доволни клиенти.


Въведение
9
• достъпност – ползването на Интернет дава възможност на доставчиците и разработчиците на подобни услуги да ги предоставят за ползване и на малки и средни фирми, които не се занимават с транспорт, но имат нужда от евтино и ефективно решение за контрол на техния авто парк. Интернет елиминира нуждата от закупуването и инсталирането на скъпоструващ софтуер, който доскоро е бил приоритет само на големите транспортни фирми.
Компютърните системи за КУПС обаче не решават само проблемите на съвременния транспорт, но могат да се използват също толкова ефективно и в други сфери на живота. Например, знаейки географската позиция на дадено превозно средство и имайки постояннен канал за обмен на данни с него, тази компютърна система веднага може да бъде превърната в система за охрана на превозни средства. Тя би позволила на една охранителна фирма лесно, бързо, ефективно и без големи разходи да открива откраднати коли и да ги контролира дистанционно.
Броят на възможностите за приложение е буквално неограничен.
Технологии за позициониране
При една съвременна система за контрол на транспортни средства, да знаеш географската позиция на всяко едно от тях във всеки един момент от времето е жизнено важно, тъй като цялата работа на една такава система се базира на тази информация. Без нея контролът и логистиката на транспорта не биха били възможни.
Избор от технологии за позициониране в днешно време не липсва.
Има два основни начина за позициониране, достъпни на пазара в момента, това са:
• позициониране базирано на GPS системата (или на руския й еквивалент GLONASS – Global Navigation Satellite System, както и на новосъздадения европейски проект Galileo)
• позициониране базирано на мобилните телефонни мрежи
Съществуват и комбинации от тях, които увеличават точността на позициониране и намаляват крайната цена за потребителя, но за нашите цели нека само се спрем накратко на всяка една, за да добием представа как функционира.


Въведение
10
Global Positioning System (GPS)
GPS системата е създадена от американското военно министерство и е пусната в действие през 1994г. Тя се състои от 24 сателита и 5 основни базови станции, като е планирана подмяната на съществуващите с 21 сателита от ново поколение. От самото начало е било предвидено сигналът да може да бъде използван, както от военни така и от цивилни потребители, но точността на цивилните приемници е била по-лоша от военните поради умишленото въвеждане на така нареченaтa “избираема наличност” (Selective Availability - SA). През 2000г. с решение на президента SA e премахната, вследствие на което цивилните приемници драстично са увеличили своята точност (El-Rabbany, 2002). Въпреки това, никога не е била давана абсолютна гаранция, че в ситуации, които американското правителство счете за извънредни, то няма да изключи достъпа на останалите до GPS сателитите. Поради тази причина Русия отдавна има своя навигационна система работеща по подобен начин, наречена GLONASS, а Европейския Съюз планира скорошно пускане на своя сателитна система наречена „Галилеo.
GPS сателитите предaват на две основни носещи честоти – L1 на
1.575GHz и L2 на 1.2GHz. Определянето на позицията става по следния начин. Сигналът от GPS сателитите се приема на Земята от специални
GPS приемници, след което знаейки позицията на сателита в космоса
(защото орбитата му и времето са известни) и разстоянието от приемника до сателита (защото времето за достигане на сигнала от сателита до
Земята е известно) приемника може да изчисли така наречената дъга на разстоянието от него до сателита. Имайки дъгите на разстоянието за поне четири GPS сателита, приемник е в състояние да определи пресечната точка на четирите, която представлява и позицията му на земната повърхност
(El-Rabbany,
2002).
Чрез използване на сложни математически алгоритми за коригиране на грешките при тези изчисления, този метод позволява не само определяне на позицията с висока точност, но и измерване на времето, скоростта и надморската височина на обектите.
GPS технологията е най-честият избор във всяко едно приложение, което изисква позициониране, най-вече защото ползването и е безплатно. Естествено тя не е съвършена. GPS сигналът е доста е слаб, което го прави трудно различим от шумовете и отразените от околните предмети и препятствия сигнали. От тук идва и един от големите недостатъци на GPS системата, а имменно лошата, а понякога дори невъзможна, работа в затворени помещения, тунели, сенки от високи


Въведение
11
сгради и др. . Въпреки това, в днешно време GPS приемниците са доста усъвършенствани и с помоща на високо чувствителни антени и алгоритми за корекция на грешките успяват да увеличават точността на позициониране до голяма степен.
При изграждане на компютърна система за КУПС, използването на
GPS като технология за позициониране е особено подходящо, заради безплатното му ползване, задоволителна висока точност и не на последно място огромния избор на хардуер на пазара подържащ GPS технологията.
Позициониране чрез клетъчната мрежа (Network
ID based positioning)
Друг популярен начин за позициониране на обекти е чрез използване позицията на клетките в мобилна телефонна мрежа, като отправни точки за определяне на географската позиция.
Четирите най-популярни технологии, използвани за изграждане на мобилни телефонни мрежи са: GSM (Global System for Mobile
Communications), CDMA (Code Division Multiple Access), WCDMA (Wideband
CDMA), TDMA (Time Division Multiple Access). Независимо коя технолгия се използва, архитектурата на мобилната мрежа е винаги клетъчна, т.е територията, която се покрива от мрежата е разделена на региони с определен радиус наречени клетки. Всяка клетка има секционирана антена (най-често на три части от по 120 градуса), които осъществяват комуникацията между мобилните терминали (най-често мобилни телефони) и базовата станция, която след това предава данните към фиксираната телефонна мрежа или към Интернет. За да функционира правилно мобилната мрежа трябва да знае постоянно в коя клетка се намиран даден мобилен терминал, за да може да пренасочва коректно данните идващи за него. Затова мобилният терминал се регистрира всеки път, когато премине от една клетка в друга. Този преход се записва в така наречения HLR (Home Location Register) или VLR (Visitor Location
Register) на мобилната мрежа, като скоростта на обновяване на тези данни понякога е необходимо да е не повече от милисекунда (Добош,
2005).
Знаейки по всяко време, в коя клетка и в кой нейн сектор се намира даден мобилен терминал и нейния уникален номер CGI (Cell Global
Identity) мобилният оператор е в състояние да определи позицията на терминала с точност от 100м до 35км, в засимост от радиуса на покритие


Въведение
12
на клетката. Очевидно е, че тази точност в повечето случай се оказва недостатъчна, затова тя се комбинира с техниката на предварително синхронизиране (Timing Advance), която позволява да се определи разстоянието между мобилният терминал и базовата станция на базата на времето необходимо на сигнала да достигне от единия до другия. При тази комбинация точността на позициониране става средно около 500м
(Добош, 2005). Но за последното е необходимо специално оборудване, което не всички клетки и мобилни оператори притежават.
Позционирането чрез клетъчната мрежа е подходящо за използване в приложения, предлагащи информация за местоположението в големи градове, където гъстотата на клетките е много голяма, следователно и точността на позициониране се увеличава. Тогава клиентите не е необходимо да закупуват допълнителен хардуер или софтуер, а могат просто да ползват стандартните си мобилни телефони. Ниската точност на повечето места и честото нежелание на мобилните оператори да разкриват точното местоположение на своите клетки, прави тази технология неподходяща за използване в компютърни системи за КУПС, където точността на позициониране е от решаващо значение.
Методи за обмен на данни в мобилна мрежа
При разглеждането на компютърните системи за КУПС, видяхме, че една такава система се нуждае от специално навигационно устройство, инсталирано в превозното средство, което да осигури информация за позицията и дистанционен контрол на различни параметри по автомобила. За тази цел то трябва да е в състояние да обменя данни по някъкъв канал на мобилната мрежа с централна система за контрол и проследяване. Данните, които се обменят са текстови съобщения в специфичен формат различен за всеки вид устройство, който се определя от фирмата производител.
В случая ни е необходим канал и метод за обмен на ASCII текстови съобщения, съдържащи позицията на превозното средство определена чрез GPS приемник и предавана във формат NMEA (National Marine
Electronics Association), както и за обмен на команди към устройството и за контрола резултатите от изпълнението на такива команди. Подобен вид комуникация, независимо в каква среда се извършва, се нарича
Machine to Machine (M2M).


Въведение
13
В средата на мобилна телфонна мрежа можем да използваме следните три канала, по които да обменяме необходимите ни текстови съобщения:
• SMS (Short Message Service)
• GPRS (General Packet Radio Service)
• CSD (Circuit Switched Data)
Повечето действащи компютърни системи за КУПС, използват SMS като основен канал и понякога CSD като резервен. Ще разгледаме накратко всяка една от трите възможности като изтъкнем предимствата и недостатъците й за нашата цел.
Short Message Service (SMS)
Една от най-популярните услуги, които всеки един мобилен оператор предлага е възможността за обмен на кратки текстови съобщения между мобилни телефони - SMS. Едно SMS съобщение има максимален размер от 256 символа, но стандартът позволява и изпращане на съобщение с по-голям размер, което след това се разцепва на няколко по-малки така, че да се вмести в ограничението на единично съобщение.
Както споменахме, за да функционира една компютърна система за
КУПС е необходим метод и канал за обмен на данни във формата на текстови съобщения между навигационните устройства и централния сървър на системата. Освен географски данни за позицията на обекта, от
GPS приемниците може да се получи и друга полезна информация като брой сателити, към които е фиксиран приемника в момента, аларма за навлизане или напускане на определен от потребителя географски регион и много други, които се добавят като изходни данни към NMEA съобщението с позицията. В NMEA, съобщението съдържащо минимума информация необходим за точното определяне позицията на даден обект се нарича $GPRMC и има дължина от 60-70 символа, което означава, че в едно SMS съобщение може да се предадат 3-4 $GPRMC съобщения.
Останалите съобщения от NMEA стандарта също имат големина до 80 символа. При подходящ дизайн на протокола на съобщенията между устройството и централния сървър, потребителските команди, които то поддържа също могат да се пращат за изпълнение към него, като съобщения с дължина по-малка от 256 символа.


Въведение
14
От казаното дотук стана ясно, че SMS услугата може спокойно да се ползва като метод за двустранна комуникация между навигационните устройства и централната система за КУПС. В зависимост от изискванията към нея обаче, може да се наложи превозното средство да бъде следено на кратки интервали от време от порядъка на 10-20сек. Това означава изпращане на SMS съобщение с позицията на интервали по-малки от
1мин., а изпращането на толкова много съобщения за кратко време, често се оказва непосилна задача за мобилната мрежа. В този случай цената на услугата също се вдига доста, тъй като броя на изпратените
SMS съобщения става много голям. Тези, както и някой други важни причини, които ще споменем в следващата точка, карат доставчиците на подобни системи да търсят по-усъвършенствани методи за предаване на данни, какъвто е например GPRS.
General Packet Radio Service (GPRS)
GPRS услугата се появява за пръв път в Япония през 1999г., предлагана от японския телекомуникационен гигант NTT DoCoMo. Тя е част от второто поколение GSM мрежи (2G) и е първата от няколкото запланувани стъпки по пътя към предлагането на услуги за високоскоростно пакетно предаване на данни. GPRS е дълго очаквана от мобилните оператори технология, на която те разчитат, за да могат да предлагат на потребителите си нови интерактивни услуги и високоскоростен безжичен достъп до Интернет. Днес GPRS и неговият наследник UMTS, са много добре възприети и използвани навсякъде технологии, както от доставчиците на мобилни услуги така и от обикновенните потребители.
Компютърните системи за КУПС, могат да се възползват по невероятен начин от новите възможности, които GPRS технологията предлага. Пакетното предаване на данни предоставя възможност на мобилните устройства поддържащи GPRS или UMTS, да използват за комуникация протоколи от високо ниво като TCP/IP (Transmission Control
Protocol / Internet Protocol) или UDP (User Datagram Protocol) и скорости на обмен на данни до 56.6Kbps (за GPRS-a) (Bates, 2003). Това означава, че функциите на навигационните устройства могат да се вдигнат на едно по-високо стъпало от чистото предаване на съобщения с данни за позицията. TCP/IP протоколът може да бъде използван за предаването на разнообразна информация, като изображения с географски карти, данни за трафика по пътищата, прогноза за времето, инструкции за маршрут, видео и т.н от и към навигационното устройство. Новите възможностти са неизчерпаеми.


Въведение
15
Един от най-сериозните проблеми, които разработчиците срещат при внедряването на GPRS, като основен канал за комуникация са IP адресите, които устройствата получават. В GPRS средата IP адресите най-често са динамични и задължително нереални. Т.е всяко едно устройство получава различен IP адрес всеки път, когато се обърне към мрежата и стои зад firewall-а на GPRS средата без да има възможност да получава директно заявки от други външни компютри. Това от своя страна означава, че централният сървър на една система за КУПС, не може да се обръща директно към едно устройство по своя инициатива и да изпраща или изисква данни от него. Инициаторът на връзката трябва винаги да бъде устройството. Има различни подходи към решаването на този проблем – софтуерни, хардуерни или комбинация от двете.
Системата
Follow Me on the Web също притежава собствено авторско решение на този проблем, описано по нататък в настоящата дипломна работа.
Фиг. 2 Нови възможности в системите за КУПС при използване на
GPRS
GPRS технологията решава някой от проблемите на проследяването, с които SMS съобщенията не се справят успешно, тъй като по TCP/IP
GSМ мрежа
Интернет
Приложен сървър
GPRS
UMTS
TCP/IP
HTTP,
HTTPS,
XML
TCP/IP
• Информация за трафика
• Инструкции за маршрут
• Автоматично обновяване на софтуера и т.н
• Видео в реално време
• Снимки от камера в купето
• Аудио и т.н
Автомобил


Въведение
16
няма проблем да се пращат много съобщения с произволна честота. С увеличаването на популярността и потреблението на GPRS услугата цената й неизбежно ще пада постоянно, а това още повече ще затвърди позицията й на заместник на SMS съобщенията, като основен метод за комуникация в компютърните системи за КУПС.
Circuit Switched Data (CSD)
CSD е методът, който първоначално е разработен за предаване на данни в GSM мрежи. По същността си представлява връзка модем към модем в мобилна мрежа. Той използва един единствен времеви отрязък, който GSM клетката му дава, през който може да предава данни със максимална скорост 9.6Kbps или 19.2Kbps (Добош, 2005), като този времеви отрязък стои зает през цялото време докато една от двете страни не прекрати връзката. Това го прави доста неефективен метод за комуникация, тъй като ресурсите на мрежата не могат да бъдат използвани в моменти, в които данни между двата модема не се предават. Времето за установяване на връзка с другата страна също е много голямо, тъй като трябва да се набере номера на отсрещния модем и да установи диалог с него, което отнема минимум 1мин.
Тези два недостатъка са едни от основните причини CSD да не бъде използван като метод за комуникация в системите за КУПС, тъй като например за да се получат данните за 10 автомобила трябва да се наберат 10 номера, а според казаното по-горе това би отнело най-малко
10мин за данни, които реално е необходимо да се съберат за максимум минута. В днешните системи за КУПС, където CSD се използва то това е главно като резервен канал за комуникация или в случай, че е необходима обратна съвместимост с някой по стар хардуер, например.
Обобщение
Нуждата от усъвършенстване на компютърните системи за контрол и управление на превозни средства несъмнено съществува. Изискванията към транспорта, охраната и други сфери на живота ползващи автомобили, камиони и т.н постоянно растат и стават все по- разнообразни. За да ги покрият, доставчиците на системи за КУПС, трябва да усвоят някои нови технологии, като GPRS и да вградят нови функции в навигационните устройства, даващи им възможност да


Въведение
17
разширят кръга от услуги, които клиентите могат да получат от една такава система.
GPS ще си остане най-добрият избор в търсенето на технология за позициониране, поради факта, че ползването й е безплатно, а пазарът прелива от разнообразен хардуер, работещ с нея. Комбинацията от GPS и позициониране чрез клетъчната мрежа би могла да се окаже печеливша, но проблемите при имплементирането й трябва добре да се обмислят.
Само по себе си позиционирането чрез клетъчната мрежа не би могло да свърши работа в една система за КУПС.
С пускането в действие на клетъчните мрежи от второ поколение идват и нови технологии като GPRS, позволяващи високоскоростен пакетен обмен на данни и използване на протоколи от високо ниво като
TCP/IP и UDP. Това дава възможност на доставчиците на системи за КУПС да внедрят нови интерактивни възможности в тях, като по този начин да ги направят още по атрактивни за потребилите. SMS съобщенията запазват своите качества, като метод за предаване на данни в такива системи и би могло успешно да бъдат ползвани или като резервен канал на GPRS или паралелно с него, ако например клиентът не се нуждае от допълнитените възможности, които GPRS предоставя.


Въведение
18
Интернет ресурси
GPS World Magazine http://www.gpsworld.com
Списание покриващо широк кръг теми засягащи GPS технологията. Тук може да се прочете за последните новости в развитието на навигацията, позиционирането, контрола върху транспорта и т.н
GLONASS Center www.glonass-center.ru
Страницата на центъра за управление на системата GLONASS.
Galileo Satellite System http://europa.eu.int/comm/dgs/energy_transport/galileo/index_en.htm
Страницата на евопейската навигационна система Galileo.


Глава II
Цели и задачи предходната глава бяха описани, ключовите елементи на компютърните системите за управление на превозни средства, както и нуждата от развитието им в крак с новите изисквания към тях и новите технологии достъпни на пазара. Имайки предвид тази информация, сега трябва ясно да се дефинират стъпките, през които ще премине процесът на разработка на един важен елемент от тези системи, а именно методът за комуникация с навигационните устройства, вградени в превозните средства, който е тема на настоящата дипломна работа.
В тази глава се описват основните цели и задачи, които стоят при създаването на метода за комуникация. В началото се описват изискванията (задачите), които един такъв метод трябва да изпълнява, изискванията към производителността на използвания хардуер, изисквания към самия метод, изискванията към средата за изпълнение на програмата и др. След като задачите са ясно дефинирани, ще направя кратко описание на целите, които те поставят, за да се разработи продукт покриващ тези изисквания.
В


Цели и задачи
20
Задачи
Методът за комуникация М2М в среда на мобилен оператор, трябва да представлява софтуерно приложение, което да дава възможност за комуникация с вградени в автомобилите навигационни устройства по
GPRS канал, използвайки TCP/IP протокол. Той е отговорен за валидирането на получените данни и заявки, запазването им в специално проектирана за целта база данни и поддържането на надеждна връзка между централния сървър и навигационното устройство. Също така, приложението трябва да осигури лесен за внедряване програмен интерфейс, даващ възможност на други софтуерни приложения, които са част от системата, да комуникират с устройствата. Следва по-конкретна формулировка, по категории, на изискванията към метода.
Изисквания към сложността на използване
Приложението трябва да осигурява достатъчно лесен начин за конфигурация и контрол на следните параметри:
• TCP/IP настройки – това са настройки за порт и IP адрес или домейн името на сървъра, на който приложението ще се изпълнява.
Приложението трябва да е конфигурирано да „слуша” на даден порт и IP адрес на този сървър, за да може да обработва заявките за връзка и данните от навигационните устройства.
• настройки за връзка с базата данни – това са данни като потребителско име, парола, име и порт на сървър и др., необходими на приложението, за да осъществи връзка с база данни, където получената информация ще се съхранява.
• възможност за ръчно стартиране, спиране и рестартиране – на потребителя (администратора) трябва да бъде дадена възможност за лесно стартиране, спиране или рестартиране на приложението с цел подръжка, установяване източника на грешки и т.н. При тези операции приложението трябва успешно и сигурно да стартира или спира всички активни TCP сесии с устройствата и връзката с базата данни.
• избор на протокол за комуникация с конкретния тип устройство
– приложението трябва да е максимално гъвкаво с цел да може да комуникира с различен тип устройства, ползващи различен протокол на


Цели и задачи
21
съобщенията. За целта приложението трябва да може да бъде конфигурирано, кой протокол за комуникация да използва за даден порт и IP адрес.
• поддържане на дневник с информация за събития, настъпили по време на изпълнение – приложението трябва да поддържа така наречения “log” файл, където да записва информация за настъпили грешки по време на изпълнение, както и информация за своето състояние по време на настъпването на грешката.
Изисквания към надеждността
Приложението, имплементиращо метода за комуникация с навигационните устройства, трябва да работи стабилно възможно най- дълго време без да е необходима човешка намеса, която да осигурява нормалната му работа. В случая под нормална работа се разбира по време на изпълнението си приложението да поддържа активна и стабилна връзката между сървъра и всички устройства, да обработва данните идващи от тях, да ги записва в база данни, да обработва заявки на други софтуерни компоненти желаещи да комуникират с устройствата, без това да предизвиква изключителни ситуации или тотален срив на приложението и операционната система. Въпреки това, ако настъпи:
• критична грешка (загуба на връзка с базата данни, грешка в
TCP стека и т.н) – приложението трябва да запише датата и часа на настъпването на това събитие в „log” файла и ако е възможно данни характеризиращи състоянието му в момента на настъпване на събитието, след което да започне последователни опити за рестартиране на нормалната си работа, докато това се случи.
• комуникационна грешка (загуба на връзка с устройството, получаване на грешни данни) – приложението трябва незабавно да предприеме действия по затваряне на TCP сесията с устройството, разчистване на системите ресурси заети за поддържането на сесията, запис в базата на данни на датата и часа на настъпване на събитието и ако е възможно причината за настъпването му.
Изисквания към сигурността
Приложението трябва да изпълнява следните изисквания, за да подсигури факта, че към системата са свързани, само навигационни устройства, които имат право на това:


Цели и задачи
22
• криптиране на данните – данните, които се обменят между сървъра и устройството, трябва да бъдат, криптирани чрез използване на криптографски алгоритъм, осигуряващ добро ниво на защита и не изискващ много изчислителни ресурси за изпълнението си.
• защита от атаки на повторение – приложението трябва да включва защита от така наречените атаки на повторение (repeat attacks), представляващи „подслушване” на пакетите, които се обменят между две точки по TCP/IP и после „наводняване” на сървъра, чрез циклично препращане на „подслушаните” пакети, без техния смисъл да бъде разкодиран.
• валидиране на уникалния номер на устройството – преди да започне да обработва на данните, които устройството изпраща, приложението трябва извлече уникалния му номер, който то включва във всяко съобщение и да провери дали този номер е записан като валиден в базата данни. Ако номерът е валиден, TCP сесията си остава активна и приложението започва да приема данните на това устройство.
• отбелязване, че дадено устройство е вече свързано - за да предоврати опитите да се установят много TCP сесии използващи един и същ номер на устройство, приложението трябва да отбележи в базата данни, че дадено устройство вече е свързано и да проверява това поле всеки път, когато се получи заявка за връзка с този номер.
Изисквания към производителността
Приложението трябва да изпълнява следните изисквания по отношение на своята производителност, като изпълнението им не трябва да нарушава нормалната му работа и да заема колко се може по-малко памет и процесорно време:
• брой активни TCP сесии – приложението трябва да е в състояние да работи с най-малко 700 едновременно отворени TCP сесии и най-много
1000 такива. Тези ограничения, в броя на сесиите, произхождат от факта, че при изискваната минимална хардуерна конфигурация, по- голям брой сесии би означавал натоварване на машината до недопустимо рисково ниво. Всяка една сесия всъщност означава едно устройство свързано към системата. При надвишаване на максимално допустимия брой устройства, трябва да се пусне нова машина, на която да се изпълнява още едно копие на приложението. По този начин капацитетът на системата се увеличава с още 1000 устройства.


Цели и задачи
23
• брой заявки от други приложения – най-малко 100 и най-много
150 заявки идващи от други компоненти на системата, жеалещи да комуникират с дадено устройство през интерфейса, който приложението предоставя, трябва да могат да бъдат изпълнени за максимално допустимото за това време. Когато броят на едновременните заявки надвиши 150, приложението трябва да отхвърля всяка следващата заявка докато не дойде в състояние, в което да може да я изпълни.
• максимално време за обслужване на заявка – всяка една заявка за комуникация с дадено устройство през интерфейса на приложението трябва да бъде обслужена за максимум 60 сек., което е и максимално допустимия период за чакане след, който се приема, че е настъпила някаква грешка и резултат не може да бъде получен в следствие на нея.
След изтичане на максимално допустимото време, се връща отговор, че изпълнението не е възможно, а TCP сесията на устройството, ако тя е все още активна, се прекъсва. Под обслужване на заявка се има предвид, приемането й, изпращане на съответната команда към устройството, приемане на отговора от устройството и връщане на резултат към заявителя.
Изисквания към хардуера и софтуера
Приложението трябва да може да работи нормално при следната минимална хардуерна конфигурация на машината и инсталиран допълнителен софтуер:
• хардуерни изисквания
 AMD Athlon XP 3700+
 1024 MB RAM
 20GB HDD
 100 Mb LAN Card
• софтуерни изисквания
 Windows XP Server
 IIS 5.0 или следващата версия

.NET Framework 1.1 или следващата версия


Цели и задачи
24
Изисквания към програмните интерфейси
Приложението трябва да имплементира няколко програмни интерфейса, за да може да бъде контролирано от физически отдалечена машина, намираща се в локалната мрежа на сървъра или извън нея и за да може системата да функционира като цяло. Тези интерфейси трябва да са изпълнени чрез използване на широко разпространени и стандартни технологии, за да може приложението да работи съвместно с компоненти писани на различни програмни езици и работещи под други операционни системи. Интерфейсите са:
• интерфейс за дистанционен контрол – дава възможност на други софтурени приложения да изпълняват команди необходими за извършването на дистанционен контрол и администриране на приложението.
• интерфейс даващ информация за статуса – предлага команди връщащи информация за текущото състояние на приложението в момента
(брой активни сесии, дали приложението слуша нормално за идващи заявки от устройствата и т.н)
• интерфейс за обмен на данни с конкретно устройство – дава възможност за изпращане на команди към дадено устройство, което в момента е свързано към системата.
Изисквания към съхранението на данните
Данните за всички потребители на системата, автомобили, устройства, както и данните получавани от тях трябва да се съхраняват в специално проектирана за целта база данни, която трябва да покрива следните изисквания:
• брой клиенти към базата – базата данни трябва безпроблемно да работи с над 1000 едновремнно активни клиента, свързани към нея и да обработва данните от тях за време, което да не нарушава нормалната работа на приложението.
• обем на данните – базата трябва да поддържа таблици с обем достатъчен за съхраняването на данните на всяко едно устройство за максимум 30 дни., което е прието като максмималния срок, за който някой потребител може да иска справка за своите автомобили.


Цели и задачи
25
Цели
След като изискванията към приложението имплементиращо метода за комуникация тип M2M между навигационното устройство и приложен сървър са дефинирани, тук ще бъдат изброени целите, които тези изисквания пораждат, за да бъде създадено подобно приложение и покрити горе изброените изисквания.
Целите са групирани в относителни категории, като за всяка категория е направена кратка обосновка показваща кои от изискванията към приложението тя покрива. От тук нататък приложението, тема на дипломната работа, ще се нарича “мениджър на устройства” (МУ), тъй като основната му задача е да контролира и управлява навигационните устройства вградени в автомобилите.
Създаване на “мениджър на устройства” като приложение от няколко компонента
За да бъде поддръжката на мениджърът на устройства по-лесна, а създаването му по-бързо и ефективно, най-добре е да се възприеме подход разделящ го на няколко софтуерни компонента, изпълняващи различни части от неговите задачи. В тази точка те само ще бъдат дефинирани, а по-нататък ще бъде дадена повече информация за тяхната роля в приложението.
• сървърен компонент – това е компонентът отговорен за приемането на заявките идващи от навигационните устройства, поддържане на комуникация с тях, обработката на данните им, записването им в база данни и изпращането на команди към тях.
• интерфейсен компонент – това е компонентът грижещ се за осъществяването на връзка между сървърния компонент и други софтуерни приложения, които са част от системата
• база данни – цялата информация необходима за работа на системата, като цяло се съхранява тук.


Цели и задачи
26
Фиг. 3 Логическа схема на компонентите на МУ
Създаване на сървърния компонент като приложение от тип windows услуга
Създаването на сървърния компонент като приложение тип windows услуга, предлага някой много полезни възможности, които за нашия случай биха били особено полезни. Най-важното от тях е, че тези приложения не изискват какъвто и да било потребител да бъде регистриран и влязъл в системата в момента, за да могат да работят. Те се зареждат преди всички останали приложения и могат да вършат работата си в „сянка” без нужда от потребителска намеса. По този начин, ако се случи приложният сървър, на който мениджърът на устройства се изпълнява, да се рестартира, няма да е необходимо някой да отиде, да влезе в системата и ръчно да стартира наново приложението, защото
Windows ще го стартира автоматично.
От гледна точка на производителността на приложението, нишките, които то създава, ще се изпълняват в така наречения kernel mode на
Windows и съответно на процесора, което ще им даде най-висок приоритет за изпълнение, а операционната система ще работи с тях използвайки интерфейси от ниско ниво, които са в пъти по-бързи от тези от високо
База данни съ р
в ъ
р е
н к
ом п
о н
е н
т и
н те р
ф е
й се н
к ом п
о н
е н
т
Мениджър на устройства
Данни от устройства
Заявки от други приложения
TCP/IP
TCP/IP
HTTP/HTTPS
TCP/IP


Цели и задачи
27
ниво. По този начин мениджърът на устройства ще покрие изцяло изискването да заема възможно най-малко памет и процесорно време.
В Windows приложенията от тип услуги се управляват от така наречения
Service Control Manager (SCM), който предоставя вече готов интерфейс и модел за управление на всички услуги работещи в системата, което освобождава разработчика от понякога доста тежката задача по създаването на графичен интерфейс за работа с дадено приложение. SCM също така елиминира нуждата от създаване на собствен модел за справяне и възстановяване от необработени изключителни ситуации, които могат да настъпят по време на изпълнение на програмата, защото може да бъде настроен така, че при възникване на такава изключителна ситуация сам, без човешка намеса, да рестартира приложението. Подобна възможност е изключително подходяща за нашите цели.
.NET средата предоставя вече готови и доста удобни методи за програмно управление на услугите, т.е при нужда лесно може да се създаде графичен интерфейс за работа с услугата. Необходимо е само да се създаде бизнес логиката на програмата, да се регистрира като услуга в системата, а от там целият контрол и настройка на приложението може да става през SCM. Също така SCM поддържа собствен, леснодостъпен и подробен “log” файл, в който записва всички събития, не само грешките, заедно с часа и датата на настъпването им, отнасящи се до изпълнението на приложенията-услуги, които се намират под негов контрол. По този начин покриваме изискването за подържане на “log” файл от нашето приложение, без да е необходимо да създаваме собствен такъв.
Създаване на интерфейсния компонент като приложение от тип wеb услуга
Създаването на интерфейсния компонент като приложение тип web услуга, носи следните предимства:
• стандартни технологии – web услугите (web service) са приложения, които притежават някаква функционалност достъпна чрез стандартни технологии и протоколи за комуникация, а именно XML, SOAP, HTTP,
WSDL. Чрез използването на този подход, се дава възможност на компоненти написани на различни езици, да работят с мениджъра на устройства, като тези компоненти могат да се намират на физически отдалечени машини, а комуникацията да минава през Интернет.


Цели и задачи
28
• лесна имплементация – с използването на Visual Studio .NET и ASP
.NET, създаването на web услуги става изключително лесно, като Visual
Studio върши по-голямата част от необходимата работа.
Създаване на отделни класове, имплеменнтиращи функционалността на компонентите
Тъй като мениджърът на устройства ще бъде разработван в обектно- ориентирана среда за програмиране, функционалността на сървърния компонент ще бъде разделена на класове. Интерфейсния компонент само ще извиква методи от тези класове без да има свой такива, предлагащи някаква различна функционалност. Класовете са следните:
• клас сървър – имплементира методи за “слушане” за TCP заявки от устройства, валидиране на заявки, създаване на обект за всяко устройство след успешно валидиране, поддържане на списък с активните в момента устройства, поддържане на TCP сесията активна, образуване на текстови низове представляващи команди към устройството.
• клас за “превод” на данните – методите от този клас “превеждат”
(parse) данните идващи от всяко устройство, като по този начин имплементират специфичния протокол на съобщенията за конкретния тип устройство, необходим за работа с него. Всички останали класове ползват методи на този клас, за да интерпретират данните от устройствата, когато това е необходимо.
• клас на устройството – след успешно валидиране на заявката за връзка, за всяко едно устройство се създава обект от този клас, съдържащ собствена нишка, която от тук нататък се занимава с приемане и изпращане на данни от/към устройството.
• клас за работа с базата данни – имплементира методи за четене и запис на данни в базата.
Създаване на модел за комуникация между компонентите на МУ
Тъй като сървърният и интерфейсният компонент на практика представляват две различни приложения работещи в свой собствени процеси (в случая AppDomain-и), те нямат директен достъп до своите


Цели и задачи
29
методи и затова е необходимо да се създаде модел за комуникация между двата компонента.
В .NET средата най-удобният за тази цел подход е използването на така наречената .NET Remoting технология, която прави създаването на подобен модел много лесно.
Създаване на MySQL база данни
Изборът на MySQL, като база за съхранение на данните е удачен за нашите цели, тъй като той покрива напълно изискванията за производителност и обем на таблиците, а от чисто икономическа гледна точка предимството му е, че е безплатен при некомерсиално използване.
Обобщение
Дизайнът на мениджъра на устройства предвижда, той да е високооптимизирано приложение, което да поддържа едновременна комуникация по TCP/IP протокол с много устройства и да съхранява техните данни в специално проектирана за целта MySQL база данни.
Приложението е проектирано на модулен принцип, като целта е да се разбие функционалността на колко се може по-малки софтуерни модули, като по този начин се намалява вероятността от допускане на принципни грешки, подобрява се възможността за поддръжка на приложението и идентифициране на грешки в него.
Интернет ресурси
WebServices.org http://www.webservices.org/
Портал към различни сайтове, статии, пазарни проучвания и други материали свързани с web услугите и използваните в тях технологии.
Introduction to Windows Service Applications


Цели и задачи
30
http://msdn2.microsoft.com/en-us/library/d56de412
Статия даваща начални сведения и препратки към много други източници отнасящи се към програмирането на приложения windows-услуги с Visual
Studio .NET.
M2M Blog http://www.m2mblog.com/
Сайт поддържан от едни от най-изтъкантите експерти в областта на M2M услугите, съдържащ новини, анализи и връзки към източници по темата.


Глава III
Структурно описание лед като вече целите и задачите на проекта са ясно дефинирани, време е да преминем към описанието на процеса на проектиране на система с подобни параметри. Целта на тази глава е да даде ясна представа за дизайна на приложението и затова как функционират и комуникират различните му компоненти. Стриктното изпълнение на изискванията към приложението поставят различни проблеми пред разработчика тъй като подходът към решението им е специфичен за всеки един програмен език и среда за разработка. Там където са били налични повече от едно решения, съм разгледал всяко едно тях, като изтъквам неговите предимства и недостатъци и накрая обосновавам решението си да избера някое от тях.
Освен информация за структурата и функционалността на приложението, съм се постарал да дам синтезирано описание на различните технологии, като например web услугите и .NET Remoting, използвани при изграждането му и чието познаване е абослютно необходимо, за да се добие представа как мениджърът на устройства функционира.
С


Структурно описание
32
Избор на среда за разработка
Приложението “Мениджър на устройства”, предмет на дипломната работа, е написан изцяло на езика C#, в средата на Microsoft Visual Studio
.NET 2003.
Visual Studio .NET е един съвремен и изключително мощен инструмент за създаване на Windows приложения, web услуги, web приложения и т.н възползвайки се от възможностите, които революционната технология .NET
Framework предлага. Средата предоставя изключително удобен интерфейс и предлага безброй готови за вграждане в приложенията компоненти. Многото шаблони за различните типове приложения, които могат да се създават, дават възможност за летящ старт на всеки един проект, като са необходими само няколко предварителни настройки, след което Visual Studio .NET свършва повечето от тежката работа по конфигурирането на проекта и не само това.
За целите на разглеждания проект, като например работа с TCP/IP, VS
.NET е може би най-мощната среда в момента на пазара, тъй като включва готови класове за работа с него, както на ниско и така и на високо ниво.
Класовете от високо ниво изискват само няколко реда код, за да осигурят работа на приложението с TCP/IP, като не изискват никакви дълбоки познания за протокола. Приложения, като нашето, организиращи сложна комуникация по TCP/IP могат да се възползват от многото мощни и бързи функции за четене, изпращане и слушане за данни, работа с DNS, HTTP, XML и т.н, които VS .NET предлага.
Една от целите поставени в “Глава II” е МУ да се реализира като приложение от тип windows услуга. Създаването на подобни приложения с използване например на C++ и Visual Studio 6.0 доскоро беше привилегия само на изключително опитни програмисти и въпреки това пак отнемаше много време. С Visual Studio .NET съдаването на windows услуга е по-лесно от всякога, тъй като той извършва по-голямата и объркваща част от работата и прави писането й подобно на писането на най-обикновено приложение. Така разработчикът може да се възползва от всички привилегии на приложенията тип windows-услуги, без да се налага да става специалист по концепциите и програмирането им.
Писането на web услуги, с които трябва да бъде реализиран интерфейсния компонент на мениджърът на устройства, също не прави изключение, когато става въпрос за простота на създаването.
Програмирането на web услуги е свързано с детайлното познаването на много


Структурно описание
33
технологии и протоколи, като XML, SOAP (Simple Object Access Protocol),
WSDL (Web Service Description Language), UDDI (Universal Description,
Discovery and Intergation ), ASP .NET и т.н, но Visual Studio .NET отново сваля това тегло от разработчика, като върши по-тежката работа, като например сериализирането и десериализирането на данните в SOAP протокол, интерпретиране на XML документи и т.н.
Според изискванията към мениджъра на устройства, той трябва да бъде разделен логически на два отделни софтуерни компонента, които на практика са две отделни приложения. В такъв случай пред разработчика стои задачата да изгради програмна връзка между тези два компонента, а използването за тази цел на технологии като COM, DCOM, CORBA и т.н е сложен проблем. .NET Framework и Visual Studio .NET дават решение и на този проблем, като представят технологията .NET Remoting, която прави комуникацията между обекти намиращи се в различни процеси тривиална задача.
След като бяха изтъкнати всички предимства на Visual Studio .NET, имащи отношение, към настоящия проект, трябва да се кажат няколко думи и за тези на избрания при разработката език за програмиране – C#. C# е сравнително млад, 100% обектно ориентиран език, бързо набиращ популярност не само заради лекотата си на използване, но и заради гъвкавостта и мощността, характерни за Java и C++, които предлага.
Работейки с .NET Framework и Visual Studio .NET мисля, че няма по-подходящ избор на език за програмиране от C#.
Проектиране на сървърния компонент
Сървърният компонент (СК) е основният компонент в мениджърът на устройства, грижещ се обмяната и записа на данни идващи от навигационните устройства.
Възприемайки модулния принцип на проектиране, този компонент ще бъде разделен на по-малки модули
(класове), имплементиращи част от неговата функционалност.
На фиг. 4 са показани отделните модули на сървърният компонент и как те си взаимодействат. Сървърният компонент ще представлява всъщност една
DLL библиотека, която съдържа в себе си класове (обекти), изпълняващи различни задачи. Това ще направи дизайна й невероятно гъвкав, защото в последствие тя може да бъде вграждана в различни приложения, без да са необходими някакви специални промени по нея, което би усложнило доста този процес. В случая приложението, което „обвива” сървърния компонент, е


Структурно описание
34
приложение тип windows-услуга, което се изпълнява в kernel mode на процесора, тоест с доста по-голям приоритет от останалите.
Фиг. 4 Връзки между отделните модули на сървърния компонент
Тъй като системата трябва да поддържа много видове устройства, работещи с различни протоколи на съобщенията, имплентирането на нови такива също трябва да бъде направено гъвкаво. Затова, цялата работа по интерпретиране (превеждане) на получените съобщения в смислена информация ще бъде отделена в обект наречен “интерпретатор”. Когато други модули от сървърния компонент е необходимо да интерпретират получено съобщение, те ползват методи на този обект, като това кой точно метод да извикат зависи от конкретната ситуация, в която модулът трябва да знае каква информация да очаква. По този начин, при изграждане на сървърен компонент за нов тип устройство, ще трябва само да се напише нов устройство интерпретатор сървър интерфейс към база данни данни от устройства данни от устройства нов обект нов обект устройство интерпретатор команди превод на данни четене и запис в базата заявки за връзка команди превод на данни четене и запис в базата
СЪРВЪРЕН КОМПОНЕНТ заявки за изпълнение на команди
...


Структурно описание
35
клас “интерпретатор” имплентиращ специфичния протокол на съобщенията за това устройство.
Нека сега разгледаме всеки един модул по отделно, като дадем по- подробна информация за неговия дизайн, функции в компонента и как той ги изпълнява.
Обект “сървър”
Това ще е основният модул в сървърния компонент и единственият, който ще е достъпен за други приложения. За да може да бъде създаден този обект, той ще изисква следната информация, която да бъде поддадена чрез параметри към конструктора му:
 низ за връзка с база данни
 IP адрес и порт
Низът за връзка с базата данни, представлява текстов низ, съдържащ информация като потребителско име, парола, IP адрес и порт, протокол за комуникация и т.н, необходима за да се осъществи връзка със сървъра, на който се намира базата данни. Повече информация за базата данни и интерфейса за достъп до нея има в точки “Обект интерфейс към база данни” и “Проектиране на база данни”.
На зададения IP адрес и порт сървърният обект непрестанно ще “слуша” за чакащи TCP заявки за връзка. Когато подобна заявка пристигне, той ще отваря TCP сесия със заявителя, като очаква да получи специфично съобщение, наречено “welcome string”. Това съобщение може да е различно за отделните типове устройства, които работят към системата, но там винаги трябва да се съдържа уникалния номер на устройството, който сървърния обект извлича, използвайки метод от обекта “интерпретатор”. След като извлече уникалния номер на устройството, обектът сървър използва методи от обекта “интерфейс към база данни”, за да провери дали подобен номер е записан като валиден в базата данни и дали устройство с такъв номер вече не е свързано към системата. Ако проверката премине успешно, се създава нов специален обект “устройство”, който от тук нататък ще се грижи за управлението на комуникацията по TCP/IP с това устройство, а в базата данни се отбелязва, че то е свързано към системата, за да се предотврати осъществяването на повторна връзка с този номер. Ако проверката не издържи, отворената TCP сесия се затваря и всички ресурси заети от нея се освобождават.


Структурно описание
36
Както беше споменато по-горе, ако валидирането на заявката за връзка премине успешно, се създава нов специален обект, който да се грижи за по- натъшната комуникация с устройството. От тук нататък обратната връзка с него се организира чрез поддържане на специален тип списък на такива обекти, чиито елементи представляват двойка ключ-данни. В случая като ключ се използва уникалният номер на устройството, който по-късно може да се използва за търсене. В полето за данни на списъка се записва указател към обекта, отговарящ за конкретното устройство. Когато сървърният обект поиска да изпрати данни към дадено устройство, той проверява дали уникалния му номер се съдържа в списъка и ако е така, взима указателя към обекта записан срещу този ключ. Повече за това как се изпращат данни към устройството и как се поддържа този списък е описано в точка “Обект устройство”.
Има още едно, макар и доста по-сложно, решение на този проблем. При него обаче създаването на отделен обект за всяко устройство отпада. В .NET средата с TCP/IP се работи чрез така наречените сокети (sockets), които могат да се разглеждат като едни виртуални TCP портове, през които минава цялата комуникация за дадена сесия. Идеята на това решение е отново да се поддържат списъци с елементи от тип ключ-данни, но данните да не са указатели към специални обекти, а указатели към сокет обекти, които обслужват дадена TCP сесия. Данните, които пристигат на тези сокети ще се буферират в специален буфер, който операционната система поддържа за всеки сокет, и ще останат там докато не се прочетат и буферът не се изчисти.
Ако буфера достигне максималния си размер преди да бъдат прочетени данните, всички следващи данни, които пристигат за него ще бъдат автоматично игнорирани от операционната система. Списъкът от сокети, ще бъде разделен на части от по 20, като всяка отделна част ще се обслужва от отделна нишка, която ще обхожда последователно всеки един сокет, ще прочита данните, които се пазят в неговия буфер и ще ги записва в базата данни. По този начин, за да обслужим 1000 устройства ще са нужни 50 нишки вместо 1000, както е при първия вариант.
От гледна точка на производителността и икономията на системни ресурси, вторият вариант изглежда по-удачен. Недостатъците му проличават в момента, в който трябва да се изгради модел за ефективно управление на нишките, които облужват устройствата и когато се наложи да се изпращат данни към тях, последното от които е много важно условие. Списъкът със сокети се управлява динамично, тоест когато например дадена TCP сесия се разпадне, чрез методи предоставени от средата за разработка, сокетът и ключът за тази сесия се премахват от списъка, а елементите след него се преместват с една стъпка нагоре. Тогава често ще се стига до ситуация, в която ще има например 10 обслужващи нишки, но 5 от тях ще обслужват 20 сокета, а останалите 2 сокета, тоест не всички ще са максимално ефективни.


Структурно описание
37
В този случай, за да се подобри ефективността на работа, трябва да се създаде сложен оптимизационен модел, при който главната нишка на сървърния обект да следи колко активни сокета има в момента, колко активни нишки и при нужда да унищожава и създава нови нишки за обслужване, което никак не е проста задача и води допълнителни затруднения със себе си.
Освен заради гореспоменатите прични, изборът на решение пада върху първия вариант и защото при наличие на отделен обект за всяко устройство, можем да вградим методите за комуникация и други данни за него, които трябва да се поддържат за всяко устройство, директно в обекта, което го прави автономен и следва принципите на обектно ориентираното програмиране. При един достатъчно мощен процесор, каквито са повечето в момента, поддържането на 1000 нишки едновременно не би било проблем, така че този недостатък може да се счита за преодолим.
Сървърният обект ще включва и методи чрез, които обвиващите го приложения ще могат да го стартират, спират и рестартират. Стартирането ще включва, осъществяване на връзка с базата данни и стартирането на основната нишка “слушаща” за заявки за връзка, а спирането последователно унищожаване на всички обекти-устройства и на главната нишка.


38 диаг. 1 Работа на сървърният обект при приемане на заявки за връзка от устройства


39 диаг. 2 Работа на сървърният обект при обработка на заявки за изпращане на команда


Структурно описание
40 40
Обект “устройство”
След като дадена заявка за връзка премине валидацията, сървърният обект създава за всяка успешна заявка по един такъв обект, който се грижи за поддръжката на комуникацията между устройството и сървърния компонент.
За бъде създаден такъв обект е необходимо да се подаде следната информация към конструктура му:
 указател към TCP сокет през, който ще минава комуникацията
 указател към интерфейс за връзка с база данни
 низ съдържащ уникалния номер на устройството, което обектът обслужва
 низ съдържащ номера на устройството в базата данни
 число задаващо големината на буфера за четене и приемане на данни
След като бъде създаден обектът “устройство” започва да изпълнява своя собствена нишка, която периодично проверява дали има данни пристигнали на сокета, с който обекта е инициализиран. Ако има нови данни те се прочитат, интерпретират се и ако всичко с тях е наред се записват на съответното място в базата данни. Ако данните са неточни и не могат да се интерпретират правилно, то те се игнорират и не се записват в базата.
Обектът “устройство” включва в себе си метод за изпращане на команди през сокета, с който е инициализран. Когато сървърния обект желае да изпрати команда към дадено устройство, той взима указател към съотвения обект
“устройство” от списъка си, формира текстовия низ представляващ командата и го подава като параметър към метода за изпращане. Ако получи отговор, методът за изпращане на команди го препраща директно на сървърния обект, като задължението да го интерпретира се пада на последния. Ако настъпи някаква грешка при комуникацията с устройството, като например разпадане на връзката или липса на отговор от острещната страна, обекта “устройство” генерира съобщение, с което уведомява сървърния обект, че е настъпила грешка, той от своя страна го изважда от списъка си с активни обекти, след което обекта “устройство” се самоунищожава. Съществува вариант, при който методите формиращи низа представляващ дадена команда, да бъдат вградени в обекта “устройство”, но тъй като командите са едни и същи за всички тях е по-удачно да се изолират в сървърния обект, като по този начин запазват компактността на обекта “устройство” и намаляват обема памет, който целия сървърен компонент може да заема, защото може да имаме 1000 обекта
“устройство”, но само един сървърен обект за даден модел устройство.


41 диаг. 3 Работа на обекта „устройство” при обработка на данните на дадено устройство


42 диаг. 4 Работа на обекта „устройство” при обработка на заявка за изпращане на команда към устройство


Структурно описание
43
Обект “интерпретатор”
Както е показано на фиг. 4 всеки обект “устройство” създава своя инстанция на обект наречен “интерпретатор”. Този обект съдържа методи, чрез които данните получавани от устройствата могат да се интерпретират или “превеждат” в смислена информация, която после да се обработи по съответния начин.
На практика в обекта “интерпретатор” е заложен протокола на съобщенията, който сървърният компонент и устройството ползват, за да комуникират. Този протокол е специфичен за всеки тип (модел) устройство и затова, когато към системата се добавя поддръжка за нов тип навигационни устройства, се ползва вече изградения модел на сървърен компонент, като се пренаписва само обекта “интерпретатор”.
Системата
Follow Me on the Web, работи с навигационни устройства модел MPS U1, разработка на фирма Мултипроцесорни Системи ООД.
Комуникацията с тези устройства се извършва чрез директен обмен по TCP/IP протокол на ASCII текстови съобщения, съдържащи различни данни. Затова обектът “интерпретатор” написан за U1 сървърния компонент, съдържа по един метод за превод на всяко възможно съобщение, което може да се обмени между сървъра и устройството. Обектите ползващи методи от обекта
“интерпретатор”, трябва да знаят във всеки момент какво съобщение да очакват, за да могат да извикат подходящия метод и да интерпретират съобщението правилно. Ако някой метод, интерпретиращ дадено съобщение, върне грешка при “превода”, т.е данните, които са му подадени не изпълняват изискванията на възприетия протокол, то това съобщение се игнорира и данните от него не се обработват по-нататък.
Така описания подход има два неприятни недостатъка. Един от тях е фактът, че въпреки това, че при създаването на нов сървърен компонент е необходимо да се пренапише само обекта “интерпретатор”, това не винаги е толкова просто колкото изглежда. Също така, след създаването на нов сървърен компонент със специфичен обект “интерпретатор”, задължително се налага прекомпилация на приложението и повторно „разгъване” върху сървърната машина, а ако инфраструктурата на приложенито не е проектирана правилно, това може да доведе до временно спиране на цялата система.
Най-добрия подход към тези проблеми би бил използването на XML схеми за дефиниране на протокола на съобщенията между сървъра и устройствата. С използването на такива схеми е възможно дори с прост текстов редактор да се опишат някакви данни, спазвайки изискванията на


Структурно описание
44
така наречените дефиниции на XML схеми (XML schema definition). Тогава, описвайки протокола с една или няколко схеми, можем да посочим на сървърния компонент, че за този модел устройство трябва да ползва тези схеми, за да интерпретира данните, които получава. За целта, обаче, устройството трябва да изпраща не прости ASCII текстови съобщения, а XML документи генерирани вътре в него по същата тази схема. Тогава след като получи XML документ сървърът го интерпретира според схемата, ползвайки мощните инструменти, които Visual Studio .NET предлага за тази цел и след това ги обработва по съотвения начин. Следователно, при този подход, за да добавим поддръжка към системата на нов протокол на съобщенията, е неоходимо само да сменим файла съдържащ XML схемата с дефиницията му и нищо повече. Без нужда от прекомпилация, без нужда от писане на нови интерпретатори.
От казаното до тук определено изглежда, че вторият подход е много по- удобен. В случая с U1, проблемът се състои в това, че вграждането в него на необдходимата XML и HTTP поддръжка, би затруднила сериозно изчислителните му възможности, което се оказва голям проблем и налага използването на прости ASCII текстови съобщения за комуникация. При модели навигационни устройства MPS U2 и MPS U3, чиято изчислителна мощ е доста по-голяма, използването на XML за дефиниране на протокола е предвидено и предстои скорошното му вграждане в системата
Follow Me on the Web.
Обект “интерфейс към база данни”
Методите от този обект дават възможност за четене и запис на данни от/в базата данни чрез използване на стандартните SQL заявки. Това са например, методи за вмъкване на данните от NMEA съобщенията, валидация на номер на устройство, запис дали устройството е свързано към системата или не и т.н.
Две особености на проектирането заслужават повече внимание. Според целите и задачите на приложението, базата данни, която е ключов елемент от него, трябва да бъде създадена чрез използване на MySQL като сървър за база данни. На пръв поглед това изглежда много подходящо, тъй като качествата на MySQL са безспорно доказани, а ползването му в зависимост от избрания лиценз е или безплатно или доста евтино. Visual Studio .NET обаче не предлага вградена поддръжка за работа с MySQL бази данни, което налага ползването на драйвери за целта от трети производител. За щастие такива драйвери за MySQL под .NET не липсват и за целите на проекта бяха избрани тези на украинската фирма CoreLab Ltd. – MySQL Direct .NET. Този


Структурно описание
45
продукт е изграден по модела на драйверите на Microsoft за разбота с MS SQL сървър, съвместим е с ADO .NET технологията и предлага всичко необходимо.
В показаната на фиг. 4 структура на сървърния компонент всички негови модули ползват една и съща инстанция на обекта “интерфейс към база данни”. Всъщност те ползват създадения от този обект така наречен пул с връзки към базата данни (connection pool), като големината на пула (броят отворени връзки) се задава като параметър в низа за връзка с база данни на сървърния обект. Един пул с връзки към базата данни изисква от MySQL сървъра да създаде само една нишка за обслужването му (а не примерно по една нишка за всяка връзка), което драстично намалява натоварването му.
Когато даден метод поиска връзка с базата, MySQL драйвера вади една от пула, ако има такава, методът си свършва работата и я затваря, но на практика тя не се затваря, а просто се връща в пула, след което може да се ползва повторно. Подобен подход увеличава доста производителността на сървърния компонент и намалява натоварването върху базата, тъй като не е небходимо при всяка заявка да се прави изцяло нова връзка към базата, което е времеотнемаща и натоварваща операция.
Приложението windows услуга
Според изискванията към мениджърът на устройства, сървърният му компонент трябва да бъде изграден като приложение от тип windows услуга.
Както се видя от изложеното по-горе, сървърният обект е изграден като DLL библиотека с цел да се подобри преносимостта на приложението и възможността за поддръжка. За да се удовлетвори изсикването за изграждане на windows услуга, ще създадем приложение от такъв тип, като Visual Studio
.NET предлага готов шаблон за подобен проект.
Стандартните приложения windows-услуги задължително имплентират два метода в себе си Start и Stop, които се изпълняват при настъпване на съответното събитие, като нашето няма да прави изключение. При стартиране или спирането на услугата, всъщност ще се стартира или спира работата на сървърния компонент с тази особеност, че този път той ще работи в привилегирован режим на процесора и системата (kernel mode).
Друга важна задача на windows услугата е да регистрира сървърния компонент, като дистанционно достъпен обект (remotable object) в Remoting системата на Windows, като част от осъществяването на връзка между него и интерфейсния компонент. Повече информация за връзката между двата компонента има в следващата точка съдържаща описание на интерфейсния компонент.


Структурно описание
46
Проектиране на интерфейсния компонент
За разлика от сървърният компонент, интерфейсният няма да бъде проектиран като самостоятелна DLL библиотека, която в последствие да може да бъде имплементирана от други приложения. При интерфейсния компонент не се цели преносимост, а предоставяне на удобен и широко достъпен интерфейс за други приложения, които желаят да обменят данни с някое от устройствата.
Задачата на сървърния компонент най-общо е само да слуша за данни от устройствата и да ги записва, но за да има реална полза за потребителя от една такава система, трябва да има и компонент, който да предлага възможност за извършване на полезна дейсност с тези данни. В системата
Follow Me on the Web този компонент се нарича “мениджър на потребителите” (user manager) и той се грижи за визуалното представяне на събраните данни и при нужда за осъществяване на връзка между потребителя и устройството вградено в автомобила му. В случая точно за осъществяването на тази връзка е неоходимо мениджърът на устройства да предостави интерфейс към сървърния си компонент, тъй като той е отговорен за комуникацията с навигационните устройства. Web услугите предоставят уникална възможност за реализирането на подобен интерфейс, който да не бъде тясно свързан с някой език и среда за програмиране, а да ползва стандартни технологии.
Този интерфейс представлява всъщност съвкупност от методи, които други приложения могат дистанционно да извикват. Методите на интерфейсният компонент представляват една своеобразна “обвивка” на тези на сървърният компонент, тъй като често те само извикват даден сървърен метод и връщат резултата от неговото изпълнение без да правят допълнителна обработка над него.
Дефиницията на този интерфейс се вгражда в достъпен отвън WSDL файл, който е специфичен XML документ, където се съдържа цялата информация (като име на метода, параметри към него, тип на връщаната стойност) необходима на клиента на web услугата, за да изивика съответния метод. След като клиентът добие представа за интерфейса, който web услугата предлага, прочитайки нейния WSDL файл, той използва XML базираният SOAP протокол, за да формира SOAP заявка за изпълнение към web услугата. Когато такава заявка се получи, ASP .NET сървърът автоматично я интерпретира и извиква посочения в нея метод, след което резултатът от изпълнението му автоматично се кодира обратно в SOAP съобщение и се връща на заявителя.


Структурно описание
47
Фиг. 5 Свързване на компонентите на МУ с използване на .NET
Remoting технология
Фактът, че .NET средата автоматично сериализира и десериализира съобщенията в SOAP протокол е много важен, тъй като това е един от най- тънките моменти при създаването на web услуги, а в случая разработчикът е освободен от това бреме и може да се концентрира върху по-важните задачи на проекта. За осъществяване на връзка между компоненти, намиращи се на различни машини, на пръв поглед в случая може да се използва и технология като DCOM (Distributed Component Object Model). Тогава интерфейсният компонент ще бъде изграден като DCOM сървър, имплементиращ някаква функционалност, а компонентите които желаят да комуникират с мениджъра на устройства, като DCOM клиенти. Дори и да пренебрегнем факта, че DCOM е доста по-труден за имплементиране от web услугите, използването му е в разрез с едно от основните изисквания към интерфейсният компонент, а именно осигуряване на платформена независимост на компонентите, които го ползват. DCOM е технология на Microsoft, налагаща техния модел на проектиране на приложения и използване само на продукти и езици съвместими с Windows, докато web услугите, както многократно беше казано, използват стандартни технологии и могат да се имплеметират от приложения работещи на всякакви платформи. Затова е по-удачно подхода към създаването на интерфейсния компонент да бъде чрез използването на web услуги.
Remoting система
Сървърен обект
И
н те р
ф е
й се н
к о
м п
о н
е н
т
Remoting система
Обект клиент
(ASP .NET Web service)
Proxy обект
С
ъ р
в ъ
р е
н к
о м
п о
н е
н т
TCP/IP канал
МЕНИДЖЪР НА УСТРОЙСТВА заявки от други приложения резултат от изпълнението
S
O
A
P


Структурно описание
48
Извикването на методите на интерфейсния компонент на мениджъра на устройства става по стандартния за web услугите начин. Той предлага съвкупност от методи, които всъщност обвиват тези от обекта “сървър”, като не позволяват те да бъдат извиквани директно от други приложения от съображения за сигурност.
Интерфейсният компонент се свързва със сървърния, използвайки технологията .NET Remoting, както е показано на фиг. 5. Както беше казано и преди, използването на .NET Remoting се налага, тъй като двата компонента - сървърния и интерфейсния - на практика са две различни приложения, намиращи се в отделни AppDomain-и, според терминологията на .NET Framework-a. В такъв случай директното извикване на методите на единия компонент от страна на другия е невъзможно най- малкото, защото операционната система не би го позволила.
При използване на .NET Remoting, двете комуникиращи страни се разделят на страна клиент и страна сървър. Клиентът е приложение, което извиква методи на отдалечен обект (remote object) сървър. В случая обектът клиент е интерфейсният компонент, по-специално ASP .NET web услугата, а обектът сървър е сървърният компонент на мениджъра на устройства. Преди обаче да бъде осъществена каквато и да е комуникация, сървърният обект трябва да определи, т.е да се направи съответната конфигурация, по какъв канал ще си комуникира с клиента, на кой адрес и порт, времето му на живот и какъв тип ще бъде. Тази информация е необходима, за да може по- късно обектът клиент да адресира правилно заявките си за извикване на методи от обекта сървър. Конфигурацията може да бъде зададена, както програмно, чрез съответните класове на .NET Framework, така и чрез специален XML файл, където тя да се опише.
Съществуват два възможни канала за комуникация между обекта клиент и обекта сървър – по TCP/IP и по HTTP. Тоест, съобщенията и данните, които двете страни си обменят, автоматично се сериализират и десериализират в един от двата протокола и се предават вътрешно за машината, използвайки вградения в операционната система стек за съотвения протокол. Изборът на един от двата зависи от конкретните изисквания на приложението. В случая аз избрах TCP/IP. На сървърния обект трябва да бъде фиксиран TCP адрес и порт, на който по-късно клиентът ще може да го достигне. Адресът представлява сбор от името на асемблито, на приложението плюс името на класа и именованото пространство (namespace), в което той се намира. В
.NET Remoting сървърните обекти могат да бъдат два вида – клиентски активирани (client activated objects - CAO) и сървърно активирани (server activated object - SAO). Сървърните обекти, които ще бъдат достъпни за отдалечения клиент, се регистрират в remoting системата, като такива, но реално се създават при първата клиентска заявка за достъп до тях ако са от втория вид или когато клиента извика оператора New или Activator обекта, ако са от първия вид. Освен това, сървърните обекти могат да бъдат от тип


Структурно описание
49
Singleton или SingleCall. Обектите от първия тип винаги имат една инстанция, която обслужва заявките на клиентите, докато тези от втория тип имат по една своя инстанция за всяка клиентска заявка. Друга важна опция, която трябва да се зададе при конфигурацията на сървърния обект, е времето му за живот. Това време почва да се отчита в момента на активирането (клиентски или сървърно) на обекта, като след изтичането му всички указатели към него се унищожават, той се отрегистрира от remoting системата и вече може да бъде събран от системата за събиране на боклука в .NET. В случая, сървърния обект на мениджъра ма устройства е сървърно активиран обект от тип Singleton, времето му на живот е безкрайно, а конфигурацията му е зададена програмно в конструктора на приложението windows услуга.
След като сървърният обект е конфигуриран правилно, той вече може да бъде достигнат от обекти клиенти. За целта клиентският обект, желаещ да ползва методите на сървърния, трябва да зададе абсолютно точно адреса дефиниран в конфигурацията на сървърния обект, иначе remoting системата няма да може да го идентифицира и комуникацията няма да се осъществи. В интерфейсния компонент тази конфигурация се инициализира при настъпването на събитието OnStart() на web услугата. Така, при получаване на първата заявка към услугата, връзката между обекта клиент и обекта сървър ще се осъществи и след това обработката на всяка следваща заявка ще става по вече изградения канал, без да е необходимо той да се създава и да се унищожава всеки път. Ако всичко по настройките е правилно, в remoting системата се регистрират обект клиент и обект сървър, като в първия се създава така наречения proxy клас, който е локално огледално копие на сървърния обект. Така методите на сървърния обект могат да се викат от клиентския все едно са част него, но на практика там има само указатели към методите на сървърния обект, управлявани от remoting системата. Това е така, защото сървърния обект на мениджъра на устройства е конфигуриран да бъде използван като обект, към чийто методи трябва да се обръщаш по адрес (Marshal By Reference object), а не по стойност. Когато обръщението е по стойност, сървърният обект се изкопирва изцяло в клиентския и заявките към него се обслужват от локалното копие. При заявка за изпълнение по адрес към някой от методите на proxy класа, .NET remoting системата приема тази заявка, пренасочва я по предварително избрания канал към сървърния обект, той я изпълнява и връща резултата от изпълнението към клиента по същия този канал, т.е заявката се обслужва от инстанция на обекта в сървърната страна.


Структурно описание
50
Проектиране на базата данни
Базата данни, част от приложението мениджър на устройства, е мястото където се съхранява цялата информация, необходима за функционирането на системата за КУПС като цяло, не само на мениджъра на устройства. Тази информация включва следните категории данни:
 данни изпратени от устройствата (GPS координати, настъпили събития, състояние на входовете и изходите) – съхранявани съответно в таблици GPSRecords и PinData
 данни за самите устройства (уникален номер на устройството, GSM номер, GSM пин код и т.н) - съхранявани в таблица GPSDevices
 данни за автомобила (марка, модел, регистрационен номер и т.н) – съхранявани в таблица GPSDevices
 данни за клиентите и потребителите (име, парола, фирма, ниво на достъп и т.н) - съхранявани съответно в таблици Custommer и
Users.
 данни с описание на
 каналите за обмен на информация през GSM мрежата, които устройството използва – таблица Channels
 точките за достъп на GPRS средата (APN - Access Point Name) – таблица APN
 разрешените GSM номера за рапорт - таблица GSMNumbers
 нивата на достъп на всеки потребител - таблица Access Level
 вида на сигнала, който даден вход на устройството измерва - таблица PinNames
Повече информация за таблиците, данните в тях и как са организирани тези данни може да се прочете в глава 4, в точката с описание на имплементацията на базата данни.
Изборът на алгоритъм за съхраняване и обработка на данните е жизнено важен при създаването на база данни. MySQL поддържа два от най- използваните алгоритъма – InnoDB и MyISAM. Като всяко нещо, те си имат предимства и недостатъци и изборът на един от тях зависи от конкретното предназначение на базата данни и изискванията към нея. Също така те позволяват да бъдат прецизно конфигурирани, с цел да паснат още повече на нуждите на системите, където са използват. В случая InnoDB беше избран,


Структурно описание
51
като основен алгоритъм за съхранение на информация в базата данни на мениджърът на устройства, главно заради неговата висока производителност и същевременно малкото процесорно време и мощ, което изисква. Това е може би най-бързият алгоритъм за съхранение и обработка в релационните бази данни в момента, способен да поема натоварвния от порядъка на 800 заявки за вмъкване/обновяване (insert/ update) в секунда. Вероятността мениджърът на устройства да се натовари до такава степен е много голяма, тъй като той трябва да е способен да управлява до 1000 устройства едновременно и базата данни не трябва да прави изключение в това отношение.
Също така, базата данни трябва да е в състояние да съхранява данните на всички 1000 устройства за период от максимум 30 дни. При средна големина на едно съобщение, съдържащо GPS данните от 80b и при средна честота на рапорт на позицията 15 сек., това прави около 13 GB данни генерирани от 1000 устройства и събирани от само един от приложните сървъри, които трябва да могат да се съхраняват в базата. На практика
InnoDB няма огрничение, за максималния размер на таблиците, докато
MyISAM алгоритъмът има такова от 4GB на таблица. Следователно, InnoDB покрива всички изисквания на нашето приложение и е заслужилият победител при избора на алгоритъм за съхранение и обработка.
За да се съхраняват данните максимум 30 дни в базата, трябва също така да се проектира метод, с който тези данни да се изчистват от там след изтичане на този срок. Тъй като сървърът с базата данни е физически отделна машина е по-сложно този метод да се проектира като част от сървърния или интерфейсния компонент. Затова този метод е реализиран като отделно приложение от тип windows услуга, което се изпълнява директно на сървърната машина. Приложението е настроено на всеки 1 час да сканира таблицата със записите за позицията на даден автомобил и да премахва всеки запис, чиято дата на вмъкване е по-стара от 30 дни спрямо сегашната. Фактът, че се изпълнява като windows услуга, му позволява да заема минимум системни ресурси и по-този начин да не пречи на нормалната работа на базата данни.
Друг важен проблем, който трябва да бъде решен при създаването на база данни, е как да се запази нормалната работа на системата и данните в базата ако цялата машината или част от нея (например твърд диск) спре да функционира по някаква причина. В мениджъра на устройства този проблем е решен чрез използването на репликация (replication) на базата данни и софтуерен RAID между дисковете. Репликацията на база данни е възможност за поддържане на резервно копие на данните в главната машина в реално време, чрез динамичното им копиране в друга машина, която се явява огледално копие на главната. За целта едната машина се обявява за главна и


Структурно описание
52
всички приложения работят само с нея, а другата, съдържаща резервното копие, за подчинена, като броят на подчинените машини може да бъде повече от един. Записите, които се добавят към таблиците в главната база данни ,автоматично се добавят и към таблиците на подчинените машини.
Фиг. 6 Реализация на репликацията в базата данни на МУ
Ако се случи главната машина да откаже и да спре работа, то някоя от подчинените машини веднага става главна и поема работата, без да спира нормалното функциониране на системата. След като повредената машина бъде поправена, тя отново може да бъде пусната в действие (но като подчинена машина тъй като за главна вече е обявена тази, която е поела работата в момента, в който тя се е повредила) като, след включването й към системата MySQL, автоматично ще добави в нейните таблици записите, които master slave со ф
ту е
р е
н
R
A
ID
h d
d
0
h d
d
1
hdd 0 hdd 1 hdd 0 hdd 1 п
од ч
и н
е н
с ъ
р в
ъ р
п од ч
и н
е н
с ъ
р в
ъ р
главен сървър приложен сървър web сървър репликация репликация р
е зе р
в е
н д
ос тъ п
TCP/IP
TCP/IP р
е зе р
в е
н д
ос тъ п
ос н
ов е
н д
ос тъ п
д о б
а за та
T
C
P
/I
P


Структурно описание
53
за попълнени през времето, в което тя е била извън строя. Използването на репликация позволява подчинените машини да се намират дори на физически отдалечено място от главната машина, като по този начин, се предовратяват възможните сривове на системата, предизвикани например от спиране на електрическото захранване в цялата сграда.
Като двойна защита от опасността от загуба на данни при повреда на машината, на която работи базата към нея е добавена поддръжка и за така наречения софтуерен RAID. Той се реализира, като към самата машина се добавя един подчинен твърд диск, на който Windows XP Server софтуерно поддържа огледално копие на главния. Тоест, когато някакви данни се добавят към главния диск, те автоматично се добавят на същото място и на подчинения. Ако главният диск спре да работи, функциите му веднага се поемат от подчинения без да се предизвиква срив на системата, тъй като информацията на подчинения е идентична с тази на главния.
Проектиране на инфраструктурата
Последният етап от проектирането на приложението “мениджър на устройства” е проектирането на необходимата му инфраструктурата. Тъй като мениджъра на устройства е не просто приложение, изпълняващо се на дадена машина, а подкомпонент на една по-голяма система, то неговото нормално функциониране зависи и от други нейни елементи, които трябва да се организират и свържат по съответен начин. Под инфраструктура на системата се има предвид точно това – как са свързани, по какъв начин комуникират, по какви протоколи и какви данни обменят различните компоненти на мениджъра на устройства, като приложни сървъри, база данни, клиенти, навигационни устройства и т.н.
На фиг. 7 е показано как компонентите на цялата система
Follow Me on the Web са свързани по между си. Навигационните устройства изпращат своите данни по GPRS канала на GSM мрежата, които след това се пакетират в TCP/IP протокол и през Интернет достигат до някой от приложните сървъри на системата. Преди да достигнат до самия приложен сървър, данните преминават през два етапа. Първо трябва да минат през проверката на firewall-а на локалната мрежа. Ако не успеят, заявката им за връзка или данните им се игнорират и TCP сесията с тях се затваря, а ако успеят достигат до така наречената система за балансиране на товара (LBS) на мениджъра на устройства. Това всъщност е програма, използваща специален алгоритъм за разпределение на заявките на потребителите, когато има


Структурно описание
54
няколко машини за обслужването им, с цел всяка една машина да бъде оптимално натоварена. В случая заявките на потребителите са заявките за връзка и данните на навигационните устройствата, а машините, които ги обслужват са приложните сървъри, на които се изпълнява мениджъра на устройства.
Фиг. 7 Инфраструктурна организация на мениджъра на устройства
Тъй като всеки един приложен сървър има капацитет от максимум 1000 едновременни TCP сесии, когато броят на устройствата обслужвани от системата стане по-голям от общия капацитет на всички приложни сървъри работещи в момента, се налага добавянето на нова машина към системата, която да работи като приложен сървър. В такъв случай може да настъпи ситуация, в която всички или повечето от заявките се обслужват от една от машините, докато останалите през това време бездействат и създават локална мрежа web сървър приложен сървър приложен сървър приложен сървър база данни
1 2 n fi re w
a ll
LB
S
с и
ст е
м а
Интернет
GSM мрежа
1 2 n навигационни устройства b
a ck
-u p
к л
и е
н т
HTTP
HTTPS
TCP-IP
GPRS заявки на потребители данни от устройства
SQL заявки


Структурно описание
55
предпоставки за претоварване или отказ на системата. Затова се налага използването на система за балансиране на товара. Съществуват няколко доста сложни и мощни алгоритъма за балансиране на товара, използвани в някой от най-големите Интернет сайтове и системи в света, които разпределят натоварването в зависимост от моментната заетост на всяка една машина в системата. За нашите цели обаче не ни е необходимо толкова прецизно балансиране и затова е използван прост алгоритъм наречен Round
Robin. Чрез него всяка следваща заявка за връзка от дадено устройство се пренасочва към следващия поред приложен сървър в системата, без да се отчита индивидуалната натовареност на машините или на системата като цяло. Например, гледайки фиг. 7, ако една заявка за връзка се обслужи от приложен сървър N1, то следващата ще бъде пренасочена за обслужване към приложен сървър N2, последващата към приложен сървър N3 и т.н Ако даден сървър, към който се пренасочва текущата заявка, е достигнал капацитета си, то тази заявка се препраща последователно към следващия поред, докато се достигне сървър, който може да я обработи. Ако такъв не се намери, то заявката се отхвърля след като и последния поред сървър заяви, че не може да я обслужи. Това наглед просто балансиране, дава много добри резултати и задоволява изцяло нуждите на системата в сегашния й вид.
Както се вижда от фиг.7, всички машини от системата са свързани чрез локална мрежа и комуникират по TCP/IP протокол по между си. Web сървърът, отбелязан там, е машината, която обслужва заявките от клиентските интернет браузъри. Тези заявки идват по стандартния HTTP протокол, но ако се обменя секретна информация, като например потребителско име и парола, се използва криптирания му вариант – HTTPS.
Това е и машината, която комуникира с МУ през интерфейсния му компонент и генерира заявки за изпращане на команди към някое устройство. Тъй като web сървърът и приложението, което се изпълнява на него, са извън темата на настоящата дипломна работа, няма да се впускам в детайлно описание на това как той работи. Въпреки това, описвайки инфраструктурата на системата, трябва да се спомене и неговото място в нея, в противен случай схемата на фиг. 7 не би имала смисъл.
Базата данни също комуникира по TCP/IP протокол с всички останали компоненти, като изпълнява стандартни SQL заявки изпратени от някой от тях. Както подробно описах в предходната точка, тя се изпълнява на отделна машина ползвайки MySQL, като сървър за база данни и включваща две нива на подсигуряване от загуба на информация и следователно срив на системата.


Структурно описание
56
Обобщение
Представеното приложение, наречено мениджър на устройства, е комплексна система за автоматизиране на комуникацията между централна компютърна система и на практика неограничен брой навигационни устройства, които използват мрежата на мобилен оператор, като преносна среда за данни. Комуникацията се осъществява през TCP/IP протокол, което позволява вграждането на нови възможности в навигационните устройства и предоставяне на нови услуги на потребителите. По този начин навигационните устройства се издигат от нивото на обикновенни GPS приемници и стават сложни микро компютри способни да поставят под контрол целия автомобил и да позволят на потребителя да го упражнява, от която и да е точка в света, използвайки обикновен web браузър.
Използването на GPRS и TCP/IP за пренос на данни е свързано с някой проблеми при тяхната имплементация, а някой биха добавили, че икономически използването им е неизгодно и че SMS съобщенията вършат идеална работа като канал за пренос данни. Истината, както винаги е някъде по средата. GPRS предлага много по-високи скорости при преноса на данни, постоянна свързаност с отдалечената страна, TCP/IP протокол за комуникация и т.н , но цената му на някой места все още е относително висока, а ако се използва като единствен канал за комуникация с навигационното устройството и се случи той да откаже, в един момент може да се стане така, че устройството да се окаже недостижимо по дистанционен път. Точно тук SMS съобщението може да реши проблема, като например се прати съобщение с команда за рестартиране устройството, след което да се възстанови отново комуникацията през GPRS. Ситуации като горната, които могат да възникнат има най-различни и логичният извод е че комбинацията от GPRS, като основен канал за пренос на данни и SMS като резервен е най- удачна. В първата фаза на развитие на приложението “мениджър на устройства” липсва поддръжка на SMS комуникация с навигационното устройство, но ползите от нея са безспорни и за това тя е предвидена за вграждане във втората фаза на проекта.
От гледна точка на дизайна и програмната реализация, мениджъра на устройства е изключително гъвкав, създаден чрез стандартни широко използвани технологии, предлага лесен и бърз начин за интегриране на нови модели навигационни устройства към системата, в която работи и може лесно да бъде интегриран във вече съществуващи такива системи. Липсата на XML поддръжка при интерпретирането на протокола на съобщенията, използван от конкретен модел устройство, може да се изтъкне като недостатък в това отношение, но тя е предвидена за вграждане в следващия етап от развитието на приложението. Във втората фаза е предвидено да бъдат взети и някои по-


Структурно описание
57
сериозни мерки към сигурността на приложението при комуникация с устройството и особено при връзката между двата му основни компонента чрез .NET Remoting и web услуги, защото тези взети досега са само основните такива, които трябва да бъдат вградени.
Интернет ресурси
Microsoft .NET Remoting: A Technical Overview http://msdn.microsoft.com/library/default.asp?url=/library/en- us/dndotnet/html/hawkremoting.asp
Статия описваща .NET Remoting технологията в детайли и даваща много препратки към други източници по темата.
Replication in MySQL http://dev.mysql.com/doc/mysql/en/replication.html
Дава начални сведения за репликацията, като технология и подробни инструкции как да се конфигурира тя под MySQL.
Visual Studio .NET http://msdn.microsoft.com/vstudio/
Страницата на Visual Studio .NET. Портал към необятно количество ресурси за
VS .NET, C#, .NET Framework и т.н
XML.com http://www.xml.com/
Портал поддържан от световно известното издателство O’Reilly с много
”горещи” новини засягащи XML и препратки към най-различни ресурси по темата.
Intel® Load Balancing System www.intel.com/design/network/solutions/lbs/
Съдържа описание на система за балансиране на товара, разработен от Intel, както и добре представена начална информация за тези системи, като цяло.


Глава IV
Описание на имплементацията изайнът на приложението и изискванията към него вече са изчистени. Сега знаем как ще работи то, от какви компоненти се състои, как те си комуникират, какви технологии и протоколи изпозлват и т.н Време е да направим следващата стъпка, а именно програмната реализация на вече проектираната система. Тя крие своите особености, които е важно да бъдат добре разбрани, ако човек желае да изцяло да познава описваната система.
В тази глава съм систематизирал информация като кратко описание, параметри, тип на връщаната стойност, възможни изключителни ситуации и т.н за всички класове, свойства или методи на съответния компонент от приложението. Пълният изходен код заедно с проектите на Visual Studio .NET, за всеки един компонент може да бъде намерен на съпътстващото дипломната работа CD. Това са приложенията, представляващи DLL библиотека
(имплентираща сървърния компонент), приложение windows услуга
(обвиващо сървърния компонент), приложение web услуга (имплементиращо интерфейсния компонент) и описание на таблиците на базата данни. Тези компоненти се отнасят и са сглобени в едно приложение съгласно дизайна описан в предходната глава.
Д


59
Сървърен компонент
DLL библиотека
Клас Server
Public конструктори
Server
Създава нова инстанция на сървърния клас
Public свойства
DeviceCount
Връща броя на устройствата свързани в момента към сървъра
OnLine
Връща информация за статуса на сървъра.
Public методи
Start()
Стартира чакането и обработката на заявки за връзка.
Stop()
Спира чакането и обработката на заявки за връзка.
Restart()
Спира и след това автоматично стартира чакането и обработката на заявки за връзка.
DeviceOnLine()
Връща масив с уникалните номера на устройствата свързани в момента към сървъра
ReadGPRSTimer()
Изпраща команда за прочитане на интервала, на който дадено устройство праща рапорт за позицията по GPRS.
Protected методи
AcceptConnection()
Стартира чакането и обработката на заявки за връзка.
Listener()
Чака и обработва заявки за връзка
ChangePingTimer()
Променя ping таймера на всеки обект устройство


60
Protected методи
SetPingTimer()
Задава интервала, на който всеки обект устройство трябва да прави ping към отсрещната страна според текущата времева зона на заетост
MsgID()
Генерира случайно число, представляващо номер на съобщение
OnSocketError()
Обработва събитието SocketError възникнало в някой от обектите устройства


Сървърен компонент – DLL библиотека
61
Фиг. 8 UML диаграма на клас - Server


Сървърен компонент – DLL библиотека
62
U1.Server конструктор public
Server
( string ip, int port, string dbConnData
) : MarshalByReference параметри ip
IP адрес на който сървърът трябва да слуша за заявки port
TCP порт на който сървърът трябва да слуша за заявки dbConnData низ съдържащ информация необходима за осъществяване на сървър с база данни изключителни ситуации няма описание
Създава нова инстанция на сървърния обект, като инициализира променливите за IP адрес, порт и низ за връзка с база данни със стойностите, които му се поддават като параметри. Всички методи от този обект ползват именно тези стойности и те не могат да се променят в процеса на работа. При създаването на сървърния обект се инициализират редица други обекти, като обект “интерпретатор”, обект “интерфейс към база данни” и т.н, необходими за работата на сървъра. Класа наследява MarshalByReference класа, което позволява по-късно методите му да бъдат извиквани по адрес, а не по стойност от обекти клиенти.


Сървърен компонент – DLL библиотека
63
U1.Server.DeviceCount свойство public int
DeviceCount параметри няма изключителни ситуации няма връщана стойност
Цяло число представляващо броя на устройствата свързани в момента към сървъра. описание
Броя на устройствата свързани в момента към сървъра представлява броя на елементите в списъка с такива, който сървърният обект поддържа. Това свойство е само за четене.


Сървърен компонент – DLL библиотека
64
U1.Server.OnLine свойство public bool
OnLine параметри няма изключителни ситуации няма връщана стойност true ако сървъра е активен иначе false. описание
Свойството проверява дали статусът на нишката, слушаща и обработваща заявки, е активен. Ако е така значи сървърът работи нормално. Иначе работата му е нарушена поради някаква причина и нишката е спряна.


Сървърен компонент – DLL библиотека
65
U1.Server.Start() метод public void
Start() параметри няма изключителни ситуации няма връщана стойност няма описание
Стартира работата на сървърния компонент. Под стартиране се има предвид активиране на нишката, слушаща и обработваща заявки за връзка на IP адреса и порт зададен при инициализирането на сървърния обект, отваряне на връзката с базата данни и стартиране на нишката, извършваща периодичен “ping” на всички устройства. За да се стартира работата на
“Мениджъра на устройства”, задължително трябва да се изпълни този метод, иначе обектът ще остане просто инициализиран, но няма да върши никаква работа.


Сървърен компонент – DLL библиотека
66
U1.Server.Stop() метод public void
Stop()
параметри няма изключителни ситуации няма връщана стойност няма описание
Спира работата на сървърния компонент. Спирането се състои в прекратяване на нишката, слушаща и обработваща заявки, последователно обхождане на всички елементи от списъка с активни обекти “устройства” и тяхното унищожаване и затварянето на връзката с базата данни. След извикването на този метод, работата на сървъра спира и никакви заявки не се примат, нито се обработват данни идващи от устройствата. За да се възобнови работата на сървъра и на сървъният компонент, трябва отново да се извика метода Start().


Сървърен компонент – DLL библиотека
67
U1.Server.Restart() метод public void
Restart() параметри няма изключителни ситуации няма връщана стойност няма описание
Рестартира работата на сървърния компонент чрез последователно извикване първо на метода Stop() после на метода Start().


Сървърен компонент – DLL библиотека
68
U1.Server.DeviceOnLine() метод public string
[] DeviceOnLine() параметри няма изключителни ситуации няма връщана стойност
Масив тип текстов низ, елементите на който представляват уникалните номера на устройствата свързани в момента към сървъра. описание
Методът преравя вътрешния списък от устройства свързани в момента, който сървърния обект поддържа и копира в свой масив от тип текстов низ само елементите, представляващи уникални номера на устройства и накрая връща този масив като резултат от изпълнението.


Сървърен компонент – DLL библиотека
69
U1.Server.ReadGPRSTimer() метод public string
ReadGPRSTimer
( string devID, bool waitForReplay
) параметри devID
уникалният номер на устройството, към което трябва да се изпрати командата waitForReply true, ако извикващия иска метода да чака за отговор иначе false изключителни ситуации няма връщана стойност
Интервалът от време, в секунди, на който устройството е програмирано да рапортува позицията си. Null ако не се получил отговор или отговора е бил некорктен. описание
Методът генерира текстов низ, представляващ команда за прочитане на таймера (интервала на рапорт) на устройството по протокола, използван от навигационните устройства типи U1. След като генерира командата, методът претърсва списъка от устройства, свързани в момента, намира устройството със съответния номер, взима указател към обекта му и използва метода от него за изпращане на команда към устройството. Ако е програмиран да чака за отговор на командата, методът ще чака, ако не е ще се върне веднага след изпращането й. Ако отговор се получи, методът го конвертира в секунди и го връща като отговор на заявителя.


Сървърен компонент – DLL библиотека
70
U1.Server.AcceptConnection() метод private void
AcceptConnection
(
Socket sock
) параметри sock сокет, който е назначен за комуникация с отсрещната страна при приемане на заявката за връзка изключителни ситуации
SocketException комуникационна грешка при работа със сокета.
Ситуацията не се обработва, а се прехвърля на по- високо ниво в стека заедно с кода за грешката
ArgumentException устройство с дадения номер вече е свързано към системата
ObjectDisposedException сокетът е унищожен по някаква причина преди да стигне до метода връщана стойност няма описание
Когато сървърният обект получи заявка за връзка, той й назначава сокет, през който да се комуникира със страната желаеща връзка и вика метода
AcceptConnectio(), за да валидира заявката. Методът извлича уникалния номер на устройството, желаещо връзка, проверява го в базата данни дали е валиден и ако всичко е наред създава нов обект “устройство” за тази заявка, като го инициализира със сокета, който е първоначално назначен и накрая го добавя към списъка с устройства свързани в момента към сървъра. Ако настъпи грешка при една от горните стъпки, обработката на заявката се прекратява и сокета, който й е назначен се унищожава.


Сървърен компонент – DLL библиотека
71
U1.Server.Listener() метод private void
Listener() параметри няма изключителни ситуации
SocketException комуникационна грешка при работа със сокета.
ThreadAbortException спиране на нишката връщана стойност няма описание
Това е методът изпълняван в нишката чакаща и обработваща заявки за връзка към сървъра. Когато се получи заявка, се вика метода
AcceptConnection() и продължава да слуша за нови заявки.


Сървърен компонент – DLL библиотека
72
U1.Server.ChangePingTimer() метод private void
ChangePingTimer
( int interval
) параметри interval
Интервала, в секунди, на който всеки един обект трябва да прави ping към отсрещната страна изключителни ситуации няма връщана стойност няма описание
Методът обхожда последователно от началото до края елементите от списъка с устройства, свързани в момента към сървъра и използва метода
Change() на обектите им, за да смени таймера (интервала от време), на който всеки един обект трябва да прави ping отсрещната страна


Сървърен компонент – DLL библиотека
73
U1.Server.SetPingTimer() метод private void
SetPingTimer() параметри няма изключителни ситуации няма връщана стойност няма описание
Този метод се използва от специална нишка, която периодично, на зададен период от време, проверява текущото време и сменя ping таймера на обектите устройства в зависимост от това, в коя зона на заетост е деня в момента. Зоните на заетост, могат да се параметризират, и представляват интервали от време през деня, в които GSM мрежата е различно натоварена.


Сървърен компонент – DLL библиотека
74
U1.Server.MsgID() метод private string
MsgID() параметри няма изключителни ситуации няма връщана стойност
Текстов низ съдържащ генерираното число в шестнайсетичен вид описание
Генерира случайно число в интервала 8001-65535, което се използва като номер на съобщението, което се изпраща към устройството. След като получи съобщението успешно, устройството връща този номер, за да удостовери, че всичко е наред. Ако номерът не се получи обратно или се получи грешен номер, съобщението се счита за неуспешно изпратено и се изпраща отново.
Използването на номера на съобщенията се налага от протокола използван при комуникация с навигационни устройства тип U1.


Сървърен компонент – DLL библиотека
75
U1.Server.OnSocketError() метод private void
OnSocketError
( object sender,
U1Device.SocketErrEventArgs e
)
параметри sender обект генерирал събитието e данни, които обектът генерирал събититето праща заедно с него изключителни ситуации няма връщана стойност няма описание
Обработва събития свързани с грешки в обектите устройства. Когато в даден обект настъпи грешка, от която той не може да се възстанови, той се самоунищожава и генерира събитие уведомяващо сървърния обект за това.
След получаване на съобщение за настъпило такова събитие сървърния обект изважда обекта, изпратил съобщението, от списъка си с устройства свързани в момента към него.


Сървърен компонент – DLL библиотека
76
Клас U1Device
Public конструктори
U1Device
Създава нова инстанция на обект устройство
Public свойства
BytesRead
Връща количеството данни, в байтове, изпратени от устройството и прочетени от обекта
BytesSend
Връща количеството данни, в байтове, изпратени от обекта към устройството
OnLine
Показва дали връзката с устройството е активна
Public методи
Command()
Изпраща низ, представляващ команда, към устройството
Protected методи
Read()
Прочита данните пристигнали на сокета
Send()
Изпраща данни чрез сокета
Worker()
Чака и обработва данни, идващи от устройството
Ping()
Изпраща ping съобщение към устройството на даден интервал от време


Сървърен компонент – DLL библиотека
77
Фиг. 9 UML диаграма на клас – U1Device


Сървърен компонент – DLL библиотека
78
U1.U1Device конструктор public
U1Device
(
Socket sock, string devID,
DDB db, int buffSize, string devDBID
)
параметри sock сокет, на който устройството е свързано devID уникалният номер на устройството db обект интерфейс към база данни buffSize размер на буфера на сокета, за четене и изпращане на данни devDBID номер на устройството в базата данни изключителни ситуации няма описание
Създава нова инстанция на обекта устройство, като го инициализира с необходимите данни, за да се осъществи комуникация по TCP/IP между обекта и устройството. След като обектът бъде създаден, комуникацията с устройството, което той обслужва, става само през него.


Сървърен компонент – DLL библиотека
79
U1. U1Device.BytesRead свойство public int
BytesRead параметри няма изключителни ситуации няма връщана стойност
Цяло число, представляващо количеството данни в байтове, които са изпратени от устройството и прочетени от обекта описание
Представлява брояч, който се инкрементира при всяко четене на данни от сокета със съответната стойност равна на количеството прочетени байтове.


Сървърен компонент – DLL библиотека
80
U1. U1Device.BytesSend свойство public int
BytesSend параметри няма изключителни ситуации няма връщана стойност
Цяло число, представляващо количеството данни в байтове, които са изпратени от обекта към устройството описание
Представлява брояч, който се инкрементира при всяко изпращане на данни през сокета със съответната стойност равна на количеството изпратени байтове.


Сървърен компонент – DLL библиотека
81
U1. U1Device.OnLine свойство public bool
OnLine параметри няма изключителни ситуации няма връщана стойност true ако нишката на обекта е активна и обработва данни от устройството, иначе false описание
Проверява дали нишката на съответния обект устройство е активна, което означава, че връзката между обекта и устройството не се разпаднала.


Сървърен компонент – DLL библиотека
82
U1. U1Device.Command() метод public string
Command
(
String comm, bool waitForReply
) параметри comm текстов низ, представляващ команда към устройството waitForReply true ако трябва да се чака за отговор на командата, иначе false изключителни ситуации няма връщана стойност
Текстов низ, представляващ отговора на командата получен от устройството, null ако отговор на командата не се очаква или отговорът е грешен. описание
Изпраща подадения му текстов низ към устройството през сокета на съответния обект. Ако се изисква от него чака отговор на командата и ако го получи, го връща към изпращача, както го е получил без допълнителна обработка. Ако получаване на отговор не се изисква от него или отговор не се получи за определено време, връща null към изпращача.


Сървърен компонент – DLL библиотека
83
U1. U1Device.Read() метод private string
Read()
параметри няма изключителни ситуации
SocketException комуникационна грешка при работа със сокета.
ObjectDisposedException сокетът е унищожен по някаква причина преди извикването на метода връщана стойност
Текстов низ, представляващ данните прочетени от сокета описание
Прочита байтовете, ако има такива, пристигнали на сокета, конвертира ги в текстов низ и ги връща на заявителя. Ако на сокета няма пристигнали данни, методът не се връща веднага, а блокира изпълнението, докато пристигнат данни.


Сървърен компонент – DLL библиотека
84
U1. U1Device.Send() метод private int
Send
( string str
) параметри str текстов низ, който да се изпрати към устройството изключителни ситуации
SocketException комуникационна грешка при работа със сокета.
ObjectDisposedException сокетът е унищожен по някаква причина преди извикването на метода връщана стойност
Цяло число, представляващо количеството данни изпратени през сокета;
-1 ако настъпи грешка и нищо не е изпратено. описание
Изпраща подадения му текстов низ през сокета на съответния обект устройство, като преди да го изпрати, го конвертира в байтове.


Сървърен компонент – DLL библиотека
85
U1.U1Device.Worker () метод private void
Worker()
параметри няма изключителни ситуации
SocketException комуникационна грешка при работа със сокета.
ObjectDisposedException сокета е унищожен по някаква причина по време на изпълнението на нишката връщана стойност няма описание
Това е метода, който всяка главна нишка обект устройство. Метода проверява на даден интервал от време дали има пристигнали данни на сокета на обекта и ако има ги прочита, интерпретира и записва в базата данни. Ако получените данни не могат да се интерпретират правилно, те се игнорират и не се записват в базата.


Сървърен компонент – DLL библиотека
86
U1.U1Device.Ping () метод private void
Ping()
параметри няма изключителни ситуации няма връщана стойност няма описание
Изпраща ping съобщение, на зададен интервал, към устройството през сокета на обекта, за да поддържа TCP сесията между двете страни активна.


Сървърен компонент – DLL библиотека
87
Клас Parse
Public конструктори
Parse
Създава нова инстанция на обект интерпретатор
Public методи
ParseDevID
Извлича уникалния номер на устройство от дадено съобщение
ParseNMEA
Извлича данните за географски координати, скорост, време и т.н от NMEA съобщенията
ParseGPRSTimerValue
Конвертира в секудни стойността получена, като отговор на командата за четене на таймера за рапорт по GPRS
Фиг. 10 UML диаграма на клас – Parse


Сървърен компонент – DLL библиотека
88
U1. Parse конструктор public
Parse()
параметри няма изключителни ситуации няма връщана стойност няма описание
Създава нова инстанция на обект интерпретатор.


Сървърен компонент – DLL библиотека
89
U1. Parse.ParseDevID() метод public string
ParseDevID
(
String dataRcv
) параметри dataRcv текстов низ, представляващ съобщението получено от дадено устройство изключителни ситуации няма връщана стойност
Текстов низ съдържащ уникалния номер на устройство извлечен от подаденото съобщение. null ако съдържанието на съобщението съдържа грешни данни. описание
Преглежда целия текстов низ, който му се подава и проверява дали е с необходимата дължина, ако е продължава с обработката в съответствие с U1 протокола на съобщенията, извлича уникалния номер на устройство и го връща като резултат от работата. Ако съобщението не е с необходимата дължина това значи, че не може да се разчита, че уникалния номер на устройство вътре е валиден или че данните в него са коректни.


Сървърен компонент – DLL библиотека
90
U1. Parse.ParseNMEA() метод public bool
ParseNMEA
( string dataRcv, string
[] GPSdata
) параметри dataRcv текстов низ, представляващ съобщението получено от дадено устройство
GPSdata масив от тип текстов низ, чийто елементи съдържат съответната извлечена стойност за географска ширина и дължина, скорост, време и т.н изключителни ситуации няма връщана стойност true ако всички стойности са извлечени коректно иначе false описание
Преглежда целия текстов низ, който му се подава, проверява дали е с необходимата дължина, ако е продължава с обработката, извлича стойностите от NMEA съобщението за географска ширина и дължина, скорост, време и т.н и записва всяка една на съответното място в масива
GPSdata[]
. За да ползват данните извлечени от съобщението, викащите методите трябва да си подготвят абсолютно същия масив
GPSdata[], който ParseNMEA да запълни.


Сървърен компонент – DLL библиотека
91
U1. Parse.ParseGPRSTimerValue() метод public string
ParseGPRSTimerValue
( string dataRcv
) параметри dataRcv текстов низ, представляващ съобщението получено от дадено устройство изключителни ситуации
ArgumentOutOfRangeException полученото съобщение не е с необходимата дължина връщана стойност текстов низ съдържащ извлечената от съобщението стойност на таймера за рапорт в секунди. null ако настъпи грешка при обработката. описание
Използва се за обработка на съобщения изпратени в отговор на команда за прочитане на стойността на таймера на устройството за рапорт по GPRS.
Отговора на тази команда е специфично съобщение определено от U1 протокола и в него стойността на таймера не е дадена директно в секунди.
Метода преглежда дали подаденото съобщение е с необходимата дължина и ако е продължава обработката, извлича стойността на таймера, конвертира я в секунди и я връща, като резултат от изпълнението. Ако съобщението не е с необходимата дължина, то данните в него се считат за некоректни и то се игнорира.


Сървърен компонент – DLL библиотека
92
Клас DDB
Public конструктори
DDB
Създава нова инстанция на обект интерфейс към база данни
Public методи
InsertNMEA
Записва стойностите излечени от NMEA съобщение
ValidateID
Проверя дали даден номер на устройство съществува в базата данни и дали това устройство в маркирано като активно
Фиг. 11 UML диаграма на клас – DDB


Сървърен компонент – DLL библиотека
93
U1. DDB конструктор public
DDB
( string dbConnData
)
параметри dbConnData текстов низ, съдържащ информация, като потребителско име, парола и т.н необходима за осъществяване на връзка с база данни изключителни ситуации няма връщана стойност няма описание
Създава нова инстанция на обект интерфейс към база данни, без да осъществява връзка към сървера. Пула от връзки се създава при първото извикване на някой от методите на обекта, които използват текстовия низ за връзка даден в конструктора, когато те извикат метода Open() на драйвера за
MySQL под Visual Studio .NET. При следващото извикване на Open(), от някой друг метод използващ абсолютно същия низ за връзка, нов връзка не се създава, а се дава такава от пула, ако е налична.


Сървърен компонент – DLL библиотека
94
U1. DDB.InsertNMEA() метод public int
InsertNMEA
( string
[] GPSdata, string dbTable, string devDBID
)
параметри
GPSdata масив съдържащ извлечените от NMEA съобщението стойности за географска ширина и дължина, скорост, време и т.н dbTable името на таблицата от базата данни, където трябва да се запишат данните от NMEA съобщението devDBID номер на устройството в базата данни изключителни ситуации няма връщана стойност
Броя колони от таблицата, в които са записани данни описание
Записва данните извлечени от дадено NMEA съобщение и подадени му в масив, в посочената таблица от базата. Метода не връща информация ако настъпи грешка при записването, а само броя на колоните, в които в крайна сметка е записано нещо. За да следи за грешки извикващия трябва да знае в колко точно колони трябва да се запишат данни и ако върнатата от метода стойност не отговаря на очакваното значи е настъпила грешка.


Сървърен компонент – DLL библиотека
95
U1. DDB.ValidateID() метод public string
ValidateID
( string
DevID
)
параметри
DevID
номера на устройство, който трябва да се провери изключителни ситуации няма връщана стойност номера на устройството в базата данни ако неговия уникален номер е валиден и то е записано, като активно, иначе null. описание
Проверява дали подадения номер на устройство съществува в базата данни и дали устройството е записано, като активно в нея.


Сървърен компонент – Windows услуга
96
Приложение windows услуга
Приложението windows услуга, част от сървърният компонент, е абсолютно стандартно и е създадено чрез шаблона, който Visual Studio .NET предлага за изграждане на тези приложения. То е една своеобразна обвивка на DLL бибилиотеката на сървърния компонент, която я изпълнява в привилигирован режим на операционната система. Поради тази причина няма да го описвам на ниво класове и методи, както DLL библиотеката от предходната глава, а ще се спра само на местата, където има специфични промени и ще се постарая да ги изясня. Останалите класове на приложението са генерирани от Visual Studio .NET и са абсолютно стандартни за тях.
Пълният код и проект на приложението може да бъде намерен на съпътстващото дипломната работа CD.
Както стана ясно сървърният и интерфейсният компонент на
“мениджъра на устройства”, са две отделни приложения, намиращи се в различни AppDomain среди и комуникиращи по между си използвайки .NET
Remoting технологията. За целта в Remoting системата двата компонента се регистрират съответно като обект сървър и обект клиент. Регистрирането на сървърният компонент като такъв става в конструктора на приложението windows услуга по следния начин:
1\ tcpChnl = new
TcpChannel(30301);
2\ ChannelServices.RegisterChannel(tcpChnl);
3\ U1srv = new
Server("10.0.0.89",30300, dbConnData);
4\ ObjRef srvRef = RemotingServices.Marshal(U1srv, "U1srvURI");
Тъй като двата компонента ще използват TCP канал за комуникация по между си, на първия ред създаваме обект от клас
TcpChannel и го инициализираме с 30301 порт, а на втория ред използваме метода
ChannelServices.RegisterChannel, за да го регистрираме в Remoting системата.
Така вече имаме изграден канал, по който двата “отдалечени” обекта (remote objects) ще могат да комуникират. По-интересни са последните два реда от кода. Споменахме, че освен всичко останало, за нашето приложение е жизнено важно сървърния компонент да предлага, като достъпен отвън точно тази инстанция на сървърният си обект, която обслужва устройствата в момента, защото само от нея и от никоя друга може да бъде получен достъп до тях. Използването на достъп по адрес до методите на сървърният обект няма да бъде достатъчно в случая, защото ако използваме стандартния механизъм за регистриране на обект достъпен по адрес, то при регистрацията му трябва да посочим точен адрес, на който този обект може да бъде


Сървърен компонент – Windows услуга
97
намерен. Тогава при активиране на този обект, се създава негова нова инстанция, връща се указател към нея и клиента създава при себе си така наречение proxy клас, чрез който после извиква методите на сървърният обект по адрес, а не по стойност. Очевидно подобен вариант нас не ни устройва, защото новата инстанция на обекта няма да е тази, която реално обслужва устройствата и на практика няма да имаме достъп до тях.
Проблемът е решен от разработчиците на .NET Framework, като създават класа ObjRef, който се използва, за да се предаде указател към даден обект сървър на негов клиент. Обектите от този клас са проектирани да съдържат в себе си цялата необходима информация ( типа на сървърният обект, неговото точно местонахождение и комуникационна информация), за да бъде достигнат той от своите клиенти. Тоест адреса на сървърният обект няма да бъде фиксиран, а ще бъде предаден динамично на обекта клиент, чрез указател към точно определена негова инстанция. Именно този подход е използван и тук. На третия ред от кода по горе, се създава обект от клас сървър, като се инициализира с необходимата му информация. Тъй като обекта наследява класа MarshalByReference, то можем да използваме функцията
RemotingServices.Marshal, за да го конверитаме автоматично в обект от тип ObjRef и да му назначим URI (Uniform Resource Indentificator), чрез който, както ще видим по-късно, точно тази негова инстанция, която създадохме ще бъде достъпна за обекти клиенти.
Други места, където приложението е модифицирано са стандартните за windows услугите събития OnStart() и OnStop(). Те настъпват съответно при стартиране и спиране работата на услугата или програмно от някое друго приложение или от SCM чрез стандартния интерфейс, който предлага за контрол на услуги. В случая “мениджъра на устройства” няма свой потребителски интерфейс и ползва този на SCM. Двете събития са предефинирани, така че при стартиране на услугата тя ще извиква метода
Start() на сървърния компонент, а при спиране метода му Stop(). След като всички модификации по приложението са направени остава само то да бъде регистрирано като услуга в системата, с цел да може да бъде контролирано от SCM. Има два начина за регистрация на windows услуга, които Visual Studio
.NET предлага. Първият е чрез създаване на специална инсталационна програма на приложението, която ще извърши автоматично всички действия необходими за регистрация, а вторият е да направим това ръчно чрез използване на програмата installutil, която е част от пакета Visual Studio
.NET. Категорично първият вариант е по-удобен, но тъй като “мениджъра на устройства” няма да бъде широко комерсиален продукт сметнах, че еднократното извършване на едно просто действие като извикване на една програма от командния ред не би било толкова затормозяващо. Ето как става това:


Сървърен компонент – Windows услуга
98
• Стартирайте командия ред на Windows и отидете в директорията, в която се намира компилираният проект на приложението windows услуга.
• Извикайте програмата installutil и дайте като параметър името на компилирания изпълним файл на приложението windows услуга
(в случая installutil DMWinService.exe)
Заб.
Уверете се, че пътя до програмата installutil e зададен при вас или стартирайте командния ред на пакета на Visual Studio
.NET, който автоматично ще го добави, но не за постоянно.
Ако горните стъпки минат без проблем приложението windows услуга трябва да е вече регистрирано и достъпно чрез конзолата на SCM, както е показано на фиг. 12. За да стартирате или спрете услугата ползвайте бутоните Start, Stop или Restart на конзолата.
Фиг. 12 Мениджъра на устройства достъпен през SCM конзолата


Интерфейсен компонент
99
Интерфейсен компонент
Интерфейсният компонент на
“мениджъра на устройства” е имплементиран чрез стандартна web услуга, създадена с използване на шаблона, който Visual Studio .NET предоставя за подобни приложения. По същите причини както при приложението windows услуга и web услугата няма да бъде разглеждана на ниво клас и методи, а само ще се спра на местата, където тя е модифицирана, за да изпълнява изискванията към нея.
Основната задача на интерфейсния компонент е да прави връзка между външни приложения и сървърният компонент на МУ, предоставяйки им програмен интерфейс към него и както вече добре знаем това става чрез използване на .NET Remoting технологията. След като видяхме в предходната точка, как се конфигурира обекта сървър в приложението windows услуга нека видим, как става конфигурацията и в обекта клиент какъвто е web услугата. Най-доброто място за инициализиране на конфигурацията е при първото извикване на метод от web услугата или иначе казано при настъпване на събитието ApplicationStart(). Ето какво става, когато то настъпи:
1\
string cPath = Server.MapPath("remote_client.config");
2\ System.Runtime.Remoting.RemotingConfiguration.Configure(cPath);
Споменахме, че конфигурирането на обектите клиент и сървър в .NET
Remoting може да става или програмно в самото приложение или чрез описване на параметрите на конфигурацията в XML файл със специален синтаксис. Тук това е направено по втория начин. В първия ред от кода по- горе в променливата cPath се записва пътя до файл на име remote_client.config, който представлява и конфигурационния файл. Нека погледнем какво има в него:
<
configuration
>
<
system.runtime.remoting
>
<
application
>
<
client
>
<
wellknown url
="tcp://localhost:30301/U1srvURI"
type
="U1.Server, DeviceManager"
/>
client
>
application
>
system.runtime.remoting
>
configuration
>


Интерфейсен компонент
100
Накратко казано в първите три полета от конфигурацията се указва, че това е конфигурационен файл, за приложение клиент в системата на .NET
Remoting. Специфичната част е описанието на това, къде и как обекта клиент да намери обекта сървър, което става в полето
<
client
>
В полето
<
wellknown
> се задава адреса на сървърно активиран обект (server activated object), с който клиента иска да се свърже и ползва, както и неговият тип и асембли в което се намира. В случая е посочено, че сървърният обект е от тип
U1.Server, част от асембли на име DeviceManager и може да бъде намерен на локалната машина на порт 30301. Както видяхме при конфигурацията на сървърният обект, U1srvURI е адреса на обект от тип ObjRef, който динамично ще предаде указател към конкретна негова инстанция. От тук нататък всички методи въпреки, че създават обекти “сървъри” със запазената дума new, ще получават не указател към нова инстанция на този обект, а към тази, към която току-що се свързахме. След като вече сме изградили файл с съдържащ конфигурацията на обекта клиент, остава само да кажем на приложението от къде може да я прочете. Това става, както е показано на втория ред от кода по-горе, чрез извикване на метода
RemotingConfiguration.Configure, който използва преди това инициализираната променлива с пътя до файла - cPath.
Както споменахме в структурното описание на приложението, за да се възползват външни такива от интерфейса, който web услугата им предлага те просто трябва да добият предства за него прочитайки WSDL файла й и на базата на тази информация да изпращат съответните SOAP заявки за изпълнение на някой от методите. ASP .NET средата поема цялата работа по приемане, обработване и изпълнение на SOAP заявките към web услугата. От тук нататък за разработчика програмирането се свежда до обикновенното писане на методи и класове, като единственото, което се изисква от него е поставянето на атрибута [WebMethod] пред тези методи, които желае да предостави за изпълнение на външни приложения. За да бъде web услугата достъпна обаче се налага извършването на някой конфигурации на локалната машина. Ето какви са те:
• Уверете се, като погледнете в секцията Control Panel->Add/Remove
Programs, че имате инсталиран Internet Information Server на вашата машина. Ако имате прескочете следващите подстъпки ако не направете следното:
 От Add Remove Programs менюто изберете Add/Remove Windows
Components.
 От появилия се списък сложете отметка на опцията Internet
Information Services (IIS).
 Изберете OK, сложете ако ви се поиска, инсталационния диск на Windows и изчакайте проключването на инсталацията.


Интерфейсен компонент
101
• Изкопирайте папката с проекта на приложението web услуга в директорията C:\Inetpub\wwwroot. Така web услугата вече ще бъде регистрирана в IIS.
• Регистрайте ASP .NET, като услуга достъпна за всички приложения в
IIS. За целта направете следното:
 стартирайте командния ред на пакета Visual Studio .NET
 напишете следното – aspnet_regiis /i
 изчакайте приключването на инсталацията
• рестартирайте IIS сървъра, като стартирате SCM конзолата, изберете с десен бутон IIS от списъка в ляво и след това All Tasks->Restart IIS
Сега машината трябва да е напълно способна да изпълнява приложението web услуга.


База данни
Customer
PK
CustomerID
Company
Country
ZIPCode
ContactAddress
ContactPhone
ContactFax
Comment
ContactPerson
ContactEmail
UseContactEmailForInfo
AccessLevel
PK
LevelID
LevelName
LevelDescription
Users
PK
UserID
I1
CustomerID
UserName
UserPassword
I2
LevelID
Name
Comment
Channels
PK
ChannelID
ChannelName
ChannelDescription
GPSDevices
PK
DeviceDBID
I1
UserID
DeviceID
I2
ChannelID
GSMNumber
ReportedPeriod
GSMCardPinCode
DeviceOnline
VehicleModel
VehicleName
VehicleRegNumber
VehicleDriver
VehicleComment
DeviceActive
APN
PK
ApnID
I1
DeviceDBID
ApnIP
ApnPort
GSMNumbers
PK
GSMNumbersID
I1
DeviceDBID
GSMNumber
Enabled
PinNames
PK
PinNameDBID
I1
DeviceDBID
PinID
Name
MinValue
MaxValue
CalibrationMinValue
CalibrationMaxValue
TriggerValue1
TriggerValue1Type
TriggerValue2
TriggerValue2Type
GPSRecords
PK
GPSRecordsID
I1
DeviceDBID
Latitude
Longtitude
East/west
North/South
Speed
Time
TimeUTC
PinData
PK
PinDBID
I1
PinNameDBID
State
I2
GPSRecordID
Фиг. 13 Схема на базата данни


База данни - Таблици
103
Custommers
Колони име на колона тип данни not null auto inc. описание
CustommerID
INTEGER

 идентификационен номер в базата данни на клиента
Company
VARCHAR(200) име на фирмата
Country
VARCHAR(100) име на държавата
State
VARCHAR(100) щат/регион
ZIP Code
VARCHAR(100) пощенски код
ContactAddress
VARCHAR(200) адрес за контакти
ContactPhone
VARCHAR(100) телефон за контакти
ContactFax
VARCHAR(100) факс за контакти
ContactPerson
VARCHAR(200) човек за контакти
ContactEmail
VARCHAR(100) имейл за контакти
UseContactEmailForInfo
TINYINT(1) използвай имейла за контакти за изпращане на допълниелна информация.
0 – да, 1- не
Comment
TEXT коментар за клиента
Ключове главен чужди
CustommerID
няма
Описание
Съдържа цялата необходима информация за даден клиент, която после може да се използва за неговото идентифициране и за осъществяване на контакти.


База данни - Таблици
104
Access Level
Колони име на колона тип данни not null auto inc. описание
LevelID
INTEGER

 идентификационен номер в базата данни на нивото на достъп
LevelName
VARCHAR(50) име на нивото на достъп
Level Description
TEXT описание на нивото на достъп
Ключове главен чужди
LevelID
Users_UserID
Описание
Дефинира нивата на достъп на потребителите. Нивата на достъп са необходими, тъй като даден клиент може да регистрира много потребители
(например имаме фирма клиент, която дава възможност на различни служители да имат достъп до системата, като ги регистрира като отделни потребители), но да даде различно ниво на достъп за всеки един. Различните нива на достъп предлагат различни възможности на съответния потребител, като например потребител от едно ниво може да преконфигурира утройства, докато потребител от по-ниско ниво може само да ги вижда на карта. Всяко ниво има свой идентификатор, име и описание, което дава възможност за дефиниране на най-различни нива според изисванията на клиента.


База данни - Таблици
105
Users
Колони име на колона тип данни not null auto inc. описание
UserID
INTEGER

 идентификационен номер в базата данни на потребителя
CustommerID
INTEGER идентификационен номер в базата данни на клиента, към който принадлежи потребителя
UserName
VARCHAR(50) име на потребителя
UserPassword
TEXT парола на потребителя
LevelID
INTEGER идентификационен номер в базата данни на нивото на достъп за този потребител
Name
VARCHAR(200) истинското име на потребителя
Comment
VARCHAR(100) коментар за потребителя
Ключове главен чужди
UserID
AccessLevel_LevelID
Customers_CustommerID
Описание
Описва данните за потребител спадащ към конкретен клиент.
Потребителското име и парола за този потребител, които той трябва да дава всеки път, когато иска достъп до системата се съхраняват тук. Също така тук се задава и нивото на достъп на този потребител.


База данни - Таблици
106
GPS Devices
Колони име на колона тип данни not null auto inc. описание
DeviceDBID
INTEGER

 идентификационен номер в базата данни на устройството
UserID
INTEGER
 идентификационен номер в базата данни на клиента на потребителя, на който принадлежи устройството
DeviceID
VARCHAR(8)
 уникален номер на устройството
ChnannelID
INTEGER идентификационен номер в базата данни на канал, по който устройството рапортува
GSM Number
VARCHAR(50)

GSM номер на устройството
ReportPeriod
INTEGER
 интервал, на който устройството в момента рапортува позицията си
GSMCardPinCode
VARCHAR(8)

PIN код на SIM картата на устройството
DeviceOnLine
TINYINT(1) показва дали устройството в момента е свързано към системата
0 – да, 1- не
DeviceActive
TINYINT(1) показва дали е резрешено устройството да се свързва към сървъра; 0 – да, 1- не
VehicleModel
VARCHAR(100) модел на автомобила, в който е инсталирано устройството
VehicleName
VARCHAR(100) марка на автомобила
VehicleRegNumber VARCHAR(100) регистрационен номер на автомобила
VehicleDriver
VARCHAR(100) шофьор на автомобила
VehicleCommet
TEXT коментар за автомобила
Ключове главен чужди
DeviceDBID
Users_UserID
Channels_ChannelID
Описание
Съдържа цялата информация описваща дадено навигационно устройство, както и някой данни за неговата конфигурация.


База данни - Таблици
107
GPS Records
Колони име на колона тип данни not null auto inc. описание
GPSRecordID
INTEGER

 идентификационен номер в базата данни на поредния запис
DeviceDBID
INTEGER
 идентификационен номер в базата данни на устройството
Latitude
FLOAT
 географска ширина
Longitude
FLOAT
 географска дължина
East/West
TINYINT(1) посока на движение
0 – East, 1- West
North/South
TINYINT(1) посока на движение
0 – North, 1- South
Speed
INTEGER
 скорост във възли
Time
DATETIME текущо време при вмъкването на записа от локалната машина
TimeUTC
DATETIME време на изпращане на съобщението според
GPS приемника
Ключове главен чужди
GPSRecordID
GPSDevices_DeviceDBID
Описание
Тук се записват данните извлечени от NMEA съобщенията, които навигационните устройства изпращат на сървъра, за да рапортуват географската си позиция. По-късно на базата на тези данни позицията на устройство се визуализира на цифрова карта.


База данни - Таблици
108
Pin Names
Колони име на колона тип данни not null auto inc. описание
PinNameDBID
INTEGER

 идентификационен номер в базата данни на името на входа на устройството
DeviceDBID
INTEGER
 идентификационен номер в базата данни на устройството
PinID
INTEGER
 идентификационен номер на входа
Name
VARCHAR(100) име на входа
MinValue
INTEGER минимална стойност на входния сигнал за този вход
MaxValue
INTEGER максимална стойност на входния сигнал за този вход
CalibrationMinValue
FLOAT минимална калибрираща стойност за входния сигнал
CalibrationMaxValue
FLOAT максимална калибрираща стойност за входния сигнал
TriggerValue1
INTEGER
1-ва стойност на сработване на входа
TriggerValue1Type
INTEGER тип на
1-та стойност на сработване
TriggerValue2
INTEGER
2-ра стойност на сработване на входа
TriggerValue2Type
INTEGER тип на
2-та стойност на сработване
Ключове главен чужди
PinNameDBID
GPSDevices_DeviceDBID
Описание
Дадено навигационно устройство притежава някаква бройка аналогови входове, които могат да бъдат монтирани да измерват различни аналогови величини в автомобила, като например отворена/затворена врата, ниво на резервоара, налягане на маслото и т.н. Тъй като за всеки автомобил тези величини могат да бъдат различни, в тази таблица се описва какво точно измерва даден вход на устройството, за да може потребителят да знае информация за какъв сигнал вижда.


База данни - Таблици
109
Pin Data
Колони име на колона тип данни not null auto inc. описание
PinDBID
INTEGER

 идентификационен номер в базата данни на входа
PinNameDBID
INTEGER
 идентификационен номер в базата данни на името на входа
State
INTEGER
 състояние на входа
GPSRecordID
INTEGER
 идентификационен номер в базата данни на съобщението, с което е пристигнала информация за този вход
Ключове главен чужди
PinDBID
GPSRecords_GPSRecordID
PinNames_PinNameDBID
Описание
Тук се записват данните за състоянието на даден вход на навигационното устройство.


База данни - Таблици
110
GSM Numbers
Колони име на колона тип данни not null auto inc. описание
GSMNumbersID
INTEGER

 идентификационен номер в базата данни на GSM номера
DeviceBID
INTEGER
 идентификационен номер в базата данни на името на устройството
GSMNumber
VARCHAR(100)
GSM номер
Enabled
INTEGER
GSM номера е разрешен за рапорт
0 – да, 1 - не
Ключове главен чужди
GSMNumbersID
GPSDevices_DeviceDBID
Описание
Всяко едно навигационно устройство има списък от няколко GSM номера, на които може да изпраща рапорт за позицията си или други данни по SMS.
Списъка се въвежда с цел да се предотврати рапортуването на нелегитимни
GSM номера. Тази таблица описва GSM номерата за всяко навигационно устройство, които са разрешени за рапорт по SMS


База данни - Таблици
111
Channels
Колони име на колона тип данни not null auto inc. описание
ChannelID
INTEGER

 идентификационен номер в базата данни на канала за данни
ChannelName
VARCHAR(100) име на канала за данни
ChannelDescription
TEXT описание на канала за данни
Ключове главен чужди
ChannelID
няма
Описание
Таблицата описва различните канали, по които устройството може да изпраща данни и да бъде достигнато отвън. В GSM мрежата възможните канали са SMS, GPRS и CSD.


База данни - Таблици
112
RouteData
Колони име на колона тип данни not null auto inc. описание
RouteDBID
INTEGER

 идентификационен номер в базата данни на записаният маршрут
UserID
INTEGER
 iдентификационен номер на потребителят, към който принадлежи дадения маршрут
RouteName
VARCHAR(100) името, което потребителят е дал на този машрут
RouteData
TEXT kоординати и вид на региона
(елипса, линия, полигон) описващи дадения маршрут
Ключове главен чужди
RouteDBID
UserID
Описание
Данните, които описват всеки машрут който потребителят зададе чрез аплета и желае да се проследи дали неговото превозно средство го спазва, се записват тук. Всеки потребител може да дефинира много маршрути, които представляват определен регион от картата, задаван чрез различни геометрични фигури. Тези фигури се описват от набор от точки дефинирани чрез двойка координати х,у.


113
Използвана литература
1. Ahmed El-Rabbany
Introduction to GPS
Artech House,
2002
ISBN 1-58053-183-0 2. Л. Добош, Я. Духа, С. Мархевски, В. Визер
Мобилни Радиомрежи
Джиев Трейд, 2005
ISBN 954-9332-14-4 3. H.M. Deitel, P.J. Deitel, B. Du Walt, L.K. Trees
Web Services: A Technical Introduction
Prentice Hall,
2003
ISBN – 0130461350 4. Regis J. “Bud” Bates
GPRS: General Packet Radio Service
McGraw Hill,
2003
ISBN – 0071381880 5. Johan Hjelm
Creating Location Services for the Wireless Web
Wiley, 2002
ISBN – 0471402613


114 6. Zhong-Ren Peng, Ming-Hsiang Tsou internet GIS
Wiley, 2003
ISBN - 0471359238 7. Майкъл Х. Ернандес
Проектиране на Бази от Данни
СофтПрес, 2004
ISBN – 9546853011 8. Том Арчър
C# Поглед отвътре
СофтПрес, 2001
ISBN – 9546851620 9. Джефри Рихтер
Microsoft .NET Framework
СофтПрес, 2002
ISBN – 954685221Х


115
Използвани съкращения
1. CDMA - Code Division Multiple Access
2. CSD – Circuit Switched Data
3. GPRS – General Packet Radio Service
4. GSM - Global System for Mobile Communications
5. SMS – Short Message Service
6. SOAP - Simple Object Access Protocol
7. TCP/IP – Transmision Control Protocol / Internet Protocol
8. TDMA - Time Division Multiple Access
9. UDP - Universal Datagram Protocol
10. UMTS – Universal Mobile Telecomunications System
11. WCDMA - Wideband CDMA
12. WSDL – Web Service Description Language
13. КУПС – контрол и управление на превозни средства
14. МУ – мениджър на устройства


Сподели с приятели:
1   2




©obuch.info 2024
отнасят до администрацията

    Начална страница