Модуль 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!