АТС NEAX2000IPS

Описание протокола обмена данными между терминалом и АТС NEAX2000IPS. Ввиду отсутствия этого описания в документации на АТС, получено методом обратного инжиринга.

  1. Формат команд для станции от терминала МОС.

    Команда Название HEX код Что передается на АТС
    EXE Execution оf data write 2E Данные + 0x2E + контрольная сумма
    CE Clear entry 3A Один байт 0x3A
    S Step forward 0D Один байт 0x0D
    , Separator 2C Командой не является, используется наравне с другими символами в данных
    Step backward 2D Один байт 0x2D
    <- Back space Эмулируется терминалом Ничего не передается
    DE Data End 20 Данные + 0x20 + контрольная сумма
    ST Command entry start 1F Один байт 0x1F
  2. Формат ответа станции терминалу МОС.

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

    Формат пакета:

    • Количество передаваемых байт, не считая его самого
    • 1-ый байт статуса – результат выполнения:
      • 20 – команда не выполнена
      • 80 – команда выполнена успешно
      • С0 – 1-ый уровень
    • 2-ой байт статуса – уровень меню:
      • 01 – 1-ый уровень (ввод команды)
      • 03 – 2-ой уровень (ввод 1-го параметра индекса)
      • 04 – 3-ый уровень (просмотр и изменение 2-го параметра значения)
      • 82 – не удалось пройти на 2-ой уровень
      • 84 – не удалось пройти на 3-ий уровень
      • 86 – не удалось изменить параметр
    • 3-ий байт статуса – код ошибки:
      • 00 – ошибок нет или DIGIT ERROR
      • 01 – DATA ERROR
      • 03 – CODE NOT USED
      • 06 – 1-ый уровень
      • 0F – значение занято (SEE CM14 03065)
    • Данные
    • Контрольная сумма
      • Считается как сложение по модулю 2 всех байт пакета, кроме самой КС.
  3. Несколько вариантов реконструированого протокола обмена данными АТС с терминалом.

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

    Вариант А. Используется терминалом MOC.

    1. Отправляем код ST (0x1F).
    2. Запрашиваем чтение 1-го байта и ждем ответа. Здесь и далее, если вываливаемся по таймауту – ошибка.
    3. Смотрим в первом байте, сколько читать ещё. Читаем остаток.
    4. Проверяем второй байт, если 0xС0 команда выполнена успешно и продолжаем работу.
    5. Проверяем по последнему байту контрольную сумму.
    6. Отправляем блок данных: команда + код DE (0x20) + контрольная сумма.
    7. Повторяем пункты 2-5. Второй байт сравниваем с 0x80.
    8. Повторяем пункты 5,6. В качестве команды берем первый параметр.
    9. Читаем все, начиная с 5-го и заканчивая предпоследним байтом.
    10. Cмотрим надо ли писать значение, если надо, то продолжаем работу.
    11. Выполняем пункты 5,6. в качестве команды берем второй параметр, в качестве кода EXE (0x2E).
    12. Выходим из функции. Рапортуем об успехах или неудачах.

    Вариант В. Упрощенный алгоритм обмена. Используется самим MATWorX.
    Применяются дополнительные команды:

    Название HEX код
    начало команды 0x11
    разделитель 0x12

    После установления соединения один раз выполняем пункты 1-5 варианта А.
    Чтение данных.

    1. Отправляем блок данных: 0x11 + команда + 0x12 + параметр + код DE (0x20) + контрольная сумма.
    2. Выполняем пункт 7 варианта А.
    3. Повторяем нужное число раз пункты 1,2 варианта В.

    Запись данных.

    1. Отправляем блок данных: 0x11 + команда + 0x12 + параметр + 0x12 + данные + код EXE (0x2E) + контрольная сумма.
    2. Выполняем пункт 7 варианта А.
    3. Повторяем нужное число раз пункты 1,2 варианта В.
  4. Формат ответа станции программе MATWorX при двоичном обмене.

    Передача 1-го байта данных.
    Байт Назначение
    00 количество передаваемых байт, не считая этого
    01 результат выполнения, при если нормально – 0
    02-11 пакет данных
    12 контрольная сумма.

    Формат пакета с данными.
    Байт Назначение
    02 размер передаваемого пакета (9 байт)
    03 0x40 \
    04 0x80 \ некая сигнатура
    05 0x01 /
    06 0x01 /
    07 порядковый номер пакета, ст. байт
    08 порядковый номер пакета, мл. байт
    09
    10
    11 байт данных

  5. Формат *.ofd файла.

    Смещение Назначение
    00 – 3F Заголовок. Название, время создания и т.п.
    40 – (Конец файла-4) Пакеты с данными. В начало пакета приставляется по 3 байта 0xFF.
    Конец файла-4 3 байта 0xFF и байт 0x00

    Файл содержит 4096 пакетов с данными. Пакеты могут быть 9-ти байтовые и 72-x байтовые.

  6. Реконструкция карты памяти АТС (с помощью CMD F0).

    С помощью CMD F0 можно просмотреть непрерывный массив памяти размером в 4 Гб, с адресацией от 0x00000000 до 0xFFFFFFFF, если памяти по заданному адресу нет, то АТС возвращает прочерки.

    В этом массиве обнаружино 3 блока.

    Начало и конец блока Размер, кб
    0x00100000 – 0x005FFFFF 5120
    0x01000000 – 0x0124FFFF 2368
    0x01D00000 – 0x01FFFFFF 3072

Один комментарий к “АТС NEAX2000IPS

  1. Адис

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *