PLDAT - связь с платой датчиков pDAT
====================================

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

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

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

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

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

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


Maska                   Разрешение запроса данных для Channel (1-разрешено, 0-запрещено)
Enable                  Разрешение запроса данных для Counter (255-разрешено, 0-запрещено)
FRpt                    \
FDel                     | см. приложение
FSub                    /
Counter 1..63           Считанные значения (частотные входы платы pDAT). Могут принимать 
                        значения от 0 до 65535.


Используеться порт COM2.

Данное устройство пока НЕ АДАПТИРОВАНО для работы в COM-потоках.

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


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

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

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

Программа предназначена для обеспечения работы модуля микроконтроллера (MCU) с 
платой ввода информации от датчиков РКС (плата датчиков D).

MCU выполняет длительности периода входного сигнала для каждого входа платы.

Диапазон измеряемой частоты: 100 - 1000 Гц

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


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


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..x16:cc.        ¦частоты (1..16 канал)        ¦
+-------+-------------------------------+-----------------------------+
¦ 40    ¦key:KOD+$40:                   ¦Принять массив измеренной    ¦
¦       ¦           :x1..x16:cc.        ¦частоты (17..32 канал)       ¦
+-------+-------------------------------+-----------------------------+
¦ 60    ¦key:KOD+$60:                   ¦Принять массив измеренной    ¦
¦       ¦           :x1..x16:cc.        ¦частоты (33..48 канал)       ¦
+-------+-------------------------------+-----------------------------+
¦ 80    ¦key:KOD+$80:                   ¦Принять массив измеренной    ¦
¦       ¦           :x1..x16:cc.        ¦частоты (49..64 канал)       ¦
+-------+-------------------------------+-----------------------------+
¦ A0    ¦key:KOD+$A0:                   ¦Принять значениялогических   ¦
¦       ¦           :x1..x8:cc.         ¦входов (0..63 канал)         ¦
+-------+-------------------------------+-----------------------------+
¦ EF    ¦key:$EF:........               ¦Дополнительная команда       ¦
¦       ¦               :...            ¦(описание см. ниже)          ¦
L-------+-------------------------------+------------------------------

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

   mas[i] - упакованное время i-входа, где  i = [1..64]

    Из этого массива данные передаются управляющему компьютеру,  где
они конвертируются в частоту (Гц) по формуле:

  rpt = 3
  del = 141
  sub = 4000

          1000000 * (rpt+1)
   f = ------------------------ ,    [Гц]
        del * mas[i]  +  sub


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

    Ниже приведена таблица распределения адресов входов платы:
  ------T--------T-T-----T--------T-T-----T--------T-T-----T--------¬
  ¦Плата¦  Адрес ¦ ¦Плата¦  Адрес ¦ ¦Плата¦  Адрес ¦ ¦Плата¦  Адрес ¦
  +-----+--------+-+-----+--------+-+-----+--------+-+-----+--------+
  ¦  1  ¦ $ 18   ¦ ¦  9  ¦ $ 1A   ¦ ¦ 17  ¦ $ 19   ¦ ¦ 25  ¦ $ 1C   ¦
  ¦  2  ¦ $ 00   ¦ ¦ 10  ¦ $ 02   ¦ ¦ 18  ¦ $ 01   ¦ ¦ 26  ¦ $ 04   ¦
  ¦  3  ¦ $ 08   ¦ ¦ 11  ¦ $ 0A   ¦ ¦ 19  ¦ $ 09   ¦ ¦ 27  ¦ $ 0C   ¦
  ¦  4  ¦ $ 10   ¦ ¦ 12  ¦ $ 12   ¦ ¦ 20  ¦ $ 11   ¦ ¦ 28  ¦ $ 14   ¦
  ¦  5  ¦ $ 20   ¦ ¦ 13  ¦ $ 22   ¦ ¦ 21  ¦ $ 21   ¦ ¦ 29  ¦ $ 24   ¦
  ¦  6  ¦ $ 30   ¦ ¦ 14  ¦ $ 32   ¦ ¦ 22  ¦ $ 31   ¦ ¦ 30  ¦ $ 34   ¦
  ¦  7  ¦ $ 38   ¦ ¦ 15  ¦ $ 3A   ¦ ¦ 23  ¦ $ 39   ¦ ¦ 31  ¦ $ 3C   ¦
  ¦  8  ¦ $ 28   ¦ ¦ 16  ¦ $ 2A   ¦ ¦ 24  ¦ $ 29   ¦ ¦ 32  ¦ $ 2C   ¦
  +-----+--------+-+-----+--------+-+-----+--------+-+-----+--------+
  ¦ 33  ¦ $ 2F   ¦ ¦ 41  ¦ $ 2E   ¦ ¦ 49  ¦ $ 2D   ¦ ¦ 57  ¦ $ 2B   ¦
  ¦ 34  ¦ $ 3F   ¦ ¦ 42  ¦ $ 3E   ¦ ¦ 50  ¦ $ 3D   ¦ ¦ 58  ¦ $ 3B   ¦
  ¦ 35  ¦ $ 37   ¦ ¦ 43  ¦ $ 36   ¦ ¦ 51  ¦ $ 35   ¦ ¦ 59  ¦ $ 33   ¦
  ¦ 36  ¦ $ 27   ¦ ¦ 44  ¦ $ 26   ¦ ¦ 52  ¦ $ 25   ¦ ¦ 60  ¦ $ 23   ¦
  ¦ 37  ¦ $ 17   ¦ ¦ 45  ¦ $ 16   ¦ ¦ 53  ¦ $ 15   ¦ ¦ 61  ¦ $ 13   ¦
  ¦ 38  ¦ $ 0F   ¦ ¦ 46  ¦ $ 0E   ¦ ¦ 54  ¦ $ 0D   ¦ ¦ 62  ¦ $ 0B   ¦
  ¦ 39  ¦ $ 07   ¦ ¦ 47  ¦ $ 06   ¦ ¦ 55  ¦ $ 05   ¦ ¦ 63  ¦ $ 03   ¦
  ¦ 40  ¦ $ 1F   ¦ ¦ 48  ¦ $ 1E   ¦ ¦ 56  ¦ $ 1D   ¦ ¦ 64  ¦ $ 1B   ¦
  L-----+--------+-+-----+--------+-+-----+--------+-+-----+---------

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

         2, 18, 63, 26, 55, 47, 39, 3, 11, 62, 27, 54, 46, 38.



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

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



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

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

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


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

   in:   <55><EF>AAZ(cr)
   out:  >FF FF FF FF FF FF FF FF(cr)




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

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

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

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

