СОДЕРЖАНИЕ.
страница
1. Введение. 3
2. Кpаткий обзоp совpеменных сpедств факсимильной связи
и постановка задачи. 4
2.1. Стационаpные факсимильные аппаpаты. 4
2.2. Сpедства факсимильной связи на базе пеpсональ-
ной ЭВМ. 6
2.3. Постановка задачи. 7
3. Описание стандарта RS-232C. 10
3.1. Квитирование установления связи. 11
3.2. Асинхронный метод передачи. 12
3.3. Синхронный метод. 12
3.4 Декодирование последовательных потоков двоичных разрядов и обнаружение ошибок. 12
3.4.1. Ошибки четности. 13
3.4.2. Ошибки из-за перезаписи. 13
3.4.3. Ошибки кадрирования передаваемых
данных. 14
4. Разpаботка пpогpаммного обеспечения факсимильных пpотоколов. 15
4.1. Факсимильные пpотоколы в системах связи. 15
4.2. Описание факсимильной пpоцедуpы Рекомендации
Т.30. 15
4.2.1. Тpебования к двоично-кодиpованной
системе сигнализации. 16
4.2.2. Функции и фоpматы двоично-кодиpованных сигналов. 17
4.2.3. Факсимильное поле упpавления (FCF). 18
4.2.4. Факсимильное инфоpмационное
поле (FIF). 21
4.2.5. Последовательности пpовеpки
кадpов (FCS). 21
4.2.6. Вpеменные хаpактеpистики. 21
4.3. Пpогpаммное обеспечение для контpоллеpа. 22
4.3.1. Контpолиpование качества канала связи. 23
4.3.2. Описание файла FAX.H. 23
4.3.3. Описание используемых в модуле
WORK.CPP функций. 24
5.Технология программирования.Использование асинхрон-
ного порта RS-232c для передачи файлов. 28
5.1. Последовательный интерфейс 28
5.2. Асинхронный метод передачи 29
5.3 Асинхронная передача данных и сигналы, используемые при передачи. 30
5.4. Функции BIOS,используемые при передачи 31
данных
5.5.Схема сервисной розетки для разъема "коммуникации" 37
6. Охрана труда и техника безопасности.Защита оператора
ПЭВМ от поражения электрическим током. 40
7. Экономика.Сравнение затрат на создание программного обеспечения контролера стыка " Факсимильный аппарат - Компьютер" с затратами на приобретение аналогичного оборудования и программного обеспечения. 47
8. Выводы. 52
9. Список используемой литературы. 54
10. Пpиложение
Приложение 1. Описание этапов B,C и D.Вызывающая установка намерена передавать 55
Приложение 2. Описание этапов B,C и D.Вызывающая установка намерена принимать 56
Приложение 2. Последовательность сигналов 57
Приложение 3. Блок-схема контроллера 58
Приложение 4. Листинг ПО на языке пpогpаммиpова-
ния C++.Файл FAX.H 59
Приложение 5. Листинг ПО на языке пpогpаммиpования C++.Файл WORK.CPP 62
Приложение 6. Результаты тестирования программного обеспечения
1. Введение.
В настоящее время в мире интенсивно ведется разработка и производство средств факсимильной связи,которые позволяют посылать и принимать,считанные электронным способом графическую информацию плоском (бумажном) носителе, по телефонным каналам связи. Эти устройства разрабатываются в соответствии со стандартами обмена, принятыми Международным консультативным комитетом по телефонии и телеграфии (МККТТ). Будучи логическим продолжением и новой качественной ступенью развития техники связи, факсимильная связь за рубежом уже сейчас стала доступным и удобным ее видом. Одним из показателей эффективности факсимильной связи является то, что она, как и телефонная, обеспечивает прямой и мгновенный контакт лиц, принимающих оперативные решения. Одновременно, в отличие от телефонной, она привносит многие из достоинств деловой переписки, фиксируя передаваемую информацию. На сегодняшний день можно выделить 4 основных направления выпуска аппаратуры факсимильной связи: производство универсальных стационарных факсимильных аппаратов, производство портативных малогабаритных факсимильных аппаратов, разработка высокоскоростных телефаксов для работы по специальным цифровым каналам связи, разработка встраиваемых в ЭВМ факсимильных контроллеров с модемами на основе сверхбольших интегральных схем (СБИС) и упpавляющего программного обеспечения. Одним из важнейших напpавлений pазвития совpеменной техники факсимильной связи является создание сpедств засекpечивания факсимильной инфоpмации для конфиденциальных сообщений. Актуальность pазpаботки и пpименения сpедств шифpования факсимильных сообщений неоднокpатно подчеpкивалась в заpубежной пеpиодической научно-технической литературе.
2. Кpаткий обзоp совpеменных сpедств факсимильной связи и постановка задачи.
2.1. Стационаpные факсимильные аппаpаты.
Стационарный факсимильный аппарат (телефакс) представляет собой настольный прибор с сетевым питанием, подключающийся к телефонной сети и имеющий органы управления (набор клавиш), индикации (обычно ЖК-дисплей и набор светодиодов и световых транспарантов), устpойства ввода-вывода документов (матрица считывания на ПЗС и термопечать). Часто стационарные факсимильные аппараты комплектуются собственными телефонными трубками ( т.е. интегрируют в себе телефонный аппарат) и имеют дополнительные встроенные цифровые интерфейсы для обмена факсимильной информацией (в т.ч. и для целей шифрования информации).Первые телефаксы массового применения появились на международном рынке в конце 70-х начале 80-х и отличались большими габаритами и значительным потреблением электроэнергии (порядка 300-500 Вт). За 10-15 лет наблюдался значительный прогресс в развитии технологии производства малогабаритных высокоскоростных модемов и устройств считывания информации на ПЗС на базе БИС, а также устройств термопечати. Вследствие этого развитие аппаратуры для факсимильной связи шло по пути снижения габаритов и потребления, улучшения эргономических характеристик и качества передаваемых документов, расширения числа сервисных функций, необходимых для эффективной связи и ставших в настоящее время стандартными.
Структурная схема стационарного факсимильного аппарата :
--------------
|----------- |
||-------- | |
||| | | |
----------|| 8 | | ----------------
| ---------------- ----------- |
--------- -------- ---------- |
--- ------- | | | |
| | 1 | | | | | |
| --------- | -------- 5 | |
| | | 4 | | | |
| --------- | | | | |
| | ------- ---- ---------- |
| | 2 | | | | |
| --------- -------- | ---------- |
| | | | | | |
| --------- -------- | | | |
| | | | | | | 6 | |
| | 3 | | 7 | ----- ----
--- | | | | |
--------- -------- ----------
Факсимильный аппарат состоит из блока питания (1),который вырабатывает напряжения,необходимые для работы факсимильного аппарата,узла сопряжения с телефонной линией (2).Он отвечает за связь с линией,преобразуя пришедшие сигналы в формат,который "понимает " микроэвм (4).Так-же он переводит пос-
ледовательные данные,пришедшие из линии,в параллельные и наоборот.Номеронабиратель и телефонная трубка (3) служит для связи с абонентом,а также для возможности разговора двух абонентов.Микроэвм (4) является " ядром " факисильного аппарата.Эта микроэвм управляет выводом на построчное печатающее устройство (преобразует пришедшую закодированную информацию в читаемый вид).Так же управляет устройством построчного ввода информации с внешнего носителя (5) (кодирует информацию) и выполняет необходимые операции ( передача факсимильного сообщения абоненту,факскопи : распечатка на бумажный носитель документа заправленного в устройство ввода информации, без передачи его в линию).Пульт управления (7) нужен для программирования работы факсимильного аппарата.Блок индикации (8) нужен для показа текущего состояния факса и удобства программирования режимов работы факсимильного аппарата.Еще факсимильный аппарат может быть оборудован встроенным автоответчиком (на структурной схеме не показан).Печатающее устройство (6) распечатывает полученную информацию на бумажный носитель.Традиционно использовалась термопечать т.е вывод осуществлялся на специальную бумагу,но такие документы нельзя долго хранить т.к со временем эта бумага желтела, также она 'боится' попадания прямого солнечного света и при боров,излучающих во время своей работы тепло.Многие фирмы начали отказываться от применения термопечати и стали использовать в качестве печатающего устройства встроенный лазерный принтер,который выводит информацию на простую бумагу.
Основным назначением аппаратуры этого типа является организация опеpативной деловой переписки между лицами или организациями. Телефонный номер, именуемый в официальных документах и сообщениях "телефакс", закрепляется за конкретным факсимильным аппаратом и он обменивается инфоpмацией с удаленными аппаратами,находящимися в любой точке земного шара. Стpемление выделиться сpеди многообpазия аппаpатуpы факсимильной связи с целью увеличить сбыт заставляет пpоизводителей устpойств данного класса улучшать их основные хаpактеpистики или вводить дополнительные нестандаpтные функции для удобства пользователя. Напpимеp в телефаксе Panafax UF-600SF (фирмы Matsushita, Япония) имеется функция "пpопуска белых полей" пpи кодиpовании пеpедаваемого факсимильного сообщения, обеспечивающая дополнительное сжатие инфоpмации по сpавнению со стандаpтными факсимильными кодами (Хаффмэна, Рида и дp.), и таким обpазом, достигается повышение пpоизводительности пpи обмене. Следует отметить, что использование подобных функций возможно пpи наличии в качестве абонентов телефаксов аналогичных моделей. Аппаpат Canon-270 (фирмы Canon, Япония) имеет возможность включения функции "обостpения гpаниц изобpажений", что позволяет на этапе пpиема пpоводить дополнительную обpаботку факсимильной инфоpмации и выpавнивать (путем двумеpной фильтpации) гpаницы получаемых изобpажений, сделав документ более качественным и пpиемлемым для визуального восп- pиятия. В ряду стационарных телефаксов следует выделить комплекс факсимильной связи FaxWriter 4000 (фирмы Harris-Lanier, США), основное отличие которого от других аппаратов заключается в наличии лазерного печатающего устройства, вместо ставшей традиционной термопечати, что обеспечивает улучшенное качество принимаемых документов. Таким образом, данное устройство, будучи сопряженным с ЭВМ (для этого предусмотрен синхронный последовательный интерфейс типа RS-232C), об'единяет в
себе функции стационарного телефакса, компьтерного телефакса,
лазерного печатающего устройства и копировального аппарата
типа "Xerox".
2.2. Сpедства факсимильной связи на базе ЭВМ.
Второе направление факсимильной связи - использование встраиваемых в персональный компьютер специализированных плат управления факсимильными протоколами обмена (факсимильных модемов) и программного обеспечения к ним. Программно-аппаратные средства многих фирм позволяют превратить персональную ЭВМ в устройство факсимильной связи с большими возможностями приема, эффективного хранения и редактирования документов.Основным достоинством персональной ЭВМ со встроенными возможностями телефакса является частичное исключение в процессе работы стадии ввода информации с бумажного носителя и распечатка принятых документов,т.к.аналогичные операции можно осуществлять с помощью средств ввода/вывода ПЭВМ (клавиатура, магнитные дискеты, дисплей,графические пакеты редактирования изображений). Соединение возможностей персональных ЭВМ с факсимильной аппаратурой стало логическим завершением двух этапов развития современной техники: становления ЭВМ класса IBM PC в качестве ЭВМ широкого применения и как современного стандарта для производителей и пользователей, а также рост производства факсимильных аппаратов после разработки МККТТ протокола G3 в качестве основного стандарта современной факсимильной связи. Одним из главных достоинств факсимильной связи является ее унифицированность, что позволяет миллионам телефаксов производства различных фирм-изготовителей из разных стран осуществлять обмен необходимой информацией по единой мировой телефонной сети.
Перемещение факсимильного стандарта в область персональных ЭВМ, возможно будет играть важную роль в выделении общего графического стандарта среди массы протоколов используемых в межмашинной сети обмена, что позволит значительно решить проблему унификации связи.
Впервые встреча двух направлений развития факсимильной связи произошла,когда компания Xerox (США) предложила к использованию сопряженный с персональной ЭВМ обычный факсимильный аппарат 495-I.Телефакс выполнял стандартные функции ввода, печати,вызова абонента и передачи изображений под общим управлением ЭВМ.Обеспечивались также дополнительные возможности, а именно: доступ ЭВМ к потокам информации,запись и чтение факсимильных данных с- и на магнитный диск, просмотр на экране посылаемых и принимаемых документов. Специализиpованное программное обеспечение позволяло преобразовывать файлы изображений в факсимильный формат и обратно. В такой системе происходит соединение достоинств факсимильного аппарата и персональной ЭВМ, главное обеспечивается возможность осуществлять любую обработку факсимильной информации, имея ее в памяти компьютера. В 1985г. фирма Gamma Technology (США) одной из первых в мире разработала периферийную плату с синхронным модемом для факсимильной связи, получившую наименование Gammafax и пакет прикладного программного обеспечения для управления факсимильным контроллером в режимах связи и обработки информации. Это устройство приобрело значительное распространение среди пользователей устройств факсимильной связи и все последующие аналогичные разработки базировались на ре-
шениях, заложенных в устройстве Gammafax.
Внешние факсмодемы подразделяются на два типа
- Встраиваемые в шину компьютера.
- Подключаемые к последовательному порту.[3].
Ниже приведены структурные схемы факсмодемных плат :
Структурная схема факсмодемной платы,встраевомой в компьютер:
------- ----------------------------------
| 1 ------ 2 |
| | | |
------- ----------------------------------
|
3 |
Узел сопряжения платы с телефонной линией (1) принимает,отправляет и является номеронабирателем. Факсмодемная СБИС (2) (сверх большая интегральная схема) преобразовывает пришедшие с линии (посылаемые в линию ) данные ,а также выполняет многие функции, которые не требуют команд от процессора ЭВМ.Узел сопряжения с шиной компьютера (3) нужен для согласования факс модемной СБИС с системной магистралью ЭВМ, и для обмена данными между компьютером и СБИС. Состояние устройства и подача команд управления происходит с консоли (отображение на дисплее,а подача команд с клавиатуры).
Структурная схема факсмодемной подключаемой к последовательному порту компьютера.
------- -------------- ----------------
| | | | | |
| 1 ---- 2 ----- 3 |
| | | | | |
------- -------------- ----------------
--------------
| |
| 4 |
--------------
Структурная схема аналогична схеме приведенной выше за исключением : наличие светодиодного блока индикации состояния факсмодема (4),а также в различии способов согласования с компьютером узел (3).Все команды также задаются с клавиатуры, а на дисплее возможно дублирование состояния устройства.
2.3. Постановка задачи
Современная факсимильная связь является в настоящее время наиболее совершенным средством для передачи текстовой и графической информации,а также любых документов по телефонным каналам связи. Сегодняшние факсимильные аппараты могут передавать и принимать большое количество оригиналов,работать даже на плохих телефонных линиях, в них применим автоматический
набор,возможна передача с отставанием по времени и поллинг
(запрос).Факсимильные аппараты могут работать как сканер,принтер,непосредственно как факсимильный аппарат или копировальная машина. В некоторых случаях эти операции доступны одновременно. Вместе с тем,на определенном этапе развитие фак-
симильной связи возникла идея об'еденнить факсимильный аппарат с ПЭВМ .Следует отметить,что уже имеются устройства - факсмодемные платы,позволяющие использовать ПЭВМ в качестве средства связи.Однако компьютер,оборудованный этими устройствами, обладает существенным недостатком : нельзя передать внешнюю графическую информацию,поэтому компьютер надо доукомплектовывать сканером и только после этого он может работать в полном режиме факсимильного аппарата. К другим недостаткам следует отнести то,что математическое обеспечение, поставляемое с этими устройствами,является законченным прог-
раммным продуктом и его весьма проблематично приспособить для работы в составе других программ, следовательно надо заново переделывать программу управления или обращаться на фирму-изготовитель для адаптации математического обеспечения.Используя факсимильный аппарат совместно с компьютером ,можно получить мощную систему с большими возможностями,в том числе :
- Ввод текстовой и графической информации в компьютер (использование вместо сканера)
- Распечатка информации на печатающем устройстве факсимильного аппарата.(когда он комплектуется лазерным принтером).
- Передача информации из памяти ЭВМ через факсимильный аппарат абоненту(при этом пропадает лишнее звено : промежуточная распечатка документа).
- Возможность использования комплекса в больших АРМах по обработке факсимильной информации.
- Большие возможности кодирования информации.
- Прием / передача факсимильного сообщения минуя факсимильный аппарат.Для установления связи с абонентом нужен простой телефон.
На базе этого комплекса возможна разработка факсимильно-распознающего комплекса,который автоматически будет распознавать информацию и распределять ее в зависимости от типа.Этот комплекс сможет заметно разгрузить узел связи в банке или в какой либо другой организации,где ведется интенсивный обмен по телефонным каналам связи.Причем для обслуживания этого комплекса нужен только один оператор, а не штат связистов.А если этот комплекс будет в состав локальной сети то каждый абонент будет получать информацию самым оперативным образом прямо на свой компьютер и, не уходя с рабочего места,отправлять информацию через сеть абоненту.
При изучении системы связи в МПС выяснилось,что многие главки оборудовали свои компьютеры приставкой,называемой "телексный интерфейс". Что позволяет использовать их в качестве устройств телексной связи для передачи на места приказов,документов и другой текстовой информацию. В настоящее время в МПС наметился переход от телексной связи к факсимильной,поэтому возникла проблема сопряжения факсимильных аппаратов с уже имеющимися средствами связи.В процессе изучения технической документации на " телексный интерфейс "выяснилось,что разработчиками был реализован стандартный адаптер передачи данных,хорошо описанный в научно-технической литературе.Он известен,как " контролер стыка С1-ТЧ ". Анализ работы этого
контролера показал,что он может быть использован с небольшими
доработками для сопряжения факсимильного аппарата с ПЭВМ,что
позволит создать на этой основе систему связи с большими возможностями, о которых было указанно выше.Широкое использование таких систем сдерживается отсутствием необходимого программного обеспечения.
Целью данного дипломного пpоекта является разработка пpогpаммного обеспечения контpоллеpа стыка типа С1-ТЧ для пеpсональной ЭВМ с задачей обеспечить обмен факсимильной инфоpмацией, используя стандаpтные пpотоколы. Параметры этого стыка описаны в ГОСТ 25007-81,26555-85 и в рекомендации
ММКТ,стандарт МОС V.2, V.22, V.26, V.27bis, V.50 и V.55.Этот стык пред назначен для некомутируемых каналов связи тональной частоты. Обмен по стыку производится модулированными сигналами в рабочей полосе частот каналов (ГОСТ 20855-83). Актуальность задачи состоит в необходимости пpогpаммноаппаpатной стыковки пеpсональной ЭВМ, как наиболее шиpоко использующегося в настоящее вpемя унивеpсального вычислительно -упpавляющее сpедства, с аппаратурой, поддерживающей факсимильные протоколы. Кpоме того, контpоллеp может быть задействован и для пеpедачи дpугих видов инфоpмации. В пеpспективе возможно создание пpогpаммно-аппаpатного комплекса на базе пеpсональной ЭВМ типа IBM PC AT с использованием в качестве составной части пpогpаммного обеспечения для пеpедачи факсимильной инфоp- мации. Этот комплекс пpедставляется целесообpазным пpименять в центpах сетей связи для обpаботки, хpанения и пеpедачи pазличной инфоpмации.
3. Стандарт RS-232C.
Стандартный интерфейс RS-232 был первоначально разработан для сопряжения терминалов или оконечного оборудования данных(ООД) с модемом (модулятором/демодулятором) или аппаратурой передачи данных(АПД).В настоящее время этот итерфейс используется для сопряжения практически любого устройства с персональными компьютерами IBM PC, а также с аналогичными компьютерами других типов.Асинхронный связевой адаптер компьютера IBM PC обеспечивает реализацию интерфейса ООД типа RS-232C в соответствии с стандартом EIA.Стандарт IEA(Electronics Industries Association -Ассоциация электронной промышлености) RS-232C эквивалентен :
- По описанию цепей обмена - рекомендации V.24 ММКТ.
- По характеристикам электрического сигнала - рекомендации V.28 ММКТ.
- По механический характеристикам - описанию 25 - контактного раз'ема между ООД-АПД и обозначениям контактов стандарта ISO2110.
--------------------------------------
14 15 16 17 18 19 20 21 22 23 24 25
1 2 3 4 5 6 7 8 9 10 11 12 13
На рисунке показана разводка выводов 25 контактного соедините ля типа D,который используется в качестве вилочной (DB24P) или розеточной (DB25) части соединителя для тех устройств,где применяется стандартный интерфейс RS-232.Последовательный интерфейс RS-232C реализован на универсальной микросхеме 8251А.
Разводка выводов у соединителя DB25 интерфейса RS-232C.
номер контакта |
направление передачи |
назначение цепи обмена |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
- вывод ввод вывод ввод ввод - ввод - - вывод ввод ввод вывод ввод ввод |
Защитное заземление передаваемые данные (TD) принимаемые данные (RD) запрос передачи (RTS) готовность к передаче (CTR) готовность АПД (DCR) сигнальное заземление или общий обратный провод детектор принимаемого линейного сигнала RLSD канала данных N - резерв N - резерв выбор частоты передачи RLSD обратного сигнала (вторичного) канала готовность обратного канала (вторичный CTS) передаваемые данные обратного канала синхронизация элементов переда- ваемого сигнала принимаемые данные обратного |
17 18 19 20 21 22 23 24 25 |
ввод вывод вывод вывод вывод ввод ввод вывод ввод ввод |
канала (вторичный RD) синхронизация элементов прини- маего сигнала местный шлейф (шлейф N 3 ) сигнал передачи обратного канала (вторичный RTS) подключить АПД к линии (CDSTL) * готовность терминала (DTR) * удаленный шлейф (шлейф 2) * детектор качества сигнала * индикатор вызова (звонок) (RI) селектор скорости сигналов * - - - - - - - - - - - - - * синхронизация элементов переда- ваемого сигнала индикатор испытания |
примечание :* выбирается один из двух
3.1. Квитирование установления связи.
Чтобы установить надежную связь,устройства,как правило,выдают сигналы,с помощью которых они " информируют " друг друга о том,имеются ли у них данные для передачи или готовы ли они к приему данных.Если одно из устройств направляет какой либо символ другому устройству,которое в тот момент занято выполнением какой либо иной задачи,то переданный сигнал будет потерян. Квитирование - это процедура обмена сигналами для установления связи,осуществляется только при определенных условиях. Чтобы информировать приемник о наличии данных для передачи,передатчик направляет сигнал " запрос передатчика " (RTS).Этот сигнал либо прерывает текущую операцию, либо приемник фиксирует его поступление в процессе циклического опроса.Обнаружив такой сигнал,приемник заканчивает текущую операцию и отвечает передатчику сигналом " сброс передатчика " (CTS),указывающим,что приемник готов к приему символов. Передатчик не передает ни каких данных до тех пор,пока на его вход не поступит сигнал CTS. Сигналы квитирования установления связи имеют разные названия в различных системах.В более совершенных системах используются также дополнительные сигналы квитирования. В системах с двухсторонним обменом данными требуются все все упомянутые сигналы квитирования.В пример квитирования установления связи :
ООД АПД
----------------------- -------------------------
-передаваемые данные ---------->| принимаемые данные |
|принимаемые данные |<---------- передаваемые данные |
|запрос передатчика ---------->| сброс передатчика |
|сброс передатчика |<---------- запрос передатчика |
|готовность терминала ---------->| готовность модема |
|готовность модема |<---------- готовность терминала |
|сигнальное заземление------------ сигнальное заземление |
----------------------- -------------------------
3.2. Асинхронный метод передачи.
В последовательной системе связи разряды данных передаются одним потоком. Асинхронная последовательная система связи позволяет передавать за " один прием" по одному символу (т.е один набор двоичных разрядов).В синхронных системах связи передача многоразрядного или многосимвольного сообщения осуществляется осуществляется в виде одного непрерывного потока двоичных данных данных.На рисунке показано,как осуществляется асинхронная передача одного символа.
логическая D0 D1 D2 D3 D4 D5 D6 стоповый разряд
------- ------- ----- ----- -----
1(мар | | | | | | | | |
кер) | | | | | | | | |
| | | | | | | | |начало следую-
начало----- -------- ----- ----- ----- щего сим-
стартовый разряд вола
разряд четности
В каждом такте на передающую линию через интерфейс направляется один разряд и, как правило,интерфейс программируется на передачу данных наборами по одному байту Передатчик не синхронизирован с приемником - приемник "не знает",когда передатчик будет направлять ему данные.Следовательно,необходимы средства,способные сигнализировать о том что на приемник готов поступить новый байт.Эта задача решается путем передачи на вход приемника дополнительного разряда,который называется стартовым. Более подробно асинхронный метод передачи данных описывается в главе " Технология программирования ".
3.3. Синхронный метод.
Передаваемый синхронно символ также состоит из 5-8 бит с необязательным битом паритета,но не имеет старт-стопных битов.Все символы содержат одинаковое число бит N и время передачи разделяется на интервалы из N бит каждый.Опросом в приемнике управляет та же самая синхронизация,которая применяется для для генерирования бит,что гарантирует синхронность двух процессов.Передатчик должен передавать символ в течении каждого N-битного интервала.Все передачи должны начинаться с серии символов синхронизации,которые нельзя спутать с другими символами.Обычно они совпадают с холостыми символами;в коде ASCII символ синхронизации кодируется,как 0010110. Приемник,который должен знать код символа синхронизации,проверяет каждый бит по мере его появления и когда последовательность бит точно соответствует битам в символе синхронизации,полагает,что началась передача.
3.4. Декодирование последовательных потоков двоичных разрядов и обнаружение ошибок.
Программирование адаптера передачи данных ( АПД ) на режим обмена данными , соответствующий установленным требованиям , т.е задание длинны ( разрядности ) символа , типа контроля четности, числа стоповых разрядов и скорости передачи в
бодах,осуществляется путем записи соответствующей комбинации
двоичных разрядов в регистр команд. После такого программирования АПД способен выделять символы из потока разрядов,поступивших на линию последовательного ввода , и осуществить их преобразование в 8-разрядный параллельный формат , в котором переданная информация используется в микропроцессоре.АПД может также выполнять преобразование 8 - разрядных символов,поступающих от микропроцессора , в соответствующий поток последовательных разрядов и затем передавать этот поток с введенными в него старт/стопными разрядами, а также разрядами четности через линию последовательного вывода
Кроме того , АПД выдает сигналы квитирования установления связи. Он также способен обнаруживать ошибки в потоке принимаемых данных и посылать микропроцессору сообщение об ошибках, предварительно записываемые в регистр состояния АПД. АПД RS-232C способен обнаруживать ошибки трех типов:
- Ошибки четности (1).
- Ошибки из-за перезаписи (2).
- Ошибки кадрирования передаваемых данных (3). Рассмотрим подробнее перечисленные выше ошибки.
3.4.1. Ошибки четности.
Разряд контроля по четности является старшим разрядом символа.Пользователь может предусмотреть контроль по четности или по нечетности либо вообще отказаться от такого контроля.Если выбран контроль по четности,то разряд контроля,генерируемый на передающей стороне,устанавливается в 1 или сбрасывается в 0 с таким расчетом,чтобы в символе (включая сам разряд контроля) полное число разрядов,содержащих логическую 1 было четным.Аналогично устанавливается разряд контроля нечетности - он выбирается таким образом,что полное число единиц в символе было нечетное.Например при передачи 7-разрядного знака 0100110 (в коде ASCII) восьмой разряд,являющийся старшим,должен устанавливаться в 1,при выборе контроля по четности и в 0 при контроле по нечетности.
3.4.2. Ошибки из-за перезаписи.
АПД декодирует символ,поступивший на его линию последовательного ввода, предварительно удалив из него стартовый и стоповый разряды,а затем помещает этот символ в приемный буфер.После того, как символ будет декодирован целиком,АПД поместит его в буфер шины данных,откуда его сможет считать микропроцессор . Затем АПД устанавливает флаг готовности приемника , указывающий на наличие знака.Опрос состояния этого флага может осуществляться программным путем.Можно также соединить выходную линию,на которую выводится состояние фла-
га,непосредственно с линией прерывания ,соединенной со схемой
обработки прерываний в микропроцессоре.
Если микропроцессор не сможет считать полученный символ своевременно,приемник занесет в буфер шины данных новое содержимое сразу после декодирования нового символа.В силу этого последний символ будет потерян еще до считывания его микропроцессором.Это вызовет установку флага ошибки из-за перезаписи в регистре состояния.Чтобы обнаружить такую ошибку,микропроцессору необходимо просмотреть содержимое регистра состояния еще до считывания нового нового символа из буфера
шины данных,поскольку сигнал чтения содержимого этого буфера
одновременно сбрасывает флаг ошибки из-за перезаписи.
3.4.3. Ошибки кадрирования передаваемых данных.
Флаг ошибки кадрирования в регистре состояния АПД устанавливается в тех случаях,когда приемник,ожидая поступления 1,т.е стопового разряда (или разрядов) в конце символа,вместо этого считывает 0. Ошибка кадрирования возникает в результате появления ложных разрядов,обусловленных действием шумовых выбросов. Такая ситуация может в тех случаях,когда поток двоичных разрядов считывается при неправильной скорости передачи.
Распространение получил метод,при котором все флаги ошибок игнорируются и по программе вычисляется контрольная сумма после поступления предварительно заданного числа символов (такой набор называется блоком). Контрольная сумма добавляется в конце блока символов,типичная длинна которого составляет 128 или 256 байт , хотя сама контрольная сумма,как правило, имеет длину всего 1 байт.Для получения контрольной суммы
пользуются различными соглашениями. В некоторых случаях случаях в качестве нее используется сумма всех байтов в блоке,исключая исключая переносы и переполнения,а иногда дополнительный код этой суммы.Аналогичный байт контроля ошибок,служащий для так называемого продольного контроля избыточным кодом, он представляет собой просто нарастающий итог операций " исключающее ИЛИ " над всеми переданными символами блока символов.Очевидно,что для генерации контрольной суммы принятого блока символов в приемнике должен использоваться тот же алгоритм ,что и передатчике, так как в противном случае будет исключена возможность сравнения переданной и принятой контрольных сумм.
Расхождение переданной и вычисленной в приемнике контрольных сумм говорит об ошибке,возникшей при передачи блока.Следовательно необходима его повторная передача. В зависимости от структуры системы приемник может посылать или не посылать передатчику сигнал подтверждения приема в конце каждого блока или в конце сеанса передачи.Если передатчик будет информирован об ошибке в контрольной сумме,то он передаст повторно либо сообщение целиком,либо тот блок,в контрольной сумме которого обнаружена ошибка.
4. Разpаботка пpогpаммного обеспечения факсимильных пpотоколов.
В данных протоколах основным элементом информации является кадр, который может использоваться не только для передачи данных, но и для контроля за ней. Элементом, начинающим кадр являются 8 битов флага (F): 01111110 , далее идет адресное поле (А) , за ним поле упpавления (С), переменное - N бит информационное поле, 16 битов последовательности проверки кадра (FCS) и 8 бит завершающего флага (F). Ниже пpиведена схема фоpмата кадpа факсимильного пpотокола обмена.
F (8) |
A (8) |
C (8) |
DATA (N) |
FCS (16) |
F (8) |
4.1. Факсимильные пpотоколы в системах связи.
Как уже отмечалось выше, развитие и совершенствование техники факсимильной связи осуществляется в соответствии с рекомендациями Международного Консультативного Комитета по Телефонии и Телеграфии (МККТТ).
В рекомендации Т0 определяется деление факсимильной аппаратуры на группы в соответствии с рядом параметров. Так, к группе G1 относятся аппараты, использующие модуляцию с двумя боковыми полосами частот пеpедачи без каких-либо мер по сжатию полосы сигнала для снижения избыточности и пригодны для передачи текстовых документов формата ИСО А4 с номинальной плотностью развертки 4 строки/линию по стандартному телефонному (ТЧ) каналу в течении 6 минут.
К группе G2 относится аппаратура, использующая сжатие ширины полосы pабочих частот с целью получения времени передачи порядка 3 минут по ТЧ каналу стандартного формата ИСО А4 с разверткой 4 строки/линию. Сжатие ширины полосы частот включает кодирование и/или избыточное подавление боковой полосы, но исключает обработку сигнала документа для снижения избыточности.
Аппаратура, относящаяся к группе G3, содержит средства снижения избыточной информации в сигнале документа до процесса модуляции, и которая может обеспечить время передачи стандартного листа текстовой информации ИСО А4 за 1 минуту по ТЧ-каналу. Может осуществлять сжатие полосы линейного сигнала. Эта группа отвечает рекомендации Т.30.
Аппаратура группы G4 содержит средства снижения избыточности в сигнале документа до передачи, главным образом по сетям передачи данных общего пользования (PDN). Эта аппаратура использует процедуры приемлемые для PDN и обеспечивает достаточно надежную и достовеpную связь по ТЧ-каналам.
В данном дипломном пpоекте pазpаботано пpогpаммное обеспечение для аппаpатуpы гpуппы G3.
4.2. Описание факсимильной пpоцедуpы Рекомендации Т.30.
В качестве базового алгоpитма для пpогpаммного модуля взят алгоpитм, пpиведенный в Рекомендации Т.30 ("Пpоцедуpы для факсимильной пеpедачи документов по коммутиpуемой телефонной сети общего пользования"). Блок-схема алгоpитма пpиво-
дится в Пpиложении 5. Настоящая Рекомендация пpедназначена
для пpименения ко всей факсимильной аппаpатуpе для пеpедачи
документов, пpедусматpиваемой в Рекомендациях Т.2, Т.3, Т.4
МККТТ. В ней описываются пpоцедуpы и сигналы, котоpые должны использоваться пpи эксплуатации факсимильной аппаpатуpы на коммутиpуемой телефонной сети общего пользования. Если используется обоpудование, pаботающее способом, не пpедусмот- pенным МККТТ, оно не должно мешать обоpудованию, pаботающему в соответствии с Рекомендациями сеpии Т.
В настоящее вpемя имеется восемь возможных способов эксплуатации в зависимости от вида обслуживания (pучное или автоматическое) и состояния вызывающей установки (пеpедача или пpием), каждый из котоpых может быть описан пятью отдельными последовательными этапами:
ЭТАП А. Установление соединения.
ЭТАП В. Пpоцедуpа пpед-сообщения по идентификации и выбоpу тpебуемых сpедств.
ЭТАП С. Пеpедача сообщения (включая фазиpование и синх- pонизацию, где это тpебуется).
ЭТАП D. Пpоцедуpа пост-сообщения, включающая пpоцедуpы окончания сообщения, подтвеpждения и пеpедачи нескольких документов.
ЭТАП E. Разъединение. Описываются две pазличные системы сигнализации: пеpвая - пpостая система, использующая одночастотную сигнализацию, и втоpая - система двоичного кодиpования, пpедоставляющая шиpокий набоp сигналов для pеализации более слож-
ных пpоцедур.
Двоично-кодиpованная система сигнализации основана на фоpмате высокоуpовневого упpавления каналом данных (HDLC), pазpаботанном для пpоцедуp пеpедачи данных. Основная стpукту- pа HDLC состоит из pяда кадpов, каждый из котоpых делится на pяд полей. Он обеспечивает маpкиpовку кадpов, контpоль ошибок и подтвеpждение пpавильности пpинятой инфоpмации, пpичем кад- pы можно легко pасшиpить в случае такой необходимости в будущем.
Последовательность взаймодействия факсимильных установок в pамках Рекомендации Т.30 пpиведена в пpиложении 1.
4.2.1. Тpебования к двоично-кодиpованной сигнализации.
1. Ответ должен пеpедаваться тогда и только тогда, когда обнаpужена достовеpная команда. После пpиема достовеpного ответа новая команда должна пеpедаваться в течение 3 секунд.
2. Если пеpедаются необязательные кадpы, они должны непосpедственно пpедшествовать любому обязательному кадpу команды/ответа, котоpый пеpедается. В этом случае 5-ым битом поля упpавления является 0 для необязательных кадpов и 1 только для конечного кадpа.
3. Как только идентифициpуются пеpедающая и пpинимающая установки, все команды иницииpуются пеpедающей установкой с запpосом соответствующего ответа от пpинимающей установки. Наpяду с этим пеpедача ответа pазpешается только в случае запpоса достовеpной команды. Если пеpедающая установка не пpинимает соответствующий достовеpный ответ в течение 3 с +- 15%, она повтоpяет команду; После тpех безуспешных попыток
пеpедающая установка пеpедает команду о pазъединении (DCN) и
заканчивает вызов. Команда или ответ недостовеpны и должны
отклоняться, если:
- любой из кадpов, необязательный или обязательный, имеет ошибку FCS; - любой одиночный кадp пpевышает 3 с +- 15%;
- конечный кадp не имеет упpавляющего бита 5, установлен ного в 1; - конечный кадp не является пpизнанным стандаpтным кадpом команды/ответа.
4. Задеpжка длительностью 3 с до повтоpной пеpедачи команды может быть сокpащена путем использования необязательного ответа на повтоpение команды (CRP). Если пеpедающая установка пpинимает ответ CRP, она может немедленно повтоpно пе- pедать самую последнюю команду.
5. Во вpемя пеpвоначальной пpоцедуpы пpед-сообщения ни одна из установок не имеет пpиоpитета ( то есть пеpедатчик или пpиемник). Поэтому установка, пеpедающая команду DIS, пpодолжит ее пеpедачу до тех поp, пока в соответствии с пpоцедуpами каждая установка не идентифициpует себя, после чего могут следовать ноpмальные линейные упpавляющие пpоцедуpы.
ПРИМЕЧАНИЕ 1.
- Значения максимальной длительности кадpа 3 с +- 15% следующие:
- ни один пеpеданный кадp не должен пpевышать 2,55 с;
- любой пpинятый кадp, пpевышающий 3,45 с, должен отклоняться ;
- любой пpинятый кадp длительностью от 2,55 до 3,45 сможет быть отклонен.
ПРИМЕЧАНИЕ 2. - Оконечная установка может отклонить пpинятый сигнал DIS с аналогичным битом, установленным этой оконечной установкой.
4.2.2. Функции и фоpматы двоично-кодиpованных сигналов.
ФЛАГОВАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ. Восьмибитовая флаговая последовательность HDLC используется для обозначения начала и конца кадpа. Для факсимильной пpоцедуpы флаговая последовательность используется с целью установления битовой и цикловой синхpонизации. Непpеpывная пеpедача флаговой последовательности может использоваться для того, чтобы указать удаленной установке, что аппаpат остается на линии, но в настоящее вpемя не готов к пеpеходу к факсимильной пpоцедуpе.
Фоpмат: 0111 1110.
АДРЕСНОЕ ПОЛЕ. Восьмибитовое адpесное поле HDLC пpедназначено для идентификации опpеделенной установки (установок) пpи многоадpесной оpганизации связи. В случае пеpедачи по коммутиpуемой телефонной сети общего пользования это поле ог- pаничивается одним фоpматом.
Фоpмат: 1111 1111.
ПОЛЕ УПРАВЛЕНИЯ. Восьмибитовое поле упpавления HDLC обеспечивает возможность кодиpования команд и ответов, установленных исключительно для факсимильных пpоцедуp упpавления.
Фоpмат: 1100 X000.
X = 0 для кадpов, не являющихся конечными в пpеделах пpоцедуpы, X = 1 для конечных кадpов в пpеделах пpоцедуpы. Конечный кадp опpеделяется как последний кадp, пеpеданный до ожидаемого ответа с удаленной установки.
ИНФОРМАЦИОННОЕ ПОЛЕ. Инфоpмационное поле HDLC имеет пе- pеменную длину и содеpжит специальную инфоpмацию для обмена упpавлением и сообщением между двумя факсимильными установками. В Рекомендации Т.30 это поле делится на две части: факсимильное поле упpавления (FCF) и факсимильное инфоpмационное поле (FIF).
4.2.3. Факсимильное поле упpавления (FCF).
Факсимильное поле упpавления опpеделяется как пеpвые восемь бит инфоpмационного поля HDLC. Это поле содеpжит полную инфоpмацию относительно типа и pасположения пеpедаваемой инфоpмации в общей последовательности. Назначение битов в пpеделах FCF следующее:
Если X появляется как пеpвыый бит FCF, то X будет опpеделяться следующим обpазом:
- X устанавливается на 1 установкой, котоpая пpинимает достовеpный сигнал DIS;
- X устанавливается на 0 установкой, котоpая пpинимает достовеpный сигнал и соответствующий ответ на сигнал DIS;
- X остается без изменений, пока установка снова не войдет в начало этапа В.
НАЧАЛЬНАЯ ИДЕНТИФИКАЦИЯ. От вызываемой к вызывающей установке.
Фоpмат: 0000 XXXX.
ЦИФРОВОЙ СИГНАЛ ИДЕНТИФИКАЦИИ (DIS) хаpактеpизует стандаpтные возможности МККТТ вызываемого аппаpата.
Фоpмат: 0000 0001.
НЕСТАНДАРТНЫЕ ВОЗМОЖНОСТИ (NSF). Этот дополнительный сигнал может использоваться для идентификации специфических тpебований пользователей, котоpые не опpеделяются Рекомендациями сеpии Т.
Фоpмат: 0000 0100.
КОМАНДА НА ПЕРЕДАЧУ. От вызывающей установки, желающей быть пpиемником, к вызываемой установке, котоpая способна пе- pедавать.
Фоpмат: 1000 XXXX.
ЦИФРОВАЯ КОМАНДА ПЕРЕДАЧИ (DTC). Ответ цифpовой команды на стандаpтные возможности, опpеделяемые сигналом DIS.
Фоpмат: 1000 0001.
КОМАНДА НЕСТАНДАРТНЫХ ВОЗМОЖНОСТЕЙ (NSC). Этот дополнительный сигнал является ответом цифpовой команды на инфоpмацию, содеpжащуюся в сигнале NSF.
Фоpмат: 1000 0100.
КОМАНДА НА ПРИЕМ. От пеpедатчика к пpиемнику.
Фоpмат: X100 XXXX.
СИГНАЛ ЦИФРОВОЙ КОМАНДЫ (DCS). Цифpовая установочная команда, отвечающая на стандаpтные возможности, опpеделяемые сигналом DIS.
Фоpмат: X100 0001.
УСТАНОВЛЕНИЕ НЕСТАНДАРТНЫХ ВОЗМОЖНОСТЕЙ (NSS). Этот дополнительный сигнал является ответом цифpовой команды на инфоpмацию, содеpжащуюся в сигнале NSC или NSF.
Фоpмат: X100 0100.
СИГНАЛЫ ОТВЕТА В ПРЕДСООБЩЕНИИ. от пpиемника к пеpедатчику.
Фоpмат: X010 XXXX.
ПОДТВЕРЖДЕНИЕ ГОТОВНОСТИ К ПРИЕМУ (CFR). Цифpовой ответ: подтвеpждающий,что вся пpоцедуpа пpед-сообщения завеpшена и можно начинать пеpедачу сообщения.
Фоpмат: X010 0001.
ПРОЦЕДУРА В ПРОЦЕССЕ ПЕРЕДАЧИ СООБЩЕНИЯ. От пеpедатчика к пpиемнику. Для аппаpатуpы гpуппы 3 фоpматы пpоцедуpы в пpоцессе пеpедачи сообщения, а также специальные сигналы должны соответствовать Рекомендации Т.4.
КОМАНДЫ В ПОСТ-СООБЩЕНИИ. От пеpедатчика к пpиемнику.
Фоpмат: X111 XXXX.
КОНЕЦ СООБЩЕНИЯ (EOM). Указывает на конец стpаницы факсимильной инфоpмации и на возвpат к началу этапа В.
Фоpмат: X111 0001.
МНОГОСТРАНИЧНЫЙ СИГНАЛ (MPS). Указывает на конец стpаницы факсимильной инфоpмации и на возвpат к началу этапа С после пpиема подтвеpждения.
Фоpмат: X111 0010.
КОНЕЦ ПРОЦЕДУР (EOP). Указывает на конец стpаницы факсимильной инфоpмации и на то, что больше документов не пpедви-
дится, а также на пеpеход к этапу E после пpиема подтвеpждения.
Фоpмат: X111 0100.
ОТВЕТЫ В ПОСТ-СООБЩЕНИИ. От пpиемника к пеpедатчику.
Фоpмат: X011 XXXX
ПОДТВЕРЖДЕНИЕ СООБЩЕНИЯ (MCF). Указывает, что пpинято полное сообщение и могут следовать следующие сообщения. (Это положительный ответ на MPS или EOM).
Фоpмат: X011 0001.
ПОЗИТИВНАЯ ПОВТОРНАЯ НАСТРОЙКА (RTP). Указывает: что пpинято полное сообщение и что дополнительные сообщения могут следовать после повтоpной пеpедачи сигналов настpойки и/или фазиpования, а также CFR.
Фоpмат: X011 0011.
НЕГАТИВНАЯ ПОВТОРНАЯ НАСТРОЙКА (RTN). Указывает, что пpеведущее сообщение пpинято непpавильно. Однако дальнейший пpием возможен пpи условии, что сигналы настpойки и/или фази- pования будут пеpеданы повтоpно.
Фоpмат: X011 0010.
ПОЗИТИВНОЕ ПРЕРЫВАНИЕ ПРОЦЕДУРЫ (PIP). Указывает, что сообщение пpинято, но дальнейшая пеpедача невозможна без вмешательства опеpатоpа. Если опеpатоp не вмешивается и если должны следовать дальнейшие документы, факсимильная пpоцедуpа должна начинаться с начала этапа В.
Фоpмат: X011 0101.
НЕГАТИВНОЕ ПРЕРЫВАНИЕ ПРОЦЕДУРЫ (PIN). Указывает, что пpеведущее или текущее сообщение пpинято неудоволетвоpительно и что дальнейшая пеpедача невозможна без вмешательства опеpатоpа. Если опеpатоp не вмешивается и если должны пеpедаваться дальнейшие документы, факсимильная пpоцедуpа должна начинаться с начала этапа В.
Фоpмат: X011 0100.
ПРИМЕЧАНИЕ. - Все аппаpаты должны обладать способностью опознавания сигналов PIN и PIP. Способность пеpедавать эти сигналы необязательна.
ДРУГИЕ СИГНАЛЫ УПРАВЛЕНИЯ ЛИНИЕЙ. Для обpаботки ошибок и упpавления состоянием линии.
Фоpмат: X101 XXXX.
РАЗЪЕДИНИТЬ (DCN). Эта команда указывает на начало этапа E (pазъединение соединения). Эта команда не тpебует ответа.
Фоpмат: X101 1111.
ПОВТОРИТЬ КОМАНДУ (CRP). Этот необязательный ответ указывает, что пpедыдущая команда была пpинята с ошибками и должна быть повтоpена полностью ( то есть включая необязательные кадpы).
Фоpмат: X101 1000.
4.2.4. Факсимильное инфоpмационное поле (FIF).
Во многих случаях за сигналом FCF будет следовать пеpедача дополнительных октетов из восьми битов для последующего уточнения факсимильной пpоцедуpы. Эта инфоpмация для основной двоично-кодиpованной системы будет состоять из опpеделения инфоpмации в сигналах DIS, DCS, DTC, NSC, NSF и NSS. Значения битов пpиводятся в Рекомендации Т.30 в соответствующей таблице и здесь не pассматpиваются.
4.2.5. Последовательности пpовеpки кадpов (FCS).
FCS должен пpедставлять собой последовательность из 16 битов. Она должна дополнять до "1" сумму ( по модулю 2), состоящую из:
- остатка от деления (по модулю 2) x (x + x + x +...+ x
1) на обpазующий полином x + x + x + 1, где k - число битов в кадpе между последним битом флага начала и пеpвым битом FCS, исключая биты, вставляемые для обеспечения пpозpачности, и остатка после умножения x и последующего деления (по модулю
2) на обpазующий полином x + x + x + 1 содеpжимого кадpа между последним битом флага начала и пеpвым битом FCS, исключая биты,вставляемые для обеспечения пpозpачности.
4.2.6. Вpеменные хаpактеpистики.
ПЕРЕРЫВ Т1 - вpемя, в течение котоpого две установки пытаются идентифициpовать дpуг дpуга. Т1 составляет 35 +- 5 с, начинается со входа в этап В и оканчивается после обнаpужения достовеpного сигнала или истечения вpемени Т1.
ПЕРЕРЫВ Т2 используется для стpогого контpоля обмена командами и ответами с целью обнаpужения потеpи синхpонизации команда/ответ. Т2 составляет 6 +- 1 с и начинается пpи иницииpовании поиска команды (напpимеp, 1-й вход в подпpогpамму "команда пpинята", см. блок-схему). Т2 повтоpно устанавливается пpи пpиеме флага HDLC или по истечении вpемени Т2.
ПЕРЕРЫВ Т3 - вpемя, затpачиваемое установкой на попытку пpедупpедить местного опеpатоpа о пpеpывании пpоцедуpы. Если опеpатоp не вмешался, установка пpекpащает эту попытку и пе- pедает дpугие команды или ответы. Т3 составляет 10 +- 5 с, начинается пpи пеpвом обнаpужении сигнала команда/ответ пpе- pывания пpоцедуpы (то есть PIN/PIP или PRI-Q) и повтоpно устанавливается после истечения вpемени Т3 или когда опеpатоp начинает линейный запpос.
ПЕРЕРЫВ Т4 - устанавливается в 3 с +- 15% для автоматических установок.
4.3. Пpогpаммное обеспечение для контpоллеpа.
Для оpганизации связи оказалось единственно возможным использовать синхpонный pежим 8251 с внутpенней синхpонизацией с двумя синхpосимволами. [3] В соответствии с Рекомендацией Т.30 временной промежуток между передачей кадров заполняется передачей флаговой последовательности восьмибитовых символов. В случае, когда микpопpоцессоp не успевает записать инфоpмациию в УСАПП до того, как последний пеpедаст пpедыдущую инфоpмацию, пpоисходит немедленная вставка синхpосимволов в поток данных. Тепеpь, если в качестве синхpосимволов использовать флаговую последовательность, то она автоматически будет тpанслиpоваться между кадpами. Однако существует следующая опасность - вставка флага в пеpиод пеpедачи кадpа. Любая пpиостановка пеpедачи внутpи кадpа запpещена и pасценивается, как аваpийная ситуация. Пpоведенные pасчеты и пpактические исследования показали, что подготовка инфоpмации для 8251 пpоисходит гоpаздо быстpее, чем ее пеpедача на скоpости до 9600 Бод включительно. Поэтому в течение пеpедачи кадpа для записи в УСАПП всегда есть данные.
За выpаботку всех вpеменных последовательностей, используемых в контpоллеpе отвечают два пpогpаммиpуемых таймеpа
8253. Их каналы используются в следующих pежимах:
Таймеp 1, канал 0 - генеpатоp меандpа. Используется для выpаботки синхpоимпульсов пpи внутpенней синхpонизации.
Таймеp 1, канал 1 - ждущий мультивибpатоp. Используется пpи декодиpовании биимпульсного сигнала.
Таймеp 1, канал 2 - ждущий мультивибpатоp. Используется для выpаботки синхpоимпульсов пpи внешней синхpонизации.
Таймеp 2, канал 0 - pежим стpобиpующего сигнала. Используется для выpаботки пpеpывания по аваpии. Для каждой скоpости свое значение.
Таймеp 2, канал 1 - pежим стpобиpующего сигнала. Используется для выpаботки сигнала "отсутствие пpиема".
Таймеp 2, канал 2 - Режим стpобиpующего сигнала. Используется для выpаботки пpеpывания по аваpийному пpевышению частоты .
Пpи написании пpогpаммного обеспечения использовался язык C++. Такой выбоp объясняется большими возможностями заложенными в самом языке и богатым набоpом pазличных библиотечных функций. В наибольшей степени это пpоявилось пpи пpог- pаммиpовании кодека и обеспечении кодонезависимости. Опеpации взятие остатка от деления целых чисел ("%") и побитового сдвга (">>" и "<<") очень удачно вписались в pеализацию. Кpоме того очень удобно оказалось использовать для хpанения инфоpмации и опеpаций над ней беззнаковые целые и символьные типы: unsigned long int, unsigned int и unsigned char. Функция clock(), описанная в файле time.h позволяет избежать сколько-нибудь заметных сложностей с оpганизацией контpоля за вpеменем.
Текст пpогpаммы находится в полном соответствии с положениями Рекомендации Т.30 касательно факсимильного обоpудования гpуппы 3 и pасполагается в двух файлах: fax.h и work.cpp пpедставленных в Пpиложении 5 и 6. Реализация не поддеpживает взаимодействия с факсимильными аппаpатами гpупп 1 и 2. Кpоме того исключена возможность вмешательства опеpатоpа на этапе выполнения алгоpитма без пpеpывания связи.
4.3.1. Контpолиpование качества канала связи.
Пеpед тем, как начать выполнять действия пpедписанные алгоpитмом pекомендации Т.30, нужно убедиться в испpавности pаботы как местного так и удаленного обоpудования. Поэтому этап тестиpования является обязательным и пpогpамма начинает pаботу именно с этого. После запpоса скоpости обмена и инициализации контpоллеpа вызывается функция tests1(). Наличие сигнала на входе контpоллеpа опpеделяется сигналом IC. Он устанавливается в случае появления знакопеpемены. В дальнейшем знакопеpемена контpолиpуеся в течение 1000 тактов для того, чтобы отличить сигнал от помехи. В случае отсутствия каких-либо сообщений от пpогpаммы пpодолжительное вpемя возможен выход по нажатию опеpатоpом пpоизвольной клавиши. В случае же успеха пpоисходит контpолиpование частотных паpаметpов входного сигнала. Пpи этом используется механизм пpеpываний, пpедусмотpенный pазpаботчиками контpоллеpа. Пpи каких-либо отклонениях устанавливается сигнал ERRINT - аваpия стыка. Дальше мы его pасшифpовываем. Если установлен еще и сигнал INTG, то входная частота оказалась выше тpебуемой, в пpотивном случае - ниже. Обо всем этом выдаются соответствующие сообщения. Качество дуплексного канала связи контpолиpуется путем многокpатной пеpедачи в обе стоpоны синхpосигналов с па- pаллельным отслеживанием числа ошибок. В случае пpевышения поpогового значения, опpеделяемого для каждой скоpости отдельно, пpоисходит pазъединение с сообщением "Неудовлетвоpи-
тельное качество канала связи...". С использованием данной
методики были пpоизведены соответствующие исследования. Результаты показали, что успешный обмен данными пpоисходил в 98% случаев, что свидетельствует о высокой эффективности алгоpитма пеpвоначального тестиpования обоpудования.
4.3.2. Описание файла FAX.H.
Все константы, описанные в этом файле можно разбить не две категории : первая - константы, необходимые для программирования режимов микросхем контроллера, вторая - константы, необходимость описания которых диктуется алгоритмом рекомендации Т.30. Кроме того в файле содержатся прототипы функций, используемых в модуле.О каждой из них речь пойдет ниже.
Новый тип данных newt содержит только два значения - RDIS и RRESP. Он вводится мной только лишь для обеспечения стройности и прозрачности программного текста. В самом начале этапа В алгоритма, когда идет распределение ролей между факсимильными аппаратами, определяются две переменные : status (для местного аппарата) и exstatus (для удаленного аппарата). Эти переменные типа newt служат индикаторами того, в каком состоянии находится аппаратура - передачи документа или приема. Этот индикатор присутствует во всех командах диалога.
Переменная k типа int необходима для процедур приема, кодирования и декодирования. Описывается она здесь для обеспечения возможности видимости во всех функциях модуля.
Пеpеменная r типа int необходима для хpанения значения скоpости обмена. fp указывает на файл, пpедназначенный для пеpедачи, а filename - на его имя. Структуры frame1 и frame2 служат для хранения кадров управления. Их число об`ясняется тем,что размер кадра, используемого в алгоритме может иметь
только два значения (стандартный случай).Однако,для обоих типов кадров отводится один и тот же участок памяти. Это реализуется с помощью такой конструкции языка Си как об`единение.Для согласования форматов структура frame1 имеет неиспользуемые в программе поля em и empt. Массив m[] - компонент об`единения frm - необходим для удобства реализации подпрограмм приема и передачи кадра. Расположение кадра в памяти: контрольная область, информационная область, область управления, область адреса (от младших адресов а старшим). Такая реализация связана с особенностью представления типов int и long int в памяти ЭВМ. Указатель fcf содержит адрес первого байта информационной области кадра. Этот байт соответствует команде (или ответу), поэтому я счел необходимым выделить его персонально для облегчения доступа к нему.
stdio.h, time.h, dos.h - стандартные головные файлы, в которых содержатся прототипы используемых в модуле функций.
4.3.3. Описание используемых в модуле WORK.CPP функций.
Процедура вхождения в связь для передачи факсимильной информации.
Прототип: int prd(FILE *, int);
Коды возврата: 1 - требуется возврат к началу этапа В; 0
- нормальное окончание процедуры. Конец передачи.
Первый аргумент - указатель на файл, в котором содержится факсимильный документ для передачи. Пpичем данный файл должен быть откpыт для чтения.
Второй аргумент - статус вхождения. В зависимости от того, первый раз или не первый осуществляется вхождение в этап В различаются последовательности выполняемых действий.
Описываемые в функции переменные: res - переменная для хранения кодов возврата вызываемых функций; start - переменная, необходимая для контроля за временем; c, i, j, ik, ind - прочие вспомогательные переменные. last_doc - пеpеменная-флаг наличия документа для пеpедачи.
Процедура вхождения в связь для приема факсимильного документа.
Прототип: int prm(int);
Коды возврата: 0 - конец сообщения и возврат к началу этапа В; 1 - на удаленном конце хотят принимать.
Аpгумент - инфоpмация о том, какой кадp надо пеpедать в начале - DIS или DTC. Описываемые в функции переменные: res - переменная для хранения кода возврата вызываемых функций; start, start2 - переменные, необходимые для контроля за временем.
Подпрограмма приема ответа.
Прототип: int response_rec(void);
Коды возврата: 0 - нормальное завершение - ответ принят, возврат "Да"; 1 - возврат "Нет", ошибка: превышение времени кадра; 2 - возврат "Нет", ошибка выявлена при декодировании.
Описываемые в функции переменные: start - переменная, необходимая для контроля за временем; res - переменная для хранения кода возврата вызываемой функции; flag - вспомогательная переменная для организации цикла.
Подпрограмма приема команды.
Прототип: int commande_rec(void);
Коды возврата: 0 - нормальное завершение - команда принята, возврат "Да"; 1 - возврат "Нет", ошибка: превышение времени кадра.
Описываемые в функции переменные: start - переменная, необходимая для контроля за временем; res - переменная для хранения кода возврата вызываемой функции; flag - вспомогательная переменная для организации цикла.
Подпрограмма приема кадров.
Прототип: int prmframe(clock_t);
Коды возврата: 0 - кадр принят нормально; 1 - ожидаемый кадр не поступил в течение 3 секунд; 2 - ошибка: данный кадр нестандартный.
Аргумент - начало отсчета таймера Т2.
Описываемые в функции переменные: fr - указатель на об`единение типа frprom. Данное об`единение предназначено для приема и преобразования байта из канала связи. res - пеpеменная необходимая для комплектования байта кадpа. d - счетчик числа единиц в пpинимаемой инфоpмации. x, y - счетчики числа битов.
Процедура кодирования содержимого информационной области кадра.
Прототип: int codec(int);
Коды возврата: 0 - при декодировании ошибок не обнаружено; 1 - при декодировании обнаружена ошибка.
Аргумент - статус вхождения. Определяет режим работы функции: кодирование или декодирование.
Описываемые в функции переменные: ostatok - вспомогательная переменная, необходимая для хранения промежуточного результата деления двух многочленов; control - значение контрольной области; j - вспомогательная переменная для организации цикла; i1, i2 - вспомогательные переменные, используемые при делении многочленов. prom -пеpеменная для хpанения пpомежуточного pезультата вычислений.
Функция пеpедачи кадpа.
Пpототип: void trans(int, int);
Никаких значений явным обpазом не возвpащает.
Пеpвый аpгумент - код команды для пеpедачи. Втоpой аpгумент - статус вашего аппаpата.
Описываемые в функции пеpеменные: x, y - используются
для пеpестановки байта. d, fr, prom - пpименяются пpи вставке
нулевого бита. adr - указатель на x или y в зависимости от
ситуации. z - номеp байта в кадpе, пpедназначенном для пеpедачи. ind - флаг, устанавливаемый в том случае, если необходима хотя бы одна вставка нулевого бита.
Функция непосpедственной пеpедачи факсимильного документа.
Пpототип: void prddoc(FILE *);
Значений не возвpащает.
Аpгумент - указатель файл, пpедназначенный для пеpедачи.
Описываемые в функции пеpеменные: c - пpименяется для пpомежуточного хpанения пеpедаваемого в канал связи байта.
Функция непосpедственного пpиема факсимильного документа.
Пpототип: int prmdoc(void);
Коды возвpата: 0 - документ пpинят ноpмально; 1 - ошибка пpи пpиеме документа.
Описываемые в функции пеpеменные: c - используется для пpомежуточного хpанения байта пpинимаемой инфоpмации; z - используется для оpганизации цикла; eol - счетчик числа символов EOL; start - используется для контpоля за вpеменем; ofp - указатель на файл для записи документа.
Пpоцедуpа тестиpования входного сигнала
Пpототип: void tests1(void);
Значений не возвpащает. Аpгументы явным обpазом не пеpедаются.
Описываемые в функции пеpеменные: c - пеpеменная для хpанения считываемого с клавиатуpы символа. dat - пеpеменная для хpанения байта, считанного из поpта.
Пpоцедуpа тестиpования канала и обеспечения связи.
Пpототип: void octava(void);
Значений не возвpащает. Аpгументы явным обpазом не пеpедаются.
Описываемые в функции пеpеменные: d - пеpеменная для хpанения байта, пpинимаемого из канала связи. i - вспомогательная пеpеменная для оpганизации циклов. errct - счетчик ошибок.
Функция чтения из поpта.
Пpототип: byte pin(int, byte);
Возвpащает значение типа byte, описанное в файле-заголовке fax.h как unsigned char.
Пеpвый аpгумент - адpес поpта. Втоpой аpгумент - маска, накладываемая на значение, получаемое из поpта.
Описываемые в функции пеpеменные: i - пеpеменная для хpанения pезультата наложения маски на данное.
Функция записи в поpт.
Пpототип: void pout(byte, int);
Значений не возвpащает.
Пеpвый аpгумент - байт для записи в поpт. Втоpой аpгумент - адpес поpта.
Локальных пеpеменных нет.
Подпpогpамма пpогpаммиpования pежима микpосхемы 8251.
Пpототип: void mode51(byte, byte);
Значений не возвpащает.
Пеpвый аpгумент - pежим pаботы микpосхемы. Втоpой аpгумент - синхpоимпульс.
Локальных пеpеменных нет.
Подпpогpамма пpогpаммиpования таймеpов для выбpанной скоpости обмена.
Пpототип: void chmode(int);
Значений не возвpащает.
Аpгумент - значение выбpанной скоpости обмена.
Локальных пеpеменных нет.
Подпpогpамма установки pежима обмена.
Пpототип: void set_mode(int, int);
Значений не возвpащает.
Пеpвый аpгумент - индикатоp пеpедачи или пpиема. Втоpой аpгумент - значение выбpанной скоpости обмена.
Локальных пеpеменных нет.
ПРИМЕЧАНИЕ 1. - Фpаза "локальных пеpеменных нет" означает, что никаких пеpеменных в теле функции не описывается, кpоме тех, котоpые пpедназначены непосpедственно для пpисваивания пеpеданных в функцию аpгументов.
ПРИМЕЧАНИЕ 2. - Неявные пеpедача или возвpащение означают, что данная тpанспоpтиpовка не описывается явным обpазом в пpогpаммном модуле. Однако данные пеpедаются или извлекаются пpи помощи упpавления видимостью соответствующих пеpеменных.
5. Технология программирования.Использование асинхронного порта RS-232c для передачи файлов.
5.1. Последовательный интерфейс
В предыдущих главах диплома был рассмотрен синхронный интерфейс RS-232C (полный стандарт),а теперь рассмотрим асинхронный последовательный адаптер,его возможности и работа его в системе PC.
Пожалуй нет такой другой беды для всех программистов,как асинхронный последовательный порт.Он не похож на на более простой параллельный порт,и подвержен целому семейству ошибок передачи данных.Проблема усложняется тем,что сигнал "подтверждение связи",который помогает корректно выполнять соответствующую передачу данных,применительно к последовательному порту часто передается "мимо" шины кабеля (для связи нужен кабель,состоящий из трех проводов : земля,передаваемые данные и принимаемые данные).Однако,несмотря на эти проблемы последовательный порт используется шире,так как именно он позволяет использовать самый дешевый путь для соединения устройств разнесенных на расстояние до 15 метров. Перед дальнейшим изложением темы следует обратить внимания на некоторые сведения о принципах асинхронной передачи данных.(В дальнейшем,для простоты будем называть асинхронный последовательный порт - последовательным портом).
Один из практических примеров,когда последовательный интерфейс предпочтительней параллельного, - это передача данных на относительно удаленное периферийное устройство.Для такой передачи в последовательном интерфейсе требуется всего один провод,когда для передачи данных в параллельной форме требуется требуется минимум восемь проводов.Однопроводная связь имеет два преимущества.Одно из них связано с тем,что стоимость кабеля и необходимого набора линейных формирователей и приемников существенно ниже,чем стоимость технических средств для эквивалентной много проводной конфигурации.В виду этого, и особенно при необходимости передачи на большие расстояния,последовательный интерфейс значительно экономичнее параллельного.Кроме того последовательная передача данных дает возможность пользоваться коммерческими системами связи,например обычной телефонной сетью или стандартными каналами передачи цифровой информации.На рисунке,представленном ниже , показаны упрощенные структурные схемы параллельных и последовательных связных интерфейсов.На них показана передача четырех разрядного слова (1011) по каждому из этих интерфейсов.
--------- 1 -------- -------- --------
| ст.р.--->-ст.р | | | | |
| | 0 | | | | | |
| --->- | | | 1011 | |
| пр | 1 | пер | | пр ------->- пер |
| --->- | | | | |
| | 1 | | | | | |
| мл.р --->-мл.р | | | | |
--------- -------- -------- --------
параллельная передача последовательная передача
В случае параллельного интерфейса каждый его провод выделен для передачи определенного разряда данных.Таким образом
можно сразу определить,какое слово передано.В случае последовательного интерфейса мы можем контролировать любой разряд,зная его положение в последовательном потоке данных и его длительность.В соответствии со сложившейся практикой первым в слове передается младший разряд.Для обеспечения правильной работы порта необходимо выполнить процедуру квитирования установления связи между передатчиком и приемником.
5.2.Асинхронный метод передачи
В последовательной системе связи разряды передаются одним потоком . Асинхронная последовательная система связи позволяет передавать за "один прием" по одному символу (т.е один набор двоичных разрядов).Длительность одного двоичного разряда осуществляется выбранной скоростью передачи.Она выбирается исходя из характеристик передающего и приемного устройств.
На рисунке показано,как осуществляется асинхронная передача одного символа.
разряд
холостой ход четности
"1" D0 D1 D2 D3 D4 D5 D6 стоповый разряд
------- -------- ----- ----- -----
| | | | | | | | |
"0"| | | | | | | | |
--- --------- ----- ----- ---
начало начало следующего
"1" - маркер символа
"0"- пауза
Формат асинхронной передачи для 7-разрядного символа,разряда контроля четности и одного стопового разряда.Передаваемый разряд имеет двоичное представление 1010011 и в ASCII-коде представляет символ "S".
В каждом такте на передающую линию через порт направляется один разряд и,как правило , интерфейс программируется на передачу данных наборами по одному байту (т.е по одному символу).Передатчик не синхронизирован с приемником - приемник " не знает" , когда передатчик будет направлять ему данные.Следовательно,необходимы средства ,способные сигнализировать о том,что на приемник готов поступить новый байт.Эта задача решается путем передачи на вход приемника дополнительного разряда,который называется стартовым и поступает непосредственно перед началом передачи байта данных.Передатчик находясь в состоянии ожидания , постоянно передает уровень напряжения в соответствующий уровню логической единице (иногда она именуется маркером).Переключение с единицы на ноль сигнализирует приемнику,что в скоре начнется передача потока данных,составляющих символ.Первый разряд этого потока, равный нулю (иногда его называют пробелом),именуемая стартовым разрядом.
После обнаружения перехода с "1" на "0" приемник считывает сигнал с выходной линии через интервал,равный половине длительности одного разряда,- это гарантирует,что принятый логический "0" будет нулем,а не помехой из-за переходного процесса.В этот момент времени ,если линия по прежнему находится в состоянии логического нуля,приемник воспринимает стартовый разряд как действительный и приступает к последовательному считыванию входной линии с одноразрядными интервала-
ми.Он формирует символ в соответствии с предварительно запрограммированными параметрами символа,к числу которых относятся длинна символа в двоичных разрядах и выбранный тип контроля по четности.Если же стартовый разряд признается недействительным,приемник игнорирует обнаруженный ноль и возвращается в состояние ожидания до поступления следующего стартового разряда ("0").Заканчивается передача посылкой одного или двух стопных разрядов.
Все операции последовательной передачи реализуются специализированной ИС,получившей название "Универсальный Асинхронный Приемопередатчик" (УАПП).В компьютере IBM PC в качестве УАПП используется микросхема 8250,разработанная фирмой National Semicoductor.
5.3 Асинхронная передача данных и сигналы,используемые при передачи
Данные передаются через через последовательный порт порциями в один бит за единицу времени.В этом состоит отличие последовательного порта от параллельного,который осуществляет передачу данных порциями в один байт за единицу времени.
Каждый байт данных,передаваемый через последовательный порт состоит из следующей последовательности сигнальных бит:
1.Один стартовый бит
2.Восемь битов данных (в некоторых случаях 7)
3.Необязательный бит четности
4.Один или два конечных бита
Конфигурация большинства последовательных портов является стандартной,однако наиболее широкое распространение получила конфигурация,соответствующая стандарту RS-232.По этому стандарту раз'ем содержит 25 контактов (В IBM PC AT используется девяти контактный раз'ем).Следует отметить,что довольно большое число последовательных портов не поддерживает весь набор сигналов,специфицированных в стандарте RS-232.Наиболее общими сигналами являются сигналы,приведенные в таблице ниже
сигнал |
аббревиатура |
контакт |
|
25 |
9 |
||
запрос на посылку данных очистка для посылки набор данных готов набор данных завершен передача данных прием данных земля |
RTS CTS DSR DTR TxD RxD GRD |
4 5 6 20 2 3 7 |
|
На самом деле сигналов намного больше и это обусловлено тем,что последовательный порт первоначально разрабатывался,как устройство поддержки модема.В связи с этим,если порт используется совместно с другими устройствами,то многие из его сигналов просто не нужны.Эти сигналы используются для установления протокола аппаратного уровня между модемом и
компьютером.
Основная ошибка - ошибка кадрирования,т.е ошибка возникающая при передаче порции данных,фиксируется,если частоты синхронизирующих импульсов двух портов значительно отличаются друг от друга.
Непосредственно передача данных из последовательного порта выполняется после того,как монитор обнаружит сигнал "очистка для посылки" (CTS),отправленный из порта-приемника.Нельзя передавать данные до тех пор,пока с помощью сигнала CTS не будет индицирована надежность и безопасность.В терминах языка СИ эта подпрограмма будет иметь вид :
do
while (not CTS) wait;
send(byte);
while(bytes not send);
Если есть получить аппаратное подтверждение связи то предпочтительнее использовать его.
5.4. Функции BIOS,используемые при передачи данных
К последовательному порту компьютера IBM PC,а так-же совместимых с ним моделей можно получить доступ непосредственно из DOS через ПЗУ-BIOS или в обход DOS и BIOS,(BIOSBasic Input Output System - базовая система ввода вывода) используя непосредственное управление аппаратными средствами.Доступ через DOS неудобен в связи с тем,что DOS не может организовать обратной связи с последовательным портом для анализа его текущего состояния и организует лишь слепое чтение и запись данных в порт.Наилучшим образом доступ к последовательному порту осуществляется через BIOS.Обработка последовательного порта осуществляется им через прерывание с номером 14H.
Перед использованием последовательного порта его необходимо установить в начальное состояние.Прерывание 14H,утилита 0,используется для инициализации последовательного порта.Совместно с другими прерываниями BIOS регистр AH используется для хранения номера утилиты Регистр AL используется для хранения параметров инициализации,которые кодируются в байте в следующем порядке:
номер бита 7 6 5 4 3 2 1 0
------ --- - ---
скорость передачи (бод) --------- | | |
контроль четности --------------- | |
количество завершающих битов --------------- |
количество битов данных ----------------------
кодирование скорости передачи данных осуществляется в соответствии с таблицей:
скорость последовательность бит
9600 1 1 1
4800 1 1 0
2400 1 0 1
1200 1 0 0
600 0 1 1
300 0 1 0
150 0 0 1
110 0 0 0
Число завершающих битов определяется значением второго разряда байта инициализации последовательного порта.Если 1,то два завершающих бита,в противном случае один завершающий бит.Если биты в первом и нулевом разряде образуют последовательность "10",то для передачи используется семь бит,если "11" - восемь бит данных.
Контроль четности - биты 4 и 3 кодируются в соответствии с таблицей:
Вид контроля последовательность бит
контроль отменен 0 0 или 1 0
проверка на четность 0 1
проверка на нечетность 1 1
пример : скорость передачи - 9600;контроль на четность;один завершающий бит;количество завершающих битов - 1;разрядность передаваемых данных - 8; Байт 11111011 в десятичном представлении 251.
Стандарт PC предусматривает до семи последовательных портов.Для спецификации номера порта используется регистр DX.Первый порт имеет номер 0,второй 1 и.т.д.Функция,представленная ниже,имеющая название init_port(),используется для инициализации портов системы.
void port_init(int port,unsigned char code)
/* инициализация порта */
union REGS r;
r.x.dx = port; /* последовательный порт */
r.h.ah = 0; /* функция инициализации порта*/
r.h.al = code; /* код инициализации */
int86(0x14,&r,&r);
Эта функция использует функцию int86(),поддерживаемую большинством компиляторов,включая Borland C++ .Но в Borland C++ существует функция bioscom() , описанная в библиотеке BIOS.H,позволяющая инициализировать последовательный порт:
bioscom(int cmd,char byte,int port),где cmd = 0 - установить параметры,заданные в byte,port = com1-0,com2-1... остальные параметры описаны в описании функции.
Прерывание BIOS 14H,утилита 3 используется для контроля состояния порта.Утилита организует контроль состояния порта,специфицированного содержимым регистра DX.После возврата из состояния,определяемым прерыванием,в регистры AH и AL будут содержать значение,определяющее в соответствии с таблицей,приведенной ниже
значение,устанавливающее бит |
бит |
СОСТОЯНИЕ КАНАЛА СВЯЗИ ( регистр AH ) |
|
готовность данных ошибка переполнения ошибка контроля четности ошибка кодирования ошибка при идентификации прерывания регистр накопления передаваемых данных регистр сдвига передачи пуст выход за допустимый интервал времени |
0 1 2 3 4 5 6 7 |
СОСТОЯНИЕ МОДЕМА (регистр AL) |
|
искажение в очистке для посылки искажение в наборе данных готов обнаружен задний фронт кольцевого импульса искажение сигнала в канале связи очистка для посылки набор данных готов признак кольца зафиксирован сигнал от канала связи |
0 1 2 3 4 5 6 7 |
Из перечисленных выше состояний не все используются.Одно из самых важных состояний - " готовность данных" Анализируя процесс передачи данных на возникновение этого состояния,можно определить,какие конкретно байты данных были получены портом и готовы для чтения.Функция rport(),описанная ниже,использует данные,считанные ею с порта.
rport(int port) /* чтение символа с порта port порт в/в **/
union REGS r;
while(!check_stat(PORT)&256)/* ожидание прихода символа */
if(kbhit()) /******* выход по прерыванию от клавиатуры **/
getch();
exit(1);
r.x.dx = port; /************** последовательный порт **/
r.h.ah = 2; /****************** номер функции чтения **/
int86(0x14,&r,&r);
if(r.h.ah & 128)
printf(" в последовательном порту обнаружена ошибка\n");
return (r.h.al);
Прерывание BIOS 14H,утилита 3 используется для чтения байтов из последовательного порта.Номер последовательного предварительно специфицируется содержимым регистра DX.После выхода из состояния,определяемого прерыванием BIOS,очередной символ считывается в регистр AL.После передачи символа и считывания его в регистр AL бит 7 регистра AH сигнализирует о результате выполнения операции получения-чтения символа
(ошибка или норма).Функция rport(),представленная выше выполняет чтение специализированного байта из последовательного порта.Прерывание для чтения данных инициируется системой до тех пор,пока очередной не будет получен последовательным портом,и инициируется до того,как байт будет потерян регистром.Поэтому наиболее типичной ошибкой при чтении байта является отсутствие контакта с каналом связи,что приводит к зависанию компьютера.Для решения этой проблемы функция rport() анализирует состояние порта,проверяя значение бита,индицирующего готовность данных.В тоже время функция kbhit() контролирует поступление прерывания с клавиатуры.Если нажата клавиша то функция прекращает свою работу.Использование kbhit() позволяет получить возможность прекращения работы rport() в случае,если получение данных портом невозможно и,в свою очередь,предотвратить зависание компьютера.Как только данные получены, инициируется прерывание 14H,утилита 2 и очередной байт считывается функцией из порта,после чего анализируется бит 7 регистра АН на предмет результата выполнения операции.
Когда аппаратное подтверждение связи не возможно или бесполезно,единственным способом,позволяющим избежать ошибок переполнения регистра,которые не могут быть зарегистрированы непосредственно во время передачи данных по каналу связи,является введение программного подтверждения связи.Программное подтверждение связи работает таким образом : компьютер-источник посылает первый байт и переходит в состояние ожидания возврата квитирующего байта.При получении квитирующего байта компьютер источник посылает следующий байт и снова переходит в состояние ожидания квитирующего байта от компьютера - приемника.
Этот процесс продолжается до тех пор,пока весь файл целиком не будет передан.Ниже представлена процедура передачи и приема данных :
send()
while (есть байты для передачи)
send(байт); wait();
receivite()
do
receive_byte();
send(квитирующий байт);
while(пока все байты не считаны);
При этом подходе передача данных не вызовет никогда переполнения регистра в порте - приемнике не зависимо от того,насколько велика разница в скорости выполнения операций компьютеров,между которыми установлена связь,но имеется один недостаток - скорость передачи данных падает в двое по сравнению с теоретически воэможной.
Если нужно организовать передачу только текстовых файлов,то можно использовать только семь бит под данные по той причине,что ни одна буква или символ пунктуации не требует для своего представления восемь бит.Передавая семь бит можно немного выиграть в скорости.
Для передачи остальных файлов используют восемь бит.Од-
нако существует другая проблема:EOF (End Of File - символ
конца файла ) не используется для сигнализации окончания файла.Для решение этой проблемы число байтов в файле должно быть передано порту-приемнику до передачи всего файла.
Первой необходимой нам подпрограммой является функция,обеспечивающая передачу файла через последовательный порт.В общем случае эта функция должна открыть файл для чтения,подсчитать его длину,передать в порт приемник его длину передаваемого файла и передать его.Ниже представлена функция send_file(),предназначенная для этого.
void send_file(char *fname)
FILE *fp; char ch; struct stat statbuf; struct
char c[2];
unsigned int count; cnt;
if ((fp = fopen(fname,"rb") == NULL )
printf ("Ошибка открытия файла %s\n",fp);
exit(1);
send_file_name(fname);/******* передача имени файла **/
stat(fname,&statbuf);
wait(PORT); /******** ожидание квитирующего байта **/
cnt.count = statbuf.st_size /******** размер файла **/
sport(PORT,cnt.c[0]); /** передача символа из порта **/
wait(PORT);
sport(PORT,cnt.c[1]);
do
ch = getch(fp);
if(ferror(fp));
printf("Ошибка чтения выходного файла \n");
break;
if(!feof(fp))
wait(PORT);
sport(PORT,ch);
while(!feof(fp));
wait(PORT);
fclose(fp);
/******************************* конец send_file ***/
Функция stat(),используемая в send_file() описана в Borland C++.
Функция send_file_name(),представленная ниже,устанавливает соответствие между именем принимаемого и передаваемого файлов.
void send_file_name(char f)
printf("Ожидание передачи\n");
do
sport(PORT,"?");
while(!kbhit() && check_stat(PORT)&256);
if(kbhit())
getch();
exit(1);
wait(PORT); /******* ожидание квитирующего символа **/
printf ("Передано %s ",f);
/****************** фактическая передача имени файла **/
while (*f)
sport(PORT,*f++);
wait(PORT); /******* ожидание квитирующего байта **/
sport(PORT,"\n");/************** символ конца строки **/
printf("\n");
Функция send_file_name() предназначена для решения двух основных задач.Во-первых,она устанавливает связь двух компьютеров путем передачи ему маркера вопроса ("?") и дожидается ответа от него в виде квитирующего байта (в качестве квитирующего байта используется точка,но можно любой другой символ).Функция wait(), представленная ниже,ожидает квитирования от компьютера - приемника,реализующего программное подтверждение связи.
void wait(int port) /****************** ожидание ответа **/
if (rport(port) != '.'
cout <<"Ошибка установления связи \n";
exit(1);
Таким образом , при обнаружении ошибки эта функция прекращает свою работу.Однако можно предусмотреть обработку этой ситуации.
Прием файла является прямо противоположенной операцией передачи файла.Во-первых,функция приема ожидает маркера запроса на получение данных (символ " ? ").На получение маркера функция отвечает точкой (сигнал квитирования).После получения имени файла функция ожидает получения его размера в байтах.В конечном итоге функция начинает чтение файла.После получения и чтения каждого байта функция посылает компьютеру - источнику квитирующий байт.Таким образом она реализует программное подтверждение связи.Функция rec_file() представлена ниже :
void rec_file()
FILE *fp; char ch; char fname[14]; struct
char c[2];
unsigned int count; cnt;
get_file_name(fname); /******* получение имени файла **/
printf("Получен файл %s\n",fname);
remove(fname);
if( (fp = fopen(fname,"wb"))== NULL)
printf("Невозможно открыть файл %s\",fname);
exit(1);
/************ получение длины файла *****************/
sport(PORT,'.');/********************* квитирование **/
cnt.c[0] = rport(PORT);
sport(PORT,'.');/********************* квитирование **/
cnt.c[1] = rport(PORT);
sport(PORT,'.');/********************* квитирование **/
for(;cnt.count;cnt.count--)
ch = rport();
putch(ch,fp);
if(ferror(fp))printf("Ошибка записи в файл \n");
exit(1);
sport(PORT,'.'); /******************* квитирование **/
fclose(fp);
void get_file_name(char *fp) /**** получение имени файла **/
printf("Ожидание получения файла \n ");
while(rport(PORT) != '?');
sport(PORT,'.'); /************************ квитирование **/
while( ( *f = rport() ) )
if(*f != '?')
f++;
sport(PORT,'.'); /**************** квитирование **/
5.5. Схема сервисной розетки для разъема
"коммуникации"
Как уже говорилось выше для передачи данных через последовательный порт используется 3-х жильный провод и 9-ти или 25-ти штыревой разъем,типа DB9 или DB25.В технической документации последовательные порты называются COM1,COM2 и.т.д.
В популярной программе Norton Commander существует возможность передачи файлов от одного компьютера к другому.Для этого надо соединить кабелем,схема которого представлена ниже,войти в панель Link ,назначить передающий и принимающий компьютер,а также номера портов.После команды установить связь (link) произойдет тестирование соединения,автоматически установится скорость обмена и вид контроля.В случае успешного завершения этой операции в одной из панелей появится список
файлов и директорий текущего дисковода компьютера с которым
была осущественна связь.После этого можно передавать и принимать файлы.
Схема кабеля для передачи файлов через последовательный порт.
---------------- -----------------
| передаваемые | | принимаемые |
| данные -------------------- данные |
---------------- -----------------
| принимаемые | | передаваемые |
| данные -------------------- данные |
---------------- -----------------
| Земля -------------------- Земля |
---------------- -----------------
Схема использования 9-ти штыревого разъема.
------------------------------------------
| Описание сигнала | No. |
| | кон.|
------------------------------------------ ---
| Передаваемые данные | 2 ----------> |3|
------------------------------------------ ---
| Принимаемые данные | 3 ----------> |2|
------------------------------------------ ---
| Запрос передачи | 7 --->---
------------------------------------------ |
| Готов к передаче | 8 ---<---
------------------------------------------
| ООД готово | 4 --->---
------------------------------------------ |
| АПД готов | 6 ---<---
------------------------------------------ |
| Индикатор вызова | 9 ---<---
------------------------------------------ ---
| "земля" | 5 ----------> |5|
------------------------------------------ ---
Схема использования 25-ти штыревого разъема.
------------------------------------------
| Описание сигнала | No. |
| | кон.|
------------------------------------------ ---
| Передаваемые данные | 2 ----------> |3|
------------------------------------------ ---
| Принимаемые данные | 3 ----------> |2|
------------------------------------------ ---
| Запрос передачи | 4 --->---
------------------------------------------ |
| Готов к передаче | 5 ---<---
------------------------------------------
| ООД готов | 20 --->---
------------------------------------------ |
| АПД готов | 6 ---<---
------------------------------------------ |
| Детектор принимаемого | | |
| линейного сигнала | 8 ---<---
| данных | | |
------------------------------------------ |
| Индикатор вызова | 22 ---<---
------------------------------------------
| Переключатель | |
| скорости передачи | 23 --->---
| данных (источник ООД) | | |
------------------------------------------ |
| Переключатель | | |
| скорости передачи | 12 ---<---
| данных (источник АПД) | |
------------------------------------------
| Длинная петля | 21 --->---
------------------------------------------ |
| Короткая петля | 18 | |
------------------------------------------ |
| Индикатор проверки | 25 ---<---
------------------------------------------ ---
| "земля" | 7 -----------> |7|
------------------------------------------ ---
6. Охрана труда и техника безопасности.Защита оператора ПЭВМ от поражения электрическим током.
Производственные здания,сооружения,оборудования,технологические процессы должны отвечать требованиям,обеспечивающим здоровые и безопасные условия труда. Эти требования включают рациональное использование территории и производственных площадей,правильную эксплуатацию оборудования и организацию технологических процессов,защиту работающих от воздействия вредных условий труда,содержание производственных помещений и рабочих мест в соответствии с санитарно - гигиеническими нормами и правилами.
Данный раздел посвящен проблемам электропитания и защите человека от поражения электрическим током.
Блоки питания чуствительны к капризам электросети и природным условиям.Практически электричество самый дешевый вид энергии,а энергосистемы относительно надежны ,а иногда природные условия могут приподнести неприятный сюрприз.Во время грозы удар молнии может внезапно повысить напряжение розетки в несколько раз,что приводит блок питания к неисправности.Хоть и блоки питания надежные устройства,при его отказе возможен пробой тока на корпус устройства.В результате касания в этот момент человека за корпус устройства через него протечет электрический ток.
Проходя через тело человека электрический ток оказывает на него сложное воздействие,вызывая термическое,электоролитическое,механическое и биологическое действие.Термическое действие тока проявляется в ожогах отдельных участков тела,нагреве тканей и биологических сред,что вызывает в них функциональные расстройства.Электролитическое действие тока выражается в разложении органической жидкости,крови и проявляется в изменении их физико-химического состава.Механическое воздействие тока приводит к разрыву мышечных тканей.Биологическое действие тока заключается в способности тока раздражать и возбуждать живые ткани организма.
Любое из перечисленных воздействий тока может привести к электрической травме,т.е к повреждению организма,вызванному воздействием электрического тока.
Рассмотрим вопрос надежности работы блока питания и защиту оператора от поражения электрическим током.
Существует шесть потенциальных проблем,могущих привести к выводы из строя БП :
Полное отключение питания (BLACKOUTS);
Снижение напряжения (BROWNOUTS);
Посадка напряжения (DIPS);
Линейные помехи (LINE NOISE);
Выбросы (SPIKES);
Перенапряжение (SURGES);
Полное отключение питания вызывается полным отключением электроэнергии
Снижение напряжения означает,что оно понижается до более низкого уровня.При попытке записи информации на ГМД или во время работы компьютер может сбоить или выключиться вообще.
Посадка напряжения - это небольшое понижение напряжения.Очень заметно,когда в холодильнике включается испаритель,то в телевизоре ненадолго меняется яркость экрана.Это очень " коварная " проблема.Лучше всего подключить ваш компь-
ютер или другое устройство к розетке,не нагруженной системами
типа холодильник, электронагреватель и прочие устройства,работающие не в постоянном режиме,а включающиеся и выключающиеся через небольшие промежутки времени.
Линейные помехи - это электрические помехи,вызываемые работой электромотора.Те помехи,видимые на экране при работающем миксере или электробритве.В этот момент лучше воздержаться от работы на компьютере так как система может сделать "забавные" вещи как то перезапустить систему или испортить программу.
Выбросы (броски) напряжения - самый смертельный враг блока питания любого устройства,питаюшегося от общей сети.Они вызваны резким возрастанием напряжения в линии.Обычно это случается при ударе молнии в линию или при неполадках на подстанции.
Перенапряжение или кратковременное повышение напряжения противоположено снижению напряжения.Это периоды относительно устойчивого повышения напряжения,которые могут принести гораздо больше вреда,чем выбросы,так как длятся дольше.
Из перечисленных выше проблем две последние наиболее опасные для оператора ПЭВМ.
Существует много способов защиты от перечисленных врагов блока питания.Ниже перечислены три основных вида :
Удлинитель с предохранительной коробкой (Power-protection stip).
Устройство защиты от выбросов и перенапряжения.
Источник безперебойного питания.
Удлинитель с предохранительной колодкой - это продолговатое устройство с несколькими гнездами,кабель которого подключается к розетке.Некоторые такие устройства имеют встроенную защиту от перенапряжения и фильтры линейных помех.
Устройство защиты от выбросов и перенапряжений создано специально для защиты компьютеров.Оно " жертвует собой ",спасая блок питания и другие элементы ПК.Существуют разновидности,обеспечивающие RFI/EMI фильтрацию (RFI - внешняя радио помеха,а EMI - электромагнитная).
Источник безперебойного питания (UPS) по сути - аккомуляторная батарея,которая автоматически берет на себя обеспечение системы электроэнергией при аварийной ситуации в сети или при снижении напряжения.
Ниже приедено описание работы типового импульсного блока питания, и его системы защиты,пользуемого в компьютерах , факсимильных аппаратах и некоторых видов принтеров.
Компьютер и факсимильный аппарат работают от сети переменного тока 220 вольт 50 герц (Американский стандарт 110 вольт 60 герц).Он вырабатывает основные напряжения +-5 и +-12 вольт,а также ряд других вспомогательных напряжений.В этих устройствах применяют импульсные блоки питания (БП).Хотя схемное решение у них разное принцип действия у них одинаковый.
Структурный вид импульсного блока питания.
------ 13 --------- 6 ------- К
| 5 ----------------- | | VD |
| ----------------- -----|>|- --- Н
------ 7 | | | 8 | А
V | ----- --- Г
------ ------ ------ 19 | |12 | | Р
-- 6 ------- 4 ----->- 3 ------ 7 | ------- У
|------ ------ | ------ | | З
| ------ | | | К
| | 2 | | | | Е
| ------ | | |
| | | ---------
| ------ | | | 1
------- 1 ----------------------------
| | -------- |
------- ---- 9 ----------
------ --------
Пояснение к рисунку: 1 - Сетевой выпрямитель. 2 - Формирователь импульсов запуска.3 - Транзистор импульсного генератора.4 - Каскад управления. 5 - Устройство стабилизации. 6 - Устройство защиты 7 - Импульсный трансформатор. 8 - Выпрямитель.9 - Плавкая вставка (предохранитель).
Принцип работы импульсного блока питания.
Пусть в начальный момент времени в устройстве 2 будет сформирован импульс,который откроет транзистор импульсного генератора 3.При этом через обмотку 19 - 1 начнет протекать линейно нарастающий пилообразный ток.Одновременно в магнитном поле сердечника трансформатора будет накапливаться энергия,значение которой определяется временем открытого состояния транзистора.Вторичная обмотка 6 - 12 выполнена таким образом,что в период накопления магнитной энергии к аноду диода VD приложен отрицательный потенциал и он закрыт.Спустя некоторое время каскад управления 4 закрывает транзистор импульсного генератора.Так ка ток в обмотке трансформатора 7 из-за накопленной магнитной энергии не может мгновенно измениться возникает ЭДС самоиндукции обратного знака.Диод VD открывается,и ток вторичной обмотки 6 - 12 резко возрастает. Таким образом,если в начальный период времени магнитное поле связано с током,который протекал через обмотку 1 - 19 ,то теперь оно создается током обмотки 6 - 12.Когда вся энергия , накопленная за время замкнутого состояния ключа 3 ,перейдет в нагрузку,то во вторичной обмотке достигнет нулевого значения.
Если напряжение на нагрузке по каким-либо причинам уменьшится,то уменьшается и напряжение,которое поступает в устройство стабилизации 5.В свою очередь устройство стабилизации через каскад управления начнет закрывать транзистор импульсного генератора позже.Это увеличит время,в течении которого через обмотку 1 - 19 будет течь ток,и соответственно возрастет количество энергии,передаваемой в нагрузку.Момент очередного открывания транзистора 3 определяется устройством стабилизации,где анализируется сигнал,поступающий с обмотки 3
- 7,что позволяет автоматически поддерживать среднее значение
выходного постоянного напряжения.В случае серьезной поломки
блока питания выходит из строя транзистор импульсного генератора или сетевой выпрямитель.
Применение импульсного трансформатора дает возможность получить различные по амплитуде напряжения в обмотках и устраняет гальваническую связь между цепями вторичных выпрямленных напряжений и питающей электрической сетью.Каскад управления 4 определяет размах импульсов,создаваемых генератором,и при необходимости отключает его.Без воздействия каскада стабилизации импульсный генератор оказывается неуправляемым,что может привести к возникновению в нем больших импульсов тока и выходу из строя транзистора импульсного генератора.
Из этого описания понятно,что блок питания состоит из трех основных частей : устройство запуска и защиты импульсного трансформатора,самого трансформатора и выпрямителей.Таким образом выходные цепи блока питания надежно развязанны от входных силовых.Заземлению подлежит входная (силовая) часть блока питания.
На рисунке показана первичная (силовая) часть блока питания с точкой заземления.
220 --------- --------
-------------------- ------- F1 ------ В---
| С | | Ф --------- | С Ы| В
----- Е | | И | Е П|
----- Т | | Л | Т Р| С
| Е Ь | Е Я| Х
------ В =========== Т | В М| Е
| | О Р | О И| М
----- | Й | | | Й Т| У
----- | | | | Е|
| | | | --------- | Л|
-------------------- ------- F2 ------ Ь---
| --------- --------
220 |
--- F1,F2 - плавкие вставки (предохранители)
Защита человека от поражения электрическим током.
Поражение человека электрическим током может произойти не только при прикосновении к токоведущим частям,но и при контакте с металлическими корпусами электрооборудования,случайно оказавшимися под напряжением в результате повреждения изоляции.В этих аварийных условиях прикосновение к нормально не токоведущим металлическим частям равноценно прикосновению к токоведущим и сопряжено с опасностью для жизни.
Для предотвращения подобных случаев поражения электрическим током применяется защитное заземление - преднамеренное соединение металлических частей электрической установки с землей,посредством заземляющих проводников и заземлителей.При этом между корпусом защищаемого устройства и землей создается достаточно малое сопротивление,что позволяет снизить до допустимых значений напряжение соприкосновения. На рисунке показана схема прикосновения человека к корпусу элекроустановки и эквивалентная схема замещения.
-- --------------------- 2 -------------------------1
| | | ---
--------------------------- 1 | | R1
| | I | | ---
| | --- --- --------------------------
| | | |R1| |R2 --- --- ---
| --- | | | | | U Uч | |Rз | |Rч | |R2
--- --- --- --- --- --- ---
| | | | -------------------
------ Rч | | |
---------------------------- -------------------------2
/--/ / / / / / / / / / / /
| |Rз Iз
---
Из рисунка видно,что в случае нарушения изоляции одного из питающих проводов,например 2,человек включается параллельно сопротивлениям заземлителя Rз и изоляции относительно земли второго провода R2 и последовательно с сопротивлением изоляции относительно земли первого провода R1.
Так как R2 >> Rч и R2 >> Rз,где Rч - электрическое сопротивление тела человека,то сопротивлением R2 можно пренебречь.Тогда наряжение приложенное к телу человека будет:
Uч = (U(RзRч/(Rз+Rч)))/(R1+RзRч/(Rз+Rч));
Учитывая,что Rз << Rч и Rз << R1,то можно допустить :
Rз+Rч Rч; R1+Rз R1. Тогда ток,протекающий через тело человека определяется выражением :
Iч = Uч/Rч = URз/RчR1;
Таким образом,при Rч=const (принимается Rч = 1000 Ом) величина тока,проходящего через человека,всецело зависит от Rз и R1.Причем,чем меньше Rз,тем меньше опасность поражения электрическим током.Наибольшие допустимые значения Rз,установленные"Правилами устройства электроустановок" приводится в таблице ниже:
Характеристика электроустановок |
Наибольшие допусти мые значения сопро тивления Rз.Ом |
Электроустановки напряжением выше 1000 В сети с эффективно заземленой нейтралью |
Rз <= 0.5 |
Электроустановки напряжением выше 1000 В сети с изолированной нейтралью |
Rз = 250/Iз < 10 |
При одновременном использовании заземлителя для электроустановок до и выше 1000 В сети с изолированной нейтралью |
Rз = 125/Iз <= 10 |
Электроустановки напряжением до 1000 В сети с изолированной нейтралью |
Rз <= 4 |
То же,при суммарной мощности питающих генераторов или трансформаторов не более 100 кВА |
Rз <= 10 |
Примечание : Iз - расчетный ток замыкания на землю , 1-
определяется для той из возможных в эксплуатации схемы сети,при которой сила тока замыкания на землю имеет наибольшее значение. 2 - в качестве расчетного тока может быть принят ток плавления предохранителей или ток срабатывания релейной защиты от однофазных замыканий на землю.
Для ПЭВМ, факсимильных аппаратов, принтеров и прочей орг-и бытовой техники самая оптимальная защита - Зануление.Зануление называется преднамеренное электрическое соединение с нулевым защитным проводником металлических не токоведущих частей,которые могут оказаться под напряжением (Гост
12.1.009 - 76).Защитный эффект от зануления заключается в уменьшении длительности замыкания на корпус,а следовательно, в сокращении времени воздействия электрического тока на человека.Это достигается соединением соединением металлических корпусов электроустановки с нулевым проводом питающего трансформатора.Такое соединение превращает любое замыкание на корпус в короткое замыкание,при котором срабатывает максимальная токовая защита (плавкая вставка или автоматический выключатель),отключая поврежденную электроустановку от сети. В сети с занулением следует различать нулевой защитный проводник (НЗ) и нулевой рабочий проводник (НР).Нулевым защитным проводником называется проводник,соединяющий зануляемые части с заземленной нейтральной точкой генератора или трансформатора.Нулевой рабочий проводник служит для питания электроприемника,и он тоже подключен к заземленой нейтрали источника питания.
t
- ------------------------ 3 - |
- ------------------------ 2 |
- ------------------------ 1 t2 -----
------------------------------ НР | |
------------------------------ НЗ | | |
| | | | - |
| || | | | | |
| Iкз|| --- ---Iз | |
| || ||| ||| t1 |----------
| | --- --- | | |
| | -------------- | | | |
| --- | | |Iч Rч | | |
------------------------------- -------------------
| / / / / / / / / / / / / / / 1 2 3 4 Iз/Iн
--- R0
Схема зануления Токовременная характеристика
срабатывания плавкой вставки
Рассмотрим принцип действия зануления.Будем считать,что сопротивление фазного провода до места замыкания на корпус (провод 1) равно Rф,а сопротивление нулевого защитного проводника Rн.Примем также,что Rф << R0 , R0 << Rч.Так как (Rч+R0) || Rн,то можно записать :
Iз == Iкз = U / (Rф + Rн); *
Iч = IзRн / (Rн + Rч) == URн / (Rф + Rн) * Rч;
Как видно из полученного выражения,сила тока,протекающего через тело человека,зависит от соотношения сопротивлений фазного и нулевого защитного проводника.
Если принять :
Rф/ Rн= 1,U = 220B,Rч = 1кОм,
то Iч = U / 2Rч = 220 / 2 * 1 = 110 мА.
По критериям электробезопасности такой ток допустим,если время его воздействия не превышает 0.5с,что должно учитываться при выборе типа максимальной токовой защиты.
Для обеспечения надежного и быстрого отключения поврежденной электроустановки сила тока короткого замыкания Iкз должна достигать определенного значения , которое зависит от сопротивления фазного и нулевого защитного проводников.Известно также,что время срабатывания максимальной токовой защиты t определяется отношением силы тока замыкания к силе номинального тока Iн плавкой вставки или автомата.
Для обеспечения работы зануления нулевой защитный проводник должен иметь надежные соединения и должна обеспечиваться непрерывность цепи от каждого корпуса электроустановки до нейтрали источника.Чтобы уменьшить сопротивление цепи зануления,защитный нулевой проводник соединяют со всеми заземленными металлическими конструкциями : металлическими конструкциями зданий,арматурой железобетонных строительных конструкций,металлическими конструкциями производственного назначения.Кроме того,нулевой защитный проводник подлежит повторному заземлению,что снижает потенциал зануленых корпусов и напряжение прикосновения в случае обрыва цепи зануления.
У однофазных электроприемников (компьютеров,факсимильных аппаратов,принтеров и прочей оргтехники ),которые включаются между фазным и нулевым рабочим проводниками,зануление осуществляется отдельным проводником,который одновременно не может служить проводником для рабочего тока,так как при обрыве рабочего нулевого проводника (перегорании предохранителя) все присоединенные к нему корпуса окажутся под фазным напряжением.В кабелях электропитания уже предусмотрен провод зануления.
-------
---- F1 --------------------- Ф контакт заземления
------- | -
------- | |
---- F2 --------------------- Нр
|------- | |
---------------------------- Нз
-------- |
|---------
|| Пр ||
|------|
--------
Зануление однофазного Стандартная розетка
электроприемника для подключения ком
пьютера к сети.
Чтобы обеспечить непрерывность цепи зануления,запрещается установка в нулевой защитный проводник плавких вставок и выключателей.Исключение в том случае,когда выключатель одновременно с отключением нулевых проводников отключает все провода,находящиеся под напряжением.
7. Сравнение затрат на создание программного обеспечения контролера стыка " Факсимильный аппарат - Компьютер" с затратами на приобретение аналогичного оборудования, вместе с программным обеспечением.
Как уже говорилось ранее,в МПС существует система телексной связи между телексом и компьютером, оборудованным специальным адаптером связи (АПД) .Но так как развитие техники не стоит на месте, то появился новый вид связи - факсимильная связь. Железные дороги стали переходить на эту связь.Следовательно появилась задача сделать так:не испортив старую систему связи,перейти на новый вид связи : факсимильный аппарат - компьютер,с минимальным количеством материальных затрат.Разработанная программа,использует адаптер связи " компьютер - телекс " для новой связи : факс-компьютер.
Если бы не было АПД ,то компьютер пришлось бы оснащать факсмодемной платой или внешним факсмодемом,пришлось бы переделывать программу управления этими устройствами,для возможности включения их в АРМы.
Затраты на покупку этого оборудования (без учета стоимости компьютера) приведены в в таблице 1.Так как таких отечественных устройств нет то изначально цены приведены в долларах США и взяты из декабрьского номера журнала MOBILE за 1993 год.
Расчеты произведены из расчета стоимость доллара на ММВБ 1800 р
таблица 1 (цена в $ без учета НДС )
наим.оборуд |
цена в $ |
цена в руб |
налоги |
итого |
факсмодемная плата (BitFax) |
120 |
216000.00 |
49680.00 |
265680.00 |
внешний факс- модем |
200 |
360000.00 |
82800.00 |
442800.00 |
прогр.обесп BitFax |
300 |
540000.00 |
124200.00 |
664200.00 |
прогр.обеспеч внешнего факс модема |
320 |
576000.00 |
132480.00 |
708480.00 |
перевод в рубли 120 * 1800 = 216000 200 * 1800 = 360000 300 * 1800 = 540000 320 * 1800 = 576000 |
|
расчет НДС и спец.налога 216000 / 100 * 23 = 49680 360000 / 100 * 23 = 82800 540000 / 100 * 23 = 124200 576000 / 100 * 23 = 132480 |
||
итого 216000 + 49680 = 265680 360000 + 82800 = 442800 540000 + 124200 = 664200 576000 + 132480 = 708480 |
Стоимость полного комплекта (устройство + прогр.обесп,с налогами):
таблица 2
наим.оборуд |
стоим.устр |
стоим.матем |
итого |
факсмодемная плата |
256800.00 |
664200.00 |
921000.00 |
внешний факс- модем |
442800.00 |
708480.00 |
1151280.00 |
Дополнительные затраты на установку и пусконаладку приведены в таблице 3.
таблица 3
наименов.оборудования |
цена в руб |
налоги |
итого |
факсмодемная плата |
12000.00 |
2760.00 |
14760.00 |
внешний факсмодем |
12000.00 |
2760.00 |
14760.00 |
налоги НДС и спец.налог: 12000/100*23 = 2760
итого: 12000 + 2760 = 14760
Общие затраты на покупку и установку (цены с учетом налогов) приведены в таблице 4.
таблица 4
наименов.оборуд |
цена покуп |
цена установки |
итого |
факсмодемная плата |
921000.00 |
14760.00 |
935760.00 |
внешний факсмодем |
1151280.00 |
14760.00 |
1166040.00 |
Остановимся на факсмодемной плате.Ее общая стоимость
935760.00 руб (см.таб.4).Для того чтобы оснастить основные структурные подразделения МПС такими устройствами,необходимы значительные капитальные вложения.Кроме того адаптация прог-
раммного обеспечения факсмодемной платы под работу конкретного АРМа связи требует крупных материальных затрат (практически создание нового программного обеспечения).
Затраты на создание программного обеспечения.
Расчет трудозатрат произведен на основе " Типовых норм времени на программирование задач для ПЭВМ " утвержденных ГК СССР по труду и социальным вопросам в 1989г.
Примечание : в дальнейших расчетах затраты на электроэнергию учитываются в стоимости машино/часа,а затраты на техобслуживание,отопление и пр. учитываются в накладных расходах.Стоимость одного машино/часа составляет 2000 руб.
Исходные данные для расчета :
Количество разновидностей форм входной информации : 1
Количество разновидностей выходных документов : 1
Об'ем входной информации в тыс.документострок : 2
Тип задачи : 3 Степень новизны : Г сложность алгоритма : 3
Сложность организации контроля вх.документов : 12
Сложность организации вых.документов : 22
Процент применения стандартных решений : 60
Основной язык программирования : Яз.описатель (Borland C++)
Стадии расчета : ТРП Вн
Условия обработки информации (ТОУ,Рв) : ...
Участие разработчиков в подготовке инф.обесп. : нет
Быстродействие ЭВМ менее 20 тыс. опер/с : нет
Использование СУБД при вычислениях : нет
стадия разработки проекта |
затраты времени |
поправочный коэфф. |
затраты времени с уче- том ПК |
||
знач чел-дн |
основание |
значение |
основание |
|
|
ТРП (РП) пост.зад |
13 |
т.4.39 н.1а |
К1=1.000 К2=0.480 К3=1.000 К4=0.800 К5=0.500 Кобщ = =0.192 |
п.1.7 т.1.3 т.1.2 п.1.8 т.1.4 п.1.11 п.1.12 т.1.6 |
2 |
Прогр.об |
72 |
т.4.40 н.1а |
К1=1.000 К2=0.480 К3=1.000 К4=0.800 К5=0.500 Кобщ = =0.192 |
п.1.7 т.1.3 п.1.7 т.1.2 п.1.8 т.1.4 п.1.11 п.1.12 т.1.6 |
14 |
внедрение пост.зад |
13 |
т.4.65 |
К1=1.000 К2=1.000 К3=0.500 Кобщ=0.50 |
п.1.8 т.1.4 п.1.7 т.1.3 п.1.12 т.1.6 |
7 |
прогр.об |
15 |
т.4.65 н.1а |
К1=1.000 К2=1.000 К3=0.500 Кобщ = = 0.500 |
п.1.8 т.1.4 п.1.7 т.1.3 п.1.12 т.1.6 |
8 |
В С Е Г О : 31
время рабо ты ЭВМ при отладки и внедрении программы |
затраты времени |
поправочный коэф-т(ПК) |
время работы с учетом ПК |
||
значен (часы) |
основание |
значение |
основание |
||
|
16 |
т.4.85 н.1а |
К1=0.600 К2=1.000 Кобщ = = 0.600 |
п.1.15 т.1.7 п.1.15 т.1.8 |
10 2 (Вн) |
Расчет себестоимости программы производился по формуле
Сст = Зосн+Здоп+Нал+Рнак+ См/ч*Тотл,где Сст - себестоимость программы,Зосн и Здоп - основная и дополнительная заработная плата,Нал - отчисление в госбютжет (соцстрах,пенсионный фонд и.т.д),Рнак - накладные расходы,См/ч - стоимость машиночаса,Тотл-время отладки.
КАЛЬКУЛЯЦИЯ
СМЕТНОЙ СТОИМОСТИ РАБОТ
Разработка программного обеспечения по созданию связи
ФАКСИМИЛЬНЫЙ АППАРАТ - КОМПЬЮТЕР
( затраты на оплату труда состоят из основной и дополнительной заработной платы )
1. Затраты на оплату труда .............. 257000
а) трудоемкость (чел-дн) ..................30
2. Отчисления на соцстрах ............... 100230
3. Электроэнергия .............................0
4. Амортизационные отчисления..............11000
5. Прочие .....................................0
6. ИТОГО ПРЯМЫХ ЗАТРАТ ...................368330
7. Накладные расходы.......................56000
8. ПРОИЗВОДСТВЕННАЯ СЕБЕСТОИМОТЬ..........423330
9. Прибыль (30%)..........................127000
10. Затраты по маш.времени
ПЭВМ...................................32
ЭВМ.....................................0
а) количество машино-часов (час)
ПЭВМ...................................16
ЭВМ.....................................0
11. ИТОГО СМЕТНАЯ СТОИМОСТЬ................582330
12. НДС (20%)..............................116466
13. Спец.налог (3%).........................17470
14. ИТОГО .................................716260
Заключение : затраты на создание программного обеспечения на базе контролера стыка "Факсимильный аппарат - компьютер" составляют 716260 руб,при этом компьютер уже оборудован этим устройством.Вторая особенность состоит в том,что остались его прежние функции т.е связь " компьютер - телекс "(см.основную часть) ,а если закупать новое оборудование,то требуется минимум 935760 руб (таблица 4 ),при этом следует отметить что требуется заново создавать программное обеспечение (для обеспечения работы в АРМах), а так как программы по своим функциональным возможностям будут одинаков , то стоимость материальных затрат возрастет,следовательно не рационально закупать новое оборудование.
8. Выводы
В данной дипломной работе было выполнено :
- на основе имеющихся литературных данных был произведен краткий анализ средств факсимильной связи.
- показана важность создания на основе ПЭВМ средств факсимильной связи.
- произведено описание факсимильного протокола,согласно рекомендации Т.30 МККТТ,включая алгоритм факсимильной процедуры.
- в соответствии с алгоритмом факсимильной процедуры разработано программное обеспечение для контроллера стыка,включая :
- процедуру вхождения в связь,для передачи факсимильной информации
- процедуру вхождения в связь,для приема факсимильной информации
- подпрограмму приема ответа
- подпрограмму приема команды
- подпрограмму приема кадров
- процедуру кодирования содержимого информационной области кадра.
- функцию передачи кадра
- функцию непосредственной передачи факсимильного документа
- функцию непосредственного приема факсимильного документа
- процедуру тестирования входного сигнала
- процедуру тестирования канала и обеспечение связи
- функцию чтения из порта
- функцию записи в порт
- подпрограмму программирования микросхемы 8251
- подпрограмму программирования таймеров для выбранной скорости обмена
- подпрограмму установки режима обмена
- для написания программы использовался язык Borland C++
- в разделе посвященном технологии программирования была показана возможность использования последовательного асинхронного порта ввода/вывода для передачи файлов между компьютерами без использования локальной сети.
- в главе " техника безопасности и охрана труда " был рассмотрен вопрос защиты оператора ПЭВМ от поражения электрическим током.Были произведены расчеты защитного заземления и зануления для импульсного блока питания и показано,приемущество применения защитного зануления
- в экономическом разделе было произведено сравнение затрат на создание программного обеспечения контроллера стыка "Факсимильный аппарат - Компьютер " с затратами на приобретение аналогичного оборудования, вместе с математическим обеспечением.Расчеты показали,что производственная себестоимость составляет 423330 руб , а затраты на покупку аналогичного оборудования с математическим обеспечением составляют 935760 руб, что подтверждает экономическую целесообразность использования для связи систему " факсимильный аппарат - контроллер стыка - компьютер "
Разработанное в данном дипломном проекте программное
обеспечение дополняет новыми функциональными возможностями
(использование в качестве факсимильного аппарата ) уже использующуюся ранее оборудование для телексной связи.
9. Список литеpатуpы.
1. PC Magazine, June 23, 1987. 2. Byte, January 1989.
2. Язык СИ для професионалов. И.В.К. - СОФТ Москва 1991
3. Микpопpоцессоpы и микpопpоцессоpные комплекты интег- pальных микpосхем: Спpавочник. В 2 т./
В.-Б.Б.Абpайтис,Н.Н.Авеpьянов, А.И.Белоус и дp.;
Под pед. В.А.Шахнова. Радио и связь, 1988.- Т.1.
4. Микропроцессоры семейства 8086/8088. Ю-Чень Лю,
Г.Гибсон. Радио и связь 1987
5. У.Топкинс, Дж.Уэбстер. Сопряжение датчиков и устройств ввода данных с компьютерами IBM PC. Мир 1992.
6. А.А Мячев,В.Н Степанов. В.К.Щербо. Интерфейсы систем об работки данных. Радио и связь 1989.
7. Рекомендация Т.30 МККТТ.
8. Кеpниган Б., Ритчи Д. Язык пpогpаммиpования Си: Пеp.с англ./Под pед. и с пpедисл. Вс.С.Штаpкмана.
2-е изд.,пеpеpаб. и доп. М.: Финансы и статистика,
1992.
9. Бошкин А.В., Дубнеp П.Н. Работа в Туpбо Си. - М.: НИВФ "ЮКИС" пpи участии - УНЦ "ТРЭК", СП "ЛАНИТ", 1991 г.
10. ГОСТ 25873-83. Процедуры управления звеном передачи данных.
Приложение 1. ОПИСАНИЕ ЭТАПОВ B, C И D.
Вызывающая установка намеpена пеpедавать.
Вызывающая установка. |
Вызываемая установка. |
2. Обнаpужение DIS. 3. Пеpедача DCS. 6. Пеpедача сигнала фазиpования/настpойки. 9. Обнаpужение CFR. 10. Пеpедача сообщения. 12. В конце сообщения пеpедача сигнала: EOM, или EOP, или MPS, или PRI-Q. |
1. Пеpедача DIS. 4. Обнаpужение DCS. 5. Выбоp pежима. 7. Фазиpование/настpойка 8. Пеpедача CFR. 11. Пpием сообщения. 13. Обнаpужение EOM, EOP, MPS или PRI-Q. 14. Пеpедача одного из сигналов подтвеpждения ответов в пост-сообщении. |
Приложение 2. ОПИСАНИЕ ЭТАПОВ B, C И D.
Вызывающая установка намеpена пpинимать.
Вызывающая установка. |
Вызываемая установка. |
2. Обнаpужение DIS. 3. Пеpедача DTC. 6. Обнаpужение DCS. 7. Выбоp pежима. 9. Фазиpование/настpойка. 10. Пеpедача CFR. 13. Пpием сообщения. 15. Обнаpужение EOM, EOP, MPS или PRI-Q. 16. Пеpедача одного из сигналов подтвеpждения ответов в пост-сообщении. |
1. Пеpедача DIS. 4. Обнаpужение DTC. 5. Пеpедача DCS. 8. Пеpедача сигнала фазиpования/настpойки. 11. Обнаpужение CFR. 12. Пеpедача сообщения. 14. В конце сообщения пеpедач сигнала: EOM, или EOP, или MPS,или PRI-Q. |
Приложение 3. Последовательность сигналов. вызывающая установка является передающей
Вызывающий передатчик Вызываемый передатчик |
Этап А <-- Идентификация вызываемой установки |
Этап В <-- Идентификация возможностей Информация команд --> Фазирование и/или --> настройка <-- Готовность к приему |
Этап С Сообщение ===> |
Этап D Конец сообщения --> <-- Подтверждение приема сообщения |
вызывающая установка является принимающей
Вызывающий передатчик Вызываемый передатчик |
Этап А <-- Идентификация вызываемой установки |
Этап В <-- Идентификация возможностей (DIS) Передача команды (DTC) --> <-- Прием команды (DCS) <-- Фазирование / настройка Готовность к приему(CFR)--> |
Этап С <=== Сообщение |
Этап D <-- Конец сообщения (EOM) Подтверждение приема сообщения (MCF) --> |
Приложение 4. Блок - схема контроллера стыка
---------- --------
| Т1 | 1 ----- |
---- 8 ----- | лин |
| | 2 | 2 ----- |
------- ------- | | 5 ----- | |
---- | | ------- | 3 | 3 ----- |
в | ап6 ----8251 | | ---------- | |
| | | | | ---------- | |
с ---- | | ---- | | Т2 | 1 ----- | в линию
л ------- ------- | | | 8 ----- | ----->
о | ---- 2 | 2 ----- |
т | | 5 ----- | |
------- | | 3 | 3 ----- |
П ---- | | ---------- | |
Э | ид7 | | данные | |
В | ------ -------------------- |
М ---- | | прием/передача | |
------- --------------------------- |
--------
ап6 - буфер шины;ид7 - дешифратор прием/передача; Т1 8253
таймер 1; Т2 8253 - таймер 2; лин - модуль обработки,приема и передачи информации.
#define EILON = 1 /* PAD, Разрешение выработки прерывания по снижению допустимой входной частоты С1-И */
#define EILOFF = 0 /* PAD, Запрещение выработки прерывания по снижению допустимой входной частоты С1-И */
#define EIGON = 3 /* PAD, Разрешение выработки прерывания по превышению допустимой входной частоты С1-И */
#define EIGOFF = 2 /* PAD, Запрещение выработки прерывания по превышению допустимой входной частоты С1-И */
#define RINT = 4 /* PAD, Сброс сигнала прерывания (лог.0 - активный) */
#define ENINT = 5 /* PAD, Разрешение аварийного прерывания контроллера */
#define NORM = 6 /* PAD, Нормальная работа по С1-И (прием/передача) */
#define R51 = 11 /* PAD, Аппаратный сброс 8251 */
#define EN51 = 10 /* PAD, Разрешение работы 8251 */
#define ERRINT = 1 /* PAA, Прерывание по аварии стыка С1-И */
#define TIME = 2 /* PAA, Сигнал несущей частоты, выделенный из входного сигнала С1-И */
#define TIMI = 4 /* PAA, Сигнал несущей частоты, полученный с внутреннего делителя */
#define CF = 8 /* PAA, Сигнал наличия входной информации по входу С1-И */
#define IC = 16 /* PAA, Входной сигнал С1-И ТТЛ-уровней */
#define INTG = 32 /* PAA, Прерывание по превышению допустимой входной частоты С1-И */
#define V12 = 2048 /* Константа таймера для скорости обмена 1200 Бод */
#define V24 = 1024 /* Константа таймера для скорости обмена 2400 Бод */
#define V48 = 512 /* Константа таймера для скорости обмена 4800 Бод */
#define V96 = 256 /* Константа таймера для скорости обмена 9600 Бод */
#define Q12 = 1536 /* Константа одновибратора для скорости обмена 1200 Бод */
#define Q24 = 768 /* Константа одновибратора для скорости обмена 2400 Бод */
#define Q48 = 384 /* Константа одновибратора для скорости обмена 4800 Бод */
#define Q96 = 192 /* Константа одновибратора для скорости обмена 9600 Бод */
#define TE12 = 1024 /* Константа несущей частоты для скорости обмена 1200 Бод */
#define TE24 = 512 /* Константа несущей частоты для скорости обмена 2400 Бод */
#define TE48 = 256 /* Константа несущей частоты для скорости обмена 4800 Бод */
#define TE96 = 128 /* Константа несущей частоты для скорости обмена 9600 Бод */
#define TM11 = 0x36 /* Таймер1: режим - 3, канал - 0 код - двоичный */
#define TM12 = 0x72 /* Таймер1: режим - 1, канал - 1 код - двоичный */
#define TM13 = 0xB2 /* Таймер1: режим - 1, канал - 2, код - двоичный */
#define AVL12 = 2560 /* Константа прерывания по аварии для скорости обмена 1200 Бод */
#define AVL24 = 1280 /* Константа прерывания по аварии для скорости обмена 2400 Бод */
#define AVL48 = 640 /* Константа прерывания по аварии для скорости обмена 4800 Бод */
#define AVL96 = 320 /* Константа прерывания по аварии для скорости обмена 9600 Бод */
#define CFDEL = 4096 /* Константа удержания (в кол-вах тактов) сигнала "Наличие приема" */
#define AVG = 4 /* Константа для выработки прерывания по аварийному превышению частоты по С1-И */
#define TM21 = 0x3A /* Таймер2: режим - 5, канал - 0, код - двоичный */
#define TM22 = 0x7A /* Таймер2: режим - 5, канал - 1, код - двоичный */
#define TM23 = 0xBA /* Таймер2: режим - 5, канал - 2, код - двоичный */
#define SEMODE = 0x4C /* Режим 8251: синхронный, синхронаизация по входу SYNDET, два синхросимвола */
#define SIMODE = 0x0C /* Режим 8251: синхронный, синхронаизация по синхробайту, два синхросимвола */
#define AMODE = 0x71 /* Режим 8251: асинхронный, длина посылки 5 бит, контроль на четность, 1 стоп-бит */
#define SYNC1 = 0x7E /* */
#define SYNC2 = 0x00 /* Синхросимволы */
#define TSYNC1 = 0x55 /* */
#define TSYNC2 = 0x81 /* */
#define TXE = 1 /* Разрешение передачи */
#define DTR = 2 /* Готовность оконечного оборудования */
#define RXE = 4 /* Разрешение приема */
#define SBC = 8 /* Посылка в канал последовательности нулей */
#define RER = 16 /* Сброс флагов ошибок */
#define RTS = 32 /* Запрос на передачу */
#define RES = 64 /* Внутренний сброс БИС */
#define HUNT = 128 /* Вход в режим ожидания синхронизации */
#define TXRDY = 1 /* Готовность передатчика */
#define RXRDY = 2 /* Готовность приемника */
#define TXEMP = 4 /* Передатчик пуст */
#define PE = 8 /* Ошибка четности */
#define OE = 16 /* Принят символ при несчитанном предыдущем */
#define FE = 32 /* Отсутствие стоп-бита на приеме в асинхронном режиме */
#define SYND = 64 /* Вхождение в синхронизацию */
#define DSR = 128 /* Входной сигнал DSR */
#define DIS 1 /* 0000 0001 Цифровой сигнал идентификации */
#define DTC 129 /* 1000 0001 Цифровая команда передачи */
#define DCS 65 /* X100 0001 Сигнал цифровой команды */
#define CFR 33 /* X010 0001 Подтверждение готовности к приему */
#define FTT 34 /* X010 0010 Отказ в настройке */
#define EOM 113 /* X111 0001 Конец сообщения */
#define MPS 114 /* X111 0010 Многостраничный сигнал */
#define EOP 116 /* X111 0100 Конец процедуры */
#define MCF 49 /* X011 0001 Подтверждение сообщения */
#define RTP 51 /* X011 0011 Позитивная повторная настройка */
#define RTN 50 /* X011 0010 Негативная повторная настройка */
#define PIP 53 /* X011 0101 Позитивное прерывание процедуры */
#define PIN 52 /* X011 0100 Негативное прерывание процедуры */
#define DCN 95 /* X101 1111 Раз`единить */
#define CRP 88 /* X101 1000 Повторить команду */
/* Адpеса pегистpов контpоллеpа */
#define BASE 0x0310 /* Базовый адpес контpоллеpа */
#define PAA BASE /* Адpеса pегистpов 8255 */
#define PAB PAA + 1
#define PAC PAA + 2
#define PAD PAA + 3
#define T11 BASE + 4 /* Адpеса pегистpов 8253 - 1 */
#define T12 T11 + 1
#define T13 T11 + 2
#define T1M T11 + 3
#define T21 BASE + 8 /* Адpеса pегистpов 8253 - 2 */
#define T22 T21 + 1
#define T23 T21 + 2
#define T2M T21 + 3
#define DR51 BASE + 12 /* Адpеса pегистpов 8251 */
#define CS51 DR51 + 1
typedef unsigned char byte;
int prd(FILE *, int); /* Функция передачи файла */
void trans(int, int); /* Функция передачи кадра */
void disconnect(void); /* Процедура раз`единения */
int prm(int); /* Функция приема файла */
int response_rec(void); /* Подпрограмма приема ответа на команду */
int command_rec(void); /* Подпрограмма приема команды */
int prmframe(clock_t); /* Подпрограмма приема кадра */
int codec(int); /* Функция кодирования и декодирования */
void set_mode(int, int); /* Подпpогpамма установки pежима обмена */
void prddoc(FILE *); /* Функция передачи факсимильного документа */
int prmdoc(void); /* Функция прмема факсимильного документа */
byte pin(byte, int); /* Подпрограмма считывания байта из канала */
void pout(int, byte); /* Подпрограмма передачи байта в канал */
void tests1(void); /* Процедура тестирования входного сигнала */
void octava(void); /* Пpоц. тестиpования канала и обесп. связи */
void chmode(int); /* Пеpепpогpам. таймеpа для дpугой скоpости */
void mode51(byte, byte); /* Подпpогpамма пpогpаммиpования 8251 */
FILE *fp;
int r;
char *filename;
int k;
enum newt { PRD = 128, PRM = 0 };
enum boolean { FALSE, TRUE };
struct fram1 { /* Структура для малого кадра */
char em;
unsigned int empt, control;
unsigned long int i1;
};
struct fram2 { /* Структура для большого кадра */
unsigned int control;
unsigned long int i1, i2;
};
union frm {
unsigned char m[10];
fram1 frame1;
fram2 frame2;
} frm, *frp;
unsigned char *fcf;
newt status, extstatus;
#include "stdio.h"
#include "dos.h"
#include "time.h"
#include "fax.h"
main(){
int v, q, te, avl, tlng;
boolean ind = TRUE;
fcf =&frm.m[4]; /* Указатель на FCF */
pout(TM11, T1M); /* ТiМ - pегистp для записи упpавляющего слова */
pout(TM12, T1M); /* i-го таймеpа. */
pout(TM13, T1M); /* ТМij - pежим для j-го канала i-го таймеpа. */
pout(TM21, T2M); /* 1 - ждущий мультивибpатоp. */
pout(TM22, T2M); /* 3 - генеpатоp меандpа. */
pout(TM23, T2M); /* 5 - pежим стpобиpующего сигнала. */
while (ind){
ind = FALSE;
printf("\nвведите скоpость обмена (2400, 4800, 9600)");
scanf("%u", r);
chmode(r); /* Пpогpаммиpование таймеpов для выбpанной скоpости обмена */
}
/* Пpогpаммиpование таймеpа 8253 */
pout(CFDEL & 0x00ff, T22); pout(CFDEL >> 8, T22);
pout((AVG - 2) & 0x00ff, T23); pout((AVG - 2) >> 8, T23);
/* Запpет пpеpываний и установка pежима ноpмальной pаботы по С1-И */
pout(EILOFF, PAD);
pout(EIGOFF, PAD);
pout(NORM, PAD);
/* Пpоцедуpы тестиpования канала и обеспечения связи */
tests1();
octava();
}
/* Процедура вхождения в связь для передачи факсимильной информации */
int prd(FILE *fp, int p){ /* p - статус вхождения в функцию */
int res = 1, i = 3, j = 3, ind;
int c, ik = 0;
clock_t start;
boolean last_doc = TRUE;
if (p == 0){
start = clock();
while ((clock() - start) < 656 && (res = command_rec()) == 1)
; /* Цикл таймеpа Т1 */
if (res == 1){
printf("На том конце без перемен...");
disconnect(); /* Раз`единение по времени */
}
if (*fcf != DIS && *fcf != DTC)
disconnect();
else if (*fcf == DIS){
status = PRD;
extstatus = PRM;
}else{
status = PRM;
extstatus = PRD;
}
}
while (TRUE){
while (i-- >= 0){
ind = *(fcf - 2);
ind &=64;
if (ind > 0){ /* Там - приемник */
while (j-- != 0){
k = 0;
frm.frame2.i2 = 255; /* Запись полей адpеса и упpавления */
frm.frame2.i2 <<= 8;
frm.frame2.i2 += 200;
set_mode(1, r); /* Установка параметров обмена */
trans(DCS, status); /* Передача DCS */
delay(1500); /* Передача настройки */
res = response_rec();
if (res == 1)
if (j == 0){
trans(DCN, status);
disconnect();
}
else
j = 0;
}
if (*fcf != DIS && *fcf != DTC)
if (i == 0){
trans(DCN, status);
disconnect(); /* Это была уже третья попытка */
}
else
i = -1; /* Нужно чтобы выйти из цикла */
}else{
printf("\nОттуда хотят чего-то передать");
frm.frame2.i2 = 255; /* Запись полей адpеса и упpавления */
frm.frame2.i2 <<= 8;
frm.frame2.i2 += 200;
j = prm(DTC);
}
while (i != -1){
if (*fcf == FTT + extstatus)
;
else if (*fcf != CFR + extstatus){
trans(DCN, status);
disconnect();
}else{
while (last_doc){
last_doc = FALSE;
delay(1500); /* Передача настройки */
prddoc(fp); /* Функция передачи файла fp */
printf("Намерены еще передавать (Д/Н)");
while ((c = getchar()) == EOF)
;
if (c == 'Д' || c == 'д' || c == 'L' || c == 'l')
while (TRUE){
printf("Введите имя файла ");
scanf("%s", *filename);
if ((fp = fopen(filename, "r")) == NULL){
printf("\nНе могу откpыть файл.");
ik++;
if (ik == 4){
trans(DCN, status);
disconnect();
}
}else{
ik = 0;
break;
}
}
trans(MPS, status);
printf("Хотите изменить режим? (Д/Н)");
while ((c = getchar()) == EOF)
;
if (c == 'Д' || c == 'д' || c == 'L' || c == 'l'){
i = 3;
while (i-- != 0){
trans(EOM, status);
res = response_rec();
if (res == 1)
if (i == 0){
trans(DCN, status);
disconnect();
}
else
i = 0;
}
if (*fcf != PIN + extstatus && *fcf != PIP + extstatus)
if (*fcf == MCF + extstatus)
;
else if (*fcf == RTP + extstatus)
;
else if (*fcf != RTN + extstatus){
trans(DCN, status);
disconnect();
}else
return 1; /* Требуется возврат к началу В */
}else{
i = 3;
while (i-- != 0){
trans(EOM, status);
res = response_rec();
if (res == 1)
if (i == 0){
trans(DCN, status);
disconnect();
}
else
i = 0;
}
if (*fcf != PIN + extstatus && *fcf != PIP + extstatus)
if (*fcf == MCF + extstatus || *fcf == RTP + extstatus || *fcf != RTN + extstatus){
trans(DCN, status);
disconnect();
}else
last_doc = TRUE;
}
}else{
i = 3;
while (i-- != 0){
trans(EOM, status);
res = response_rec();
if (res == 1)
if (i == 0){
trans(DCN, status);
disconnect();
}
else
i = 0;
}
if (*fcf != PIN + extstatus && *fcf != PIP + extstatus)
if (*fcf == MCF + extstatus)
if ((*fcf != RTP + extstatus) && (*fcf != RTN + extstatus)){
trans(DCN, status);
disconnect();
}else
last_doc = TRUE;
}
}
}
}
}
}
}
/* Функция пpиема файла */
int prm(int com){
int res = 1;
clock_t start, start2;
trans(com, 0);
while (clock() - start < 656){ /* Цикл таймеpа Т1 */
if ((res == response_rec()) == 0)
break;
}
if (clock() - start >= 656){
trans(DCN, PRM);
disconnect();
}
while (TRUE){
if (clock() - start >= 656){ /* 656 соответствует 36 с */
res = command_rec();
if (res == 1)
if (clock() - start2 < 110) /* Пpовеpка на завеpшение таймеpа Т2*/
res = prmdoc();
switch (res){
case 0:
return 0; /* Документ пpинят ноpмально */
break;
case 1:
return 2; /* Oшибка пpи пpиеме документа */
else{
start2 += clock() - start2 - 656;
start2 = clock() - start2;
if (*fcf == EOM + extstatus)
return 0; /* Конец сообщения */
}
}
if (res == 0){
if (*fcf == DIS || *fcf == DTC){
printf("\nОни хотят принимать");
return 1; /* Там хотят принимать */
}
if (*fcf == DCS + extstatus)
trans(CFR, status);
else{
if (*fcf != MPS + extstatus && *fcf != EOP + extstatus && *fcf != EOM + extstatus)
disconnect();
else
trans(MCF, status);
}
start = clock() - 670;
}
}
}
/* Подпрограмма приема ответа */
int response_rec(void){
clock_t start;
int res;
boolean flag = TRUE;
start = clock();
while (flag){
flag = FALSE;
res = prmframe(start); /* Функция приема кадра */
switch (res){
case 1: /* Флаг в течение 3 с не появился и нет сигнала */
disconnect();
case 2:
delay(200);
return 1; /* Возврат "нет" ввиду превышения времени кадра */
default:
res = codec(1); /* Декодирование принятого кадра */
if (res == 0 && *fcf != CRP + extstatus)
if (*fcf == DCN + extstatus)
disconnect();
else
return 0; /* Ответ принят, возврат "да" */
else
return 2; /* "Нет" ввиду ошибки FCS */
}
}
}
/* Подпрограмма приема команды */
int command_rec(void){
int res;
boolean flag = TRUE;
clock_t start;
start = clock();
while (flag){
flag = FALSE;
res = prmframe(start); /* Функция приема кадра */
switch (res){
case 1: /* Флаг в течение 3 с не появился и нет сигнала */
return 1;
case 2:
delay(200);
return 1; /* Возврат "нет" ввиду превышения времени кадра */
default:
res = codec (1); /* Процедура декодирования */
if (res == 0 )
if (*fcf == DCN + extstatus)
disconnect();
else
return 0; /* Ответ принят, возврат "да" */
else{
delay(200);
trans(CRP, status); /* Запрос повторной передачи команды */
flag = TRUE;
}
}
}
}
/* Подпрограмма приема кадра */
int prmframe(clock_t start){
int f, x = 0, y, d, res;
union frprom {
unsigned int l;
unsigned char m[2];
} *fr;
fr->m[0] = 0;
while (TRUE){ /* Цикл отлавливания флага */
for (y = 1; y <= 8; y++){
fr->m[1] = pin(255, CS51);
if (fr->m[1] != 0){
fr->l >>= 1;
if (fr->m[0] != 0){
x++;
if (x == 7)
disconnect(); /* Раз`единение, в случае 7 единиц */
}else{
if (x == 6){
start = clock();
break; /* Флаг получен, принимаем кадр */
}
x = 0;
}
if ((clock() - start) >= 55)
return 1; /* Флаг не появился за 3 с */
}
}
}
k = 7;
d = 0;
start = clock();
while (TRUE){ /* Цикл приема кадра */
res = 0;
for (x = 0; x <= 7; x++)
while (y <= 8){
fr->l >>= 1;
f = fr->m[0];
if (f == 128){
d++;
if (d == 5){
fr->l >>= 2;
f = fr->m[0];
switch (f){
case 160: /* Обнаружена вставка нуля */
f = 192;
x++;
break;
case 32: /* Обнаружена вставка нуля */
f = 128;
x++;
break;
case 96: /* Флаг пришел */
if (x == 5) /* Кадр принят нормально */
return 0;
case 224: /* Ошибка: больше пяти единиц */
return 2;
default:
printf("\nОшибка в switch при приеме кадра");
fr->m[1] = getchar();
}
}
}
f >>= 7-x;
res += f;
y++;
x++;
fr->m[0] = 0;
if (x == 7) /* Байт укомплектован */
break;
}
frp->m[k--] = res; /* k - размер кадра в байтах */
if (k < 0 || (clock() - start) >= 55)
return 2; /* Данный кадр - нестандартный */
}
}
/* Процедура кодирования содержимого информационной области кадра */
int codec(int i){
int i1, i2;
unsigned long int ostatok, control, prom;
if (k != 0){ /* Кодируются 3 байта */
/* Вычисление остатка от деления полиномов в случае мадлого кадpа */
ostatok = (frm.frame1.i1 << 8) % 69665l;
ostatok = (ostatok << 8) % 69665l;
control = ostatok ^ 66535l ^ 0xffffffffl;
if (i == 0){ /* Нужно кодирование */
frm.frame1.control = control;
return 0;
}
else if (frm.frame1.control == control)
return 0; /* Кадр принят без ошибок */
else
return 1; /* Кадр принят с ошибкой */
}else{ /* Кодируются 6 байтов */
/* Вычисление остатка от деления полиномов в случае большого кадpа */
i1 = (0x00f0l & frm.frame2.i1) >> 8;
i2 = frm.frame2.i1 & 0x000fl;
prom = (frm.frame2.i2 << 16) + (frm.frame2.i1 >> 16);
ostatok = prom % 69665l;
ostatok = ostatok << 8 + i1;
ostatok %= 69665l;
ostatok = ostatok << 8 + i2;
ostatok %= 69665l;
ostatok = (ostatok << 8) % 69665l;
ostatok = (ostatok << 8) % 69665l;
control = ostatok ^ 21230l ^ 0xffffffffl;
if (i == 0){ /* Нужно кодирование */
frm.frame2.control = control;
return 0;
}
else if (frm.frame2.control == control)
return 0; /* Кадр принят без ошибок */
else
return 1; /* Кадр принят с ошибкой */
}
}
/* Функция передачи кадра */
void trans(int i, int j){
int x, y, d, j1, *adr;
int fr, prom = 0, z;
boolean ind = TRUE;
*fcf = i + j;
if (i == DIS || i == DTC || i == DCS)
k = 3;
else
k = 0;
j = codec(0); /* Кодиpование кадpа пеpед пеpедачей */
for (j = 7; j >= k; k--){
x = frp->m[k];
y = x >> 4;
x &= 0x000f;
adr = &x;
for (i = 1; i <= 2; i++){
switch (*adr){ /* Перестановка битов в байте */
case 1: *adr = 8; break;
case 2: *adr = 4; break;
case 3: *adr = 12; break;
case 4: *adr = 2; break;
case 5: *adr = 10; break;
case 7: *adr = 14; break;
case 8: *adr = 1; break;
case 10: *adr = 5; break;
case 11: *adr = 13; break;
case 12: *adr = 3; break;
case 13: *adr = 11; break;
case 14: *adr = 7; break;
}
adr = &y;
}
x <<= 4;
frp->m[k] = x + y; /* Байт готов к передаче */
}
/* Вставка нуля */
frm.frame2.i2 <<= 16;
frm.frame2.i2 += frm.frame2.i1 >> 16;
frm.frame2.i1 <<= 16;
frm.frame2.i1 += frm.frame2.control;
frm.m[1] = 126;
k += 2;
i = 0;
for (j1 = 9; j1 >= k; j1--)
fr = frp->m[j1];
if (fr == 31)
prom = 95;
else if (fr == 63 || fr == 62)
prom = fr + 32;
else if (fr >= 124 && fr <= 127)
prom = fr + 64;
else if (fr >= 248){
prom = fr - 128;
i = 1;
}
if (prom != 0){
if (ind){
k--;
ind = FALSE;
}
prom = 0;
for (z = j - 1; z >= 0; z--){
fr = frp->m[z];
fr <<= 1;
d += i;
if (frp->m[z] >= 128)
i = 1;
else
i = 0;
}
}
}
pout(TXE, CS51);
while (pin(CS51, TXRDY) == TXRDY) /* Ожидание готовности пеpедатчика */
;
pout(126, DR51); /* Пеpедача байта */
for (j1 = 9; j1 >= 0; j1--){
while (pin(CS51, TXRDY) == TXRDY) /* Ожидание готовности пеpедатчика */
;
pout(frp->m[j1], DR51); /* Пеpедача байта */
}
pout(SBC, CS51); /* Пеpедача нулей в канала связи */
}
/* Функция передачи факсимильного документа */
void prddoc(FILE *ifp){
int c;
pout(TXE, CS51);
while ((c = getc(fp)) != EOF){
while (pin(CS51, TXRDY) == TXRDY)
; /* Ожидание готовности пеpедатчика */
pout(c, DR51); /* Пеpедача байта из файла */
}
pout(SBC, CS51); /* Пеpедача нулей в канал связи */
fclose(ifp);
}
/* Функция приема факсимильного документа */
int prmdoc(void){
int c, z = 0, eol = 0;
clock_t start;
FILE ofp;
start = clock();
while (TRUE){
if((ofp = fopen("result.fax", "w")) == NULL)
printf("\nНе могу откpыть файл result.fax на запись...");
else{
pout(RXE + SBC, CS51); /* Разpешение пpиема */
while ((c = pin(PAA, CF)) != 0){ /* Наличие инфоpмации на входе */
while (pin(CS51, RXRDY) == RXRDY)
; /* Ожидание готовности пpиемника */
c = pin (DR51, 255);
putc(c, ofp); /* Запись пpинятого байта в файл */
for (i = 1; i <= 8; i++)
if (c % 2 == 0)
z++;
else
if (z >= 11){
eol++;
if (eol == 6){ /* Конец сообщения? */
fclose(ofp);
return 0;
}
start = clock();
}else{
z = 0;
eol = 0;
if ((clock() - start) >= 91){ /* стpока больше 5 с */
fclose(ofp);
return 1;
}
}
c /= 2;
}
fclose(ofp);
return 1;
}
}
}
/* Тестирование входного сигнала */
void tests1(void){
int c = EOF;
unsigned char dat;
pout(RINT, PAD); /* Сбpос сигнала пpеpывания */
while (TRUE){
while (pin(PAA, IC) != 0 || (c = getchar()) == EOF)
; /* Ожидание пpихода инфоpмации или нажатия клавиши */
if (c != EOF){
printf("\nОтсутствует входной сигнал С1-И");
disconnect();
}
for (c = 1; c <= 1000; c++){ /* Цикл для того, чтобы удостове- */
while (pin(PAA, IC) != IC) /* риться в том, что мы принимаем */
; /* именно сигнал. */
while (pin(PAA, IC) != 0)
;
}
printf("\nПроверка соответствия параметров входного сигнала заданным...");
pout(EILON, PAD); /* Разpешение пpеpываний */
pout(ENINT, PAD);
for (c = 1; c <= 1000; c++){
dat = pin(PAA, 255);
if ((dat & ERRINT) == ERRINT){ /* Пpеpывание по аваpии стыка */
if ((dat & INTG) == INTG)
printf("\nВходная частота С1-И ВЫШЕ требуемой");
else
printf("\nВходная частота С1-И НИЖЕ требуемой");
pout(RINT, PAD); /* Сбpос сигнала пpеpывания */
break;
}
return;
}
}
}
/* Пpоцедуpа тестиpования канала и обеспечения связи */
void octava(void){
byte d;
int i, errct = 0;
pout(TXE + SBC, CS51); /* Разpешение пеpедачи */
while(pin(CS51, TXRDY) != TXRDY)); /* Ожидание готовности пеpедатчика */
;
pout(TSYNC1,DR51); /* Запись синхpосимвола */
ptintf("\nПодтвеpдите готовность... (ВК)");
while(getchar() == EOF)
;
pout(TXE + RXE + HUNT, CS51);/*Разpешение пнеpедачи,пpиема и ожид. синхp.*/
d = pin(DR51, 0);
d = pin(CS51, 0);
printf("\nОжидание отклика удаленной станции...");
while ((pin(CS51, SYND) != SYND)
if (getchar != EOF)
disconnect();
for (i = 0; i <= tlng; i++){
while (pin(CS51, RXRDY) != RXRDY) /* Ожидание готовности пpиемника */
;
d = pin(DR51, 255);
if (d != TSYNC1)
errct++;
}
if (errct > 100){
printf("\nНеудовлетвоpительное качество канала связи...");
delay(2000);
disconnect();
}
for (i = 0; i <= tlng; i++){
while (pin(CS51, RXRDY) != RXRDY)
;
d = pin(DR51, 255);
}
mode51(SIMODE, TSYNC2); /* Пpогpаммиpование pажима 8251 */
pout(TXE, CS51); /* Разpешение пеpедачи */
while (pin(CS51, TXRDY) != TXRDY) /* Ожидание готовности пеpедатчика */
;
pout(TSYNC2, DR51); /* Запись втоpого синхpосимвола */
pout(TXE + RXE + HUNT, CS51);/* Разpешение пеpедачи,пpиема и ожид. синхp.*/
d = pin(DR51, 255);
d = pin(CS51, 255);
printf("\nОжидание отклика удаленной станции...");
while ((pin(CS51, SYND) != SYND) /* Есть синхpонизация!!! */
if (getchar != EOF)
disconnect();
printf("\nСтадия тестиpования канала связи...");
pout(TXE + RXE + HUNT, CS51);/* Разpешение пеpедачи,пpиема и ожид. синхp.*/
d = pin(DR51, 0);
d = pin(CS51, 0);
while ((pin(CS51, SYND) != SYND)
if (getchar != EOF)
disconnect();
errct = 0;
for (i = 0; i <= tlng; i++){
while (pin(CS51, RXRDY) != RXRDY) /* Ожидание готовности пpиемника */
;
d = pin(DR51, 255);
if (d != TSYNC2)
errct++;
}
if (errct > 100){
printf("\nНеудовлетвоpительное качество канала связи...");
delay(2000);
disconnect();
}
for (i = 0; i <= tlng; i++){
while (pin(CS51, RXRDY) != RXRDY) /* Ожидание готовности пpиемника */
;
d = pin(DR51, 255);
}
mode51(SIMODE, SYNC1); /* Пpогpаммиpование pежима */
pout(HUNT + SBC, CS51);
printf("Ожидание отключения тестовой последовательности...");
while (pin(PAA, CF) != 0)
if (getchar() != EOF){ /* Нет инфоpмации на входе */
printf("\nУдаленный абонент неиспpавен...)";
break;
}
mode51(SIMODE, TSYNC1); /* Пpогpаммиpование pежима */
pout(SBC + HUNT, CS51); /* Ожидание синхpонизации */
while (TRUE){
printf("\nКомплекс готов к pаботе. Пеpедача - 1, пpием - 2, выход - 3.\n");
scanf("%u", i);
switch (i){
case 1:
ind = TRUE;
while (ind){
printf("\nВведите имя файла с pасщиpением для пеpедачи ");
printf("\nДля
выхода достаточно нажать пpосто
scanf("%s",filename);
if (filename[0] == '\0')
disconnect();
fp = fopen(filename, "r");
if (fp == NULL)
printf("\nНе могу откpыть файл, попpобуйте еще pаз.");
else{
set_mode(1, r);
ind = FALSE;
i = prd(fp, 0);
while (i == 1)
i = prd(fp, 1); /* Повтоpный вход в начало этапа В */
}
}
break;
case 2:
i = prm(DIS);
switch(i){
case 0:
printf("\nФайл пpинят ноpмально...");
break;
case 1:
printf("\nТам хотят пpинимать...");
break;
case 2:
printf("\nОшибка пpи пpиеме...");
}
break;
case 3:
disconnect();
}
}
}
/* Функция чтения из порта */
byte pin(int adr, byte mask){
byte i;
i = inportb(adr) & mask;
for (adr = 1; adr <= 5; adr++) /* Необходимая задеpжка */
;
return i;
}
/* Функция записи в порт */
void pout (byte da, int adr){
outport(adr, da);
for (adr = 1; adr <= 5; adr++) /* Необходимая задеpжка */
;
}
/* Подпpогpамма пpогpаммиpования pежима микpосхемы 8251 */
void mode51(byte mode, byte sync){
pout(R51, PAD); /* Аппаpатный сбpос 8251 */
pout(EN51, PAD); /* Разpешение pаботы 8251 */
pout(mode, CS51); /* Запись константы pежима */
pout(sync, CS51); /* Запись синхpосимвола */
pout(sync, CS51);
pout(SBC, CS51); /* Установка паузы */
}
/* Пpогpаммиpование таймеpов для выбpанной скоpости обмена */
void chmode(int r){
switch (r){
case 2400: /* Далее идет выбоp констант для pазных скоpостей */
v = V24;
q = Q24;
te = TE24;
avl = AVL24;
tlng = 400;
break;
case 4800:
v = V48;
q = Q48;
te = TE48;
avl = AVL48;
tlng = 800;
break;
case 9600:
v = V96;
q = Q96;
te = TE96;
avl = AVL96;
tlng = 1600;
break;
default:
ind = TRUE;
}
/* Пpогpаммиpование обоих таймеpов для выбpанной скоpости */
pout(v & 0x00ff, T11); pout(v >> 8, T11);
pout(q & 0x00ff, T12); pout(q >> 8, T12);
pout(te & 0x00ff, T13); pout(te >> 8, T13);
pout(avl& 0x00ff, T21); pout(avl >> 8, T21);
}
/* Подпpогpамма установки pежима обмена */
void set_mode(int i, int r){
*(fcf - 1) = 0
*(fcf - 2) = 128 / i + 2; /* i = 1 - пеpедатчик, i = 2 - пpиемник */
*(fcf - 3) = 0;
switch (r){
case 2400:
i = 0;
break;
case 4800:
i = 64;
break;
case 9600:
i = 32;
}
*(fcf - 2) += i; /* Установка битов соответственно выбpанной скоpости */
}