Это старая версия документа.


Типы тегов

Формат записи в mtr-файле

%EXTERNAL=1E6C
%EXTMAIN=01E3
%EXTREQ=0995
%EXTIRR=12F4

Таблица вшешних тэгов имеет структуру:

typesize
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
doc/rpsvrtcp/irregular.1378718198.txt.gz · Последние изменения: 2013/09/09 13:16 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0