PLCI - связь с платой управления (чтение) pDIO
==============================================

ВЫХОДЫ
Channel 00 .. 3F        Считанные значения (входы платы pDIO). Могут принимать 
                        значения 0 или 1.
Okta 01 .. 07           Значения 8-ми входов, объедененные в байт
ErrorFlag               Флаг отсутствия связи
ErrorCounter            Счетчик отсутствия связи

DipNetAddress           Старший байт - Dip-адрес, младший байт - сетевой адрес.

                        Dip-адрес используется для адресации плат, его значение должно
                        совпадать с установокой dip-переключателей на плате. Если
                        значение dip-адреса не задано (равно нулю),оно приравнивается к 
                        значению сетевого адреса.

                        Сетевой адрес используется для логического связывания программных
                        блоков типа MCHB, MDTA, ZDVA и др. с физическими платами ввода вывода.

                        dip-адрес и сетевой адрес могут не совпадать, но если dip-адрес равен
                        нулю ему присвается значение сетевого адреса.

                        В процессе работы с выхода DipNetAddress считывается значение сетевого
                        адреса. Запись в DipNetAddress невозможна.


Enable                  Разрешение работы (если > 0 )
                          = 1 - работа с pDIO3.2
                          = 2 - работа с pDIO NB (not back!)


По умолчанию используеться порт COM2.

Данное устройство может работать в COM-потоках.

Время обработки данных в основном потоке ~20мс


******************************************************************************

ПРИЛОЖЕНИЕ
==========

Описание контроллера pDIO3
==========================

Программа предназначена для обеспечения работы модуля микроконтроллера (MCU) с 
платами дискретного ввода-вывода (платами управления).

Адреса MCU выставляется dip-переключателями на плате от 0 до 7.

Цикл опроса/записи = 0.5 сек.


Описание протокола обмена с модулем
===================================


1. Специальные коды:
   $55 - ключ (key) обращения к модулю
   $AA - преффикс (^) передачи байтов, равных значению специальных ко-
         дов, но не являющихся ими.

   Преффикс предназначен для передачи значения $55 в качестве данных,
а не в качестве ключа. Для этого значение $55 кодируется двумя байтами
$AA и $00. Для передачи значения $AA в качестве данных используется 
последовательность $AA$01.


2. Синтаксис обращения к модулю:
   Следующая последовательность символов посылается компьютером (main)
и принимается всеми модулями сети:

  main:   $55, $xx

Значение символа $xx получается суммированием кода модуля (KOD) и  ко-
да команды. После принятия кода модуля каждый модуль сравнивает его со
своим и тем самым определяет, к нему данный запрос или нет. Если  зап-
рос не к нему, то модуль переходит в режим  ожидания  нового запроса.

После приема команды данные передаются по соответствующей схеме для
каждой  команды.

Основные команды:
--------T-------------------------------T-----------------------------¬
¦ 20    ¦key:KOD+$20:x1..x8:cc.         ¦Запись в плату управления    ¦
¦       ¦                               ¦                             ¦
+-------+-------------------------------+-----------------------------+
¦ 40    ¦key:KOD+$40:                   ¦Принять "обратную связь"     ¦
¦       ¦           :x1..x8:cc.         ¦                             ¦
+-------+-------------------------------+-----------------------------+
¦ EF    ¦key:$EF:........               ¦Дополнительная команда       ¦
¦       ¦               :...            ¦(описание см. ниже)          ¦
L-------+-------------------------------+------------------------------


    После подачи питания  контроллер  инициализирует  последовательный
интерфейс и заносит начальные значения в системные переменные:  масси-
вы обнуляются. После этого запускается основной цикл  программы,  в
котором осуществляется обмен данными между контроллером и  платой  уп-
равления. В ходе цикла можно выделить следущие основные шаги:
  1. Формирование данных управления
  2. Выдача данных в плату управления
  3. Задержка цикла ( pause_ )
  4. Чтение данных обратной связи
  5. Анализ данных обратной связи.

    После выдачи данных в плату управления, выполняется задержка 0.5сек,
после чего считывается значение обратной связи. Анализируя побитно полу-
ченные данные, определяется успешно выполнен запуск или нет. Устройство,
запуск которого не состоялся, блокируется на время (prz_ - 1) * "продол-
жительность одного основного цикла", т.е. на 5 секунд. В течение этого 
времени устройство не реагирует на команду запуска (см. табл. - команда $20).
    Для  предотвращения  программного  сбоя  работы  контроллера   ис-
пользуется watchdog  микроонтроллера,  настроенный  на  тайм-аут  дли-
тельностью 1.049 s. В начале каждого основного цикла происходит  взвод
watchdog`а, а в конце - сброс. Если время между взводом и сбросом  бу-
дет превышать время тайм-аута, то данная ситуация будет  расцениваться
как программный сбой, в результате чего  произойдет сброс контроллера и
платы управления. Также учитывается ситуация, когда к модулю идет час-
тое обращение  компьютера и время основного цикла начинает превышать
допустимый  предел. Для исключения этой ситуации после команды передачи
данных  выполняется сброс и повторный взвод счетчика watchdog`a.


Контрольная сумма cc - это сумма байтов команда или ответа модуля,
умноженная логически на 0xFF:

                   cc = (KOD + x1 + x2 + ... xN) & 0xFF



3. Дополнительные команды

3.1. READ MODULE NAME
   Чтение имени модуля.
     
   in:   AAM(cr)
   out:  !AARKS 2.0(cr)

     АА - адрес модуля


3.2. READ INPUTS
   Чтение массива входных данных.

   in:   AAZ(cr)
   out:  >FF FF FF FF FF FF FF FF(cr)


3.3. SET DLYNUM VALUE
   Установка переменной DlyNum - задержка чтения обратной связи.
   Диапазон значений от 01 до FF. 

   in:   <55><EF>AAWxx(cr)
   out:  D=xx(cr)

   Задержка расчитывается по формуле:  время = 0.5 * DlyNum, [сек]

3.4. READ DLYNUM VALUE
   Чтение переменной DlyNum.

   in:   <55><EF>AAD(cr)
   out:  D=tt(cr)


3.5. SET PRZ_ VALUE
   Установка переменной prz_ - время блокирования выхода при ошибке 
   обратной связи. Диапазон значений от 0B до FF. 

   in:   <55><EF>AAUxx(cr)
   out:  D=xx(cr)

   Задержка расчитывается по формуле:  время = 0.5 * DlyNum * prz_, [сек]

3.6. READ PRZ_ VALUE
   Чтение переменной prz_.

   in:   <55><EF>AAP(cr)
   out:  D=tt(cr)





4.Пример передачи дополнительной команды

   Запрос имени модуля для MCU с адресом 15:

   in:   Uя0FM
   out:  !0FRKS2.0

   Символьное значение EF:  я - MS-DOS
                            п - Windows

