Вход

Сопряжение факсимильного аппарата с IBM PC

Дипломная работа по программированию
Дата добавления: 07 мая 1999
Язык диплома: Русский
Word, rtf, 1 Мб
Диплом можно скачать бесплатно
Скачать





СОДЕРЖАНИЕ.

страница

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(Electro­nics 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 и в AS­CII-коде представляет символ "S".

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

После обнаружения перехода с "1" на "0" приемник считы­вает сигнал с выходной линии через интервал,равный половине длительности одного разряда,- это гарантирует,что принятый логический "0" будет нулем,а не помехой из-за переходного процесса.В этот момент времени ,если линия по прежнему нахо­дится в состоянии логического нуля,приемник воспринимает стартовый разряд как действительный и приступает к последова­тельному считыванию входной линии с одноразрядными интервала-

ми.Он формирует символ в соответствии с предварительно зап­рограммированными параметрами символа,к числу которых отно­сятся длинна символа в двоичных разрядах и выбранный тип контроля по четности.Если же стартовый разряд признается не­действительным,приемник игнорирует обнаруженный ноль и возв­ращается в состояние ожидания до поступления следующего стар­тового разряда ("0").Заканчивается передача посылкой одного или двух стопных разрядов.

Все операции последовательной передачи реализуются спе­циализированной ИС,получившей название "Универсальный Асинх­ронный Приемопередатчик" (УАПП).В компьютере IBM PC в качест­ве УАПП используется микросхема 8250,разработанная фирмой Na­tional 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,(BIOSBa­sic 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() , описанная в библиотеке BI­OS.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() описана в Bor­land 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-protecti­on 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осто .\n");

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ости */

}


© Рефератбанк, 2002 - 2017