Applies To:
  • CitectSCADA 7.0, 7.10
  • CitectHMI 7.0, 7.10


The main reason for this issue is the handling of tags which don't exist on a  supergenie.

When opening a super genie (SG) with a tags associated the following behaviour is observed:

a) In v6.10, if the tags exist or not, the SG opens instantly on first and subsequent attempts.

b) In v7.00, if the tags exists, on the first read the SG opens after ~ 1.5 second delay. Subsequent attempts (i.e. if you close and then reopen the SG) do not incur any delay, and the SG displays instantly.
In v7.00, if the tag does not exist, on first and subsequent reads the SG always incurs a 3 second delay before opening.

c) In v7.10, there has been an improvement in performance for opening super genies in the case where tags exist. The initial delay has been dramatically reduced at the expense of a small delay on every opening attempt. In the case where tags don't exist the 3 second delay will still occur (this will be fixed in the next version after v7.10).


To avoid the 3 second delay on SG opening, we recommend the use of TagInfo() as a fast way to deterime if a tag exists. This function is no longer marked as deprecated in v7.0 SP1 and V7.10.

We suggest that a cicode function be added to your project, and then used in place of ASSxxx functions for two reasons. Efficiency if the tag being passed was a composite name (e.g. A + B + C) and simplicity to isolate the use of TagInfo() to one cicode line in your project. It is expected that in a future release TagInfo() may be deprecated, thus any future cicode changes will be minimized to this function.

Prior to calling SG functions like AssXXX(), an IF statement around these will speed up processing in situations where tags don't exist. e.g.

       // In cicode to replace existing ASSxxx calls
       MyAssign(-2, sName + "Pump1", 3,0);


// Assign Tag to next Genie only if the tag does not exist

//      Arguments the same as ASS()
//      Returns 0 if successful, 289 if tag does not exist, or the actual ASS error
INT FUNCTION MyAssign(INT hWin , INT nArg, STRING sTag, INT Mode, STRING sCluster = "")

IF (TagInfo(sTag, 0) != "") THEN  
       RETURN (Ass(hWin, nArg, sTag, Mode, sCluster));

RETURN (289);       // Name does not exist


NB: For systems which are continually being updated while running, we suggest a maintenance button is added which calls the new v7.0 SP1 / v7.10 cicode TagRDBReload() function. TagRDBReload() can be used to update TagInfo's internal tag lists thus helping to support online changes. This is only needed after a fresh compile when tags have been added / deleted.