Сетевой протокол сервера отладки

Протокол обмена данными использует транспортный протокол TCP-IP:

  1. На приборе запускается отдельный процесс GdbServer, который открывает и слушает TCP-порт с указанным номером (по умолчанию 22375);
  2. Клиент SimInTech инициирует соединение с прибором по протоколу TCP IP на указанный порт. При этом на приборе при соединении происходит размножение (fork) процесса-сервера, то есть для каждого клиентского соединения существует свой процесс-обработчик;
  3. Клиент SimInTech может удалённо запустить диспетчер расчётных модулей с указанного файла конфигурации загрузки. При этом передаётся имя файла конфигурации загрузки и имя начального состояния. Если начальное состояние с указанным именем отсутствует, то расчётные модули запускаются с состоянием по умолчанию. Передаваемые данные представлены в таблице (Таблица 1).
    Таблица 1.
    Описание Размер, байт Значение
    Размер передаваемого пакета в байтах 4 Равно размеру всех данных в пакете начиная со следующего параметра (идентификатора команды)
    Идентификатор команды 1 9
    Размер имени загрузки в байтах NameSize 4 целое число
    Имя загрузки в кодировке ASCII NameSize

    Формат имени:

    <имя файла конфигурации загрузки>#<имя начального состояния>

    Пример:

    default.conf#initstate1

    Одновременно клиент считывает данные, в соответствии с таблицей (Таблица 2).

    Таблица 2.
    Описание Размер, байт Значение
    Размер принимаемого пакета в байтах 4 Равно размеру принимаемых данных за исключением самого размера.
    Результат операции соединения 1

    0 – успешно

    != 0 – ошибка (код ошибки)

    Контрольная сумма алгоритма, присвоенная генератором кода 4 0 – если алгоритма не найден
  4. Для инициализации обмена данными с указанным алгоритмом клиент передаёт данные, в соответствии с таблицей (Таблица 3).
    Таблица 3.
    Описание Размер, байт Значение
    Размер передаваемого пакета в байтах 4 равно размеру всех данных в пакете начиная со следующего параметра (идентификатора команды)
    Идентификатор команды 1 ноль
    Идентификатор клиентской части ConnectionId 4 равно uid объекта внутри SimInTech
    Размер имени алгоритма в байтах NameSize 4 целое число
    Имя алгоритма в кодировке ASCII NameSize

    формат имени алгоритма, передаваемого от клиента:

    <имя алгоритма>#<имя конфигурации загрузки>

    Пример:

    algo1#default.conf

    При соединении с сервером обмена клиент считывает данные, в соответствии с таблицей (Таблица 4).

    Таблица 4.
    Описание Размер, байт Значение
    Размер принимаемого пакета в байтах 4 Равно размеру принимаемых данных за исключением самого размера.
    Результат операции соединения 1

    0 – успешно

    != 0 – ошибка (код ошибки)

    1 – сетевая ошибка,

    2 – нет такой запущенной программы

    После приёма от клиента пакета с данными сервер обмена подключается к областям памяти диспетчера расчётных модулей и ищет по имени указанный алгоритм в списке загруженных алгоритмов и получает адреса его областей данных. Если алгоритм успешно найден, то клиенту возвращается код операции 0, если не найден – то 2. После этого клиент может выполнять дальнейшие действия.

  5. Если сервер возвратил ответ что алгоритм найден, то клиент даёт серверу обмена команды на добавление нужных переменных на чтение от прибора. Команда передаётся по TCP-IP. При этом если указанная клиентом переменная есть, то она добавляется в список передачи данных на TCP сервере прибора. При добавлении переменной клиент передаёт данные в соответствии с таблицей (Таблица 5).
    Таблица 5.
    Описание Размер, байт Значение
    Размер передаваемого пакета в байтах 4 Равно размеру всех данных в пакете начиная со следующего параметра (идентификатора команды)
    Идентификатор команды 1 1
    Количество добавляемых переменных 4 N – целое число >=1 – количество переменных которые надо добавить для считывания
    Цикл i = от 1 до N
    Размер имени i-й переменной в байтах NameSize(i) 4 целое число
    Имя i-й переменной в кодировке ASCII NameSize(i)  
    Конец цикла от 1 до N

    Одновременно клиент считывает данные, в соответствии с таблицей (Таблица 6).

    Таблица 6.
    Описание Размер, байт Значение
    Размер принимаемого пакета в байтах 4 Равно размеру принимаемых данных за исключением самого размера.
    Цикл от 1 до N
    Тип данных в соответствии с таблицами описания переменных на приборе 1

    0 – вещественное (double)

    1 – двоичное (char)

    2 – целое (longint – 32 bit)

    Если тип = 255 то переменная не найдена

    Массив размерностей переменной 12 байт

    Dims: array [0..2] of integer

    Если все размерности 0 – то переменная не найдена

    Конец цикла от 1 до N
  6. Клиент даёт серверу обмена команды на добавление нужных переменных на запись в прибор. Команда передаётся по TCP-IP. При этом если указанная клиентом переменная есть, то она добавляется в список приёма данных на TCP сервере.

    При добавлении переменной клиент передаёт данные в соответствии с таблицей (Таблица 7):

    Таблица 7.
    Описание Размер, байт Значение
    Размер передаваемого пакета в байтах 4 Равно размеру всех данных в пакете начиная со следующего параметра (идентификатора команды)
    Идентификатор команды 1 1
    Количество добавляемых переменных 4 N – целое число >=1 – количество переменных которые надо добавить для запись
    Цикл i = от 1 до N
    Размер имениi-й переменнойв байтах NameSize(i) 4 целое число
    Имя i-й переменной в кодировке ASCII NameSize(i)  
    Конец цикла от 1 до N

    Одновременно клиент считывает данные, в соответствии с таблицей (Таблица 8).

    Таблица 8.
    Описание Размер, байт Значение
    Размер принимаемого пакета в байтах 4 Равно размеру принимаемых данных за исключением самого размера.
    Цикл от 1 до N
    Тип данных в соответствии с таблицами описания переменных на приборе 1

    0 – вещественное (double)

    1 – двоичное (char)

    2 – целое (longint – 32 bit)

    Если тип = 255 то переменная не найдена

    Массив размерностей переменной 12 байт

    Dims: array [0..2] of integer

    Если все размерности 0 – то переменная не найдена

    Конец цикла от 1 до N
  7. Для обмена данными (т.е. записи или чтения ранее добавленных в список переменных) Клиент в заданные моменты времени транслирует данные, которые добавлены в список записи в прибор и принимает данные, которые добавлены в список чтения прибора. При этом данные транслируются в виде бинарного потока. Передаваемые данные представлены в таблице (Таблица 9).
    Таблица 9.
    Описание Размер, байт Значение
    Размер передаваемого пакета в байтах 4 Равно размеру всех данных в пакете начиная со следующего параметра (идентификатора команды)
    Идентификатор команды 1 3
    Цикл i = от 1 до N, где N– количество переменных добавленных на запись
    Байтовый поток для i-й переменной в соответствии с её размерностью и типом данных М  
    Конец цикла от 1 до N

    Принимаемые клиентом данные представлены в таблице (Таблица 10).

    Таблица 10.
    Описание Размер, байт Значение
    Размера пакета сообщения в байтах, DataSize (за исключением самого размера пакета) 4 DWORD
    Шаг моделирования в секундах, fStep 8 Double
    Условное модельное время с начала соединения с контроллером, сек 8 Double
    Набор флагов состояния прибора fStateFlag 4 DWORD
    Цикл i = от 1 до ReadList.Count, ReadList.Count – количество переменных, добавленных на чтение
    Байтовый массив для i-й переменной в соответствии с её типом данных и размерностью М  
    Конец цикла от 1 до ReadList.Count
  8. Клиент SimInTech может передать диспетчеру расчётных модулей сигнал управления (для приостановки расчёта, возобновления и для того чтобы убить процесс). Соответствующие параметры представлены на рисунке (Таблица 11).
    Таблица 11.
    Описание Размер, байт Значение
    Размер передаваемого пакета в байтах 4 Равно размеру всех данных в пакете начиная со следующего параметра (идентификатора команды)
    Идентификатор команды 1 6
    Значение сигнала 4

    Значение сигнала, передаваемого процессу-диспетчеру расчётных модулей. Возможные значения:

    • пауза = 23;

    • продолжение = 25;

    • убить процесс = 15.

    Одновременно клиент считывает данные, в соответствии с таблицей (Таблица 12).

    Таблица 12.
    Описание Размер, байт Значение
    Размер принимаемого пакета в байтах 4 Равно размеру принимаемых данных за исключением самого размера;
    Результат операции соединения 1 Если больше нуля, то ошибка.
  9. Клиент SimInTech в процессе расчёта может сохранить для задачи именованный рестарт. Передаваемые клиентом данные представлены в таблице (Таблица 13).
    Таблица 13.
    Описание Размер, байт Значение
    Размер передаваемого пакета в байтах 4 Равно размеру всех данных в пакете начиная со следующего параметра (идентификатора команды)
    Идентификатор команды 1 7
    Размер имени рестарта в байтах NameSize 4 целое число
    Имя рестарта в кодировке ASCII NameSize  

    Одновременно клиент считывает данные, в соответствии с таблицей (Таблица 14).

    Таблица 14.
    Описание Размер, байт Значение
    Размер принимаемого пакета в байтах 4 Равно размеру принимаемых данных за исключением самого размера.
    Результат операции соединения 1

    0 – успешно

    != 0 – ошибка (код ошибки)

  10. Клиент SimInTech может в процессе расчёта загрузить именованный рестарт. Передаваемые клиентом данные представлены в таблице (Таблица 15).
    Таблица 15.
    Описание Размер, байт Значение
    Размер передаваемого пакета в байтах 4 Равно размеру всех данных в пакете начиная со следующего параметра (идентификатора команды)
    Идентификатор команды 1 8
    Размер имени рестарта в байтах NameSize 4 целое число
    Имя рестарта в кодировке ASCII NameSize  

    Одновременно клиент считывает данные, в соответствии с таблицей (Таблица 16).

    Таблица 16.
    Описание Размер, байт Значение
    Размер принимаемого пакета в байтах 4 Равно размеру принимаемых данных за исключением самого размера.
    Результат операции соединения 1

    0 – успешно

    != 0 – ошибка (код ошибки)