Модуль NetPfeiff содержит:
_con_NetPfeiff.inc константы
_var_NetPfeiff.inc переменные
_fun_NetPfeiff.inc функции
относящиеся к протоколу Pfeiffer Vacuum Protocol.

Константы:

    {
    Constants for Netpfeiffer.
    }
    //
    // Reference source:
    //
    pfeiffer_MinUnitId = 1;                // Минимальный  Unit Id (адрес устройства) согласно спецификации
    pfeiffer_MaxUnitId = 999;              // Максимальный Unit Id (адрес устройства) согласно спецификации
    pfeiffer_er_OK     = 0;                // Код ошибки: OK, no errors
    pfeiffer_er_ILLFUN = 1;                // Код ошибки: ILLEGAL FUNCTION
    pfeiffer_er_ILLADR = 2;                // Код ошибки: ILLEGAL DATA ADDRESS
    pfeiffer_er_ILLVAL = 3;                // Код ошибки: ILLEGAL DATA VALUE
    pfeiffer_er_EXCEPT = 1024;             // Код ошибки: exception mask
    //
    // Addon constants
    //
    pfeiffer_ERROR_LEN = 'ERROR LEN';      // Код ошибки: ADU/PDU length is not looks valid
    pfeiffer_ERROR_ARG = 'ERROR ARG';      // Код ошибки: ADU/PDU argument is not looks valid
    pfeiffer_ERROR_DEF = 'ERROR DEF';      // Код ошибки: ADU/PDU defenition is not looks valid
    pfeiffer_ERROR_RAN = 'ERROR RAN';      // Код ошибки: ADU/PDU rangle is not looks valid
    pfeiffer_ERROR_LOG = 'ERROR LOG';      // Код ошибки: ADU/PDU logic is not looks valid
    pfeiffer_ERROR_CRC = 'ERROR CRC';      // Код ошибки: плохая контрольная сумма CRC
    pfeiffer_er_BADUID = 262;              // Код ошибки: плохой номер (адрес) модуля Unit Id
    pfeiffer_er_BADCMD = 263;              // Код ошибки: плохой идентификатор команды
    pfeiffer_er_BADREF = 264;              // Код ошибки: плохая ссылка
    pfeifferProxy      = '&PfeifferProxy'; // имя прокси сервера &PfeifferProxy
  
Большинство констант взято из официальной спецификации протокола Pfeiffer.
Вспомогательные константы не закреплены в спецификации, но введены для удобства.

Переменные:

    pfeiffer_errno         = код последней ошибки Pfeiffer
    devpfeifferProxy       = ссылка прокси сервера &PfeifferProxy
    cmd_NetpfeifferPoll    = идентификатор команды @Pfeiffer.Poll
    cmd_NetpfeifferReply   = идентификатор команды @Pfeiffer.Reply
    cmd_NetpfeifferTimeout = идентификатор команды @Pfeiffer.Timeout
    cmd_NetpfeifferRefuse  = идентификатор команды @Pfeiffer.Refuse
  

function pfeiffer_get_tag(tag:Integer;def:Real):Real;
Извлекает значение тега «tag» (integer или real), либо возвращает значение по умолчанию «def», если тег нулевой.

function pfeiffer_set_tag(tag:Integer; val:Real):Boolean;
Записывает значение тега «tag» (integer или real).

function pfeiffer_inc_tag(tag:Integer; inc:Real):Boolean;
Прибавляет к значению тега «tag» величину «inc».

procedure pfeiffer_fixerror(tag,code:Integer; msg:String);
Фиксирует ошибку, инкрементируя тег «tag» или счетчик ошибок с кодом «code», затем выдает консольное сообщение «msg».

function pfeiffer_is_except(par:Integer):Boolean;
Проверяет наличие бита (128) исключения (is exception) в коде функции «par» (см. описание протокола Pfeiffer Vacuum). Возвращает True если бит исключения установлен. Бит исключения служит признаком ошибки в ответах на запросы.

function pfeiffer_un_except(par:Integer):Integer;
Сбрасывает бит исключения (unset exception) в коде функции «par» (см. описание протокола Pfeiffer Vacuum). Возвращает код функции «par» без бита исключения, который сброшен в 0. Служит для анализа кодов функций в ответах на запросы.

function pfeiffer_as_except(par:Integer; isOn:Boolean):Integer;
Устанавливает бит исключения (assign exception) в коде функции «par» (см. описание протокола Pfeiffer Vacuum). Возвращает код функции «par» с битом исключения, который установлен или сброшен в зависимости от параметра «isOn». Служит для анализа кодов функций в ответах на запросы.

function pfeiffer_addr_ok(addr:Integer):Boolean;
Проверяет допустимость адреса устройства «addr»=(1..247).

function pfeiffer_decode_answer(s:String;var adr,par,len:Integer; var dat:String):String;
Кодирует сообщение протокола из составляющих (см. описание протокола Pfeiffer Vacuum).
«s» - исходное сообщение.
«adr» - номер (адрес) модуля (ожидается 1..247).
«par» - номер функции.
«len» - длинна данных.
«dat» - данные, формат которых зависит от номера функции «par».
Функция декодирует входящую строку данных, проводя проверки на наличие ошибок и корректности контрольной суммы.
Результат вызова - длинна данных.
Функция также устанавливает код ошибки pfeiffer_errno. Ненулевой код ошибки означает наличие проблем.

function pfeiffer_encode_adu(adr,par,len:Integer; dat:String):String;
Кодирует сообщение протокола из составляющих (см. описание протокола Pfeiffer Vacuum).
«adr» - номер (адрес) модуля (ожидается 1..247).
«par» - номер функции (ожидается 1,2,3,4,5,6,15,16).
«len» - длинна данных.
«dat» - данные, формат которых зависит от номера функции «par».
Функция возвращает ADU (Application Data Unit), объединив заголовок, блок данных протокола PDU=«par+dat» и контрольные суммы.
Результат вызова - строка, готовая к пересылке по протоколу Pfeiffer Vacuum.
Функция также устанавливает код ошибки pfeiffer_errno. Ненулевой код ошибки означает наличие проблем.

function pfeiffer_decode_pdu(par:Integer; dat:String; var len:Integer):Integer;
Декодирует блок данных PDU=«par+dat» (protocol data unit) протокола, выделяя из него составляющие (см. описание протокола Pfeiffer Vacuum). При неверном формате блока данных возвращает 0 или отрицательный код ошибки (т.е. код ошибки со знаком минус). При успешном декодировании возвращает положительную длину PDU=«par+dat» блока данных протокола (protocol data unit). Блок данных PDU не зависит от протокола передачи и определяется лишь свойствами опрашиваемого модуля (устройства). Признаком ошибки-исключения служит наличие бита исключения (128) в коде функции, см. функцию Pfeiffer_is_except.
Функция также устанавливает код ошибки pfeiffer_errno. Ненулевой код ошибки означает наличие проблем.

function pfeiffer_proxy_poll(cmd:String; ref,cid,tot,port,adr,par,len:Integer; dat:String):String;
Используется для подготовки команд @Pfeiffer.Poll, посылаемых в консоль &PfeifferProxy, а также ответных команд.
«cmd» - подготавливаемая команда, ожидается @Pfeiffer.Poll, @Pfeiffer.Reply, Pfeiffer.TimeOut или @Pfeiffer.Refuse. При указании пустой строки используется @Pfeiffer.Poll.
«ref» - имя или ссылка устройства, которому будет возвращено ответное сообщение @Pfeiffer.Reply/@Pfeiffer.Refuse/@Pfeiffer.Timeout. Обычно это devMySelf, то есть ответное сообщение возвращается вызывающему драйверу.
«cid» - command id, любое число для идентификации пользовательской команды, которое возвращается без изменений в ответном сообщении.
«tot» - timeout, ms (0..MaxInt).
«port» - логический порт &PfeifferProxy, (1..16).
«adr» - номер (адрес) модуля (ожидается 1..247).
«par» - номер функции (ожидается 1,2,3,4,5,6,15,16).
«len» - длинна данных.
«dat» - данные, формат которых зависит от номера функции «par».
Возвращает отформатированое сообщение, готовое к посылке в консоль &PfeifferProxy.

function pfeiffer_proxy_nice(cmd:String; ref,cid,tim,port,adr,par,len:Integer; dat:String; wid:Integer):String;
Используется для "приятного" (читабельного) форматирования сообщений и ответов &PfeifferProxy.
«cmd» - команда, например, @Pfeiffer.Reply, Pfeiffer.TimeOut или @Pfeiffer.Refuse.
«ref» - reference, имя или ссылка устройства.
«cid» - command id, числовой идентификатор пользовательской команды.
«tim» - время, ms (0..MaxInt).
«port» - логический порт.
«adr» - номер (адрес) модуля.
«par» - номер функции.
«dat» - данные.
«len» - длинна данных.
«wid» - width, параметр форматирования. При wid>0 строка dat отображается в HEX формате и ограничивается по длине величиной wid. При wid<0 строка dat ограничивается по длине величиной abs(wid).
Возвращает читабельно отформатированную строку для печати.

function pfeiffer_proxy_reply(cmd,arg:String; var ref,cid,tim,port,adr,par,len:Integer; var dat:String):Boolean;
Используется для интерпретации ответов на запросы @Pfeiffer.Poll ... , посылаемых &PfeifferProxy в консоль драйвера, выполнившего запрос.
«cmd» - принятая из консоли команда, ожидается @Pfeiffer.Reply, Pfeiffer.TimeOut или @Pfeiffer.Refuse.
«arg» - агрументы команды, не менее 7 слов: ref cid tim port adr par dat.
«ref» - reference, имя или ссылка устройства, пославшего ответ - это должен быть &PfeifferProxy.
«cid» - command id, числовой идентификатор пользовательской команды, должен совпадать с посланным.
«tim» - измеренное время запроса-ответа, ms (0..MaxInt).
«port» - логический порт &PfeifferProxy, должен совпадать с посланным.
«adr» - номер (адрес) модуля (ожидается 1..247), должен совпадать с посланным.
«par» - номер функции (ожидается 1,2,3,4,5,6,15,16), должен совпадать с посланным (но может быть установлен бит исключения).
«len» - длинна данных в символах.
«dat» - данные, формат которых зависит от номера функции «par».
Возвращает True, если формат команды и аргументов выглядит пригодным для дальнейшей обработки.
Функция также устанавливает код ошибки pfeiffer_errno. Ненулевой код ошибки означает наличие проблем.

procedure ClearNetPfeiffer;
procedure InitNetPfeiffer;
procedure FreeNetPfeiffer;
procedure PollNetPfeiffer;
Стандартные процедуры очистки/инициализации/завершения/опроса модуля NetPfeiffer.

Желаю успешного использования NetPfeifferProxy!