Программно-аппаратная система генерации сигналов с заданными параметрами

Разработка программно-аппаратного комплекса на базе ПЭВМ типа Pentium IV, включающего в себя периферийное устройство для генерации сигнала в виде напряжения, меняющегося во времени, и программного обеспечения для управления процессом генерации.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 30.06.2012
Размер файла 3,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

атомные электростанции (АЭС);

- предприятия по производству и переработке ядерного топлива;

- научно-исследовательские и проектные организации, связанные с ядерными реакторами;

- ядерные энергетические установки на транспорте.

На территории Украины работают 4 атомных электростанций с 15 энергетическими ядерными реакторами, которые дают около 52% электроэнергии, вырабатываемой в стране. Для проведения исследовательских работ функционируют 2 ядерных реактора. В Украине работают более 8 тысяч предприятий и организаций, которые используют различные радиоактивные вещества, а также хранят и перерабатывают радиоактивные отходы.

Развитие отечественной ядерной энергетики ведется на основе строительства реакторов на тепловых нейтронах, позволяющих использовать в качестве топлива слабообогащённый природный уран (U-238).

К таким реакторам относятся:

- реакторы большой мощности, канальные (РБМК-1000, РБМК-1500), замедлителем в нем служит графит, а теплоносителем - кипящая вода, циркулирующая снизу вверх по вертикальным каналам, проходящим через активную зону. Он размещается в наземной шахте и содержит 192 т. слабообогащённой двуокиси урана-238, а под ним находится железобетонный бункер для сбора радиоактивных отходов при работе реактора;

- водоводяные энергетические реакторы (ВВЭР-600, ВВЭР-1000), в которых вода служит одновременно теплоносителем и замедлителем.

При аварии на АЭС с выбросом радионуклидов необходимо быстро выявить радиационную обстановку методом прогнозирования, а затем уточнить ее по данным разведки

Оценку радиационной обстановки произведем методом прогнозирования.

При авариях на АЭС выделяются 5 зон радиоактивного загрязнения. Зона радиационной опасности (М) - представляет собой участок загрязненной местности, в пределах которой доза излучения на открытой местности может составлять от 5 до 50 рад. в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 0,014 рад/час.

Рисунок 10.1 -- Зоны радиоактивного заражения

В пределах зоны «М» целесообразно ограничить пребывание людей, не привлекаемых непосредственно к работам по ликвидации последствий радиационной аварии.

При ликвидации аварии в зоне «М» и во всех других зонах должны выполняться основные мероприятия: радиационный и дозиметрический контроль, защита органов дыхания, профилактический прием йодсодержащих препаратов, санитарная обработка людей, дезактивация обмундирования и техники.

Зона умеренного загрязнения (А) - представляет собой участок загрязненной местности, в пределах которой доза излучения может составлять от 50 до 500 рад в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 0,14 рад/час. Действия формирований в зоне «А» необходимо осуществлять в защитной технике с обязательной защитой органов дыхания.

В зоне сильного загрязнения (Б) - доза излучения составляет от 500 до 1500 рад в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 1,4 рад/час. Действия формирований необходимо осуществлять в защитной технике с размещением в защитных сооружениях.

В зоне опасного загрязнения (В) - доза излучения составляет от 1500 до 5000 рад в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 4,2 рад/час. Действия формирований возможно только в сильно защищенных объектах и технике. Время нахождения в зоне -- несколько часов.

В зоне чрезвычайного опасного загрязнения (Г) - доза излучения может составлять больше 5000 рад в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 14 рад/час. В зоне нельзя находиться даже кратковременно.

Оценка радиационной обстановки при аварии на АЭС сводится к определению методом прогноза доз излучения и выработке оптимальных режимов деятельности людей при нахождении их в прогнозируемой зоне загрязнения.

При расчетах необходимо руководствоваться допустимой дозой облучения, установленной для различных категорий населения, оказавшегося в зоне радиоактивного загрязнения при аварии на АЭС.

1. население, рабочие и служащие, не привлекаемые в мирное время к работе с радиоактивными веществами - 1 мЗв в год;

2. население, рабочие и служащие, персонал, привлекаемые в мирное время к работе с радиоактивными веществами - 2 мЗв в год;

3. постоянно работающие с ионизирующим излучением - 20 мЗв в год.

программный аппаратный генерация сигнал

10.2 Расчетная часть

Расчетная часть выполнена по методике, изложенной в методических указаниях [10] для следующих данных:

Таблица 10.1 -- Исходные данные для решения задачи по оценке

T аварии

TНАЧ. работы

Начало работы после аварии

Продолжит.

TРАБ

Количество авар. реакторов

Доля выброса РВ, %

KОСЛ

Скорость ветра, м/с

Rx, км

ДУСТ, рад.

Облачность

10:00

12:00

2

12

1

30

3

5

33,7

0,3

3

1. По таблице 1 определяем категорию устойчивости атмосферы, соответствующую погодным условиям и заданному времени суток. По условию: облачность средняя (3 б.), скорость приземного ветра V10 = 5 м/с. Согласно таблице 1 категория устойчивости Д (изотермия).

2. По таблице 2 определяем среднюю скорость ветра Vср в слое распространения радиоактивного облака. Согласно таблицы для категории устойчивости Д и скорость приземного ветра V10 = 5 м/с средняя скорость ветра Vср = 5 м/с.

3. По таблице 4 для заданного типа ЯЭР (РБМК-1000), доли выброшенных РВ (h = 30%) и Vср= 5 м/с определяем размеры прогнозируемых зон загрязнения местности и наносим их в масштабе в виде правильных эллипсов.

Рисунок 10.2 -- Расположение объекта согласно зонам радиоактивного загрязнения

4. Исходя из заданного расстояния от объекта (Rх = 33,7 км) до аварийного реактора с учетом образующихся зон загрязнения устанавливаем, что объект оказался на внешней границе зоны «Б».

5. По таблице 7 определяем время начала формирования следа радиоактивного загрязнения после аварии (время начала выпадения радиоактивных осадков на территории объекта). Для Rх = 33,7 км, категории устойчивости Д и средней скорости ветра Vср = 5 м/с, = 1,7 часа. Следовательно, объект через = 1,7 часа после аварии окажется в зоне загрязнения, что потребует дополнительных мер по защите рабочих и служащих.

6. По таблице 10 для зоны загрязнения «Б» с учетом времени начала работы после аварии (= 2 часа) и продолжительности работы (= 12 часов) определяем дозу облучения, которую получат рабочие и служащие объекта при открытом расположении на внешней границе зоны «Б». Согласно таблице, = 17,1 рад. Расчет дозы с учетом внешней границы производим по формуле:

Расчет показывает, что рабочие и служащие офиса за 12 часов работы в зоне «Б» могут получить установленную дозу ( = 0,3 рад).

Используя данные из таблицы 10 определяем допустимое время начала работы рабочих служащих объекта после аварии на АЭС при условии получения дозы не более = 0,3 рад (по условию) по формуле:

Таблица 10.2 -- Результат оценки радиационной обстановки

вар.

Категория

устойчивости

атмосферы

Vср

м/с

Зона,

место в

зоне

Дано:1);2) ;

Определено: l) 2)

6

Д

5

Б, внешняя граница

1,7

17,1

3,35

1,53

При = 1,53:

1) =12 > =2 месяца

2) =2 > ? 0,75 часа

10.3 Мероприятия по защите сотрудников лаборатории

1. После получения оповещения о движении радиоактивною облака
установить в офисе непрерывное радиационное наблюдение с переносными или стационарными дозиметрическими приборами.

2. При прохождении радиоактивного облака сотрудников лаборатории укрыть в убежище или ПРУ.

3. По данным разведки уточнить прогнозируемую радиационную обстановку.

4. При уровнях радиации (Р > 5 мР/ч) на открытой местности сотрудники офиса должны находиться в респираторах или противогазах.

5. Во избежание переоблучения сотрудникам офиса необходимо организовать сменную работу с учетом допустимой дозы.

6. Для исключения заноса радиоактивных веществ внутрь помещений необходимо загерметизировать их, а при наличии фильтровентиляционных установок включить их в режиме «чистой вентиляции».

7. После выпадения радиоактивных осадков и снижения загрязненности территории произвести дезактивационные работы с последующим контролем степени загрязненности.

8. При больших уровнях загрязненности и невозможности работы сотрудников необходимо эвакуировать в незагрязненные районы.

10.4 Заключение

Офис окажется на внешней границе зоны сильного загрязнения (зона Б). Время начала формирования радиоактивного следа после аварии составит
= 1,7 часа.

1. Согласно = 1,53 рад и = 12 часов по таблице 10 находим = 2 месяца, т. е. можно начинать работу только через 2 месяца после аварии на АЭС и работать полную смену ( = 12 часов).

2. По исходным данным необходимо начать работу после аварии через 2 часа (= 2 часа). Следовательно, по таблице 10 и времени = 2 часа и рассчитанной дозе =1,53 рад с учетом = 0,3, находим продолжительность работы = 0,75 ч.

Следовательно, рабочие и служащие объекта, чтобы получить дозу не выше установленной (0,3 рад), могут начинать работу в зоне «Б» через 2 часа и выполнять ее 0,75 часа или при начале работы через 2 месяца могут работать 12 часов.

ЗАКЛЮЧЕНИЕ

В ходе работы над дипломным проектом была разработана программно-аппаратная система генерации сигналов с заданными параметрами.

Был проведён системный анализ, и разрабатываемая программно-аппаратная система была рассмотрена с точки зрения основных принципов системного анализа.

В результате проведения вариантного анализа, предпочтение было отдано использованию встроенной звуковой карты. В качестве библиотеки для создания графического интерфейса была выбрана Windows Presentation Foundation, которая входит в состав Microsoft .NET Framework.

Была разработана обобщённая блок-схема алгоритма программной системы, структурная модель и диаграмма концептуальных классов программно-аппаратного комплекса.

Также была создана универсальная платформа и ядро программной системы со строгим использованием объектно-ориентированного подхода на языке высокого уровня C#. Реализована возможность динамического подключения элементов библиотеки. Производится интерпретация схемы генератора и проверка на ошибки.

Реализован многофункциональный, доступный пользовательский интерфейс с использованием библиотеки WPF, которая позволяет добиться высокой скорости и качества отображения интерфейса. Интерфейс поддерживает возможности составления схемы графически, отката действий пользователя, масштабирования схемы.

При работе над данным проектом было проведено технико-экономическое обоснование проекта. Проведен анализ эффективности проекта на основе интегрального экономического эффекта. Период окупаемости капитальных вложений составил два года.

В рамках охраны труда было рассчитано защитное заземление, на соответствие принятым нормам и предложены некоторые рекомендации по улучшению условий работы в офисе компьютерной фирмы.

В рамках безопасности в чрезвычайных ситуациях была оценена радиационная обстановка в компьютерной фирме при загрязнении радиоактивными веществами после аварии на атомной электростанции.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. ГОСТ 12.1.004-76. Пожарная безопасность. Общие требования.

2. ГОСТ 12.2.032-78. Система стандартов безопасности труда. Рабочее место при выполнении работ сидя. Общие эргономические требования.

3. ДНАОП 0.00-1.31-99. Правила охраны труда во время эксплуатации ЭВМ.

4. ДСН 3.3.6.037-99. Санитарные нормы производственного шума, ультразвука и инфразвука.

5. ДСН 3.3.6.042-99. Санитарные нормы микроклимата производственных помещений.

6. Дьяконов В. Генераторы сигналов. / ДМК Пресс СПб.: Питер, 2009 - 381 с.

7. Макконнелл С. Совершенный код. / Пер. с англ. В.Г. Вшивцева - М.: Издательство «Русская редакция»; СПб.: Питер, 2008 - 896 с.

8. Методические указания для выполнения курсовой работы по дисциплине «Автоматизация проектирования сложных систем» для студентов специальности 7.091501 - «Компьютерные системы и сети» дневной формы обучения / Сост. Е.Н. Мащенко, Ю.П. Нюнькина - Севастополь: Изд-во СевНТУ, 2010. - 48 с.

9. Методические указания для выполнения раздела «Гражданская оборона» в дипломных проектах специальностей 7.080401 - «Информационные управляющие системы и технологии», 7.092502 - «Компьютерно-интегрированные технологические процессы и производства», 7.091401 - «Системы управления автоматики», 7.091501 - «Компьютерные системы и сети» Сост. М.С. Журавский. - Севастополь: Изд-во СевНТУ, 2000. - 15 с.

10. Методические указания для выполнения раздела «Охрана труда и окружающей среды» в дипломных проектах специальностей 7.080401 - «Информационные управляющие системы и технологии», 7.092502 - «Компьютерно-интегрированные технологические процессы и производства», 7.091401 - «Системы управления автоматики», 7.091501 - «Компьютерные системы и сети» Сост. Е.И. Азаренко. - Севастополь: Изд-во СевНТУ, 2005. - 10с.

11. Методические указания к выполнению курсовой работы «Расчет экономической эффективности создания и использования программного продукта» по дисциплинам «Основы менеджмента и маркетинга», «Менеджмент» для студентов специальностей 7.091501, 7.091401, 7.080401 всех форм обучения / Сост. Г.А. Раздобреева, Е. В. Коваль, Т.В. Кулешова.- Севастополь: Изд-во СевНТУ, 2009.- 24с.

12. Методические указания по организации и проведению преддипломной практики студентов дневной формы обучения специальности 7.091501 - «Компьютерные системы и сети» / Сост. В.В. Кирюхин, А.В. Скатков. - Севастополь: Изд-во СевНТУ, 2011. - 16 с.

13. Методические указания практическому занятию на тему «Метод анализа иерархий» по дисциплине «Теория оптимальных решений» для студентов специальности 7.091501 - «Компьютерные системы и сети» / Сост. Ю.Н. Щепин - Севастополь: Изд-во СевНТУ, 2002 - 11с.

14. СН 4559-88. Временные санитарные нормы и правила для работников вычислительных центров.

15. СНиП II-4-79. Естественное и искусственное освещение.

16. Современные USB-генераторы сигналов произвольной формы с сегментированной [Электронный ресурс]. - Электрон. данные (175 кб.). - Режим доступа http://www.prist.ru/info.php/articles/akip-3403-5_2.htm Понедельник, 21 Мая 2012 10:20.

17. Уоррен, Генри, С. Алгоритмические трюки для программистов.: Пер. с англ. -М.: Издательский дом «Вильяме», 2003. - 288с.: ил.

ПРИЛОЖЕНИЕ А

Расчёты для раздела «Вариантый анализ»

Приложение А1

Для этого рассчитаем коэффициенты критериев по формуле (A1):

(A1)

Найдем сумму коэффициентов по формуле (A2):

(A2)

Вычислим вектор локальных приоритетов по формуле (A3):

(A3)

Оценим величину погрешности при вычислении вектора локальных приоритетов:

По полученным результатам можно сделать вывод о важности критериев. Представим критерии по убыванию их приоритетов:

1. Цена.

2. Разрядность и максимальная частота.

3. Уровень шума.

Для проверки согласованности матрицы вычислим:

(A4)

Определим наибольшее собственное значение матрицы парных сравнений по следующей формуле:

(A5)

Найдём индекс согласованности:

(A6)

Найдем отношение согласованности ОС:

(A7)

где СС - случайная согласованность, выбираемая в зависимости от размера матрицы.

СС(3) = 0,58.

Приложение А2

Найдем значения по формуле (A1):

Найдем значение B по формуле (A2):

Определим вектор локальных приоритетов по формуле (A3):

Оценим величину погрешности при вычислении вектора локальных приоритетов, для этого сложим все приоритеты и сравним сумму с единицей:

Определим значения по формуле (A4):

Найдем значение наибольшего собственного значения матрицы суждений по формуле (A5):

Найдём индекс согласованности по формуле (A6):

Найдем отношение согласованности по формуле (A7):

Приложение А3

Найдем значения по формуле (A1):

Найдем значение B по формуле (A2):

Определим вектор локальных приоритетов по формуле (A3):

Оценим величину погрешности при вычислении вектора локальных приоритетов, для этого сложим все приоритеты и сравним сумму с единицей:

Определим значения по формуле (A4):

Найдем значение наибольшего собственного значения матрицы суждений по формуле (A5):

Найдём индекс согласованности по формуле (A6):

Найдем отношение согласованности по формуле (A7):

Приложение А4

Найдем значения по формуле (A1):

Найдем значение B по формуле (A2):

Определим вектор локальных приоритетов по формуле (A3):

Оценим величину погрешности при вычислении вектора локальных приоритетов, для этого сложим все приоритеты и сравним сумму с единицей:

Определим значения по формуле (A4):

Найдем значение наибольшего собственного значения матрицы суждений по формуле (A5):

Найдём индекс согласованности по формуле (A6):

Найдем отношение согласованности по формуле (A7):

Приложение А5

Вычислим глобальные приоритеты по формуле (A8):

(A8)

Проверим погрешность вычислений:

Построим таблицу Q для имеющихся альтернатив. Элемент таблицы вычисляется по формуле (A9):

(A9)

Таблица А1 -- Матрица Q влияния критериев на выбор альтернативы

А1

А2

А3

Б1

24,5 %

50,76%

25,74%

Б2

64,85%

20,02%

14,13%

Б3

91,56%

4,73%

3,7%

Проверим согласованность иерархии. Для этого необходимо вычислить индекс согласованности, определяемый как сумма произведений индексов согласованностей критериев на их приоритеты:

Вычислим отношение согласованности по формуле (A10):

(A10)

Найдем отношение согласованности при СС(3) = 0,58:

Приложение А6

Для этого рассчитаем коэффициенты критериев по формуле (A1):

Найдем сумму коэффициентов по формуле (A2):

Вычислим вектор локальных приоритетов по формуле (A3):

Оценим величину погрешности при вычислении вектора локальных приоритетов:

По полученным результатам можно сделать вывод о важности критериев. Представим критерии по убыванию их приоритетов:

1. Производительность;

2. Эффективность;

3. Кроссплатформенность;

4. Количество компонент.

Для проверки согласованности матрицы вычислим по формуле (A4):

Определим наибольшее собственное значение матрицы парных сравнений по формуле (A5):

Найдём индекс согласованности по формуле (A6):

Найдем отношение согласованности ОС по формуле (A7):

СС(4) = 0,9.

Приложение А7

Найдем значения по формуле (A1):

Найдем значение B по формуле (A2):

Определим вектор локальных приоритетов по формуле (A3):

Оценим величину погрешности при вычислении вектора локальных приоритетов, для этого сложим все приоритеты и сравним сумму с единицей:

Определим значения по формуле (A4):

Найдем значение наибольшего собственного значения матрицы суждений по формуле (A5):

Найдём индекс согласованности по формуле (A6):

Найдем отношение согласованности по формуле (A7):

Приложение А8

Найдем значения по формуле (A1):

Найдем значение B по формуле (A2):

Определим вектор локальных приоритетов по формуле (A3):

Оценим величину погрешности при вычислении вектора локальных приоритетов, для этого сложим все приоритеты и сравним сумму с единицей:

Определим значения по формуле (A4):

Найдем значение наибольшего собственного значения матрицы суждений по формуле (A5):

Найдём индекс согласованности по формуле (A6):

Найдем отношение согласованности по формуле (A7):

Приложение А9

Найдем значения по формуле (A1):

Найдем значение B по формуле (A2):

Определим вектор локальных приоритетов по формуле (A3):

Оценим величину погрешности при вычислении вектора локальных приоритетов, для этого сложим все приоритеты и сравним сумму с единицей:

Определим значения по формуле (A4):

Найдем значение наибольшего собственного значения матрицы суждений по формуле (A5):

Найдём индекс согласованности по формуле (A6):

Найдем отношение согласованности по формуле (A7):

Приложение А10

Найдем значения по формуле (A1):

Найдем значение B по формуле (A2):

Определим вектор локальных приоритетов по формуле (A3):

Оценим величину погрешности при вычислении вектора локальных приоритетов, для этого сложим все приоритеты и сравним сумму с единицей:

Определим значения по формуле (A4):

Найдем значение наибольшего собственного значения матрицы суждений по формуле (A5):

Найдём индекс согласованности по формуле (A6):

Найдем отношение согласованности по формуле (A7):

Приложение А11

Вычислим глобальные приоритеты по формуле (A8):

Проверим погрешность вычислений:

Построим таблицу Q для имеющихся альтернатив. Элемент таблицы вычисляется по формуле (A9):

Таблица А2 -- Матрица Q влияния критериев на выбор альтернативы

А1

А2

А3

А4

Б1

69,77%

20,43%

7,19%

2,41%

Б2

67,37%

12,25%

10,02%

10,36%

Б3

30,35%

8,56%

3,24%

57,85%

Проверим согласованность иерархии. Для этого необходимо вычислить индекс согласованности, определяемый как сумма произведений индексов согласованностей критериев на их приоритеты:

Вычислим отношение согласованности по формуле (A10):

Найдем отношение согласованности при СС(3) = 0.58:

ПРИЛОЖЕНИЕ Б

Текст программы

Файл «\Siglab\UndoRedoService.cs»

namespace Siglab

{

using System.Collections.Generic;

using System.Linq;

using Commands;

using Common;

using Plugin;

/// <summary>

/// TODO: Update summary.

/// </summary>

public class UndoRedoService : NotifyableObject

{

/// <summary>

///

/// </summary>

private readonly Stack<IDesignerCommand> undoCommands = new Stack<IDesignerCommand>();

/// <summary>

///

/// </summary>

private readonly Stack<IDesignerCommand> redoCommands = new Stack<IDesignerCommand>();

/// <summary>

///

/// </summary>

private Stack<IDesignerCommand> originalUndoCommands = new Stack<IDesignerCommand>();

/// <summary>

///

/// </summary>

private Stack<IDesignerCommand> originalRedoCommands = new Stack<IDesignerCommand>();

/// <summary>

///

/// </summary>

public bool HasChanges

{

get

{

return !(this.originalUndoCommands.Count == this.undoCommands.Count &&

this.originalRedoCommands.Count == this.redoCommands.Count &&

this.originalUndoCommands.SequenceEqual(this.undoCommands) &&

this.originalRedoCommands.SequenceEqual(this.redoCommands));

}

}

/// <summary>

///

/// </summary>

public bool CanUndo

{

get

{

return this.undoCommands.Count > 0;

}

}

/// <summary>

///

/// </summary>

public bool CanRedo

{

get

{

return this.redoCommands.Count > 0;

}

}

/// <summary>

///

/// </summary>

public string UndoTitle

{

get

{

if (this.CanUndo)

{

return string.Format("Undo {0}", this.undoCommands.Peek().Title);

}

return null;

}

}

/// <summary>

///

/// </summary>

public string RedoTitle

{

get

{

if (this.CanRedo)

{

return string.Format("Redo {0}", this.redoCommands.Peek().Title);

}

return null;

}

}

/// <summary>

///

/// </summary>

/// <param name="command"></param>

public void Execute(IDesignerCommand command)

{

if (command == null)

{

return;

}

command.Execute();

this.undoCommands.Push(command);

this.redoCommands.Clear();

this.Update();

}

/// <summary>

///

/// </summary>

public void Undo()

{

if (!this.CanUndo)

{

return;

}

var command = this.undoCommands.Pop();

command.Undo();

this.redoCommands.Push(command);

this.Update();

}

/// <summary>

///

/// </summary>

public void Redo()

{

if (!this.CanRedo)

{

return;

}

var command = this.redoCommands.Pop();

command.Redo();

this.undoCommands.Push(command);

this.Update();

}

/// <summary>

///

/// </summary>

public void AcceptChanges()

{

this.originalRedoCommands = new Stack<IDesignerCommand>(this.redoCommands);

this.originalUndoCommands = new Stack<IDesignerCommand>(this.undoCommands);

}

/// <summary>

///

/// </summary>

private void Update()

{

this.Notify("UndoTitle");

this.Notify("RedoTitle");

}

}

}

Файл «/Siglab/PluginService.cs»

namespace Siglab

{

using System;

using System.Collections.Generic;

using System.ComponentModel.Composition;

using System.ComponentModel.Composition.Hosting;

using System.IO;

using System.Linq;

using Plugin;

/// <summary>

/// Plugin manager.

/// </summary>

public class PluginService

{

public PluginService(string pluginDirectory)

{

this.PluginDirectory = pluginDirectory;

this.LoadPlugins();

}

[ImportMany]

public List<ExportFactory<Plugin, IPluginMetadata>> Plugins

{

get;

protected set;

}

public string PluginDirectory

{

get;

private set;

}

public Plugin GetPlugin(string name)

{

var pluginFactory = this.Plugins.FirstOrDefault(n => n.Metadata.Name.Equals(name));

if (pluginFactory == null)

{

return null;

}

var plugin = pluginFactory.CreateExport().Value;

return plugin;

}

private void LoadPlugins()

{

var catalog = new AggregateCatalog();

var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, this.PluginDirectory);

foreach (var directory in Directory.GetDirectories(path))

{

catalog.Catalogs.Add(new DirectoryCatalog(directory));

}

var container = new CompositionContainer(catalog);

container.ComposeParts(this);

}

}

}

Файл «\Plugin\Plugin.cs\»

namespace Plugin

{

using System;

using System.Collections.Generic;

using System.Windows;

using System.Windows.Controls;

using System.Xml.Linq;

/// <summary>

/// Describes a plugin.

/// </summary>

public abstract class Plugin : ISettings

{

private readonly List<Port> ports = new List<Port>();

/// <summary>

/// Initializes a new instance of the Plugin class.

/// </summary>

protected Plugin()

{

this.Metadata = (PluginAttribute)Attribute.GetCustomAttribute(this.GetType(), typeof(PluginAttribute));

}

public List<Port> Ports

{

get

{

return this.ports;

}

}

/// <summary>

/// Gets the metadata.

/// </summary>

public PluginAttribute Metadata

{

get;

private set;

}

/// <summary>

/// Gets or sets the view.

/// </summary>

public UserControl View

{

get;

protected set;

}

/// <summary>

/// Gets the name.

/// </summary>

public string Name

{

get

{

return this.Metadata.Name;

}

}

/// <summary>

/// Gets the library.

/// </summary>

public string Library

{

get

{

return this.Metadata.Library;

}

}

/// <summary>

/// Gets the version.

/// </summary>

public string Version

{

get

{

return this.Metadata.Version;

}

}

/// <summary>

/// Gets the description.

/// </summary>

public string Description

{

get

{

return this.Metadata.Description;

}

}

/// <summary>

/// Gets or sets the settings.

/// </summary>

public XElement Settings

{

get

{

return this.ViewModel.Settings;

}

set

{

this.ViewModel.Settings = value;

}

}

/// <summary>

/// Gets or sets the view model.

/// </summary>

protected ISettings ViewModel

{

get;

set;

}

public void AddInputPort(string portName)

{

this.ports.Add(new InputPort(portName));

}

public void AddOutputPort(string portName)

{

this.ports.Add(new OutputPort(portName));

}

/// <summary>

/// Shows configure window.

/// </summary>

/// <param name="owner">The window owner.</param>

public abstract void ShowConfigureWindow(Window owner);

/// <summary>

/// Plugin emulation.

/// </summary>

public abstract void Emulate(IDictionary<Port, Signal> data);

private Signal GetSignal<TPort>(string portName, IDictionary<Port, Signal> data, Func<string, TPort> factory)

where TPort : Port

{

var port = factory(portName);

if (!this.ports.Contains(port))

{

throw new ArgumentException();

}

return data[port];

}

public Signal GetOutputSignal(string portName, IDictionary<Port, Signal> data)

{

return this.GetSignal(portName, data, n => new OutputPort(n));

}

public Signal GetInputSignal(string portName, IDictionary<Port, Signal> data)

{

return this.GetSignal(portName, data, n => new InputPort(n));

}

}

}

ПРИЛОЖЕНИЕ В

Модуль тестирования «SchemeTest»

namespace Tests

{

using System;

using System.IO;

using System.Xml;

using System.Xml.Linq;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using Siglab;

[TestClass]

public class SchemeTest

{

private TestContext testContextInstance;

public TestContext TestContext

{

get

{

return testContextInstance;

}

set

{

testContextInstance = value;

}

}

[TestMethod]

[ExpectedException(typeof(XmlException))]

public void WithoutRootElement()

{

DesignerCanvasOpen(XElement.Load(new StringReader("error")));

}

[TestMethod]

public void EmptyRootElement()

{

DesignerCanvasOpen(XElement.Load(new StringReader("<Siglab></Siglab>")));

}

[TestMethod]

[ExpectedException(typeof(NullReferenceException))]

public void EmptyDesignerItem()

{

DesignerCanvasOpen(XElement.Load(new StringReader("<Siglab><Items><DesignerItem></DesignerItem></Items></Siglab>")));

}

[TestMethod]

[ExpectedException(typeof(FormatException))]

public void DesignerItemWithWrongId()

{

DesignerCanvasOpen(XElement.Load(new StringReader("<Siglab><Items><DesignerItem><Id>error</Id></DesignerItem></Items></Siglab>")));

}

private void DesignerCanvasOpen(XElement root)

{

var canvas = new DesignerCanvas();

canvas.Open(root);

}

}

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.