Рефераты - Афоризмы - Словари
Русские, белорусские и английские сочинения
Русские и белорусские изложения

Разработка системы контроля параметров линейной батареи на узле коммутации

Работа из раздела: «Коммуникации, связь, цифровые приборы и радиоэлектроника»

24

7

Введение

Телефонно-телеграфная связь на сегодняшний день распространена очень широко, поэтому появляется необходимость в обеспечении бесперебойного питания нагрузки на АТС, для поддержания необходимого качества предоставления услуг связи. АТС дополнительно оборудуется системой резервного питания, которая позволяет поддерживать работоспособность оборудования при отключении основного питания. Система переходит на автономный режим работы, благодаря буферному включению аккумуляторных батарей, без обрыва установленных соединений. При восстановлении питания АТС автоматически переходит в нормальный режим работы без перезагрузки системы. Наряду с этим возникает необходимость контроля параметров линейных батарей (далее система контроля). Имеющиеся на данный момент системы контроля довольно дорогостоящие и морально устаревшие, и при выходе из строя требуют ремонта или замены на заводе изготовителя. Что влечет за собой затраты на транспортировку, демонтаж и монтаж. Целью данной дипломной работы является разработка системы контроля параметров линейной батарей на узле коммутации. Разрабатываемая система, благодаря применению современных достижений в области разработки микроконтроллеров, будет менее затратной и легко ремонтируемой. При достижении поставленной цели решались следующие задачи:

- анализ существующих систем контроля параметров линейной батареи;

- определение состава и разработка структурной схемы системы контроля;

- определение способа реализации;

- определение измеряемых параметров и диапазон измерений;

- определение погрешности измерения;

- определение скорости вывода информации.

Пояснительная записка состоит из десяти разделов:

- в постановке задачи описана предметная область, основные требования к системе контроля, решаемые задачи, и на основе этого составлено техническое задание;

- анализ существующих методов реализации системы контроля содержит описание системы, установленной на большинстве АТС Севастополя, Siemens PSS 400, указаны положительные свойства и недостатки её эксплуатации;

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

- разработка контроллера интерфейса USB 2.0 содержит подробное описание регистров контроллера, его структурную схему и режимы работы;

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

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

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

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

- в разделе гражданская оборона выполнены прогнозирование и оценка обстановки на предприятии при аварии на химически опасном объекте;

- в заключении подводится итог проделанной работы.

1. Постановка задачи

1.1 Общие требования к системе

На каждой АТС помимо подключения к электросети установлены аккумуляторные батареи, на случай обрыва питания от электростанции. Набор аккумуляторных батарей называют линейной батареей. Чаще всего линейная батарея имеет набор 30 аккумуляторов, подключенных к АТС в буферном режиме, т.е. как только пропадает напряжение в сети, нагрузка (АТС) питается от батареи. Каждый аккумулятор выдает напряжение в 2.23 вольта и имеет свою емкость, измеряемую в ампер на час. Например, для питания нагрузки, потребляемой 120 ампер, устанавливают аккумуляторы имеющие емкость 1200 а/ч, в целях обеспечения питания АТС током на 10 часов аварийной работы. 30 аккумуляторов в сумме дают необходимое напряжение в 68 вольт.

При эксплуатации аккумуляторных батарей необходима система контроля параметров батареи, которая должна контролировать процесс разряда батареи, выдавать необходимые сигналы аварий, и, при необходимости, отключать из сети аккумуляторы для предотвращения глубокого разряда. Аварийные сигналы должны включать сигнал об отсутствии напряжения в сети от электростанции и сигнал о полном обесточивании АТС (или сигнал об отключении батареи из сети). При достижении минимального допустимого значения напряжения, система должна выдать сигнал, по которому сработает реле и отключит батарею от сети, этот сигнал называется К10.

На основании поставленной задачи сформулируем техническое задание на разработку системы контроля.

1.2 Техническое задание

Назначение:

- Система предназначена для сбора, передачи, хранения, обработки и выдачи (отображения) информации.

Состав системы:

- блок первичных преобразователей;

- блок коммутации;

- блок аналого-цифрового преобразования;

- блок хранения данных;

- микропроцессорный блок обработки информации;

- устройство отображения информации;

- устройство передачи данных и интерфейса сопряжения;

- программное обеспечение системы.

Способ реализации:

- аппаратный, на основе микропроцессоров, однокристальных микро-ЭВМ и специализированных БИС.

Измеряемые параметры и диапазоны измерений:

- напряжение от 0 В до 70 В;

- ток от 0 А до 200А;

- температура от 00С до 1000С;

- относительная влажность от 0% до 100%;

Погрешность измерения и отображения данных не более 0,5 %.

Максимальная частота изменения измеряемых величин не менее 7 кГц.

Скорость ввода/вывода информации: не менее 100 Мбит/с.

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

2. Анализ существующих методов реализации системы контроля

На сегодняшний день существует мало фирм, выпускающих системы контроля для электропитающих установок. Продукция некоторых из них, как Siemens и Elteco, установлена на большинстве АТС Севастополя. Рассмотрим систему контроля Siemens Power Supply System 400 [1], которая установлена на электропитающем оборудовании ОАО «Укртелеком», где была пройдена преддипломная практика. Функциональная схема системы Siemens PSS 400 представлена на рисунке 2.1.

Рисунок 2.1 - Функциональная схема системы Siemens PSS 400.

Из рисунка 2.1 видно, что к системе подключаются датчики тока, напряжения и температуры. Данные, полученные от датчиков, отображаются на дисплее, а также передаются на локальный компьютер через порт RS 232.

Общие характеристики системы Siemens PSS 400 приведены в таблице 2.1.

Таблица 2.1 - Общая характеристика системы Siemens PSS 400

Системное напряжение

24, 36, 48, 60 В

Диапазон измерения напряжения

0 - 99 В

Точность измерения напряжения

Максимум 0,5% диапазона измерения

Системный ток

0 - 2500 А

Диапазон измерения температуры

0 - 700С

Питающее напряжение

18 В

Функционирование системы Siemens PSS 400

Система Siemens PSS 400 представляет собой печатную плату с микроконтроллером, которая монтируется в специальную стойку, где расположены выпрямители. К плате подключаются датчик тока напряжения и температуры. На ней размещены три светодиода:

- сигнал SV1 говорит о том, что система требует немедленного вмешательства;

- SV2 - сигнал аварии показывает, что нагрузка питается от батареи;

- Mains fault - нарушение общего питания.

Жидкокристаллический дисплей (ЖК-дисплей) 2х5 знака предназначен для отображения значения тока, напряжения и температуры. Плата контролирует процесс разряда батареи, отображая текущие параметры на дисплей, сигнализирует об аварийных ситуациях, подсвечивая определенный светодиод, и в случае необходимости подает управляющий сигнал на реле (К10), которым батарея отключается от цепи, для предотвращения глубокого разряда. Система связана с персональным компьютером посредством порта RS 232.

Преимущества использования системы Siemens PSS 400: надежность, гарантированная производителем, сервисное обслуживание системы.

К недостаткам относятся: высокая цена, устаревший морально порт сопряжения с ПК, сложность изготовления системы, а также, узкая направленность.

3. Проектирование системы контроля

3.1 Разработка функциональной схемы

Исходя из технического задания и выявленных недостатков используемой системы Siemens PSS 400, разрабатываемая система контроля должна включать в себя датчики тока, напряжения, температуры и влажности. Данные от датчиков поступают на аналогово-цифровой преобразователь, где по уровням напряжения генерируется цифровой код, поступающий на микропроцессорный блок для дальнейшей обработки. В процессорном блоке принятый код переводится в форму представления, понятную для оператора. В дальнейшем преобразованные значения передаются на устройство отображения (например, небольшой жидкокристаллический дисплей) и, по организованному интерфейсу, передавать данные на персональный компьютер.

Исходя из этого, составлена функциональная схема системы контроля параметров представленная на рисунке 3.1.

24

7

Рисунок 3.1 - Функциональная схема системы контроля параметров линейной батареи узла коммутации.

3.2 Алгоритм функционирования системы контроля

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

Перед началом опроса датчиков, системе необходимо настроить интерфейс сопряжения с ПК, подключить к назначенному порту устройство отображения (ЖК-дисплей) и подключить АЦП.

После настройки устройств ввода/вывода информации, системе, первым делом, необходимо определить температуру рабочей зоны, которая должна лежать в пределах от 180С до 220С, а 200С является оптимальной температурой. Если температура не соответствует заданному диапазону, то должен быть подан сигнал о слишком высокой или слишком низкой температуре в рабочей зоне (периодический звуковой сигнал). Если температура превышает плюс 600С, система должна сообщить о возникающей угрозе пожара (продолжительный звуковой сигнал) и отключить питание нагрузки от батареи.

Далее система должна определить влажность рабочей зоны. Диапазон относительной влажности, в котором допускается работа электропитающих установок лежит в пределах от 30% до 80%. В случае несоответствия - вывести на дисплей соответствующее сообщение.

После проверки внешних условий на соответствие рабочему состоянию, система переходит к контролю внутреннего состояния аккумуляторных батарей, а именно, к контролю напряжения и тока выдаваемого на нагрузку при разряде. Для этого определяется, идет ли разряд батареи, путем сравнения вновь полученных данных с датчика напряжения и предыдущими. Если полученное значение меньше предыдущего, значит идет разряд, и необходимо зажечь светодиод «Разряд батареи». Напряжение должно лежать в пределах от 53 В до 68 В, если напряжение на выходе 53 В, то система должна отключить батарею от нагрузки и зажечь светодиод «Батарея отключена». Это необходимо для предотвращения глубокого разряда батареи, в случае которого обратный заряд невозможен. Уровень тока зависит от потребления применяемой нагрузки. Чаще всего АТС потребляют 120 А, поэтому пределы замере тока должны лежать от 0 А до 200 А.

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

На основании словесного описания алгоритма функционирования системы составлена блок-схема алгоритма системы контроля представленная на рисунке 3.2.

3.3 Выбор микроконтроллера

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

К разрабатываемой системе подключаются различные датчики, поэтому присутствует блок аналогово-цифрового преобразования. Для достижения необходимой точности измерения был выбран 10-разрядный блок АЦП с частотой опроса 15КГц. В качестве устройства отображения информации был выбран жидкокристаллический дисплей Alphanumeric LCD Display Model HD44780 компании Densitron [2], который подключается к порту микроконтроллера семью выводами (три для управления и четыре для данных) и имеет разрешение 2х24 знакоместа. Микроконтроллер должен быть достаточно быстродействующим и иметь достаточный объем внутренней памяти, поскольку необходимо обеспечить реализацию USB интерфейса взаимодействия с компьютером.

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

Преимущества такого решения состоит в следующем:

- встроенное АЦП избавит от настройки протокола взаимодействия с микроконтроллером, что сократит объем прошивки;

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

Недостатком использования такого решения является то, что выход из строя какого-то блока микроконтроллера (АЦП или порт USB) потребует его замены. Однако, с малой розничной ценой и высоким качеством продукции, этот недостаток является незначительным, т.к. выпойка хотя бы одного вышедшего из строя элемента системы потребовала бы специального дорогостоящего оборудования. Предлагаемое решение потребует простой замены микроконтроллера с прошивкой на месте.

Исходя из вышеперечисленных фактов, был выбран микроконтроллер AT90USB1286 компании Atmel [3].

3.4 Основные характеристики микроконтроллера

Микроконтроллер AT90USB1286 - это экономичный 8-разрядный КМОП-микроконтроллер, выполненный на основе высокоэффективной архитектуры AVR RISC, это концепция проектирования процессоров (ЦПУ) [3], которая во главу ставит следующий принцип: более компактные и простые инструкции выполняются быстрее (RISC архитектура). За счет выполнения большинства инструкций за один период синхронизации, микроконтроллер достигает производительности 1 миллион операций в секунду на 1 МГц тактовой частоты, что позволяет оптимизировать соотношение потребляемой мощности и быстродействия. Ядро AVR сочетает обширный набор инструкций с 32 регистрами общего назначения. Все 32 регистра непосредственно подключены к арифметико-логическому устройству (АЛУ), что позволяет указывать в одной инструкции одновременно два регистра и выполнять такую инструкцию за один период синхронизации. Результирующая архитектура является более эффективной и позволяет на порядок повысить производительность относительно традиционных CISC-микроконтроллеров. AT90USB1286 содержит следующие компоненты:

- 128 кбайт внутрисистемно-программируемой флэш-памяти с возможностями чтения во время записи;

- 4 кбайт ЭСППЗУ (электрически стираемое перепрограммируемое ПЗУ). Память такого типа может стираться и заполняться данными несколько десятков тысяч раз;

- 8 кбайт статического ОЗУ;

- 48 линий ввода-вывода общего назначения;

- 32 рабочих регистра общего назначения;

- счетчик реального времени;

- четыре конфигурируемых таймера-счетчика с режимами сравнения и широтно-импульсной модуляцией;

- один УСАПП (Универсальный синхронный и асинхронный последовательный приемопередатчик предназначен для организации гибкой последовательной связи);

- байт-ориентированный 2-проводной последовательный интерфейс;

- 8-канальный 10-разрядный АЦП с опциональным дифференциальным входным каскадом (поддерживает программирование усиления);

- программируемый сторожевой таймер с отдельным внутренним генератором;

- последовательный порт SPI, последовательный периферийный интерфейс, шина SPI -- последовательный синхронный стандарт передачи данных в режиме полного дуплекса, разработанный компанией Motorola для обеспечения простого и недорогого сопряжения микроконтроллеров и периферии;

- интерфейс JTAG (совместим со стандартом IEEE 1149.1 и используется для программирования, граничного сканирования и доступа к встроенной отладочной системе).

Кроме того, микроконтроллер может быть переведен в один из шести экономичных режимов работы. В режиме холостого хода (Idle) останавливается ЦПУ, но продолжают работать статическое ОЗУ, таймеры-счетчики, порт SPI и система прерываний. В режиме снижения мощности (Power-down) сберегается содержимое регистров, но прекращает работу генератор, отключая все встроенные функции до следующего прерывания или аппаратного сброса. В экономичном режиме (Power-save) продолжает работу асинхронный таймер, обеспечивая возможность продолжения счета времени, когда остальная часть микроконтроллера отключена. В режиме снижения шума АЦП останавливается ЦПУ и все модули ввода-вывода, за исключением АЦП, что позволяет минимизировать влияние цифрового шума на результат преобразования. В дежурном режиме (Standby) продолжает работать кварцевый/керамический генератор, а остальная часть микроконтроллера бездействует. Использование этого режима позволяет достичь минимальной длительности возобновления нормальной работы микроконтроллера при сохранении пониженного уровня потребления. В расширенном дежурном режиме в работе остаются основной генератор и асинхронный таймер.

Микроконтроллеры выпускаются по технологии высокоплотной энергонезависимой памяти компании Atmel. Механизм программирования встроенной флэш-памяти позволяет перепрограммировать ее внутрисистемно через последовательный интерфейс SPI с помощью обычного программатора энергонезависимой памяти или с помощью встроенной загрузочной программы, выполняемой ядром AVR. Загрузочная программа может использовать любой интерфейс для загрузки программного кода во флэш-память. За счет разделения флэш-памяти на загрузочный сектор и сектор прикладной программы поддерживается действительная возможность чтения во время записи, когда загрузочный код продолжает исполняться и выполняется обновление сектора прикладной программы. Сочетание 8-разрядного RISC ЦПУ с внутрисистемно-самопрограммируемой флэш-памятью в одном кристалле делает микроконтроллеры Atmel AT90USB1286 мощным инструментом для эффективного и выгодного в стоимостном плане решения задач встраиваемого управления.

3.5 Выбор и обоснование языка программной реализации

На сегодняшний день существует достаточное количество различных сред для написания прошивки микроконтроллера на языке высокого и низкого уровня. Языком высокого уровня для написания прошивки является Си. Написанный код на языке Си удобно читается, он является более гибким для программирования, в отличие от языка низкого уровня Assembler. Для написания программы и драйвера была использован компилятор WinAVR, который распространяется бесплатно. Компилятор представляет собой набор инструментальных средств, предназначенных для программирования RISC микроконтроллеров семейства AVR на языке Си [7], он переводит код написанный на Си в ассемблерный код выбранного микроконтроллера, устанавливая значения битов регистров микроконтроллера, оптимизируя по усмотрению: либо для экономии памяти, либо для ускорения работы микроконтроллера.

3.6 Расчет электрических параметров системы контроля

При использовании 10-и разрядного АЦП будет достигаться необходимая точность в измерениях напряжения и тока. На вход АЦП подается непрерывный аналоговый сигнал, а на выходе получается последовательность цифровых значений. АЦП имеет много характеристик, но в качестве основных можно назвать разрешающую способность, абсолютную точность, предельную частоту дискретизации и диапазон входных напряжений [16].

Разрешающая способность (разрешение) - это способность АЦП различать два значения входного сигнала [18]. Определяется как величина обратная максимальному числу кодовых комбинаций на выходе АЦП. У микроконтроллера АЦП 10-ти разрядный. Максимальное число кодовых комбинаций будет равно 210 = 1024. Разрешающая способность равна 1/1024 от всей шкалы допустимых входных напряжений.

Для работы АЦП необходим источник опорного напряжения (ИОН). Для него это эталон, по отношению к которому он измеряет входные сигналы. Микроконтроллеры AVR позволяют в качестве ИОНа использовать напряжение питания, внутренний опорный источник на 2,56 В и напряжение на выводе AREF (внешний ИОН).

Напряжение питания в нашем случае 5 В, тогда 1/1024 от всей шкалы это 5 * 1/1024 = 0,0048 В или примерно 5 мВ. С таким шагом (это называется шаг квантования) АЦП будет измерять входное напряжение. Если два ближайших значения сигнала на входе АЦП будут отличаться между собой на величину < 5 мВ, АЦП воспримет их как одинаковые.

Абсолютная точность - отклонение реального преобразования от идеального. Это составной результат нескольких погрешностей АЦП. Выражается в количестве младших значащих разрядов (LSB - least significant bit) АЦП. Для AVRа абсолютная погрешность АЦП = ±2LSB [21]. Для используемого АЦП абсолютная точность будет равна 2 * 5 мВ = ±10 мВ.

Предельная частота дискретизации определяет быстродействие АЦП и измеряется в герцах или количестве выборок в секунду (SPS - samples per second). Для микроконтроллеров AVR эта величина равна 15 kSPS (килло семплов в секунду).

Теорема Котельникова (теорема Найквиста-Шеннона) [13] гласит, что аналоговый сигнал, имеющий ограниченный спектр, может быть восстановлен однозначно и без потерь по своим дискретным отсчётам, если частота выборки (дискретизации) превышает максимальную частоту спектра сигнала более чем в 2 раза. Так, нам нужно оцифровать аналоговый сигнал с полосой спектра 0 - 7 КГц, то в идеальном случае частота дискретизации должна быть > удвоенной максимальной частоты спектра этого сигнала, то есть > 14 КГц.

Поскольку разряд батареи идет плавно и без скачков напряжения, то частоты дискретизации 15 КГц вполне достаточно для однозначного отображения процесса разряда.

Диапазон входных напряжений - это минимальное и максимальное значение напряжения, которое можно подавать на вход АЦП. Для микроконтроллера AVR он равен 0 - Vcc (напряжение питания)

Для верности измерений, напряжение в 67 В делим резистором и подаем на вход АЦП максимум 5 В. Перевести цифровой код в напряжение на входе АЦП, можно по формуле:

Uin = Ref * adc_data / ((2n-1), (3.1)

где n - разрядность АЦП, Uin - входное напряжение, Ref - напряжение опорного источника, adc_data - код с АЦП.

Для измерения тока устанавливается шунт 100А/60 мВ (стандартный шунт устанавливаемый на АТС), напряжение которое с него снимается, проходит через усилитель, выход последнего подается на вход АЦП. Получаем что при 5 В значение тока будет равно 200 А.

4. Разработка контроллера интерфейса USB 2.0

4.1 Структурная схема и общие регистры USB

USB-контроллер содержит все необходимые компоненты для соединения USB-канала со встроенным двухпортовым ОЗУ (DPRAM).

USB-контроллер синхронизируется частотой 48 МГц±0.25% (для работы в режиме FS), которая создается внутренним блоком PLL. Данный блок синтезирует высокочастотный сигнал (48 МГц) из более низкочастотного сигнала. Источником этого сигнала могут служить кварцевый генератор или вход внешней синхронизации XTAL1 (только они отвечают требованиям USB-контроллера к стабильности частоты и фазовому шуму и обеспечивают надлежащее его функционирование).

Сигнал синхронизации 48 МГц в дальнейшем используется для генерации сигнала битовой синхронизации частотой 12 МГц в режиме FS (или 1.5 МГц в режиме LS) при приеме дифференциальных данных, а также для передачи данных с учетом допустимых отклонений в соответствующем скоростном режиме. Восстановление синхронизации выполняется блоком цифровой фазовой автоподстройки частоты (блок DPLL), который совместим с требованиями к фазовому шуму шины USB.

Для соответствия требованиям к электрическим характеристикам шины USB выводы D+ и D- должны иметь высокие уровни напряжений в пределах 3.0…3.6 В. Для этих целей в AT90USB1286 встроен специальный стабилизатор напряжения, что сохранило возможность питания МК напряжением до 5.5 В [11].

Структурная схема USB-контроллера приведена на рисунке 4.1.

Контроллер USB настраивается семью общими регистрами, которыми обеспечиваются различные режимы работы, путем установки битов [11]. Ниже приведено подробное описание регистров и значения их разрядов.

Формат регистра UHWCON представлен на рисунке 4.2:

146

Разряд

7

6

5

4

3

2

1

0

 

UIMOD

UIDE

 

UVCONE

 

 

 

UVREGE

Чтение/запись

Чт./Зп.

Чт./Зп.

Чт.

Чт./Зп.

Чт.

Чт.

Чт.

Чт./Зп.

Исх. Значение

1

0

0

0

0

0

0

0

Рисунок 4.2 - Формат регистра UHWCON

Бит 7 - UIMOD: бит режима USB. Данный бит не оказывает никакого влияния, когда установлен бит UIDE (активирует внешний вывод UID). Бит устанавливается, когда необходимо выбрать режим Device, и сбросьте, когда нужен режим Host.

Бит 6 - UIDE: разрешение работы вывода UID. Устанавливается этот бит для разрешения работы логики выбора режима USB (Device/host) через вывод UID. Этот бит следует сбросить при необходимости выбора режима USB (Device/host) битом UIMOD.

Бит 5 - Резерв. При чтении данного бита всегда возвращается 0.

Бит 4 - UVCONE: разрешение работы вывода UVCON. Устанавливается бит при необходимости разрешения работы выхода управления UVCON. Данный бит необходимо устанавливать только при активном интерфейсе USB.

Биты 3-1 - Резерв. При чтении данных бит всегда возвращаются нули.

Бит 0 - UVREGE: разрешение работы встроенного стабилизатора напряжения. Этот бит устанавливается для включения встроенного стабилизатора напряжения.

Рисунок 4.1 - Структурная схема USB-контроллера

Формат регистра USBCON представлен на рисунке 4.3.

Бит 7 - USBE: разрешение работы USB-контроллера. Бит устанавливается для разрешения работы USB-контроллера и сбрасывается для отключения сброса USB-контроллера, для отключения USB-трансивера и для отключения входов синхронизации USB-контроллера.

Разряд

7

6

5

4

3

2

1

0

 

USBE

HOST

FRZCLK

OTGPADE

-

-

IDTE

VBUSTE

Чтение/запись

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт.

Чт.

Чт./Зп.

Чт./Зп.

Исх. значение

0

0

1

0

0

0

0

0

Рисунок 4.3 - Формат регистра USBCON

Бит 6 - HOST: бит HOST. Устанавливается бит для выбора режима Host. Сбросить бит для выбора режима Device.

Бит 5 - FRZCLK: бит остановки синхронизации USB-контроллера. Устанавливается бит для отключения входов синхронизации (функция обнаружения возобновления 'Resume Detection' остается активной). Это позволяет снизить потребляемый ток.

Бит 4 - OTGPADE: разрешение работы вывода OTG.Устанавливается этот бит для разрешения работы вывода OTG. Сбрасывается бит для отключения вывода OTG. Данный бит можно установить/сбросить даже если USBE=0. Это позволяет контролировать VBUS, даже когда USB-контроллер отключен. Работу вывода можно разрешить как в режиме Host, так и в режиме Device, чтобы способствовать работе интерфейса USB (присоединение к шине, передача).

Биты 3-2 - Резерв. При чтении данных бит всегда возвращаются нули.

Бит 1 - IDTE: бит разрешения прерывания по изменению состояния ID. Устанавливается данный бит для разрешения генерации прерывания по изменению состояния вывода ID.

Бит 0 - VBUSTE: бит разрешения прерывания по изменению VBUS. Устанавливается этот бит для разрешения генерации прерывания по изменению VBUS. Формат регистра USBSTA представлен на рисунке 4.4:

Разряд

7

6

5

4

3

2

1

0

 

-

-

-

-

SPEED

 

ID

VBUS

Чтение/запись

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Исх. значение

0

0

0

0

1

0

1

0

Рисунок 4.4 - Формат регистра USBSTA

Биты 7-4 - Резерв. При чтении данных битов всегда возвращаются нули.

Бит 3 - SPEED: флаг статуса скорости. Его необходимо опрашивать, только когда USB-контроллер работает в режиме Host; в режиме Device состояние данного бита является неопределенным. Устанавливается и сбрасывается аппаратно, когда контроллер работает в режиме FULL-SPEED (FS) и LOW-SPEED (LS), соответственно.

Бит 2 - Резерв. При чтении данного бита всегда возвращается 0.

Бит 1 - ID: флаг статуса вывода IUD. Считанное из данного бита значение индицирует состояние вывода UID.

Бит 0 - VBUS: флаг статуса вывода VBus. Считанное из данного бита значение индицирует состояние вывода VBUS. Данный бит можно использовать в режиме Device для контроля состояния подключения шины USB.

Формат регистра USBINT представлен на рисунке 4.5:

Разряд

7

6

5

4

3

2

1

0

 

-

-

-

-

-

-

IDTI

VBUSTI

Чтение/запись

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт./Зп.

Чт./Зп.

Исх. Значение

0

0

0

0

0

0

0

0

Рисунок 4.5 - Формат регистра USBINT

Биты 7-2 - Резерв. При чтении данных бит всегда возвращается 0.

Бит 1 - IDTI: флаг прерывания по изменению состояния вывода ID. Устанавливается аппаратно при обнаружении изменения состояния (переход из высокого состояния в низкое или наоборот) вывода UID.

Бит 0 - VBUSTI: флаг прерывания по изменению состояния VBUS. Устанавливается аппаратно при обнаружении изменения состояния (переход из высокого состояния в низкое или наоборот) на выводе VBUS.

Формат регистра OTGCON представлен на рисунке 4.6:

Разряд

7

6

5

4

3

2

1

0

 

-

-

HNPREQ

SRPREQ

SRPSEL

VBUSHWC

VBUSREQ

VBUSRQC

Чтение/

запись

Чт.

Чт.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Исх. значение

0

0

0

0

0

0

0

0

Рисунок 4.6 - Формат регистра OTGCON

Биты 7-6 - Резерв. При чтении данных бит всегда возвращаются 0.

Бит 5 - HNPREQ: бит запроса HNP. Устанавливается данный бит для инициации HNP, когда контроллер работает в режиме Device (сторона B).

Бит 4 - SRPREQ: бит запроса SRP. Устанавливается бит для инициации SRP, когда контроллер работает в режиме Device. Сбрасывается аппаратно, когда контроллер инициирует SRP.

Бит 3 - SRPSEL: бит выбора SRP. Устанавливается для выбора генерации импульсов на VBUS в качестве метода SRP. Сбрасывается для выбора генерации импульсов на линии данных как метода SRP.

Бит 2 - VBUSHWC: бит аппаратного управления VBus. Устанавливается этот бит для отключения аппаратного управления выводом UVCON. Сбрасывается бит для разрешения аппаратного управления выводом UVCON.

Бит 1 - VBUSREQ: бит запроса VBUS. Устанавливается этот бит при необходимости перевода вывода UVCON в состояние, которое разрешает генерацию напряжения VBUS. Данный бит используется, когда контроллер работает в режиме Host. Сбрасывается аппаратно, когда установлен бит VBUSRQC.

Бит 0 - VBUSRQC: бит отмены запроса VBUS. Устанавливается данный бит для отключения функции UVCON управления разрешением генерации напряжения питания VBUS. Данный бит используется только при работе контроллера в режиме Host. Сбрасывается аппаратно сразу после установки.

Формат регистра OTGIEN представлен на рисунке 4.7:

Разряд

7

6

5

4

3

2

1

0

 

-

-

STOE

HNPERRE

ROLEEXE

BCERRE

VBERRE

SRPE

Чтение/запись

Чт.

Чт.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Исх. значение

0

0

0

0

0

0

0

0

Рисунок 4.7 - Формат регистра OTGIEN

Биты 7-6 - Резерв. При чтении данных бит всегда возвращаются 0.

Бит 5 - STOE: бит разрешения прерывания по истечению времени в режиме SUSPEND . Устанавливается для разрешения прерывания.

Бит 4 - HNPERRE: бит разрешения прерывания по ошибке HNP. Устанавливается для разрешения прерывания HNPERRI.

Бит 3 - ROLEEXE: бит разрешения прерывания при изменении роли. Устанавливается для разрешения прерывания ROLEEXI.

Бит 2 - BCERRE: бит разрешения прерывания по ошибке подключения стороны B. Устанавливается для разрешения прерывания BCERRI.

Бит 1 - VBERRE: бит разрешения прерывания по ошибке VBus. Устанавливается для разрешения (запрета) прерывания VBERRI.

Бит 0 - SRPE: бит разрешения прерывания SRP. Устанавливается для разрешения прерывания SRPI.

Формат регистра OTGIN представлен на рисунке 4.8:

Разряд

7

6

5

4

3

2

1

0

 

-

-

STOI

HNPERRI

ROLEEXI

BCERRI

VBERRI

SRPI

Чтение/запись

Чт.

Чт.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Чт./Зп.

Исх. значение

0

0

0

0

0

0

0

0

Рисунок 4.8 - Формат регистра OTGIN

Биты 7-6 - Резерв. При чтении данных бит всегда возвращаются 0.

Бит 5 - STOI: флаг прерывания по истечению времени в режиме SUSPEND. Устанавливается аппаратно по истечении выдержки времени (более 150 мс) после обнаружения состояния SUSPEND. Необходимо сбросить программно.

Бит 4 - HNPERRI: флаг ошибки прерывания HNP. Устанавливается аппаратно, когда обнаруживается ошибка по ходу осуществления протокола HNP. Необходимо сбросить программно.

Бит 3 - ROLEEXI: флаг прерывания по изменению роли. Устанавливается аппаратно, когда USB-контроллер успешно изменил свой режим работы вследствие негоциации HNP: Host-->Device или Device-->Host. Тем не менее, бит выбора режима (Host/Device) остается неизменным и его необходимо изменить программно, чтобы достигнуть нужных ячеек ОЗУ и бит событий.

Бит 2 - BCERRI: флаг прерывания по ошибке подключения стороны B. Устанавливается аппаратно, когда обнаруживается ошибка в ходе подключения стороны B (т.е. когда не обнаруживается подключение Device-системы в течение 300 мс существования Vbus). Необходимо сбросить программно.

Бит 1 - VBERRI: флаг прерывания по ошибке VBus. Устанавливается аппаратно при обнаружении падения на VBus. Необходимо сбросить программно.

Бит 0 - SRPI: флаг прерывания SRP. Устанавливается аппаратно, когда обнаруживается SRP. Должен использоваться только в режиме Host. Необходимо сбросить программно.

4.2 Рабочие режимы программы USB-интерфейса

В зависимости от режима работы USB, программа должна выполнить ряд приведенных ниже действий [11].

Подача питания USB-интерфейса:

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

- настройка интерфейса блока PLL (встроенный блок фазовой автоподстройки частоты предназначен для синтеза повышенных частот системной синхронизации);

- разрешение работы блока PLL и ожидание входа его в состояние захвата (lock);

- разрешение работы USB-интерфейса;

- настройка USB-интерфейса (скорость, настройка конечных точек и др.);

- ожидание информационного подключения USB VBUS;

- присоединение к шине.

Отключение питание USB-интерфейса:

- отсоединение USB-интерфейса;

- отключение USB-интерфейса;

- отключение блока PLL;

- отключение встроенного стабилизатора.

Приостановка USB-интерфейса (режим SUSPEND):

- сброс бита приостановки;

- отключение синхронизации USB;

- отключение блока PLL;

- проверка, разрешены ли прерывания, позволяющие возобновить активную работу;

- перевод МК в экономичный режим работы (SLEEP);

- возобновление работы USB-интерфейса;

- разрешение работы PLL;

- ожидание перехода блока PLL в состояние захвата;

- разрешение работы синхронизации USB;

- очистка информации, связанной с возобновлением.

4.3 Работа USB-контроллера в режиме Device

Device-контроллер поддерживает передачу данных на скорости FS и LS. В дополнение к конечной точке типа CONTROL, которая доступна по умолчанию, доступны еще 6 конечных точек с конфигурируемыми режимами CONTROL, BULK, INTERRUPT и ISOCHRONOUS [15]:

- конечная точка 0: буфер FIF с программируемым размером до 64 байт, конечная точка по умолчанию, тип CONTROL;

- конечная точка 1: буфер FIF с программируемым размером до 256 байт в режиме ping-pong;

- конечные точки 2…6: буфер FIF с программируемым размером до 64 байт в режиме ping-pong.

Контроллер начинает свою работу с режима IDLE. В этом режиме потребление оконечным каскадом сведено до минимума.

Рисунок 4.9 демонстрирует основные состояния Device-контроллера после подачи питания.

Рисунок 4.9 - Состояния Device-контроллера после сброса

Под состоянием сброса Device-контроллера понимается состояние, в котором:

- отключена его синхронизации для минимизации потребляемого тока (FRZCLK=1);

- все внутренние регистры Device-контроллера приняли свое исходное значение (обратите внимание, что DETACH=1);

- банки конечных точек являются сброшенными;

- подтяжка к плюсу питания на D+ и D- отключена (режим DETACH).

Подтяжка к плюсу на D+ или D- активизируется сразу после обнуления бита DETACH и появления напряжения VBUS.

USB-контроллер после сброса переводится в состояние IDLE для минимизации потребляемого тока. Для перехода в это состояние нет необходимости в активизации блока PLL.

Device-контроллер можно в любое время сбросить путем обнуления бита USBE (отключение интерфейса USB).

4.4 Сброс, выбор и активизация конечной точки

Конечная точка может быть сброшена в любой момент путем установки в регистре UERST бита соответствующей конечной точки (EPRSTx) [11]. Это приведет к:

- сбросу внутреннего автомата состояний выбранной конечной точки;

- сбросу банков приема и передачи, а также восстановлению их внутренних указателей;

- записи своих исходных значений в UEINTX, UESTA0X и UESTA1X.

Поле переключателя данных (DATA TOGGLE) остается неизменным.

Прочие регистры остаются неизменными.

Настройка конечной точки остается действительной, а сама конечная точка сохраняется разрешенной.

Сброс конечной точки можно связать с командой сброса переключателя данных (бит RSTDT), как ответ на USB-команду CLEAR_FEATURE.

При обнаружении USB-сброса на линии USB контроллером выполняются следующие действия:

- отключаются все конечные точки;

- конечная точка по умолчанию (тип CONTROL) сохраняется сконфигурированной.

Перед выполнением каких-либо действий со стороны ЦПУ необходимо выполнить выбор конечной точки. Для этого предусмотрены биты EPNUM2:0 (регистр UENUM), в которые необходимо записать номер конечной точки, с которой желает работать ЦПУ.

После этого, ЦПУ может осуществлять доступ к различным регистрам и данным конечной точки.

Конечная точка удерживается в состоянии сброса до тех пор, пока не установлен бит EPEN.

Если настройка конечной точки выполнена некорректно (CFGOK=0), контроллер не будет подтверждать пакеты, отправленные с Host-стороны.

Бит CFGOK не устанавливается, если задан размер конечной точки, который больше размера DPRAM.

Обнуление бита EPEN действует как сброс конечной точки. При этом также выполняются следующие действия:

- сохраняется настройки конечной точки (EPSIZE, EPBK, ALLOC);

- сбрасывается поле переключателя данных.

4.5 Настройка адреса

Адрес Device-контроллера устанавливается в соответствии с протоколом USB [11]:

- после подачи питания Device-сторона доступна по адресу 0;

- Host отправляет команду SETUP (SET_ADDRESS(addr));

- программа записывает адрес в UADD, но при этом сохраняет ADDEN равным нулю;

- Device отправляет команду IN с нулем байт (пакет IN нулевой длины);

- после этого программа может разрешить адрес Device-контроллера путем установки бита ADDEN. В этом случае контроллер будет использовать адрес, сохраненный в UADD.

ADDEN и UADD нельзя записывать одновременно. После подачи питания или USB-сброса в UADD содержится адрес по умолчанию (00h).

ADDEN сбрасывается аппаратно:

- после сброса при подаче питания;

- когда принят USB-сброс;

- или когда отключен весь USB-контроллер (обнулен бит USBE).

Когда этот бит равен нулю, используется адрес по умолчанию (00h).

4.6 Режим SUSPEND и выход из него

По истечении 3 мс, в течение которых линия USB была неактивной, контроллер переключается в полноскоростной режим и инициирует прерывание SUSPI (если оно было разрешено) [11]. После этого, в программе можно установить бит FRZCLK.

ЦПУ, в зависимости от архитектуры программы, также может ввести режим IDLE для снижения потребляемого тока.

Доступно два способа для выхода из режима SUSPEND:

- первый заключается в обнулении бита FRZCLK. Это возможно, если ЦПУ не находится в режиме IDLE;

- в случае же, если ЦПУ находится в режиме IDLE, подходит другой способ, который состоит в разрешении прерывания WAKEUPI (WAKEUPE=1). В таком случае, если контроллером обнаруживается сигнал отличный от IDLE, инициируется прерывание WAKEUPI.

В дальнейшем, для перезапуска передачи, программа должна сбросить бит FRZCLK.

Не существует никакой связи между прерываниями SUSPI и WAKEUPI: прерывание WAKEUPI запускается сразу при обнаружении отличных от IDLE сигналов на линиях данных. Таким образом, прерывание WAKEUPI может возникнуть, даже если контроллер не в режиме SUSPEND.

Если бит прерывания SUSPI был установлен, то после запуска прерывания WAKEUPI он сбрасывается автоматически. Аналогичным образом, если во время запуска прерывания SUSPI бит прерывания WAKEUPI был уже установлен, то он сбросится автоматически.

4.7 Отсоединение и удаленное возобновление

После сброса бит DETACH равен 1.

Имеется возможность повторно выполнить процедуру перечисления (enumeration) [3]. Для этого достаточно установить и сбросить бит DETACH.

Установка бита DETACH приводит к отключению подтяжки к плюсу питания на выводе D+ или D- (в зависимости от выбранного скоростного режима, FS или LS). Затем, после обнуления DETACH, подтяжка к плюсу питания на D+ или D- будет вновь активизирована (см. рис. 4.10).

Рисунок 4.10 - Отсоединение стороны Device в полноскоростном режиме

Запрос на удаленное возобновление (REMOTE WAKE-UP или UPSTREAM RESUME) является единственной операцией, которую Device-сторона может выполнить по своей собственной инициативе. Однако, чтобы сделать это, Device-сторона должна сначала принять со стороны Host запрос DEVICE_REMOTE_WAKEUP.

Вначале USB-контроллер должен обнаружить на линии состояние SUSPEND: запрос на удаленное возобновление можно отправить, только когда установлен флаг SUSPI.

После этого программа имеет возможность установить RMWKUP для отправки потока UPSTREAM RESUME. Данная операция автоматически выполняется контроллером по истечении 5 мс неактивности линии USB.

Когда контроллер начинает передавать поток UPSTREAM RESUME, запускается прерывание UPRSMI (если оно было разрешено). Флаг SUSPI сбрасывается аппаратно.

RMWKUP сбрасывается аппаратно в конце потока UPSTREAM RESUME.

Если контроллер обнаруживает правильный сигнал END OF RESUME (передается Host-стороной), запускается прерывание EORSMI (если оно было разрешено).

4.8 Передача пакета STALL

Для каждой конечной точки управление функцией STALL осуществляется с использование следующих бит:

- STALLRQ (разрешение запроса STALL);

- STALLRQC (отключение запроса STALL);

- STALLEDI (флаг прерывания по отправке STALL).

Чтобы следующим запросом был отправлен пакет подтверждения STALL, необходимо установить бит STALLRQ. Все последующие запросы будут подтверждаться с помощью STALL до тех пор, пока установлен бит STALLRQC.

Установка STALLRQC приводит к автоматическому обнулению бита STALLRQ. Бит STALLRQC моментально обнуляется аппаратными средствами сразу после его программной установки. Таким образом, при опросе данного бита никогда не возвращается единичное значение.

При каждой отправке подтверждения типа STALL USB-контроллер устанавливает флаг STALLEDI, при этом, генерируется прерывание EPINTx (если оно было разрешено).

Входящие пакеты будут отклонены (RXOUTI и RWAL не будут установлены).

После этого, Host-сторона отправит команду для сброса функции STALL: все, что должна сделать программа в этом случае - это установить бит STALLRQC и сбросить конечную точку [11].

4.9 Особенности работы и управление конечными точками типа CONTROL

Запрос SETUP всегда подтверждается пакетом ACK [11].

Если для конечной точки типа CONTROL задана передача пакета STALL и, при этом, появляется запрос SETUP, этот запрос подтверждается пакетом ACK, а флаги запроса (STALLRQ) и отправки (STALLEDI) автоматически сбрасываются (RXSETUPI=1, TXIN=0, STALLED=0, TXINI=0...).

Такой механизм упрощает управление процессом перечисления. Если команда не поддерживается или содержит ошибку, программа устанавливает флаг запроса STALL и возвращается к основной задаче, ожидая следующего запроса SETUP.

Данная функция совместима с тестом, в котором отправляется дополнительный статус для GET_DESCRIPTOR [3]. Программа устанавливает запрос STALL только после приема статуса. Все дополнительные статусы будут автоматически подтверждаться пакетом STALL вплоть до следующего запроса SETUP.

Механизм повтора (RETRY) имеет более высокий приоритет, чем подтверждение типа STALL. Подтверждение типа STALL отправляется, если установлен бит запроса STALLRQ и если нет необходимости в повторе.

Запрос SETUP всегда подтверждается пактом ACK. После получения нового пакета SETUP запускается прерывание RXSTPI (если прерывание было разрешено). Прерывание RXOUTI не запускается.

Поля FIFOCON и RWAL не имеют отношения к конечным точкам CONTROL. В связи с этим, программа при работе с такими конечными точками не должна обращаться к этим полям. При их опросе всегда возвращаются нулевые значения.

Конечные точки типа CONTROL управляются следующими битами:

- RXSTPI становится равным единице после приема нового запроса SETUP. Его необходимо сбросить программно для подтверждения пакета и для сброса банка конечной точки;

- RXOUTI становится равным единице при приеме данных типа OUT. Его необходимо сбросить программно для подтверждения пакета и сброса банка конечной точки;

- TXINI становится равным единице, когда банк готов для приема нового пакета типа IN. Его необходимо сбросить программно для отправки пакта и сброса банка конечной точки.

4.10 Управление конечными точками OUT и IN

Пакеты OUT отправляются Host-ом. Все данные могут быть считаны ЦПУ, который подтверждает или нет банк после его освобождения [11].

Первой должна быть сконфигурирована конечная точка.

После каждого заполнения текущего банка устанавливаются биты RXOUTI и FIFOCON. Если установлен бит RXOUTE, это приводит к запуску прерывания. Программа может подтвердить USB-прерывание путем сброса бита RXOUTI. Для освобождения текущего банка программа выполняет чтение данных и сброс бита FIFOCON. Если конечная точка OUT состоит из нескольких банков, то вместе со сбросом бита FIFOCON произойдет смена банка. Обновление бит RXOUTI и FIFOCON осуществляется аппаратными средствами в соответствии со статусом нового банка.

Сброс RXOUTI всегда должен предшествовать сбросу FIFOCON.

Бит RWAL всегда отражает состояние текущего банка. Данный бит устанавливается, когда программа может выполнить чтение данных из банка, и сбрасывается, когда банк пуст.

ЦПУ считывает данные в соответствии со следующей последовательностью:

- по завершении заполнения банка Host-стороной инициируется запуск прерывания конечной точки (EPINTx), но только при условии, что оно разрешено (RXOUTE =1) и установлен бит RXOUTI. В зависимости от используемой архитектуры программы, ЦПУ может альтернативно выполнить опрос бита RXOUTI или FIFOCON;

- ЦПУ подтверждает прерывание путем сброса RXOUTI;

- ЦПУ может выполнить чтение количества байт (N) в текущем банке (N=BYCT);

- ЦПУ может выполнить чтение данных из текущего банка (N чтений UEDATX);

- ЦПУ может освободить банк путем сброса FIFOCON по завершении считывания всех данных, т.е.: после N чтений UEDATX и сразу после аппаратного сброса RWAL.

Если конечная точка использует 2 банка, то во время чтения ЦПУ одного банка Host-сторона может заполнять другой банк. Затем, когда ЦПУ сбрасывает FIFOCON, следующий банк может быть уже готов и RXOUTI устанавливается незамедлительно.

Пакеты IN отправляются Device-контроллером по запросу IN Host-стороны. Все данные могут быть записаны ЦПУ, который подтверждает или нет заполненный банк.

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

Бит TXINI устанавливается аппаратно, когда освобождается текущий банк. Если бит TXINE установлен, это приводит к запуску прерывания. Одновременно с ним выполняется установка бита FIFOCON. Чтобы разрешить USB-контроллеру передавать данные, ЦПУ нужно записать их в FIFO и сбросить бит. Если конечная точка IN состоит из нескольких банков, то одновременно с этим происходит переход к следующему банку данных. Биты TXINI и FIFOCON автоматически обновляются аппаратными средствами, независимо от состояния следующего банка.

Бит TXINI необходимо обнулять только перед обнулением FIFOCON.

Бит RWAL всегда отражает состояние текущего банка. Данный бит равен 1, когда разрешается программная запись данных в банк, и равен 0, когда банк полон.

ЦПУ записывает данные в соответствии со следующей последовательностью:

- когда банк пуст, запускается прерывание конечной точки (EPINTx), но только при условии, что это прерывание разрешено (TXINE=1) и установлен бит TXINI. В зависимости от архитектуры программы, ЦПУ альтернативно может выполнить опрос бита TXINI или FIFOCON;

- ЦПУ подтверждает прерывание сбросом бита TXINI;

- ЦПУ записывает данные в текущий банк (запись в UEDATX);

- ЦПУ освобождает банк путем сброса FIFOCON, но только после записи всех данных, а именно: после N записей в UEDATX и вскоре после аппаратного сброса RWAL.

Если конечная точка использует 2 банка, то одновременно с заполнением ЦПУ одного банка Host-сторона может считывать другой банк. Затем, когда ЦПУ сбрасывает FIFOCON, очередной банк может быть уже готов (свободен), а TXINI устанавливается незамедлительно.

Потребность в функции ABORT инициируется Host-стороной и возникает в следующих ситуациях:

- (транзакция CONTROL) ZLP-данные OUT приняты на этапе IN;

- (транзакция ISOCHRONOUS IN) ZLP-данные OUT приняты конечной точкой OUT на этапе IN конечной точки IN.

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

4.11 Прерывания

Все прерывания разделяются на два вида: операционные (т.е. их генерация является частью нормальной работы) и нештатные (ошибки) [11].

Предусмотрена генерация следующих видов операционных прерываний:

- по обнаружению подачи или снятия напряжения VBUS (VBUSTI);

- UPSTREAM RESUME (UPRSMI);

- END OF RUSUME (EORSMI);

- WAKE-UP (WAKEUPI);

- END OF RESET (инициализация скорости) (EORSTI);

- START OF FRAME (SOFI, если FNCERR=0);

- по обнаружению SUSPEND после 3 мс неактивности (SUSPI);

- готовность к получению данных IN (EPINTx, TXINI=1);

- прием данных OUT (EPINTx, RXOUTI=1);

- прием SETUP (EPINTx, RXSTPI=1).

Нештатные прерывания генерируются, когда:

- обнаруживается ошибка CRC номера посылки в пакете START OF FRAME (SOFI, FNCERR=1);

- пакет STALL (EPINTx, STALLEDI=1);

- ошибка CRC в изохронном режиме в направлении OUT (EPINTx, STALLEDI=1);

- переполнение в изохронном режиме (EPINTx, OVERFI=1);

- незаполнение в изохронном режиме (EPINTx, UNDERFI=1);

- отправлено NAK в направлении IN (EPINTx, NAKINI=1);

- отправлено NAK в направлении OUT (EPINTx, NAKOUTI=1).

4.12 Регистры USB общего назначения и конечных точек (режим Device)

Регистрами USB общего назначения задается режим работы интерфейса. Всего имеется 7 регистры общего назначения [3]. Ниже приведено их подробное описание.

Формат регистра UDCON представлен на рисунке 4.11.

Биты 7-3 - Резерв. При чтении данных бит всегда возвращается 0.

Бит 2 - LSM - выбор низкоскоростного режима (LS). Когда USB-контроллер настроен на работу в режиме Device, с помощью данного бита выбирается скоростной режим: полноскоростной (FS) или низкоскоростной (LS).

Для выбора полноскоростного режима необходимо обнулить данный бит (после этого, установка бита ATTACH приведет к активизации подтяжки к плюсу питания на линии D+) . Для выбора низкоскоростного режима необходимо установить данный бит (после этого, установка бита ATTACH приведет к активизации подтяжки к плюсу питания на линии D-). Данный бит не оказывает никакого влияния, когда интерфейс USB настроен на работу в режиме HOST.

Бит 1- RMWKUP - бит удаленного возобновления. Данный бит устанавливается для отправки Host-стороне потока UPSTREAM-RESUME для удаленного возобновления (бит SUSPI должен быть установлен). Сбрасывается аппаратно по окончании генерации сигналов. Программный сброс не оказывает никакого влияния.

Бит 0 - DETACH - бит отсоединения. Этот бит, при необходимости, устанавливается для физического отсоединения от шины Device-стороны (отключает подтяжку к плюсу питания на линии D+ или D-).

Бит 7 - Резерв. При чтении данного бита всегда возвращается 0.

Бит 6 - UPRSMI - флаг прерывания UPSTREAM RESUME. Устанавливается аппаратно, когда USB-контроллер отправляет сигнал возобновления, называемый UPSTREAM RESUME. Это приводит к запуску USB-прерывания, если установлен бит UPRSME. Должен быть сброшен программно (перед этим должна быть разрешена синхронизация USB-контроллера). Программная установка не оказывает никакого эффекта.

Бит 5 - EORSMI - флаг прерывания END OF RESUME. Устанавливается аппаратно, когда USB-контроллер обнаруживает правильный сигнал END OF RESUME, переданный Host-стороной. Если установлен бит EORSME, это приведет к запуску прерывания USB. Бит необходимо сбросить программно. Программная установка не оказывает никакого эффекта.

Бит 4 - WAKEUPI - флаг прерывания для возобновления ЦПУ. Устанавливается аппаратно, когда USB-контроллер повторно активизируется отфильтрованным отличным от IDLE сигналом на линии USB (кроме UPSTREAM RESUME). Если бит WAKEUPE установлен, это приведет к запуску прерывания. Это прерывание необходимо разрешать только для возобновления активной работы ЦПУ из режима POWER DOWN. Должен быть сброшен программно (перед этим должны быть активизированы входы синхронизации USB-контроллера). Программная установка не оказывает никакого эффекта.

Бит 3 - EORSTI - флаг прерывания END OF RESET. Устанавливается аппаратно при обнаружении USB-контроллером условия END OF RESET. Если установлен бит EORSTE, это приведет к запуску USB-прерывания. Необходимо сбросить программно. Программная установка не оказывает никакого влияния.

Бит 2 - SOFI - флаг прерывания START OF FRAME. Устанавливается аппаратно при обнаружении USB-контроллером идентификатора пакета (PID) START OF FRAME (SOF), что происходит с периодичностью 1 мс. Если бит SOFE установлен, это приведет к запуску USB-прерывания.

Бит 1 - Резерв. При опросе данного бита всегда возвращается 0.

Бит 0 - SUSPI - флаг прерывания SUSPEND. Устанавливается аппаратно при обнаружении приостановки шины USB (шина в состояние IDLE в течение 3 периодов посылок или иначе: шина в состоянии 'J' в течение 3 мс). Если установлен бит SUSPE, это приводит к запуску USB-прерывания. Должен быть сброшен программно. Программная установка не оказывает никакого влияния.

Установка бит прерываний происходит, даже если их соответствующие биты разрешения не были установлены.

Формат регистра UDIE, представлен на рисунке 4.13:

Бит 7 - Резерв. При опросе данного бита всегда возвращается 0.

Бит 6 - UPRSME - бит разрешения прерывания UPSTREAM RESUME. Устанавливается этот бит для разрешения прерывания UPRSMI.

Бит 5 - EORSME - бит разрешения прерывания END OF RESUME. Устанавливается этот бит для разрешения прерывания EORSMI.

Бит 4 - WAKEUPE - бит разрешения прерывания по возобновлению ЦПУ. Устанавливается этот бит для разрешения прерывания по возобновлению активной работы ЦПУ. Для корректной обработки прерывания его работу необходимо разрешать только перед вводом режима POWER-DOWN.

Бит 3 - EORSTE - бит разрешения прерывания END OF RESET. Устанавливается этот бит для разрешения прерывания EORSTI. После сброса данный бит равен 1.

Бит 2 - SOFE - бит разрешения прерывания START OF FRAME. Устанавливается этот бит для разрешения прерывания SOFI.

Бит 1 - Резерв. При опросе данного бита всегда возвращается 0.

Бит 0 - SUSPE - бит разрешения прерывания SUSPEND. Устанавливается этот бит для разрешения прерывания SUSPI.

Формат регистра UDADDR, представлен на рисунке 4.14:

Бит 7 - ADDEN - бит активизации адреса. Устанавливается этот бит для активизации адреса UADD (USB-адрес). Сбрасывается аппаратно. Программный сброс не оказывает никакого эффекта.

Биты 6-0 - UADD6:0 - биты USB-адреса. Программа записывает в эти биты необходимое значение адреса.

Формат регистра UDFNUMH, представлен на рисунке 4.15:

Биты 7-3 - Резерв. При опросе данных бит всегда возвращаются нули.

Биты 2-0 - FNUM10:8 - старшие биты номера посылки. Устанавливаются аппаратно. Данные биты являются тремя старшими битами 11-битного значения номера посылки (Frame Number). Их значение появляется после приема последнего пакета SOF. Обновление FNUM происходит при приеме искаженного пакета SOF.

Формат регистра UDFNUML, представлен на рисунке 4.16:

Младший байт значения номера посылки. Устанавливается аппаратно. Данные биты являются 8 младшими битами 11-битного значения номера посылки.

Формат регистра UDMFN, представлен на рисунке 4.17:

Биты 7-5 - Резерв. При опросе данных бит всегда возвращаются 0.

Бит 4 - FNCERR -флаг ошибки CRC в номере посылки. Устанавливается аппаратно при обнаружении искаженного номера посылки в принятом пакете START OF FRAME (SOF). Данный бит обновляется одновременно с прерыванием SOFI.

Биты 3-0 - Резерв. При опросе данных бит всегда возвращаются 0.

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

Формат регистра UENUM, представлен на рисунке 4.18.

Биты 7-3 - Резерв. При опросе данных бит всегда возвращаются 0.

Биты 2-0 - EPNUM2:0 биты номера конечной точки. Загружается программно для выбора номера конечной точки, доступ к которой желает осуществить ЦПУ.

Формат регистра UERST, представлен на рисунке 4.19:

Бит 7 - Резерв. При опросе данного бита всегда возвращается 0.

Биты 6-0 - EPRST6:0 - биты сброса буфера FIFO конечной точки. Устанавливаются для сброса буфера FIFO выбранных конечных точек. Это необходимо сделать до выполнения каких-либо других операций после аппаратного сброса или приема по шине USB-сброса. Для завершения операции сброса и перехода к использованию конечных точек необходимо сбросить установленные биты.

Формат регистра UECONX, представлен на рисунке 4.20:

Биты 7-6 - Резерв. При опросе данных бит всегда возвращаются 0.

Бит 5 - STALLRQ - бит запроса отправки подтверждения STALL. Устанавливается этот бит при необходимости отправки Host-стороне STALL в качестве следующего подтверждения. Сбрасывается аппаратно после приема нового запроса SETUP. Программный сброс не оказывает никакого влияния.

Бит 4 - STALLRQC - бит отмены подтверждения запросом STALL. Устанавливается данный бит для отключения механизма подтверждения STALL. Сбрасывается аппаратно сразу после установки.

Бит 3 - RSTDT - бит сброса переключателя данных (Data Toggle). Устанавливается бит для автоматической отмены последовательности переключения данных. Для конечной точки OUT это означает, что следующий принятый пакет будет иметь переключатель данных равным 0. В свою очередь для конечной точки IN это означает, что у следующего подлежащего отправке пакета переключатель данных будет равен 0. Сбрасывается мгновенно аппаратными средствами. Программа не должна ожидать сброса этого бита. Программный сброс бита не оказывает никакого влияния.

Биты 2, 1 - Резерв. При опросе данных бит всегда возвращаются 0.

Бит 0 - EPEN - бит разрешения работы конечной точки. Устанавливается этот бит при необходимости разрешения работы конечной в соответствии с выполненной настройкой Device-контроллера. После аппаратного сброса или USB-сброса перед конфигурацией Device-контроллера должна быть разрешена работа конечной точки 0. Сброс этого бита отключит конечную точку.

Биты 7-6 - EPTYPE1:0 - биты типа конечной точки. Устанавливаются значения этих битов в соответствии с требуемой настройкой конечной точки.

Варианты значений битов типа конечной точки представлены в таблице 4.1.

Биты 3-2 - Зарезервировано для целей тестирования. Данными битами всегда возвращается нулевое значение.

Бит 1 - Резерв. При чтении бита всегда возвращается 0.

Бит 0 - EPDIR - бит направления конечной точки. Устанавливается бит для задания направления IN конечной точке типа BULK, INTERRUPT или ISOCHRONOUS. Сбрасывается для задания конфигурации OUT конечной точке типа BULK, INTERRUPT, ISOCHRONOUS или CONTROL.

Формат регистра UECFG1X, представлен на рисунке 4.22:

Бит 7 - Резерв. При чтении данного бита всегда возвращается 0.

Биты 6-4 - EPSIZE2:0 - биты размера конечной точки. Устанавливаются эти биты в соответствии с требуемым размером конечной точки.

Варианты значений битов размера конечной точки представлены в таблице 4.2.

Таблица 4.2 - Биты размера конечной точки

Значение

Размер

Значение

Размер

000b

8 байт

100b

128 байт

001b

16 байт

101b

256 байт

010b

32 байта

110b

Резерв

011b

64 байта

111b

Резерв

Значения 100b и 101b действительны только для конечной точки 1.

Биты 3-2 - EPBK1:0 - биты банка конечной точки. Настраивается данное поле с учетом размера конечной точки.

Варианты значений битов размера банка конечной точки представлены в таблице 4.3.

Таблица 4.3 - Биты размера банка конечной точки

Значение

Размер

00b

Один банк

01b

Два банка

1xb

Резерв

Бит 1 - ALLOC - бит назначения памяти конечной точки. Устанавливается этот бит для назначения памяти конечной точки. Сброс бита приводит к освобождению памяти конечной точки.

Бит 0 - Резерв. При чтении данного бита всегда возвращается 0.

Формат регистра UESTA0X, представлен на рисунке 4.23:

Бит 7 - CFGOK - флага статуса конфигурации. Устанавливается аппаратно, когда параметры размера X (EPSIZE) и банка (EPBK) конечной точки согласованы с максимальным размером буфера FIFO и предельным числом банков. Обновление бита происходит после установки бита ALLOC. Если CFGOK=0, это означает, что пользователю необходимо заново записать регистр UECFG1X с корректными значениями EPSIZE и EPBK.

Бит 6 - OVERFI - флаг прерывания по ошибке переполнения. Устанавливается аппаратно при обнаружении ошибки переполнения в конечной точке типа ISOCHRONOUS. Приводит к запуску прерывания (EPINTx), если таковое было разрешено. Должен быть сброшен программно. Попытка программной установки не дает никакого результата.

Бит 5 - UNDERFI - флаг прерывания по ошибке незаполнения. Устанавливается аппаратно при обнаружении ошибки незаполнения в конечной точке типа ISOCHRONOUS. Приводит к запуску прерывания (EPINTx), если таковое было разрешено. Должен быть сброшен программно. Попытка программной установки не дает никакого результата.

Бит 4 - Резерв. При чтении данного бита всегда возвращается 0.

Биты 3-2 - DTSEQ1:0 - флаг состояния переключателя данных. Устанавливается аппаратно для индикации данных идентификатора пакета (PID) для текущего банка.

Варианты значений биты идентификации данных представлены в таблице 4.4.

Таблица 4.4 - Биты идентификации данных

Значение

Данные

00b

DATA 0

01b

DATA 1

1xb

Резерв

Для передачи типа OUT данное значение индицирует последнее значение переключателя данных, принятое текущим банком. В свою очередь для передачи типа IN оно индицирует значение переключателя данных, которое будет использоваться при отправке следующего пакета. К текущему банку оно отношения не имеет.

Биты 1-0 - NBUSYBK1:0 - флаги занятости банка. Устанавливаются аппаратно для индикации количества занятых банков. Для конечной точки IN они индицируют количество занятых банков, которые заполнены пользователем и готовы для передачи типа IN. Для конечной точки OUT флаги индицируют количество занятых банков, которые заполнены Host-стороной в ходе транзакции типа OUT.

Варианты значений флаг занятости банка представлены в таблице 4.5.

Таблица 4.5 - Флаг занятости банка

Значение

Описание

00b

Все банки свободны

01b

Занят один банк

10b

Занято два банка

11b

Резерв

Формат регистра UESTA1X, представлен на рисунке 4.24:

Биты 7-3 - Резерв. При чтении данных бит всегда возвращается значение 0.

Бит 2 - CTRLDIR - управление направлением (флаг, а также бит для отладочных целей). Устанавливается аппаратно после пакета SETUP и задает направление следующего пакета: 1 для конечной точки IN и 0 для конечной точки OUT.

Биты 1-0 - CURRBK1:0 - флаги текущего банка (все конечные точки, кроме конечной точки CONTROL). Устанавливаются аппаратно для индикации номера текущего банка.

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

Таблица 4.6 - Биты индикации номера текущего банка

Значение

Текущий банк

00b

Банк 0

01b

Банк 1

1xb

Резерв

Формат регистра UEINTX, представлен на рисунке 4.25:

Бит 7 - FIFOCON - бит управления буфером FIFO. У конечной точки OUT и SETUP данный бит устанавливается аппаратно после записи нового сообщения OUT в текущий банк (одновременно с RXOUT или RXSTP). Сбрасывается этот бит для освобождения текущего банка и переключения к следующему банку. Попытка программной установки не оказывает никакого эффекта. Применительно к конечной точке IN данный бит устанавливается аппаратно, когда освобождается текущий банк (одновременно с TXIN). Сбросьте FIFOCON для отправки данных FIFO и переключения данных. Программная установка не дает никакого результата.

Бит 6 - NAKINI - флаг прерывания по отправке NAK в передаче типа IN. Устанавливается аппаратно, когда в ответ на запрос IN Host-стороны было отправлено подтверждение NAK. Если установлен бит NAKINE, это приводит к генерации USB-прерывания. Должен быть сброшен программно.

Бит 5 - RWAL - флаг возможности чтения/записи. Устанавливается аппаратно для сигнализации: незаполненности текущего банка (т.е. о возможности помещения новых данных в буфер FIFO) конечной точки IN и наличии данных в текущем банке (т.е. о потребности считывания данных из буфера FIFO) конечной точки OUT. Бит никогда не устанавливается, если установлен бит STALLRQ или обнаружена ошибка. В остальных случаях бит равен нулю. Его нельзя использовать для конечной точки CONTROL.

Бит 4 - NAKOUTI - флаг прерывания по приему NAK в передаче типа OUT. Устанавливается аппаратно, когда в ответ на запрос OUT/PING из Host-стороны было отправлено подтверждение NAK. Если бит NAKOUTE установлен, это приводит к запуску USB-прерывания. Должен быть сброшен программно. Программная установка не оказывает никакого влияния.

Бит 3 - RXSTPI - флаг прерывания по приему SETUP. Устанавливается аппаратно для сигнализации о доступности нового действительного пакета SETUP в текущем банке. Приводит к запуску прерывания (EPINTx), если таковое было разрешено. Должен быть сброшен программно для подтверждения прерывания. Программная установка не оказывает никакого влияния. Данный бит неактивен (равен 0), если конечная точка имеет направление IN.

Бит 2 - RXOUTI / KILLBK - флаг прерывания по приему данных (передача типа OUT). Устанавливается аппаратно для сигнализации о том, что в текущем банке содержится новый пакет. Запускает прерывание (EPINTx), если таковое было разрешено. Должен быть сброшен программно для подтверждения прерывания. Попытка программной установки не оказывает никакого влияния. Бит ликвидации банка IN. Устанавливается данный бит, чтобы ликвидировать последний записанный банк. Сбрасывается аппаратно после ликвидации банка. Программный сброс не оказывает никакого влияния.

Бит 1 - STALLEDI - флаг прерывания STALLEDI. Устанавливается аппаратно для сигнализации об отправке подтверждения STALL или обнаружении ошибки CRC в конечной точке типа ISOCHRONOUS с направлением OUT. Должен быть сброшен программно. Программная установка не оказывает никакого влияния.

Бит 0 - TXINI - флаг прерывания по готовности передатчика. Устанавливается аппаратно для сигнализации о готовности к заполнению текущего банка. Запускает прерывание (EPINTx), если таковое было разрешено. Должен быть сброшен программно для подтверждения прерывания. Программная установка не оказывает никакого влияния. Данный бит является неактивным (равен 0) для конечной точки с направлением OUT.

Формат регистра UEIENX, представлен на рисунке 4.26:

Бит 7 - FLERRE - флаг разрешения прерывания по ошибке потока. Устанавливается для разрешения прерывания конечной точки (EPINTx) по установке флага VERFI или UNDERFI.

Бит 6 - NAKINE - флаг разрешения прерывания по отправке NAK в передаче типа IN. Устанавливается для разрешения прерывания конечной точки (EPINTx) при установке флага NAKINI.

Бит 5 - Резерв. При чтении данного бита всегда возвращается 0.

Бит 4 - NAKOUTE - бит разрешения прерывания по приему NAK в передаче типа OUT. Устанавливается для разрешения прерывания конечной точки (EPINTx) по установке флага NAKOUTI.

Бит 3 - RXSTPE - флаг разрешения прерывания по приему SETUP. Устанавливается для разрешения прерывания конечной точки (EPINTx) по установке флага RXSTPI.

Бит 2 - RXOUTE - флаг разрешения прерывания по приему данных в передаче типа OUT. Устанавливается для разрешения прерывания конечной точки (EPINTx) по установке флага RXOUTI.

Бит 1 - STALLEDE - флаг разрешения прерывания STALLEDI. Устанавливается для разрешения прерывания конечной точки (EPINTx) по установке флага STALLEDI.

Бит 0 - TXINE - флаг разрешения прерывания по готовности передатчика. Устанавливается для разрешения прерывания конечной точки (EPINTx) по установке флага TXINI.

Формат регистра UEDATX, представлен на рисунке 4.27:

Биты 7-0 - DAT7:0 - биты данных. Используются данные биты в программе для чтения (записи) байта из буфера (в буфер) FIFO конечной точки, выбранной битами EPNUM.

Формат регистра UEBCHX, представлен на рисунке 4.28:

Биты 7-3 - Резерв. При чтении данных бит всегда возвращаются нули.

Биты 2-0 - BYCT10:8 - старшие биты счетчика байт. Устанавливаются аппаратно. В них хранятся старшие биты счетчика байт буфера FIF конечной точки. Младший байт хранится в регистре UEBCLX.

Формат регистра UEBCLX, представлен на рисунке 4.29:

Биты 7-0 - BYCT7:0 - младшие биты счетчика байт. Устанавливаются аппаратно. Значение бит BYCT10:0: (для конечной точки IN) инкрементируется после записи в конечную точку и декрементируется после отправки каждого байта и (для конечной точки OUT) инкрементируется после отправки Host-стороной каждого байта и декрементируется после программного чтения каждого байта.

Формат регистра UEINT, представлен на рисунке 4.30:

Бит 7 - Резерв. При чтении данного бита всегда возвращается 0.

Биты 6-0 - EPINT6:0 - биты прерываний конечной точки. Устанавливаются аппаратно, когда запускается прерывание регистром UEINTX и, при этом, установлен бит разрешения прерывания соответствующей конечной точки. Сбрасывается аппаратно по завершении обслуживания источника прерывания.

4.13 Разработка структуры данных для программной реализации USB пакета

Информация по каналу передается в виде пакетов (Packet) [20]. Каждый пакет начинается с поля синхронизации SYNC (SYNChronization), за которым следует идентификатор пакета PID (Packet IDentifier). Поле Check представляет собой побитовую инверсию PID. Общий формат пакета представлен на рисунке 4.31.

Рисунок 4.31 - Формат пакета USB

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

usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, CUSTOM_RQ_GET_STATUS, 0, 0, buffer, sizeof(buffer), 5000)

Возвращенное значение, равное нулю и меньше нуля сигнализирует об ошибке, в случае возврата 1 и более означает, что запрос обработан успешно. Полезные данные передаются в четырех байтах буфера buffer. Назначение переменных в вызове функции usb_control_msg:

- usb_dev_handle *dev. Здесь используется значение переменной handle - передается идентификатор открытого USB HID устройства. Получают валидный handle после однократного вызова функции usbOpenDevice;

- int requesttype, тип запроса. Его значение равно USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN. Указывается конечная точка USB_ENDPOINT_IN;

- int request, значение запроса. Тут подставляется значение CUSTOM_RQ_GET_STATUS, что означает, что передается запрос на получение данных;

- int value. Передается 0, параметр не используется;

- int index. Передается 0, параметр не используется;

- char *bytes. Указатель на буфер, выделенный в памяти. В случае запроса CUSTOM_RQ_GET_STATUS этот буфер используется для переноса данных от USB устройства к ПО хоста. Передается четыре байта, об этом говорит return 4 на выходе из usbFunctionSetup в случае обработки запроса CUSTOM_RQ_GET_STATUS;

- int size. Тут передается размер буфера. В случае запроса CUSTOM_RQ_GET_STATUS передается значение 4, отражающее реальный размер буфера;

- int timeout. Таймаут, в течение которого должен прийти ответ. Установленное значение 5000, означает 5000 миллисекунд.

5. Программная реализация модулей обработки данных, поиска устройства и упаковки данных

5.1 Модуль поиска устройства

Программная реализация с комментариями модуля поиска устройства приведена в приложении А. Этот модуль опрашивает все устройства на всех шинах USB и ищет конкретное устройство [12]. Поиск начинается с проверки на совпадение Vendor- и Product-ID (переданных в переменных 'vendorID' и 'productID'). ID равный 0 совпадает с любым цифровым ID (wildcard).

Когда устройство совпало по идентификаторам IDs, проверяется совпадение по имени. Сопадение может быть по текстовому имени вендора ('vendorNamePattern'), имени продукта ('productNamePattern') и серийному номеру ('serialNamePattern'). Устройство совпадает только тогда, когда совпадают все непустые (non-null) маски.

Если не надо проверять определенную строку, передается NULL в качестве маски. Маски работают в стиле Unix shell: '*' означает 0 или другое количество символов, '?' означает любой одиночный символ, любой символ из списка, заданного квадратными скобками (дефис разрешен для указания диапазона символов) и если список символов начинается с символа caret ('^'), то он соответствует любому символу не принадлежащий этому списку.

Другие параметры функции: если 'warningsFp' не NULL, предупреждающие (warning) сообщения будут печататься в файловый дескриптор с помощью функции fprintf(). Если 'printMatchingDevicesFp' не NULL, устройства не будут открыты, но совпавшие устройства будут распечатаны в предоставленный файловый дескриптор 'warningsFp' с помощью функции fprintf(). Если устройство открыто, результирующий USB=хендл сохраняется в '*device'. Здесь должен быть передан указатель на тип переменной 'usb_dev_handle *'. Возврат: 0 в случае успеха или код ошибки.

Объявление функции поиска устройства имеет следующий вид:

int usbOpenDevice(usb_dev_handle **device, int vendorID, char *vendorNamePattern, int productID, char *productNamePattern, char *serialNamePattern, FILE *printMatchingDevicesFp, FILE *warningsFp);

5.2 Модуль формирования ответного пакета

Программная реализация с комментариями модуля формирования ответного пакета приведена в приложении А. Блок-схема алгоритма представлена на рисунке 5.1. Этот модуль вызывается, когда драйвер принимает транзакцию SETUP от хоста, которому не отвечает драйвер непосредственно (на практике: запросы класса и вендора) [15]. Все управляющие передачи стартуют с транзакции SETUP, где хост сообщает параметры следующих (опционально) передач данных. Данные SETUP доступны в параметре 'data', который должен быть преобразован в 'usbRequest_t для лучшего дружественного для пользователя доступа к параметрам.

Если SETUP показывает передачу control-in, должны быть обеспечены для драйвера запрошенные данные. Есть два пути для передачи этих данных: установить глобальный указатель 'usbMsgPtr' на начало блока данных static RAM и возвратить длину данных в 'usbFunctionSetup()'. В нашем случае, данные необходимые для отправки заполняются в буфер, и указывается размер возвращаемых данных (4 байта). Или возвратить USB_NO_MSG в 'usbFunctionSetup()'. Драйвер будет вызывать 'usbFunctionRead()' [20], когда понадобятся данные.

Объявление функции отправки ответного пакета имеет следующий вид:

USB_PUBLIC usbMsgLen_t usbFunctionSetup(uchar data[8]);

Здесь в первом блоке устанавливаем указатель на структуру с принятыми данными от хоста. Во втором и третьем блоке сравниваются идентификаторы устройства в принятом пакете и самого устройства, и если они совпали, то проверяем - принятый пакет запрашивает данные? Если оба условия истина, то в 4 блоке данные записываются в буфер, затем в 5 блоке возвращаемое значение функцией устанавливается равным количеству байт полезной информации (или размеру буфера). В 6 блоке данные упаковываются в USB пакет.

Здесь в блоке 1 проверяется присутствие логической единицы на входе ножки порта, куда подключен вывод реле. Если логическая единица обнаружена, то в блоке 2 осуществляется сравнение данных, полученных от АЦП на предыдущем выполнении программы с теми же данными, полученными до этого, и, если, они отличаются (хотя бы одним значением тока или напряжения), то выполняется функция очистки экрана (блок 3). Далее, не зависимо от того, выполнялась ли очистка экрана, в блоке 4 курсор экрана устанавливается в левое крайнее положение на верхней строке (координаты 0,0), и выводится слово «Norma», как показано в блоке 5, означающее, что разряд батареи идет в нормальном режиме. Затем в блоке 6 идет считывание данных с АЦП, а именно, кодовое значение уровня напряжения ножки, куда подключен датчик напряжения. Это кодовое значение, в блоке 7, переводится в числовое значение уровня напряжения на входе АЦП по формуле 3.1. Далее значение умножается на масштабный коэффициент в блоке 8, для получения действительного значения напряжения в электрической цепи, и это значение выводится на экран в блоке 9. В блоке 10 идет считывание данных с АЦП по току, полученное кодовое значение переводится в числовое значение уровня напряжения на входе АЦП, куда подключен датчик тока в блоке 11. Затем в блоке 12, аналогично блоку 8, осуществляется умножение на масштабный коэффициент, и действительное значение тока выводится на экран в блоке 13. Далее в блоке 14 подаем логическую единицу на ножку порта, куда подключен светодиод «Разряд батареи», тем самым зажигая его, и подаем логический ноль на ножку порта, куда подключен светодиод «Батарея отключена», тем самым гася его. Если горит первый светодиод, это показывает, что идет разряд батареи, если горит второй - значит, система отключила батарею от цепи, для предотвращения глубокого разряда. В блоке 15 полученное значение напряжения сравнивается и минимально допустимым, и, если первое меньше либо равно последнему, то на вывод порта, куда подключено реле, подается логический ноль, тем самым размыкая цепь и отключая батарею от нагрузки.

Если же в блоке 1 на входе ножки порта, куда подключен вывод реле, обнаружен логический ноль, то переходим к блоку 17. В блоке 17 проверяется присутствие логического нуля на входе ножки порта, куда подключен вывод реле еще раз, для исключения ситуации, когда после не выполнения блока 16 не перешли к выполнению следующих за 17 блоков. В Блоках 18 - 30 выполняются аналогичные действия, как в блоках 2 - 14, за исключением того, что в блоке 21 выводится слово «Alarm»? сигнализирующее об аварии, и в блоке 30 происходит обратные действия блоку 14, а именно: светодиод «Разряд батарей» потушить, а светодиод «Батарея отключена» зажечь. В блоке 31 значение напряжения, выдаваемое от батареи, сравнивается с минимально допустимым, и, если оно больше, то идет замыкание реле, путем подачи на выход подключения реле логической единицы в блоке 32. Наконец, если в блоке 17 считана логическая единица, то идет переход в конец модуля, пропуская действия, описанные в 18 - 32 блоках. Текст программы представлен в приложении А.

6. Методика и результаты испытаний системы контроля

Система была смоделирована в симуляторе Proteus [9], который имеет набор всех необходимых электрических элементов для сбора модели электропитающей установки АТС и системы контроля.

6.1 Моделирование ЭПУ

Электропитающая установка состоит из выпрямителей, куда подается напряжение 220 В и переменный ток от электростанции. После выпрямителей полученный постоянный то и напряжение в 67.2 В подается на нагрузку. Батарея, подключенная в буферном режиме, также входит в состав ЭПУ. Для предотвращения подачи высокого напряжения на нагрузку установлен предохранитель на общей шине между выпрямителем и нагрузкой.

Для снятия значения напряжения в цепи между общей шиной и системой контроля установлен делитель (резистор), с одной стороны которого 62.7 В, а на вход АЦП подается максимум 5 В. Для контроля тока в цепи установлен шунт, выводы которого подаются на усилитель. С усилителя снимается максимум 5 В, поступающие на вход АЦП.

Для имитации разряда батареи, на модели установлен резистор переменного сопротивления, меняя значение внутреннего сопротивления которого можно понижать напряжение на общей шине.

Модель, составленная в симуляторе, представлена на рисунке 6.1.

Рисунок 6.1 - Модель ЭПУ АТС

6.2 Моделирование системы контроля

Модель системы контроля включает в себя: микроконтроллер AT90USB1286; подключенный к нему жидкокристаллический дисплей; датчик тока и напряжения, подключенные к входам АЦП; два светодиода («Разряд батарей» и «Батарея отключена»), подключенных к микроконтроллеру для индикации состояния питания нагрузки; реле, для имитации отключения батареи от цепи и дополнительные вольтметр и амперметр, для проверки соответствия выводимых значений тока и напряжения, на жидкокристаллический дисплей, действительным, чем можно удостовериться в правильности работы системы контроля. В качестве опорного напряжения для АЦП, выводы AREF и AVCC соединены последовательно с источником напряжения 5 В.

Модель системы контроля, составленная в симуляторе, представлена на рисунке 6.2.

Рисунок 6.2 - Модель системы контроля

6.3 Методика и результаты испытания

Для проверки работоспособности системы контроля в память микроконтроллера загружается скомпилированный модуль программы контроля параметров, имеющий расширение .hex. Для этого необходимо нажать правой кнопкой мыши по объекту модели микроконтроллера, и в открывшемся списке меню выбрать пункт Edit Properties. В открывшемся окне в поле Program File необходимо указать путь к файлу программы, если этот файл лежит в той же папке, что и проект моделирования, то достаточно указать полное имя файла, как показано на рисунке 6.3.

Рисунок 6.3 - Загрузка программы в память микроконтроллера

Для начала работы модели необходимо нажать кнопку Run the simulation в нижнем левом углу окна симулятора.

Для проверки правильности работы системы контроля можно, меняя внутреннее сопротивление резистора, нажимая кнопки «+» и «-», сравнивать выводимые параметры на жидкокристаллический дисплей с показаниями амперметра и вольтметра. На рисунке 6.4,а видно, что напряжение в сети больше 53,5 В, поэтому на экране выведено «Norma» и горит зеленый светодиод («Разряд батареи»). В этом случае реле замкнуто, и батарея подключена к цепи электропитания. Далее поменяв значение внутреннего сопротивления резистора, из рисунка 6.4,б видно, что напряжение стало меньше 53,5 В, поэтому произошло размыкание реле (сигнал К10), на экране выведено «Alarm» и горит красный светодиод («Батарея отключена»).

7. Экономическая оценка создания и внедрения программного продукта

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

7.1 Маркетинговые исследования проектируемого продукта

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

- выход на новые рынки;

- продвижение нового продукта; - ребрендинг;

- определение цены на продукцию компании;

- каналы и методы продвижения товаров;

- формирование политики сбыта и методы стимулирования клиентов.

Потребительская ценность продукта

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

- контроль заряда/разряда батареи;

- контроль параметров тока и напряжения питания нагрузки от батареи;

- обработка аварийных ситуаций.

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

- идентификация аварийных ситуаций;

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

- контроль состояния батарей в режиме реального времени.

Портрет потребителя

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

Предполагаемый сегмент рынка сбыта

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

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

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

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

Сегментация рынка по потребительскому признаку:

1. Предприятия, предоставляющие телекоммуникационные услуги - 80%

2. Другие объекты, применяющие электропитающие установки - 20%

Графическое представление сегментации представлено на рисунке 7.1.

Рисунок 7.1 - Сегментация рынка сбыта по потребительскому признаку

Оценка рыночной направленности

Проведем экспертную оценку разрабатываемой системы. Для этого определим основные показатели для оценки шансов и рисков проектируемого продукта и выберем наиболее значимые из них. На основании среднеарифметической величины по каждому из показателей произведем определение рыночной направленности продукта.

Оценка рыночной направленности приведена в таблице 1 приложения Б. Находим среднеарифметическую величину:

С помощью таблицы был определен средний балл данного продукта, который составил 7,2. Это достаточно высокий и стабильный показатель, на основе которого можно сделать вывод о том, что данный продукт имеет шансы быть принятым на рынок.

Конкурентоспособность программного продукта

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

Разрабатываемый программный продукт обладает рядом свойств, отличающих его от продуктов-аналогов по степени удовлетворения потребностей потреби-теля.

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

Во-вторых, в отличие от своих аналогов, данный продукт взаимодействует с компьютером намного быстрее благодаря использованию широко распространенного интерфейса USB, взамен устаревшему RS 232.

Таким образом, система контроля параметров аккумуляторных батарей имеет достаточно высокие конкурентоспособные показатели на рынке сбыта Севастополя.

Жизненный цикл программного продукта

Жизненный цикл изделия (ЖЦИ), как определяет его стандарт ISO 9004-1, -- это совокупность процессов, выполняемых от момента выявления потребностей общества в определенной продукции до момента удовлетворения этих потребностей и утилизации продукта.

Жизненный цикл разрабатываемой системы представлен на рисунке 1 приложения В.

В классическом жизненном цикле товара можно выделить пять стадий или фаз:

1. Этап разработки товара. В это время объем продаж равен нулю, а затраты растут по мере приближения к заключительным стадиям процесса.

2. Внедрение или выход на рынок. Фаза появления нового товара на рынке.

3. Фаза роста. Если товар требуется на рынке, то сбыт начнет существенно расти.

4. Фаза зрелости. Характеризуется тем, что большинство покупателей уже приобрело товар.

5. Спад. Спад является периодом резкого снижения продаж и прибыли.

Кривая ЖЦТ изображена на рисунке 2 приложения В, она показывает изменение объема продаж и прибыли на протяжении жизненного цикла товара.

Для разрабатываемого программного продукта длительность жизненного цикла будет определяться, прежде всего, широтой его распространения на рынке и временем морального старения.

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

7.2 Определение затрат на проектирование

Расчет трудоемкости

На первом этапе определения затрат на проектирование необходимо определить трудоемкость разработки программного продукта (ПП). Трудоемкость проекта определяется, исходя из данных об используемых функциях ПП. Функции разрабатываемой системы представлены в таблице 2 приложения Б.

Общий объем разрабатываемого ПП (V0) определяется по формуле:

, (7.1)

где Vi - объем i- ой функции ПП;

n- общее число функций ПП.

Трудоемкость: Тр = 44,5 ( затраты труда на разработку ПС ВТ определяется в зависимости от объема V0 и группы сложности в тысячах условных команд ).

Общая трудоемкость (Тобщ) для соответствующей группы сложности ПС ВТ с учетом поправочного коэффициента сложности ПС ВТ (Ксл) для данной группы рассчитывается по формуле 1 приложения В.

Полученную общую трудоемкость (Тобщ) разработки ПС ВТ разбивают на соответствующе стадии разработки. Трудоемкость каждой стадии разработки ПС ВТ (Тi) определяют по формулам 3-7 представленным в приложении В.

Так как данный проект не использует ни новую ОС, ни новую платформу, то согласно справочным данным Кн=0.7, а степень новизны относится к классу В. В зависимости от этого значения удельного веса, для стадий разработки, имеют значения, представленные в таблице 3 приложения Б. Степень охвата реализуемых функций ПС ВТ типовых программ, в зависимости от стадии разработки, представлена в таблице 4 приложения Б. Расчеты трудоемкости каждой стадии разработки (Тi) и уточненная общая трудоемкость ПС ВТ (Туточ) в человеко-днях представлены в приложении Б.

Исходя из трудоемкости Туточ и численности исполнителей, рассчитывается срок разработки:

(7.2)

где Fмес - фонд рабочего времени в месяц. Принимается равным 21,8 дней;

Ч - численность разработчиков [чел]. Она планируется исходя из объема работ. Численность разработчиков Ч принимается 1.

Исходя из имеющихся данных, получаем:

[ месяца]

Расчет себестоимости часа машинного времени

Исходные данные для расчета себестоимости часа машинного времени приведены в таблице 5 приложения Б. Расчет годовых эксплуатационных затрат приведен в приложении В, полученные данные вынесены в таблицу 8.1.

Себестоимость часа машинного () времени рассчитывается по формуле:

, (ден.ед.), (7.3)

где - годовые эксплуатационные затраты.

(час). (7.4)

(час),

(грн.)

Таблица 7.1 - Смета годовых эксплуатационных затрат

П/П

Название расходов

грн.

1

Материальные затраты

125

2

Затраты на электроэнергию

134,7

3

Расходы на оплату труда

23600

4

Затраты на ремонт

75

5

Накладные расходы

14160

6

Отчисления от ФОТ

8732

7

Амортизационные отчисления

1788

Итого

48614,7

Определение фонда оплаты труда проектировщиков

Основная заработная плата разработчиков (ЗПпрямая) определяется по формуле 7.5:

ЗПосновная = Ч * Срр * Оклад, (7.5)

где Ч - количество исполнителей данного проекта, чел;

Срр - срок разработки без применения ВТ, мес.

ЗПосновная = 1 * 0,5 * 2000= 1000 (грн.)

Кроме основной заработной платы, в расчет включаем доплаты в размере 30% от основной зарплаты. Тогда фонд основной зарплаты составит:

ФОТ = ЗПосн * 1.3 (7.6)

ФОТ = 1000 * 1,3 = 1300 (грн)

Отчисления на социальные нужды определяются в процентах от ФОТ по формуле 7.7.

ОТЧс =37*ФОТ/100 (7.7)

ОТЧс =37*1300/100 = 481 (грн)

Тогда ФОТ с отч. = 1781 (грн)

Накладные расходы

Совокупность расходов на содержание помещений, на управление организацией, относим к накладным расходам и принимаем в размере 30-60% от ФОТ (Знакл). =60%

, (7.8)

(грн).

Затраты на разработку ПП с применением ВТ (Зпо) определяются по формуле 7.9:

Зпо = Срм* Fэф.м*Cч.м.в., (7.9)

где Срм - срок разработки ПП с использованием ВТ, месяцев;

Fэф. м - эффективный фонд рабочего времени за месяц;

Сч.м.в. - себестоимость часа машинного времени, грн.

Зпо = 1·168·25,53 = 4289,04 (грн)

Все расчеты сведены в таблицу 7.2.

Таблица 7.2 - Смета затрат на проектирование

Наименование расходов

Сумма,

грн.

1. Фонд оплаты труда проектировщиков (с отчислениями на

социальные меры ) за работу, выполненную без применения ВТ

1781

2. Накладные расходы

1068,6

3. Затраты на разработку ПП с применением ВТ

4289,04

Итого: Зпр

7138,64

Полученная сумма служит основанием для определения цены предложения ПП.

Формирование цены предложения разработчика

Цена предложения разработчика устанавливается в соответствии с выбранным методом ценообразования. Одним из методов ценообразования является метод безубыточности.

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

Для реализации данного метода необходимо рассчитать постоянные и полные издержки. Постоянные издержки (ИП) представляют собой затраты на проектирование ПП.

Ип=ФОТбез экспл+ФОТэкспл. (7.10)

Ип= 1781+4289,04=6070,04 [грн.].

Полные издержки представляют собой сумму постоянных и переменных издержек. Переменные издержки (Ипер) - расходы, связанные с реализацией ПП.Величина удельных переменных издержек (Иуд.пер.) включает в себя затраты на изготовление рабочей документации, на операции, связанные с установкой системы на компьютеры заказчика, защитой программного продукта от нелегального использования и др.

Общая величина переменных издержек определяется по формуле:

Ипернакл +25%*Зпр , (7.11)

Ипер=1068,6+0,25*7138,64=2853,26 [грн.].

Количество экземпляров программного продукта определяется по результатам исследования количества потенциальных покупателей, учитывая количество предприятий, научных и государственных организаций могущих быть заинтересованными в разрабатываемом продукте. Предполагается продать не менее 100 экземпляров, т.е. N=100.

Полные издержки (Ипол) составят:

Иполппер (7.12)

Ипол=8923,3 [грн.]

Пр = 8923,3*0,2=1784,66 [грн.]

Выручка от реализации (В) определяется в зависимости от цены продажи одного экземпляра ПП (Ц) и объема продаж:

В=Ц*N (7.13)

Цена: Ц=С+Пр = 8923,3+1784,66=10707,96 [грн.]

Тогда цена за единицу продукции составит:

Цед= Ц/N = 10707,96 /30 = 356,95 [грн.]

К цене также необходимо добавить НДС (20%).

Цс уч. НДС = 428,35 [грн.]

На основе полученных данных, был построен график безубыточности, изображенный на рисунке 7.2.

Рисунок 7.2 - График безубыточности

Из расчётов и рисунка 7.2 следует, что при минимальном объёме продаж равном 23 экземпляра, затраченные убытки будут оправданы. Максимальный объем продаж составляет 30 штук. Цена одного экземпляра программного продукта составляет 428,35 грн.

Расчет капитальных затрат

Капитальные расходы для разработчика представляют собой расходы на покупку (Цтс), доставку (Зтр) и монтаж (Зм) технических средств, а также на приобретение программного обеспечения (Цпо), необходимого для процесса создания программного продукта представлены в приложении Д и составляют 3905 грн. Оценка эффективности проектирования программного продукта Анализ эффективности проекта производится на основе показателей: интегрального экономического эффекта за весь жизненный цикл продукта; периода возврата капитальных вложений. Задачей экономической оценки является определение динамики чистой текущей стоимости. Исходные данные для расчета интегрального экономического эффекта приведены в таблице 7.3.

Таблица 7.3 - Исходные данные

Года

Кап.вложения, ден.ед.

Объем выпуска, шт

Цена, грн

2010

3905

428,35

2011

30

428,35

2012

30

428,35

2013

25

428,35

2014

23

428,35

Расчет показателей экономической оценки: чистого денежного потока, чистой текущей стоимости за период реализации проекта, чистой текущей стоимости с нарастающим итогом, а так же амортизации, прибыли и рентабельности ПП представлены в приложении В, полученные результаты сведены в таблицу 7.4. Исходя из полученных данных, определим интегральный экономический эффект по формуле 7.14.

Эs = ЧТСt (7.14)

где Т - жизненный цикл проекта, 5 лет.

Таблица 7.4 - Оценка эффективности программного продукта

Показатели

2010

2011

2012

2013

2014

Объем реализации, грн.

0

12850,5

12850,5

10708,75

9852,05

Капитальные вложения, грн.

3905

0

0

0

0

Годовые издержки, грн.

0

8923,3

4461,65

2900,07

3190,07

Коэффициент приведения по фактору времени бt

1

0,909

0,826

0,751

0,683

ЧДП, грн.

-3905

3927,2

8388,85

7808,68

6661,98

ЧТС, грн.

-3905

3569,83

6929,2

5864,32

4550,13

ЧТС с нарастающим итогом, грн.

-3905

-335,17

6594,03

12458,35

17008,50

Амортизация, грн (Аt)

0

976,25

976,25

976,25

976,25

Прибыль, грн (Пt)

0

2950,45

7412,1

6832,43

5685,73

Рентабельность, % (Pt)

75,5

189,8

174,95

145,6

Эs =-3950+3569,83+6929,2+5864,32+4550,13=17008,50 [грн.]

А так же рассчитаем внутреннюю норму рентабельности

Rв = Еi + (Эi * (Еi+1 - Еi)) / (Эi - Эi+1), где (7.15)

Еi - норма дисконтирования, при которой интегральный эффект принимает ближайшее к нулю положительное или отрицательное значение;

Еi+1 - повышенная (пониженная на один пункт по сравнению с Ен) норма дисконтирования, при которой интегральный эффект принимает ближайшее к нулю положительное или отрицательное значение;

Эi и Эi+1 - значения интегрального эффекта соответственно при Ет и Ет+1.

Э1=15693,187

Э2=15264,169

Е1=0,11

Е2=0,12

Rв = 0.475*100=47,5%

На основе полученных данных был построен финансовый профиль проекта, представленный на рисунке 7.3.

Рисунок 7.3- Финансовый профиль проекта

Из графика видно, что в данном виде продукт является экономически целесообразным, так как затраты окупаются уже на третий год. Максимальный долг в 2010 году составляет 3905 грн. Суммарный интегральный экономический эффект составляет 17008,50 грн. Внутренняя норма рентабельности составляет 47,5% это означает, что если брать кредит под 47,5% проект не будет убыточным.

Анализ целесообразности проектирования и использования программного продукта

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

Были получены следующие данные:

Затраты на проектирование исследованного программного продукта составили 7138,64 грн.

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

Капитальные затраты для разработчика составили 3905 грн.

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

Анализ условий труда разработчика проектируемого продукта

Краткая характеристика помещения и выполняемых работ

Рабочее помещение, в котором разрабатывался данный дипломный проект, имеет следующие габариты:

длина - 5м;

ширина - 4м;

высота - 3м;

общая площадь - 20м2;

объем - 60м3.

Помещение рассчитано на одно рабочее место. С учетом свободного пространства, на рабочее место приходится площадь, равная 20 м2 и объем, равный 60м3. Данные параметры соответствует требованиям к производственным помещениям, согласно которым на одно рабочее место, оборудованное видеотерминалом приходится площадь - не меньше 6,0 м2, объем - не меньше 20,0 м3 [25].

При разработке дипломного проекта использовалось следующее оборудование:

компьютер: Intel Celeron CPU 2.00 ГГц 512 Mб ОЗУ;

дисплей: Samsung SyncMaster 763mb, 19 дюймов;

стандартная клавиатура;

Выполнялись следующие типы работ:

Работы с документацией и литературой:

литературный обзор тематической документации, статей, нормативных документов и т.п..

Работы с дисплеем и клавиатурой:

разработка программного модуля системы контроля параметров линейных батарей узлов коммутации;

отладка программного модуля, поиск ошибок;

введение большого объема текста с клавиатуры;

поиск информации по работе в интернете и ее анализ с экрана монитора.

Планировка и размещение оборудования и рабочих мест

Эскиз помещения с указанием размещения всех рабочих мест, мебели, а также дверных и оконных проемов приведен на рисунке 8.1, где:

1 - рабочее место;

2 - дисплей;

3 - рабочий стол;

4 - шкаф.

Несмотря на то, что по площади, приходящейся на одно рабочее место, данное помещение удовлетворяет нормам, установленным в [25], планировка рабочего места недостаточно оптимальна.

Согласно [25], рабочие места с видеотерминалами и персональными ЭВМ размещаются на расстоянии не меньше 1 м от стен. В данном случае монитор рабочего места находиться лишь на 10 см от стены.

Необходимое для работы оборудование, размещено на рабочем столе.

Микроклимат рабочей зоны

Микроклимат рабочей зоны характеризуются следующими параметрами:

- температура и влажность воздуха;

- скоростью движения воздуха на рабочем месте;

- барометрическим давлением.

В помещении, где находятся персональные ЭВМ, должен поддерживаться определен-ный температурный режим для нормальной эксплуатации ЭВМ и условий труда операторов и программистов. Параметры воздушной среды в офисе должны соот-ветствовать требованиям [24].

Работу программиста можно отнести к категории I - легкие физические работы, подкатегория Iа - физические работы, производимые сидя и сопровождающиеся незначительным физическим напряжением. Для этой категории работ нормативные значения параметров метеоусловий в рабочей зоне производственных помещений представлены в таблице 8.1:

Таблица 8.1 - Нормативные значения параметров метеоусловий

Период года

Параметры воздушной среды

Оптимальные

Допустимые

Темп. t, С

Влажн. ц, %

Скорость движения воздуха v, м/с

Темп. t, С

Влажн. ц, %

Скорость движения воздуха v, м/с

Холодный и переходный (t<+10?C)

20 -23

40-60

0.1

21-25

Менее 75

Не более 0.1

Теплый (t>+10?C)

23 -30

40-60

0.1

22-28

55

0.1-0.2

Помещение регулярно проветривается и выполняется влажная уборка.

Требования норм параметров микроклимата соблюдаются в зимний период благодаря наличию в помещении батарей автономного отопления. Летом - путем естественной вентиляции. Благодаря тому, что окна помещения имеют западную ориентацию, в жаркий период года в помещении температура превышает норму. Кондиционер отсутствует.

Шум и вибрация

Постоянный шум оказывает отрицательное воздействие на человеческий организм с биологической и психологической точки зрения, что отражается на качестве работы (снижается производительность труда и повышается количество ошибок). Для обеспечения нормальной работы программиста уровень шума должен составлять не более 50 дБА [24].

В рабочем помещении источниками шума являются вентиляторы системного блока, уровень звука - 45 дБА, что не превышает допустимого значения.

Уровень вибрации на рабочем месте пренебрежительно мал.

Освещение

Работа с клавиатурой и дисплеем ПЭВМ относится к напряжённым зрительным работам, поэтому большое значение придаётся освещению помещения.

Зрительная работа разработчика соответствует разряду зрительной работы - III, характеристика фона - средний контраст, средний подразряд - в (контраст большой, фон светлый). В соответствии с требованиями [22], освещенность на рабочем столе, в зоне расположения документов должна быть в границах 300 - 500 лк. Коэффициент естественной освещенности должен быть не менее 1,5%.

Естественное освещение в рабочем помещении обеспечивает один оконный проем площадью S0=2м2. В соответствии с нормами свет должен падать на рабочее место с левой стороны. Этой норме соответствует рабочее место (см. рис. 8.1). Согласно [22] КЕО должен быть не менее 1,5%. Коэффициент естественного освещения в рабочем помещении составляет 1,47%, что соответствует установленной норме.

Искусственное освещение - комбинированное: общее равномерное освещение в 4 лампы накаливания, мощностью 60 Вт, а так же светильник местного освещения на рабочем месте с лампой накаливания в 60 Вт. Эти лампы обеспечивают освещенность, удовлетворяющую норме. Высота подвеса светильников общего освещения - 2,7 метра.

Электро- и пожаробезопасность

В помещении электроэнергия поступает для питания персональных ЭВМ и электрического освещения. Питание осуществляется от трехфазной сети переменного тока напряжением 380/220 В (+10..-15%) частотой 50 Гц (+1 Гц).

Поскольку помещение сухое (относительная влажность не более 75%), температура не превышает 30 єС, оно относится к категории помещений без повышенной опасности. Однако возможна потенциальная опасность поражения людей электрическим током, причинами опасности могут быть:

- неисправность электрооборудования, электрических розеток;

- короткое замыкание в результате повреждения изоляции.

Для предотвращения поражения электрическим током персонала в рабочем помещении необходимо предусмотреть следующие технические мероприятия:

1) все токопроводящие части оборудования и кабельной проводки должны быть защищены ограждающими кожухами;

2) все металлические конструкции, которые могут оказаться под напряжением в результате короткого замыкания, должны быть заземлены, защищены и выполнено защитное отключение.

Пожарная безопасность регламентируется документом [25].

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

Меры по предупреждению возникновения пожара в помещении:

- система электропитания ПК должна иметь блокировку, обеспечивающую отключение в случае пробоя изоляции на корпус;

- на случай возникновения пожара должна быть обеспечена возможность безопасной эвакуации людей через специальные выходы;

- для обогрева помещения использовать только водяное отопление.

Средством пожаротушения в рабочем помещении является углекислотный переносной огнетушитель, вместимостью баллона 5 литров (ВВК3,5)

Статическое электричество и излучения

Источниками электромагнитных излучений в рабочем помещении в основном являются мониторы и системные блоки компьютеров. По основным видам (ионизирующему рентгеновскому, оптическому, электростатическому полю) показания в помещении не превышают нормы. Напряженность электромагнитного поля перед экраном монитора рабочего места (3,5 В/м) не превышает нормы, которая согласно требованиям [24] в диапазоне частот от 30кГц до 300мГц не должна превышать 5В/м.

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

1) расстоянием между глазами и монитором должно составлять 80 сантиметров;

2) соблюдения норм режима труда:

- через каждый час работы с дисплеем проводить 15 минутный технологический перерыв, вдали от монитора (при восьмичасовом рабочем дне);

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

- максимальная продолжительность непрерывной работы с монитором не должна превышать двух часов;

3) периодическое прохождение медицинского осмотра.

Эргономика и техническая эстетика

Взаимное расположение рабочего стула, органов управления и средств отображения информации производится в соответствии с антропометрическими показателями, структурой деятельности, психофизиологическими и биомеханическими характеристиками разработчика [25].

Рабочее помещение, в котором проектировался данный дипломный проект характеризуется комфортной обстановкой:

- цвет стен в помещении мягкий бело-серый, не раздражающий зрение, цвет потолка - белый (способствует максимальному светоотражению);

- рабочий стул оператора имеет спинку и подлокотники, что способствует уменьшению нагрузки на спину при долговременном сидении, но не регулируется по высоте, что не предоставляет возможность обеспечения комфорта при любом росте пользователя;

- расстановка предметов мебели в помещении позволяет свободно передвигаться и наблюдать за обстановкой вне рабочего места;

- согласно требованиям [25] рекомендованная глубина рабочего стола пользователя - 800 - 1000 мм, в нашем случае - 900 мм.

Так же были найдены следующие параметры, не соответствующие нормам:

1) рабочий стол для видеотерминала, как правило, должен быть оборудован подставкой для ног. В данном случае подставка отсутствует;

2) неудобное размещение клавиатуры на выдвижной подставке ведет к быстрому утомлению кистей рук.

Исходя из полученных несоответствий нормам, рекомендуется произвести замену рабочего стола на специализированный стол для оператора ПК.

Напряженность труда. Режим труда и отдыха работников

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

Для разработчиков программ устанавливается регламентированный перерыв для отдыха продолжительностью 15 минут через каждый час работы за монитором. Общая продолжительность перерывов при восьмичасовом рабочем дне должна составлять 90 минут.

Для снижения нервно-эмоционального напряжения, утомления зрительного анализатора, улучшения мозгового кровообращения, преодоления гиподинамии, предотвращения усталости используются следующие меры:

- проведение комплекса упражнений для глаз;

- физическая разминка во время перерывов;

- проведение во время перерывов проветривания помещений.

Расчет необходимой производительности систем кондиционирования воздуха

Так как проведенный анализ показал, что кондиционирования воздуха рабочего помещения не соответствует требуемым нормам, указанным в [4], было предложено осуществить Расчет необходимой производительности систем кондиционирования воздуха.

Исходные данные:

габариты помещения - 5х4х3 м;

ориентация наружной стены здания - Восточная;

площадь остекления - 2 м2

переплет окон - спаренный пластиковый;

средства солнцезащиты - тонкие шторы;

тип и мощность ламп системы освещения - лампы накаливания 0,06 кВт;

количество ламп системы освещения - 5;

число рабочих мест - 1;

на рабочем месте установлен комплект вычислительной техники.

Для Севастополя расчетную температуру наружного воздуха можно принять равной 31С. Оптимальная температура воздуха в рабочей зоне в теплый период года при выполнении легких физических работ категорий Ia и Iб, к которым относится работа пользователя ЭВМ, согласно [2], составляет 23-25 и 22-24 С соответственно. Т.о. необходимую температуру воздуха в рабочей зоне можно принять равной 23 С.

Поступление тепла через световые проемы Qo,кВт, определяется по формуле:

, (8.1)

где q' - количество тепла, поступающее в помещение через одинарное остекление световых проемов, облучаемых прямой радиацией, кВт/м2;

q'' - тоже при наличие искусственного затенения, кВТ/м2;

Fo' - площадь световых проемов, облучаемая прямой радиацией, м2;

Fo'' - тоже, при наличии искусственного затенения, м2;

с - коэффициент солнцезащиты;

tн - расчетная температура наружного воздуха, ?С (tн=31?С);

tв - расчетная температура внутреннего воздуха, ?С (tв=23?С);

Ro - сопротивление теплопередаче заполнения светового проема, м2*?С/кВт;

Fo - общая площадь остекления, м2;

При двойном остеклении из листового стекла 3-4 мм с тонкими шторами можно принять Ro=344м2*0С/кВт; с=0,53.

Для вертикального остекления частично или полностью облучаемого прямой радиацией:

, (8.2)

где qвп - поступление тепла от прямой солнечной радиации через одинарное остекление, кВт/м2;

qвр - тоже от рассеянной радиации;

К1 - коэффициент, учитывающий затенение световых проемов переплетами;

К2 - коэффициент, учитывающий загрязнение стекла;

При затенении световых проемов деревьями и зданиями определяют:

, (8.3)

Т.к. ориентация окон северо-восточная, то qвп/ qвр=0,580/0,145.

При спаренных пластиковых окнах К1=0,66.

При вертикальном остеклении при незначительном загрязнении стекла К2=0,95

(кВт/м2)

(кВт/м2)

(кВт)

Теплопоступление через ограждения Qогр,кВт, определяют по формуле:

, (8.4)

где qогрi - поступление тепла через 1 м2 i-ой ограждающей поверхности, кВт/м2;

Sогрi - площадь i-ой ограждающей поверхности, м2;

Т.к. помещение с одной внешней стеной (восточная ориентация), общие стены с соседними комнатами, находится на втором этаже семи этажного здания, то расчет будет производится следующим образом:

(кВт)

Теплопоступление от оборудования и системы искусственного освещения оценивается по формуле:

, (8.5)

где еi - коэффициент, учитывающий часть энергии, выделяющуюся в виде тепла для i-го типа оборудования;

Ni - установленная мощность единицы i-го оборудования, кВт;

ni - число единиц i-го оборудования;

зi - коэффициент одновременности работы i-го оборудования.

Основными источниками теплопоступления будут являться: комплект вычислительной техники (1 шт.) и лампа накаливания (5 шт).

(кВт)

Теплопоступление от находящихся в помещении людей определяется по формуле:

(8.6)

где q - тепло, выделяемое человеком, кВт;

n - количество работников, находящихся в помещении.

В помещении работает один человек, исходя из этого, теплопоступление будет равно:

(кВт)

Результирующее поступление тепла в помещение определяется по формуле:

(8.7)

(кВт)

В результате анализа, полученного значения результирующего поступления тепла в помещение, была выбрана оптимальная СКВ (таблица 8.2)

Таблица 8.2 - Параметры оптимальной СКВ

Модель кондиционера

Площадь помещения, м2

Цена, грн

Потребляемая мощность, кВт

Производительность, кВт

Охлад.

Нагрев.

Охлад.

Нагрев.

Samsung SH-09 ZS8

28

2250

0.95

0.93

2.64

2.93

Экология и охрана окружающей среды

Производственные объекты Севастопольского филиала предприятия ОАО «Укртелеком» размещено на всей территории города Севастополя и его пригородной зоны. Территория условно делится на 6 промплощадок, 5 из которых находятся в черте города и одна за его пределами.

Промплощадка №1, при основном производстве - предоставление услуг электросвязи, выделение загрязняющих веществ в атмосферу не происходит. К участкам вспомогательного производства относятся аккумуляторные и дизельные электростанции, предназначенные для обеспечения бесперебойной работы телефонных станций. Кислотные аккумуляторы работают в режиме постоянной подзарядки и используются при кратковременном отключении электроэнергии. Дизельные электростанции включаются в работу на номинальной нагрузке при длительном отключении электроэнергии.

Объект ЦРССМ является специализированным подразделением по прокладке и ремонту линий связи, капитальному и текущему ремонтам объектов связи. На территории объекта размещены производственные участки:

- столярный, оборудованной деревообрабатывающими станками (5 ед.) и циклоном СИОТ-2 с Коч.=83.7%. Расход древисины - 150 м3/год;

- сварочно-сборочный, который оборудован заточным и трубоотрезным станками, а также сварочным аппаратом;

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

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

- котельная, оборудованная нетиповым теплогенератором, работающем на угле;

- ремонтный бокс на 2 автомашины;

- открытая стоянка автотранспорта и строительной техники (80 ед.)

- аккумуляторный, токарный и элекромеханический участки.

В целом от 42-х источников выбросов от объектов промплощадки №1 в атмосферный воздух выбрасываются загрязняющие вещества классов опасности: 1-ого (свинец), 2-ого (марганец и его соединения, NO2, H2SO4, HF, акролеин), 3-ого (Fe2O3, NO, сажа, SO2, изопрен, ацетальдегид, кислота уксусная, пыли неорганические с сод. SiO2 ниже 20%, 70-20%, выше 70%), 4-ого (CO, спирт этиловый, бензин, древесная пыль, пыль абразивно-металлическая). Общее количество выбрасываемых веществ - 4,170 т/год.

Источниками выделения загрязняющих веществ в атмосферу промплощадки №2 являются: аккумуляторы, дизельная электростанция (на АТС-71); аккумуляторы и котельная (на АТСКЭ-710). Котельная оборудована котлом «Крым - 10», работающим на твердом топливе.

В целом от 4-х организованных источников выбросов промплощадки в атмосферу выбрасываются загрязняющие вещества 2-го класса опасности (NO2, H2SO4), 3-го класса опасности (сажа, SO2, пыль неорганическая, сод. SiO2 70-20%), 4-го класса опасности (CO, углеводороды предельные). Общее количество выбрасываемых веществ - 1,830 т/год.

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

В целом от 3-х организованных источников выбросов промплощадки в атмосферу выбрасываются загрязняющие вещества 2-го класса опасности (NO2, H2SO4), 3-го класса опасности (сажа, SO2), 4-го класса опасности (CO, углеводороды предельные). Общее количество выбрасываемых веществ - 0,018 т/год.

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

В целом от 4-х организованных источников выбросов промплощадки в атмосферу выбрасываются загрязняющие вещества 2-го класса опасности (NO2, H2SO4), 3-го класса опасности (сажа, SO2), 4-го класса опасности (CO, углеводороды предельные). Общее количество выбрасываемых веществ - 0,093 т/год.

Источниками выделения загрязняющих веществ в атмосферу промплощадки №5 являются: котельная и аккумуляторы. Котельная оборудована котлом «Крым - 10», работающим на твердом топливе.

В целом от 4-х организованных источников выбросов промплощадки в атмосферу выбрасываются загрязняющие вещества 2-го класса опасности (NO2, H2SO4), 3-го класса опасности (сажа, SO2), 4-го класса опасности (CO, углеводороды предельные). Общее количество выбрасываемых веществ - 0,024 т/год.

Источниками выделения загрязняющих веществ в атмосферу промплощадки №6 являются: аккумуляторы, дизельная электростанция и котельная. Котельная оборудована теплогенератором, работающим на твердом топливе.

В целом от 4-х организованных источников выбросов промплощадки в атмосферу выбрасываются загрязняющие вещества 2-го класса опасности (NO2, H2SO4), 3-го класса опасности (сажа, SO2, пыль неорганическая сод. SiO2 70-20%), 4-го класса опасности (CO, углеводороды предельные). Общее количество выбрасываемых веществ - 2,005 т/год.

Раз в пять лет предприятие разрабатывает проект нормативов ПДВ в атмосферный воздух от стационарных источников СД ОАО «Укртелеком» в котором указаны мероприятия по сокращению выбросов загрязняющих веществ для источников выбросов каждой промышленной площадки.

Хранение и удаление отходов производственной деятельности с территории СД ОАО «Укртелеком» производится согласно требованиям [23].

В результате производственной деятельности СД ОАО «Укртелеком» образуются и временно размещаются следующие виды отходов:

- отработанные люминесцентные лампы;

- отработанные моторные масла;

- металлическая стружка;

- лом черных и цветных металлов;

- отходы деревообработки;

- отработанные свинцовые аккумуляторы;

- шины автомобильные изношенные;

- шлак угольный;

- грунт загрязненный нефтеотходами;

- абразивные отходы;

- строительные отходы.

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

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

Анализ условий труда на предприятии СД ОАО «Укртелеком» показал, что правила охраны труда соблюдаются в полной мере, за исключением нормативов, касающихся микроклимата помещения в теплый период года. Поэтому был произведен расчет и подобрана оптимальная система кондиционирования и вентилирования воздуха, которая в скором времени будет установлена в помещении предприятия.

Планировка и размещение оборудования и рабочих мест, шум и вибрация, освещение, электро- и пожаробеэопасность, статическое электричество и излучения, эргономика и техническая эстетика, напряженность труда, режим труда и отдыха работников полностью соответствую нормативным требованиям

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

8. Гражданская оборона

Прогнозирование и оценка обстановки на Севастопольском филиале ОАО «Укртелеком» при аварии на химически опасных промышленных предприятиях и на транспорте.

8.1 Вводная часть

Чрезвычайные ситуации мирного времени по происхождению делятся на: природные и техногенные.

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

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

Основными источниками техногенных ЧС являются химически опасные объекты (ХОО) - это объекты, на которых хранят, перерабатывают, используют или транспортируют опасные химические вещества (ОХВ), при аварии на которых или при разрушении которых может произойти гибель или химическое заражение людей, сельскохозяйственных животных и растений, а также химическое заражение окружающей природной среды.

Характерной особенностью значительной части объектов экономики (ОЭ) является их химическая опасность. Из общего числа ОЭ более 75% являются химически опасными объектами. Под ОХВ следует понимать химическое вещество, прямое или опосредованное воздействие которого на человека может вызвать острые и хронические заболевания или его гибель.

По своим поражающим свойствам ОХВ неоднородны. Условно они делятся на следующие группы:

- вещества с преимущественным удушающим действием (хлор, фосген, хлорпикрин и др.);

- вещества преимущественно общеядовитого действия (окись углерода, цианистый водород и др.);

- вещества, обладающие удушающим и общеядовитым действием (акрилонитрил, азотная кислота, сернистый ангидрид фтористый водород и др.);

- вещества, действующие на генерацию, проведение и передачу нервного импульса - нейротропные яды (сероуглерод, тетраэтилсвинец, фосфорорганические соединения и др.);

- вещества, обладающие удушающим и нейротропным действием (аммиак, гептил, гидразин и др.);

- метаболические яды (окись этилена, дихлорэтан и др.);

- вещества, нарушающие обмен веществ (диоксин, полихлорированные бензофураны и др.).

В количественном отношении хлор и аммиак занимают первые два места. Значительные их запасы сосредоточены на объектах пищевой, мясомолочной промышленности, холодильниках торговых баз, в жилищно-коммунальном хозяйстве. Так, на овощебазах содержится до 150 т. аммиака, используемого в качестве хладагента, а на станциях водоподготовки - от 100 до 400 т. хлора. Статистика показывает, что наиболее опасными (не с точки зрения токсичности) по числу случаев гибели людей являются хлор и аммиак.

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

Масштабы возможных последствий аварии в значительной мере зависят от типа и агрегатного состояния ОХВ, размера и характера выброса в окружающую среду (разлив на подстилающую поверхность “свободно” или в “обваловку”), высоты обвалования ёмкостей, метеорологических условий и других факторов.

Поражающим фактором ОВХ является токсичное воздействие на людей и животных, которое проявляется в различных видах его агрегатного состояния - пара, аэрозолей и капель. Люди и животные получают поражения в результате попадания ОВХ в организм: через органы дыхания - ингаляционно; кожные покровы, слизистые оболочки и раневые поверхности - резорбтивно; желудочно-кишечный тракт - перорально.

ОХВ в парообразном (газообразном) и тонкодисперсном аэрозольном состояниях заражают воздушные пространства, включая внутренние объёмы зданий и инженерных сооружений. Воздушное пространство может заражаться: при диспергировании, испарении ОХВ и их десорбции с заражённых поверхностей; при распространении паров, аэрозоля ОХВ в воздушной среде; при заносе ОХВ в инженерные объекты и другие сооружения.

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

Важнейшей характеристикой ОХВ является их токсичность - способность оказывать поражающее действие на организм. В промышленной токсикологии из общего числа промышленных ядов к ОХВ отнесены те вещества, смертельные дозы которых для человека не превышает 100 мг/кг. Для более точной характеристики ОХВ используются понятия токсичная доза и предельно допустимая концентрация (ПДК).

К основным характеристикам ОХВ также принято относить агрессивность и стойкость. Агрессивность - это способность ОХВ оказывать вредное воздействие на элементы объектов экономики и окружающую природную среду. Стойкость - это продолжительность сохранения поражающей способности ОХВ.

Прогнозирование химической обстановки может быть долгосрочное (оперативное) и аварийное. Долгосрочное прогнозирование осуществляется заранее для определения возможных масштабов заражения, сил и средств, которые будут привлекаться для ликвидации последствий аварии, составления планов работ и др. справочных материалов.

В данной работе рассматривается методика прогнозирования и оценки последствий вылива (выброса) ОХВ при авариях на промышленных объектах и транспорте используется для ОХВ, которые сберегаются в газообразном или жидком состоянии под давлением и, которые в момент выброса (вылива) переходят в газообразное состояние и создают первичное или вторичное облако ОХВ.

Химическое вещество, которое рассматривается в данной работе, - аммиак.

Аммиак -- NH3, нитрид водорода, при нормальных условиях -- бесцветный газ с резким характерным запахом (запах нашатырного спирта), почти вдвое легче воздуха, ядовит. Растворимость NH3 в воде чрезвычайно велика -- около 1200 объёмов (при 0 °C) или 700 объёмов (при 20 °C) в объёме воды. В холодильной технике носит название R717, где R -- Refrigerant (хладагент), 7 -- тип хладагента (неорганическое соединение), 17 -- молекулярная масса.

В жидком аммиаке молекулы связаны между собой водородными связями. Сравнение физических свойств жидкого аммиака с водой показывает, что аммиак имеет более низкие температуры кипения (tкип. --33,35 °C) и плавления (tпл. --77,70 °C), а также более низкую плотность, вязкость (вязкость жидкого аммиака в 7 раз меньше вязкости воды), проводимость и диэлектрическую проницаемость.

Аммиак является конечным продуктом азотистого обмена в организме человека и животных. Он образуется при метаболизме белков, аминокислот и других азотистых соединений. Он высоко токсичен для организма, поэтому большая часть аммиака в ходе орнитинового цикла конвертируется печенью в более безвредное и менее токсичное соединение -- карбамид (мочевину). Мочевина затем выводится почками, причём часть мочевины может быть конвертирована печенью или почками обратно в аммиак.

По физиологическому действию на организм относится к группе веществ удушающего и нейротропного действия, способных при ингаляционном поражении вызвать токсический отёк лёгких и тяжёлое поражение нервной системы. Аммиак обладает как местным, так и резорбтивным действием. Пары аммиака сильно раздражают слизистые оболочки глаз и органов дыхания, а также кожные покровы. Это мы и воспринимаем как резкий запах. Пары аммиака вызывают обильное слезотечение, боль в глазах, химический ожог конъюнктивы и роговицы, потерю зрения, приступы кашля, покраснение и зуд кожи. При соприкосновении сжиженного аммиака и его растворов с кожей возникает жжение, возможен химический ожог с пузырями, изъязвлениями. Кроме того, сжиженный аммиак при испарении поглощает тепло, и при соприкосновении с кожей возникает обморожение различной степени. Запах аммиака ощущается при концентрации 37 мг/мі. Предельно допустимая концентрация в воздухе рабочей зоны производственного помещения составляет 20 мг/мі. Следовательно, если чувствуется запах аммиака, то работать без средств защиты уже опасно. Раздражение зева проявляется при содержании аммиака в воздухе 280 мг/мі, глаз -- 490 мг/мі. При действии в очень высоких концентрациях аммиак вызывает поражение кожи: 7-14 г/мі -- эритематозный, 21 г/мі и более -- буллёзный дерматит. Токсический отёк лёгких развивается при воздействии аммиака в течение часа с концентрацией 1,5 г/мі. Кратковременное воздействие аммиака в концентрации 3,5 г/мі и более быстро приводит к развитию общетоксических эффектов. Предельно допустимая концентрация аммиака в атмосферном воздухе населённых пунктов равна: среднесуточная 0,04 мг/мі; максимальная разовая 0,2 мг/мі.

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

В Украине наблюдается тенденция к росту количества промышленных объектов производящих, хранящих и использующих в промышленном производстве ОХВ. В настоящее время в Украине свыше 1800 химически опасных объектов, в зоне размещения которых проживает около 22 млн. человек. Используются свыше 300 тыс. тонн опасных химических веществ, в частности свыше 200 тыс. т аммиака.

Оценим химическую обстановку на Севастопольском филиале ОАО «Укртелеком», которая может сложиться при аварийном разрушении емкости ОХВ на ХОО.

Исходные данные:

- тип и количество вылитого ОХВ: аммиак, Q(T) = 7 т;

- емкость не обвалована;

- местность открытая;

- характер разлива свободный;

- метеоусловия:

- температура воздуха +240С;

- скорость ветра V = 3 м/с;

- степень вертикальной устойчивости воздуха - изотермия;

- предприятие расположено на расстоянии Ro = 0,3 км, количество работающих - 120 человек, обеспеченность противогазами (ГП-5 + ДПГ-2) - 70%.

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

Расчетная часть выполнена по методике, изложенной в методических указаниях к расчетно-графической работе («Прогнозирование и оценка обстановки на объекте хозяйственной деятельности при аварии на химически опасных промышленных предприятиях и на транспорте») [28]. Решение:

1. Глубина расчетной прогнозируемой зоны химического заражения Гр, км

Гр=Гт*Кв/Ксх-Гз, (9.1)

где Гт - табличное значение глубины зоны для условий:

- открытая местность;

- V = 3 м/с;

- емкость не обвалована, температура воздуха +240С

Гт = 0.8 км;

Кв - поправочный коэффициент на ветер V = 3 м/с;

Кв = 0,55;

Ксх - коэффициент уменьшения глубины распространения облака ОХВ в зависимости от вида хранения и вылива при аварии (емкость не обвалована)

Ксх = 1;

Гзм=L-L/Кзм, (9.2)

Гзм = 0.

Находим расчетную глубину Гр, км:

Гр = 0,8 * 0,55 /1 = 0,45 км.

После получения расчетной глубины (Гр), с учетом всех коэффициентов, сравниваем с максимальной глубиной переноса воздуха за 4 часа Гп, км (максимальный срок разового прогнозирования после аварии)

Гп=4*W, (9.3)

где W = 18 км/ч - скорость переноса воздушных масс зависит от скорости приземного ветра (на высоте флюгера 10м) и вертикальной устойчивости атмосферы.

Гп = 4 *18 = 72 км.

Сравниваем Гп и Гр и для дальнейших расчетов выбираем меньшую величину

Гпзхз=min[Гр;Гп]. (9.4)

Гпзхз = min [0,45; 72] = 0,45

2. Ширина прогнозируемой зоны химического заражения при изотермии

Шпзхз=0,35*Гпзхз, (9.5)

Шпзхз л = 0,35 * 0,45 = 0,1575 км;

3. Площади зон возможного химического заражения

Sзвхз=8,72*10-3*Гпзхз2* ц0 , (9.6)

где ц0 - коэффициент, который условно приравнивается к угловому размеру зоны в зависимости от скорости приземного воздуха, V>2, ц0 = 45.

Sзвхз = 8,72 * 10-3 * 0,452 * 45 = 0,08 км2;

4. Площади прогнозируемых зон химического заражения

Sпзхз=0,5*Гпзхз*Шпзхз, (9.7)

Sзвхз = 0,5 * 0,45 * 0,1575 = 0,035 км2.

5. Время подхода облака к предприятию

t=Ro/W, (9.8)

где W - скорость переноса облака при V = 3 м/с;

t = 0,3 / 18 = 0,02 часа.

6. Время поражающего действия ОХВ (время испарения)

tп=tисп=h*d / K1 * K2 * K3, (9.9)

где d - плотность ОХВ, т/м3; h = H - 0,05 м - высота слоя разлитого ОХВ, м; K1 - коэффициент, зависящий от физико-химических свойств ОХВ;

K2 - коэффициент, учитывающий температуру воздуха;

K3 - коэффициент, учитывает скорость ветра V и рассчитывается по формуле

K3 = (V + 2)/3 = (3 + 2)/3 =1,66;

К1 = 0,025;

K2 = 1;

tп = tисп = 0,05*0,681 / 0,025*1*1,66 = 0,82 часа.

7. Возможные потери людей в очаге поражения (на фирме) (П, чел)

По таблице 7 при 70% обеспечении противогазами ГП-5(7):

а) пребывание людей в укрытиях и строениях

П = 120 чел * 0,18 = 21 чел

б) на открытой местности

П = 120 чел * 0,35 = 42 чел

Структура потерь на открытой местности:

легкие - 42 * 0,25 = 11 чел

средней тяжести - 42 * 0,4 = 15 чел

смертельные поражения - 42 * 0,35 = 15 чел.

Результаты расчетов сведены в итоговую таблицу 9.1.

Таблица 9.1 - Итоговая таблица

Источник загрязнения

Тип ОХВ, количество, т

Г пзхз, км

Ширина ПЗХЗ, км

Площадь ЗВХЗ, км2

Площадь очага химического поражения, км2

tп (tисп), часа

T подхода облака ОХВ, мин

Потери, структура потерть

Разрушена емкость ОХВ на ХОО

Аммиак

7

0,45

0,1575

0,08

0,035

0,82

0,02

42, из них:

смерт. - 15

ср.тяж. - 16

легкие - 11

8.3 Выводы и мероприятия по защите работников предприятия

При проведения анализа угрозы жизни работников Севастопольского филиала ОАО «Укртелеком» было выявлено, что при разлитии 7 т химически опасного вещества аммиак в пределах 0,3 км от предприятия облако зараженного воздуха подойдет к заводу через 1,2 минуты, что не дает возможности эвакуировать людей из зоны поражения. Продолжительность воздействия аммиака составляет 49 минут. Было определено приблизительное количество пострадавших в данной ситуации равное 42 сотрудникам из 120. Для того, чтобы уменьшить количество несчастных случаев необходимо провести следующие меры по защите работников:

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

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

- перед оставление рабочих мест в соответствии с имеющимися инструкциями произвести экстренную безаварийную остановку производства, закрыть окна и двери всех помещений и включить вентиляцию;

- вести непрерывное химическое наблюдение за изменением показателей и метеорологических условий;

- при поражении парами ОХВ оказать первую помощь; одеть противогаз и вывести (вынести) на свежий воздух;

- необходимо обеспечить на 100% всех сотрудников противогазами, а при их отсутствии - ватно-марлевыми повязками, смоченными водой или 2-5% раствором питьевой соды.

Заключение

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

Для её реализации была изучена соответствующая литература, составлена структурная схема, разработан общий алгоритм функционирования, выполнена реализация интерфейса сопряжения с персональным компьютером (USB), разработаны программные модули системы контроля, представлены их блок-схемы с подробным описанием. Система контроля была смоделирована в симуляторе Proteus, и результаты тестирования подтвердили её правильную работоспособность.

Также был выполнен расчет экономической целесообразности создания программного продукта, результатом которого является оправданность проектирования системы контроля. Поскольку тема диплома была предложена для изучения на преддипломной практике, пройденной в Севастопольском филиале ОАО «Укртелеком», то в разделах 9 и 10 расчеты были привязаны к конкретному рабочему месту.

Разработанная система контроля может применяться на любых электропитающих установках узла коммутации и при незначительном изменении кода программы, может быть установлена на любых других объектах, где предусмотрено применение аккумуляторных батарей для временного или постоянного питания нагрузки (например, надводные и подводные корабли, автоматические краны, автомобили на электричестве).

Путем дальнейшего усовершенствования является подключение дополнительных датчиков к АЦП, для измерения различных параметров, подключение дополнительных модулей к свободным портам, для решения специфических задач (например, подключение программируемой матрицы, дополнительных светодиодов или управляющих блоков).

Библиографический список

1. Siemens Power Supply System 400, документация к оборудованию 13 с.

2. Densitron International PLC “Application Notes for Character Mode LCDs”, документация к оборудованию, 1998. - 24 с.

3. Atmel. 8-bit AVR Microcontroller with 64/128K Bytes of ISP Flash and USB Controller. AT90USB646 AT90USB 647 AT90USB1286 AT90USB1287 / Atmel Corporation, 2006. - 425 с.

4. Микроконтроллеры AVR: от простого к сложному / М. С. Голубцов. - М.: СОЛОН-Пресс, 2003. - 288 с.

5. Микроконтроллеры семейства AVR фирмы Atmel / В. В. Гребенев. - М.: ИП РадиоСофт, 2002. - 176 с.

6. Микроконтроллеры AVR. Вводный курс / Дж. Мортон. Пер. с англ. - М.: Издательский дом «Додека-XXI», 2006. - 272 с.

7. Программирование на языке С для AVR и PIC микроконтроллеров / Ю. А. Шпак. - К.: МК-Пресс, 2006. - 400 с.

8. «Умный дом» своими руками / В. Н. Гололобов. - М.: НТ Пресс, 2007. - 416 с.

9. ISIS Intelligent Schematic Input System (Интеллектуальна Вистема Ввода Схем). Руководство пользователя. / Пер. с англ. - А.П. Гордейчук, 2004. - 35 с.

10. Применение микроконтроллеров AVR: схемы, алгоритмы, программы (+CD) / В. Н. Баранов. - М.: Издательский дом «Додека-XXI», 2006. - 288 с.

11. AVR 309: Software Universal Serial Bus (USB). Application Note. / Atmel Corporation, 2006. - 23 с.

http://www.gaw.ru/html.cgi/txt/app/micros/avr/AVR309.htm

12. Самоучитель разработчика устройств на микроконтроллерах AVR. / А. В. Белов. - СПб.: Наука и техника, 2008. - 544 с.

13. Котельников В. А. О пропускной способности эфира и проволоки в электросвязи -- Всесоюзный энергетический комитет. // Материалы к I Всесоюзному съезду по вопросам технической реконструкции дела связи и развития слаботочной промышленности, 1933. Репринт статьи в журнале УФН, 176:7 (2006), 762--770.

14. Основы программирования микроконтроллеров ATMega128 и 68hc908. Учебное пособие. / Ю. В. Китаев. - СПб.: СПбГУ ИТМО, 2007. - 107 с.

15. Интерфейсы USB. Практика использования и программирования. / П.В. Агуров. - СПб.: БХВ-Петербург, 2004. - 576 с.

16. AVR 120: Characterization and Calibration of the ADC on an AVR. Application Note. / Atmel Corporation, 2006. - 15 с.

17. Code VisionAVR: пособие для начинающих. / М. В. Лебедев. - М.: Издательский дом «Додека-XXI», 2008. - 592 с.

18. BASCOM AVR - тестируем АЦП (ADC) - аналогово-цифровой преобразователь. / http://robozone.su/bascom-avr

19. Как устроен Makefile и что это такое? /

http://microsin.ru/content/category/5/26/44/

20. Разработка устройства USB - как начать работу с библиотеками AVR USB (V-USB) и libusb. /

http://microsin.ru/index.php?option=com_frontpage&Itemid=1

21. Учебный курс. АЦП микроконтроллера /

http://www.chipenable.ru/index.php/programming-c/18-adc-avr-easy-start.html

22. ДБН В.2.5-28-2006 «Инженерное оборудование зданий и сооружений. Естественное и искусственное освещение». Введ. 15.05.06. -К.: Минстрой Украины, 2006. - 48с.

23. ДСанПиН 2.2.7.029-99. «Гигиенические требования к поведению с промышленными отходами и определения их класса опасности для здоровья населения». Введ. 01.07.99. - 42 с.

24. ДСанПиН 3.3.2-007-98. «Государственные санитарные правила и нормы работы с визуальными дисплейными терминалами ЭВМ». Введ. 01.01.99. -К.: Минздрав Украины, 1999. - 56с.

25. НПАОП 0.00-1.31-99 «Правила охраны труда при эксплуатации электронно-вычислительных машин». Введ. 01.09.99. -К.: Госнадзорохрантруда, 1999. -107с.

26. Методические указания к выполнению практической работы по дисциплине «Охрана труда в отрасли» / Сост. Канд. Техн. Наук Е. И. Азаренко. - Севастополь: Изд-во СевНТУ, 2008. - 10 с.

27. Пеклов А.А. Кондиционирование воздуха/ А.А. Пеклов, Т.А. Степанова. - К.: Вищашк., 1978. - 240 с.

28. Методические указания «прогнозирование и оценка обстановки на объекте хозяйственной деятельности при аварии на химически опасных промышленных предприятиях и на транспорте» / - Севастополь: Изд-во СевНТУ, 2006. - 23 с.

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

Приложение А

Прошивка процессора

Файл usb.c:

/* в макроопределении указано, что оба светодиода подключены к порту E, биты 1 и 2, по их состоянию определяется состояние разряда*/

#define LED_PORT_DDR DDRE

#define LED_PORT_OUTPUT PORTE

#define LED_BIT 1

#define LED_BIT_2 2

#include <avr/io.h>

#include <avr/wdt.h>

#include <avr/interrupt.h>

#include <util/delay.h>

#include <avr/pgmspace.h>

#include 'usbdrv.h'

#include 'oddebug.h'

#include 'requests.h' /* номера custom request, используемые в коде*/

/* ------------------------------------------------------------------------- */

/* ----------------------------- USB interface ----------------------------- */

/* ------------------------------------------------------------------------- */

PROGMEM char usbHidReportDescriptor[22] = { /*дескриптор репорта USB */

0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop)

0x09, 0x01, // USAGE (Vendor Usage 1)

0xa1, 0x01, // COLLECTION (Application)

0x15, 0x00, // LOGICAL_MINIMUM (0)

0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)

0x75, 0x08, // REPORT_SIZE (8)

0x95, 0x01, // REPORT_COUNT (1)

0x09, 0x00, // USAGE (Undefined)

0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)

0xc0 // END_COLLECTION

};

/* Дескриптор выше заглушает драйверы. Поскольку используется первая конечная точка, данные не передаются через HID-репорты, вместо этого используются custom-запросы. */

/* ------------------------------------------------------------------------- */

usbMsgLen_t usbFunctionSetup(uchar data[8])

{

usbRequest_t *rq = (void *)data;

if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_VENDOR)

{

DBG1(0x50, &rq->bRequest, 1); /* отладочный вывод: печатаем наш запрос */

if(rq->bRequest == CUSTOM_RQ_GET_STATUS) /*если получен пакет запроса*/

{

static uchar dataBuffer[4]; /*Переменная куда запишутся 4 байта полезной информации*/

dataBuffer[0] = ((LED_PORT_OUTPUT & _BV(LED_BIT)) != 0);

dataBuffer[1] = itoa(Uin);

dataBuffer[2] = itoa(Iin);

dataBuffer[3] = ((LED_PORT_OUTPUT & _BV(LED_BIT_2)) != 0);

usbMsgPtr = dataBuffer; /* говорим драйверу, какие данные вернуть */

return 4; /* говорим драйверу послать 4 байта */

}

else /* вызовы запросов USBRQ_HID_GET_REPORT и USBRQ_HID_SET_REPORT не реализованы, поскольку они не вызываются. Операционная система также не будет обращаться к ним, потому что наш дескриптор не определяется никаким значением.*/

return 0; /* default для нереализованных запросов: не возвращаем назад данные хосту */

}

/* ------------------------------------------------------------------------- */

int main(void)

{

uchar i; //переменная для цикла (счетчик)

wdt_enable(WDTO_1S);

/* выключаем сторожевой таймер (watchdog) */

DBG1(0x00, 0, 0); /* отладочный вывод: стартует main */

/* RESET статус: все биты портов являются входами без нагрузочных резисторов (pull-up). Это нужно для D+ и D-. Таким образом, не нужна какая-либо дополнительная инициализация портов.*/

odDebugInit();

usbInit();

usbDeviceDisconnect(); /* принудительно запускаем ре-нумерацию*/

i = 0;

while(--i)

{ /* иммитируем USB отключение на время > 250 мс */

wdt_reset();

_delay_ms(1);

}

usbDeviceConnect(); /*подключаем USB-устройство*/

DBG1(0x01, 0, 0); /* отладочный вывод: стартует цикл main */

for(;;){ /* цикл событий main */

#if 0

DBG2(0x02, 0, 0); /* отладочный вывод: повторы цикла main */

#endif

wdt_reset();

usbPoll();

}

return 0;

}

Файл main.c:

/*модуль контроля параметров*/

#include <90usb1286.h>

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x05 ;PORTB /*подключаем дисплей к порту B*/

#endasm

#include <lcd.h>

#include <stdlib.h>

#include <math.h>

#include <stdio.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x20

//прерывание по АЦП

unsigned char read_adc(unsigned char adc_input)

{

/*ADMUX - регистр управления мультиплексором. Устанавливаем выравнивание влево (результат преобразования хранится в 2-х регистрах, т.к. АЦП 10-ти разрядное, а камень 8-ми)*/

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// задержка необходима для стабилизации входного напряжения АЦП

delay_us(10);

/* ADCSRA - регистр управления и состояния, ниже включаем АЦП, режим одиночного преобразования, разрешение прерывания*/

ADCSRA|=0x40;

//Ожидаем окончания преобразования

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCH;

}

void main(void)

{

сhar * buff; //переменная для хранения промежуточного результата

int Ref = 5; /*опорное напряжение АЦП (необходим при преобразовании кода, полученного от АЦП во входное напряжение)*/

float ADCel = pow(2,8)-1; /*разрешающая способность АЦП*/

float Uin; /*переменная для хранения напряжения на выходе батареи*/

int ost;/*переменная для хранения остатка от деления*/

// переменные для хранения данных полученных с АЦП

int i_tmp;

int u_tmp;

int Iin; /*переменная для хранения тока на выходе батареи*/

// Crystal Oscillator division factor: 1

#pragma optsize-

CLKPR=0x80;

CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

//Инициализация портов ввода/вывода

/*Далее In и Out означает - что бит работает как вывод или ввод соответственно*/

/*State = 0 или T означает уровень сигнала на ножке*/

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=Out Func0=Out

// State7=T State6=T State5=T State4=T State3=0 State2=T State1=0 State0=0

PORTD=0xFF;

DDRD=0x00;

// Port E initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=F State6=F State5=F State4=F State3=F State2=F State1=F State0=F

PORTE=0x00;

DDRE=0xFF;

// Port F initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTF=0x00;

DDRF=0x00;

//инициализация таймеров и счетчиков

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0A output: Disconnected

// OC0B output: Disconnected

TCCR0A=0x00;

TCCR0B=0x00;

TCNT0=0x00;

OCR0A=0x00;

OCR0B=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// OC1C output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

// Compare C Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

OCR1CH=0x00;

OCR1CL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2A output: Disconnected

// OC2B output: Disconnected

ASSR=0x00;

TCCR2A=0x00;

TCCR2B=0x00;

TCNT2=0x00;

OCR2A=0x00;

OCR2B=0x00;

// Timer/Counter 3 initialization

// Clock source: System Clock

// Clock value: Timer 3 Stopped

// Mode: Normal top=FFFFh

// Noise Canceler: Off

// Input Capture on Falling Edge

// OC3A output: Discon.

// OC3B output: Discon.

// OC3C output: Discon.

// Timer 3 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

// Compare C Match Interrupt: Off

TCCR3A=0x00;

TCCR3B=0x00;

TCNT3H=0x00;

TCNT3L=0x00;

ICR3H=0x00;

ICR3L=0x00;

OCR3AH=0x00;

OCR3AL=0x00;

OCR3BH=0x00;

OCR3BL=0x00;

OCR3CH=0x00;

OCR3CL=0x00;

// Ниже запрещаются прерывания по указанным выводам (USB прерывания иные)

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

// INT3: Off

// INT4: Off

// INT5: Off

// INT6: Off

// INT7: Off

EICRA=0x00;

EICRB=0x00;

EIMSK=0x00;

// PCINT0 interrupt: Off

// PCINT1 interrupt: Off

// PCINT2 interrupt: Off

// PCINT3 interrupt: Off

// PCINT4 interrupt: Off

// PCINT5 interrupt: Off

// PCINT6 interrupt: Off

// PCINT7 interrupt: Off

PCMSK0=0x00;

PCICR=0x00;

// Timer/Counter 0 Interrupt(s) initialization

TIMSK0=0x00;

// Timer/Counter 1 Interrupt(s) initialization

TIMSK1=0x00;

// Timer/Counter 2 Interrupt(s) initialization

TIMSK2=0x00;

// Timer/Counter 3 Interrupt(s) initialization

TIMSK3=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

ADCSRB=0x00;

// Инициализация АЦП

// ADC Clock frequency: 1000,000 kHz

// ADC Voltage Reference: AREF pin

// ADC High Speed Mode: Off

// Only the 8 most significant bits of

// the AD conversion result are used

// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On

// ADC4: On, ADC5: On, ADC6: On, ADC7: On

DIDR0=0x00;

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x83;

ADCSRB&=0x7F;

// USB Controller initialization

// USB Mode: Device

// UID Pin: Off

// UVCON Pin: Off

// USB Pad Regulator: Off

// OTG Pad: On

// VBUS Transition interrupt: Off

// ID Transition interrupt: Off

UHWCON=0x80;

USBCON=0x90;

USBINT=0; // Clear the interrupt flags

// SRP interrupt: Off

// VBUS Error interrupt: Off

// B-Connection Error interrupt: Off

// Role Exchange interrupt: Off

// HNP Error interrupt: Off

// Suspend Time-out Error interrupt: Off

OTGIEN=0x00;

OTGINT=0; // Clear the interrupt flags

// SRP Method: Data line pulsing

OTGCON=0x00;

// USB Device mode general registers initialization

// Low Speed Mode: On

UDCON=0x04;

// Suspend interrupt: Off

// Start Of Frame interrupt: Off

// End Of Reset interrupt: Off

// Wake-up CPU interrupt: Off

// End Of Resume interrupt: Off

// Upstream Resume interrupt: Off

UDIEN=0x00;

UDINT=0; // Clear the interrupt flags

// Endpoint 0 selected

UENUM=0;

// Device endpoint registers initialization

// Endpoint 0: Off

UECONX=0x00;

// Endpoint X configuration: Control, OUT

UECFG0X=0x00;

// Endpoint X size: 8

// Endpoint X Banks: 1

UECFG1X=0x00;

// Инициализация модуля LCD

lcd_init(40);

PORTE.0=0; //страховка - изначально аварии не предполагается

// Разрешение глобальных прерываний

#asm('sei')

while (1)

{

if(PIND.2==1)/*пока не подан сигнал K10 (пока не отключена батарея)*/

{

if(u_tmp!=read_adc(0) || i_tmp!=read_adc(1)) /*если полученные данные с АЦП отличаются от предыдущих*/

{

lcd_clear(); //очищаем дисплей

}

/*запоминаем вновь полученные данные по напряжению и току*/

u_tmp=read_adc(0);

i_tmp=read_adc(1);

/*устанавливаем курсор дисплея в верхнюю левую позицию*/

lcd_gotoxy(0,0);

/*указываем нормальное состояние разряда*/

lcd_putsf('NORMA');

lcd_gotoxy(0,1); //переводим строку

/*вывод значения напряжения*/

lcd_putsf(' U = ');

Uin=read_adc(0)*Ref/ADCel;/*переводим код с АЦП во входное напряжение*/

Uin=Uin*13.384;/*умножаем на масштабный коэффициент*/

/*переводим значение Uin в char и записываем в переменную buff*/

itoa(Uin,buff);

lcd_puts(buff);//выводим значение переменной buff

lcd_putsf(',');

ost=Uin*100-(int)Uin*100;//запоминаем числа после запятой

itoa(ost,buff);

lcd_puts(buff);// выводим значение переменной buff

/*вывод значения тока аналогичен*/

Iin=read_adc(1)*Ref/ADCel;

lcd_putsf(' I = ');

itoa(Iin*40,buff);

lcd_puts(buff);

/*зажигаем светодиод «Разряда батареи»*/

PORTE.1=1;

/*тушим светодиод «Батарея отключена»*/

PORTE.2=0;

if(read_adc(0)<=203) /*если напряжение меньше допустимого, подаем сигнал K10 (подаем напряжение на реле и отключаем батарею)*/

{

PORTE.0=1;

}

}

else if(PIND.2==0) /*если реле отключено, т.е. батарея отключена от цепи*/

{

if(u_tmp!=read_adc(0) || i_tmp!=read_adc(1)) /*если полученные данные с АЦП отличаются от предыдущих*/

{

lcd_clear(); //очищаем дисплей

}

/*запоминаем вновь полученные данные по напряжению и току*/

u_tmp=read_adc(0);

i_tmp=read_adc(1);

/*устанавливаем курсор дисплея в верхнюю левую позицию*/

lcd_gotoxy(0,0);

/*указываем аварийное состояние разряда*/

lcd_putsf('ALARM');

lcd_gotoxy(0,1); //переводим курсор на нижнюю строку

lcd_putsf(' U = ');

Uin=read_adc(0)*Ref/ADCel; /*переводим код с АЦП во входное напряжение*/

Uin=Uin*13.384; /*умножаем на масштабный коэффициент*/

/*переводим значение Uin в char и записываем в переменную buff*/

itoa(Uin,buff);

lcd_puts(buff); //выводим значение переменной buff

lcd_putsf(',');

ost=Uin*100-(int)Uin*100; //запоминаем числа после запятой

itoa(ost,buff);

lcd_puts(buff); // выводим значение переменной buff

/*вывод значения тока аналогичен*/

Iin=read_adc(1)*Ref/ADCel;;

lcd_putsf(' I = ');

itoa(Iin*40,buff);

lcd_puts(buff);

/*тушим светодиод «Разряда батареи»*/

PORTE.1=0;

/*зажигаем светодиод «Батарея отключена»*/

PORTE.2=1;

if(read_adc(0)>203) /*если напряжение стало больше минимального допустимого, перестаем подавать напряжение на реле и подключаем батарею*/

{

PORTE.0=0;

}

/*делаем так, чтобы светодиод «Батарея отключена» мигал*/

delay_ms(15);

PORTE.2=0;

delay_ms(15);

}

};

}

Драйвер хоста

Файл driver.c:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <usb.h>

#include 'opendevice.h'

#include '../firmware/requests.h'

#include '../firmware/usbconfig.h' /* имена и VID/PID устройства для определения */

static void usage(char *name)

{

fprintf(stderr, 'usage:n');

fprintf(stderr, ' %s статус ... запрос текущего состояния светодиодаn', name);

#if ENABLE_TEST

fprintf(stderr, ' %s тест ..... запуск драйвера, повторное тестированиеn', name);

#endif /* ENABLE_TEST */

}

int main(int argc, char **argv)

{

usb_dev_handle *handle = NULL;

const unsigned char rawVid[2] = {USB_CFG_VENDOR_ID}, rawPid[2] = {USB_CFG_DEVICE_ID};

char vendor[] = {USB_CFG_VENDOR_NAME, 0}, product[] = {USB_CFG_DEVICE_NAME, 0};

char buffer[4];

int cnt, vid, pid;

usb_init();

if(argc < 2) /* нам нужен как минимум один аргумент */

{

usage(argv[0]);

exit(1);

}

/* вычисляем VID/PID из usbconfig.h */

vid = rawVid[1] * 256 + rawVid[0];

pid = rawPid[1] * 256 + rawPid[0];

/* Следующая функция реализована в opendevice.c: */ if(usbOpenDevice(&handle, vid, vendor, pid, product, NULL, NULL, NULL) != 0)

{

fprintf(stderr, 'Could not find USB device '%s' with vid=0x%x pid=0x%xn', product, vid, pid);

exit(1);

}

#if 0

int retries = 1, usbConfiguration = 1, usbInterface = 0;

if(usb_set_configuration(handle, usbConfiguration) && showWarnings){

fprintf(stderr, 'Внимание: не возможно установить конфигурацию: %sn', usb_strerror());

}

while((len = usb_claim_interface(handle, usbInterface)) != 0 && retries-- > 0){

#ifdef LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP

if(usb_detach_kernel_driver_np(handle, 0) < 0 && showWarnings){

fprintf(stderr, 'Warning: could not detach kernel driver: %sn', usb_strerror());

}

#endif

}

#endif

if(strcasecmp(argv[1], 'status') == 0)

{

cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, CUSTOM_RQ_GET_STATUS, 0, 0, buffer, sizeof(buffer), 5000);

if(cnt < 1)

{

if(cnt < 0)

{

fprintf(stderr, 'USB error: %sn', usb_strerror());

}

else

{

fprintf(stderr, 'only %d bytes received.n', cnt);

}

}

else

{

printf('Питание от Сети %sn', buffer[0] ? 'да' : 'нет');

printf('Напряжение: %sn', buffer[1]);

printf('Ток: %sn', buffer[2]);

printf('Аварийное питание отключено: %sn', buffer[3] ? 'да' : 'нет');

}

}

#if ENABLE_TEST

else if(strcasecmp(argv[1], 'test') == 0)

{

int i;

srandomdev();

for(i = 0; i < 50000; i++)

{

int value = random() & 0xffff, index = random() & 0xffff;

int rxValue, rxIndex;

if((i+1) % 100 == 0)

{

fprintf(stderr, 'r%05d', i+1);

fflush(stderr);

}

cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, CUSTOM_RQ_ECHO, value, index, buffer, sizeof(buffer), 5000);

if(cnt < 0)

{

fprintf(stderr, 'nUSB error in iteration %d: %sn', i, usb_strerror());

break;

}

else if(cnt != 4)

{

fprintf(stderr, 'nerror in iteration %d: %d bytes received instead of 4n', i, cnt);

break;

}

rxValue = ((int)buffer[0] & 0xff) | (((int)buffer[1] & 0xff) << 8);

rxIndex = ((int)buffer[2] & 0xff) | (((int)buffer[3] & 0xff) << 8);

if(rxValue != value || rxIndex != index)

{

fprintf(stderr, 'ndata error in iteration %d:n', i);

fprintf(stderr, 'rxValue = 0x%04x value = 0x%04xn', rxValue, value);

fprintf(stderr, 'rxIndex = 0x%04x index = 0x%04xn', rxIndex, index);

}

}

fprintf(stderr, 'nTest completed.n');

#endif /* ENABLE_TEST */

else

{

usage(argv[0]);

exit(1);

}

usb_close(handle);

return 0;

}

Файл opendevice.c:

#include <stdio.h>

#include 'opendevice.h'

/* ------------------------------------------------------------------------- */

#define MATCH_SUCCESS 1

#define MATCH_FAILED 0

#define MATCH_ABORT -1

/* частный интерфейс (private interface): проверка на соответсвие text and p, возврат MATCH_SUCCESS, MATCH_FAILED или MATCH_ABORT. */

static int _shellStyleMatch(char *text, char *p)

{

int last, matched, reverse;

for(; *p; text++, p++){

if(*text == 0 && *p != '*')

return MATCH_ABORT;

switch(*p){

case '\':

/* Буквенное (literal) соответствие со следующим символом. */

p++;

/* FALLTHROUGH */

default:

if(*text != *p)

return MATCH_FAILED;

continue;

case '?':

/* Соответсвие с любым символом. */

continue;

case '*':

while(*++p == '*')

/* Следующие друг за другом звездочки срабатывают как одна */

continue;

if(*p == 0)

/* Последняя звездочка совпадает с любым набором символов*/

return MATCH_SUCCESS;

while(*text)

if((matched = _shellStyleMatch(text++, p)) != MATCH_FAILED)

return matched;

return MATCH_ABORT;

case '[':

reverse = p[1] == '^';

if(reverse) /* Инвертированный класс символа*/

p++;

matched = MATCH_FAILED;

if(p[1] == ']' || p[1] == '-')

if(*++p == *text)

matched = MATCH_SUCCESS;

for(last = *p; *++p && *p != ']'; last = *p)

if (*p == '-' && p[1] != ']' ? *text <= *++p && *text >= last : *text == *p)

matched = MATCH_SUCCESS;

if(matched == reverse)

return MATCH_FAILED;

continue;

}

}

return *text == 0;

}

/* Публичный интерфейс (public interface) для совпадения в стиле шелла (shell): возврат 0 если нет совпадения, 1 если совпадение */

static int shellStyleMatch(char *text, char *pattern)

{

if(pattern == NULL) /* маска NULL является синонимом звездочки '*' */

return 1;

return _shellStyleMatch(text, pattern) == MATCH_SUCCESS;

}

/* ------------------------------------------------------------------------- */

int usbGetStringAscii(usb_dev_handle *dev, int index, char *buf, int buflen)

{

char buffer[256];

int rval, i;

if((rval = usb_get_string_simple(dev, index, buf, buflen)) >= 0)

return rval;

if((rval = usb_control_msg(dev, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) + index, 0x0409, buffer, sizeof(buffer), 5000)) < 0)

return rval;

if(buffer[1] != USB_DT_STRING){

*buf = 0;

return 0;

}

if((unsigned char)buffer[0] < rval)

rval = (unsigned char)buffer[0];

rval /= 2;

for(i=1;i<rval;i++){

if(i > buflen) /*если переполнен буфер назначения */

break;

buf[i-1] = buffer[2 * i];

if(buffer[2 * i + 1] != 0)

buf[i-1] = '?';

}

buf[i-1] = 0;

return i-1;

}

/* ------------------------------------------------------------------------- */

int usbOpenDevice(usb_dev_handle **device, int vendorID, char *vendorNamePattern, int productID, char *productNamePattern, char *serialNamePattern, FILE *printMatchingDevicesFp, FILE *warningsFp)

{

struct usb_bus *bus;

struct usb_device *dev;

usb_dev_handle *handle = NULL;

int errorCode = USBOPEN_ERR_NOTFOUND;

usb_find_busses();

usb_find_devices();

for(bus = usb_get_busses(); bus; bus = bus->next)

{

for(dev = bus->devices; dev; dev = dev->next)

{ /* последовательный опрос всех устройств на всех шинах */

if((vendorID == 0 || dev->descriptor.idVendor == vendorID)

&& (productID == 0 || dev->descriptor.idProduct == productID))

{

char vendor[256], product[256], serial[256];

int len;

handle = usb_open(dev); /* Нам нужно открыть устройство в соответсвии строкам запроса */

if(!handle)

{

errorCode = USBOPEN_ERR_ACCESS;

if(warningsFp != NULL)

fprintf(warningsFp, 'Warning: cannot open VID=0x%04x PID=0x%04x: %sn', dev->descriptor.idVendor, dev->descriptor.idProduct, usb_strerror());

continue;

}

/* теперь проверяем имена на совпадение: */

len = vendor[0] = 0;

if(dev->descriptor.iManufacturer > 0){

len = usbGetStringAscii(handle, dev->descriptor.iManufacturer, vendor, sizeof(vendor));

}

if(len < 0){

errorCode = USBOPEN_ERR_ACCESS;

if(warningsFp != NULL)

fprintf(warningsFp, 'Предупреждение: изготовитель не установлен VID=0x%04x PID=0x%04x: %sn', dev->descriptor.idVendor, dev->descriptor.idProduct, usb_strerror());

}else{

errorCode = USBOPEN_ERR_NOTFOUND;

if(shellStyleMatch(vendor, vendorNamePattern)){

len = product[0] = 0;

if(dev->descriptor.iProduct > 0){

len = usbGetStringAscii(handle, dev->descriptor.iProduct, product, sizeof(product));

}

if(len < 0){

errorCode = USBOPEN_ERR_ACCESS;

if(warningsFp != NULL)

fprintf(warningsFp, ' Предупреждение: изготовитель не установлен VID=0x%04x PID=0x%04x: %sn', dev->descriptor.idVendor, dev->descriptor.idProduct, usb_strerror());

}else{

errorCode = USBOPEN_ERR_NOTFOUND;

if(shellStyleMatch(product, productNamePattern)){

len = serial[0] = 0;

if(dev->descriptor.iSerialNumber > 0){

len = usbGetStringAscii(handle, dev->descriptor.iSerialNumber, serial, sizeof(serial));

}

if(len < 0){

errorCode = USBOPEN_ERR_ACCESS;

if(warningsFp != NULL)

fprintf(warningsFp, ' Предупреждение: серийный № не установлен VID=0x%04x PID=0x%04x: %sn', dev->descriptor.idVendor, dev->descriptor.idProduct, usb_strerror());

}

if(shellStyleMatch(serial, serialNamePattern)){

if(printMatchingDevicesFp != NULL){

if(serial[0] == 0){

fprintf(printMatchingDevicesFp, 'VID=0x%04x PID=0x%04x vendor='%s' product='%s'n', dev->descriptor.idVendor, dev->descriptor.idProduct, vendor, product);

}else{

fprintf(printMatchingDevicesFp, 'VID=0x%04x PID=0x%04x vendor='%s' product='%s' serial='%s'n', dev->descriptor.idVendor, dev->descriptor.idProduct, vendor, product, serial);

}

}else{

break;

}

}

}

}

}

}

usb_close(handle);

handle = NULL;

}

}

if(handle) /*если устройство найдено*/

break;

}

if(handle != NULL){

errorCode = 0;

*device = handle;

}

if(printMatchingDevicesFp != NULL) /* не возвращать ошибку только для листинга */

errorCode = 0;

return errorCode;

}

/* ------------------------------------------------------------------------- */

Приложение Б

Рисунок Б.1 - Схема жизненного цикла системы контроля параметров линейных батарей узлов коммутации

Рисунок Б.2 - График жизненного цикла программного продукта

Таблица Б.1 - Оценка шансов и рисков проектируемого продукта

Показатели

Балы

Опасность

Нейтрально

Шансы

Итог.

бал.

1

2

3

4

5

6

7

8

9

1. Объем рынка

+

8

2. Рост рынка

+

9

3. Финансовый потенциал

+

8

4. Число конкурентов

+

6

5. Поведение конкурентов

+

5

6. Возможность повышения цен

+

4

7. Изменение конъюнктуры рынка

+

9

8. Потенциал сервиса

+

8

9. Осведомленность потребителя

+

8

Таблица Б.2 - Каталог функций ПП.

Наименование (содержание) функции

Объем функций, тыс УМК

Организация ввода/вывода информации в интерактивном режиме

0,775

Монитор ПС ВТ (управление работой компонентов)

1,555

Монитор системы (управление работой комплекса ПС ВТ)

4,55

Управление внешними устройствами и объектами

3,25

ИТОГО

10,13

Таблица Б.3 - Значение коэффициентов удельных весов трудоемкости стадии в общей трудоемкости разработки ПП

Код стадии

Степень новизны

В

ТЗ

0,09

ЭП

0,07

ТП

0,07

РП

0,61

ВН

0,16

Всего

1,0

Таблица Б.4 - Степень охвата реализуемых функций ПС ВТ типовых программ на каждой стадии разработки

Код стадии

Степень охвата реализ. Функций

Кт

ТЗ

0,9

ЭП

0,7

ТП

0,7

РП

0,8

ВН

0,9

Таблица Б.5 - Исходные данные для расчета часа машинного времени

Основные показатели

Усл. обоз

Ед. изм

Значение

Стоимость основного комплекта оборудования

C

грн.

2500

Потребляемая мощность

W

кВт/час

0,4

Коэффициент использования по мощности

Ки

0,7

Цена 1кВт/час энергии

Цэ

Грн.

0,24

Номинальный фонд времени работы ЭВМ

Fном

Час

2004

Потери на ремонт и профилактику

Тпот

%

5

Коэффициент годовых затрат на ремонт

Кр

%

5

Коэффициент сменности

Ксм

1

Норма амортизационных отчислений на оборудование

Ноб

%

60

Норма амортизационных отчислений на здания

Нзд

%

8

Балансовая стоимость 1 кв.м.

Сбал

грн.

180

Общая производственная площадь

S

Кв. М

20

Отчисления на социальные мероприятия

Кн

%

37

Коэффициент накладных расходов

Кнр

%

60

Оклад оператора или инженера

Ок

грн.

2000

Коэффициент материальных затрат

Кмз

%

5

Приложение В

Расчет годовых эксплуатационных затрат

Материальные затраты (Зм), определяются по формуле:

(ден.ед.) (В.1)

(грн.)

Затраты на электроэнергию (Зэ), определяются по формуле:

, (ден.ед.) (В.2)

(грн.)

Расходы на оплату труда (ФОТ), определяются по формуле:

, (ден.ед.) (В.3)

, (грн.)

Отчисления от заработной платы (Отч), определяются по формуле:

, (ден.ед.) (В.4)

, (грн.)

Затраты на ремонт (Зр):

, (ден.ед.) (В.5)

, (грн.)

Накладные расходы (Зн),определяются по формуле:

, (ден.ед.) (В.6)

, (грн.)

Амортизационные отчисления

а) на здания (), определяются по формуле:

, (ден.ед.) (В.7)

(грн.)

б) на оборудование (),определяются по формуле:

, (ден.ед.) (В.8)

(грн.)

Тобщ = Тр * Ксл; (чел-дни) (В.9)

В свою очередь коэффициент сложности ПС ВТ (Ксл) рассчитывается следующим образом:

, (В.10)

где Кi - коэффициент, учитывающий уровень повышения сложности по дополнительным характеристикам ПС ВТ. В данном случае Ki =0,08 (функционирование ПС ВТ в расширенной операционной среде);

N - количество дополнительных характеристик ПС ВТ.

Отсюда вычисляем коэффициент сложности Ксл = 1+0,08 =1,08. Группа сложности - 3. Тогда общая трудоемкость составляет:

Toбщ =44,5*1,08= 48,06 [чел-дней].

Трудоемкость каждой стадии разработки ПС ВТ (Тi) определяют по формулам :

Т1 = Lтз * Кн * Тобщ - трудоемкость стадии ТЗ; (В.11)

Т2 = Lэп * Кн * Тобщ - трудоемкость стадии ЭП; (В.12)

ref.by 2006—2025
contextus@mail.ru