Это старая версия документа.
Содержание
Типы тегов
Формат записи в mtr-файле
%EXTERNAL=1E6C %EXTMAIN=01E3 %EXTREQ=0995 %EXTIRR=12F4
Таблица вшешних тэгов имеет структуру:
type | size |
---|---|
periodic | EXTMAIN |
requested | EXTREQ |
irregular | EXTIRR |
Irregular tags
Все теги в rpsvrtcp и его клиентах имеют свойства:
TWorkRecTagProp = (tpNormal, tpIrregular); TWorkRecTagFlag = (tfNone, tfInUse, tfUpdated);
Теги типа tpIrregular
запрашиваются из конечного устройства (ПЛК) только тогда, когда этого требует клиент, подключенный к rpsvrtcp. Делается это так.
Пусть клиентом будет приложение visscada. При использовании тега внутри приложения выполняется проверка на тип tpIrregular
и, если да, то тегу устанавливается флаг tfInUse
:
// D:\promauto-src\VisScada\Common\TagStorage.pas function GetTagValue(idx: integer): integer; begin result := 0; if not DataClient.Connected then exit; if (idx >= 0) and (idx < DataClient.client.TagCount) then begin if DataClient.client.Tags[idx].TagProp = tpIrregular then DataClient.client.Tags[idx].TagFlag := tfInUse; result := DataClient.client.Tags[idx].ValIn; end else result := -1; end;
После этого в самом ближайшем будущем этот флаг будет модулем, отвечающем за связь с rpsvrtcp, и передан серверу при помощи команды SETFLAG:
// D:\promauto-src\Lib\delphi\rpTcpLib\TcpImportClient.pas // Передача флага для irregular тегов if (Tags[i].TagProp = tpIrregular) and (Tags[i].TagFlag <> tfNone) then begin s := IntToHex(i, 1) + ' ' + IntToHex(integer(Tags[i].TagFlag), 1); clnt.IOHandler.WriteLn( 'SETFLAG ' + s + ' ' + IntToHex(CRC16($FFFF, s), 1) ); if not GetAnswer('117 !', false, s, c) then raise Exception.Create(''); Tags[i].TagFlag := tfNone; end;
Комманда SETFLAG принимается сервером rpsvrtcp, после чего флаг соответсвующего тега становится tfInUse
:
Запрос от клиента выполняется коммандами:
SETFLAG