CitectSCADA 7.20 Service Pack 2 - Release Notes PDF
CitectSCADA 7.20 Service Pack 2 - Release Notes PDF
20
Release Notes for Service Pack 2
The V7.20 Service Pack 2 includes several product updates and enhancements, providing improvements in
stability, performance and functionality.
Important:
As per recommended practice, all projects should be backed up prior to commencing the Service Pack installation.
Important:
All projects must be upgraded and recompiled after installing this Service Pack. Failure to do so will result in
conflicting database size messages. To force an upgrade, edit the Citect.ini file and set [CTEDIT] UPGRADE=1.
Ensure that the Incremental Compile menu option (in Project Editor→Tools→Options) is not checked, or set
[CTEDIT] INCREMENTALCOMPILE=0. Customers should also do an Update Pages (in Graphics
Builder→Tools→Update Pages) on any projects using CSV_Include templates.
Hot Fixes
Customers who have hot fixes installed should check the release notes to ensure the applicable fix is included in
V7.20 Service Pack 2 - please contact SCADA Global Support if in any doubt.
SCADA Global Support recommends V7.20 users apply the Service Pack as soon as practically possible.
Note:
For general information about service packs, see Knowledge Base article Q2181.
This service pack applies to three of the products shipped with CitectSCADA version 7.20:
a) CitectSCADA
b) CitectSCADA Web Server
c) CitectSCADA Internet Display Client
Separate service pack installers have been created for each of these products, allowing you to choose which
products you wish to upgrade to Service Pack 2, depending on your requirements.
Known Issues:
This Service Pack contains the known issues described below.
Issue Issue Title
Number and Description
42749 WebServer Service Pack cannot be independently uninstalled on Windows Vista and Windows 7
On Microsoft Vista and Windows 7, the Web Server Service Pack cannot be uninstalled independently from the
base application. Instead the CitectSCADA Web Server must be uninstalled to remove both the base product
and Service Pack, and then the base product may be reinstalled. This has been documented in Knowledge
Base article Q5450.
2. Select “View installed updates” from the side panel that is presented:
51086 - Project Upgrade does not flag changes in project RDB field sizes.
Project Upgrade does not flag changes in project RDB field sizes. This issue has now been addressed.
Example Project
50837 - On page based on the Hardware template from the tab_style_1 library, high CPU usage may be
observed if parameter [Alarm]HeadingFont is not specified
On page based on the Hardware template from the tab_style_1 library, high CPU usage may be observed if
parameter [Alarm]HeadingFont is not specified. This problem is now fixed.
51282 - New parameters are added for customizing tab style templates
New parameters are added for customizing the tab style templates. They allow the system integrators to
implement their own Cicode functions / configuration to override some aspects of the templates such the text fonts
of the menu bar, contents of the default menus, context menus for the alarm pages and display value of the alarm
fields.
51639 - CSV and TXT file types are incorrectly listed as supported formats for alarm export
CSV and TXT file types are incorrectly listed in the "Save As" dialog of the alarm export button launched from
alarm pages based on the tab style template library. These options are now removed from the dialog.
Compiler
50977 - Compiler incorrectly allows an alarm area value to be less than 0 or greater than 255
Compiler raises a compile error if the value supplied to alarm area is out of the range of 0 to 255
CTAPI
51748 - CtApi: Scrolling to the last record does not the correct record count
In CtApi, the function ctFindScroll(hSearch, CT_FIND_SCROLL_LAST, ...,...) is expected to return the record
count but is offset by 1.
52389 - A memory leak can occur when calling the ctTagRead function
A memory leak occurs when calling the ctTagRead function to read tags from I/O devices in offline state. The
function behaves correctly with devices in online state. This issue has been fixed.
Process Analyst
Mode 0 (Filelocation_local) on SaveToFile does raise hardware errors and does not save the file as expected.
51667 - Loading pen properties for an automatically added pen (and other changes) in process analyst
takes a long time to be displayed.
Loading pen properties for an automatically added pen (and other changes) in process analyst was taking 30
seconds to display, but should be displayed almost immediately.
Alarms
50282 - Newly added Multi-Digital Alarm was incorrectly in the alarm state while it should be off
Previously, when a Multi-Digital Alarm of state 000 was added via server side online change, its state 000 alarm
condition was incorrectly interpreted. The issue has now been resolved.
50755 - A multi-digital alarm record modified via server reload would not trigger an alarm when its
current state was changed to be active
A multi-digital alarm record modified via server reload would not trigger an alarm when the alarm condition of its
current state was changed from 0 to 1. This issue has now been resolved.
a new alarm would be raised against the current state if the trigger condition of the current state is changed from 0
to 1; if the change is from 1 to 0, the previously raised alarm would disappear if it was acknowledged; or the alarm
would be displayed as off and unacknowledged if it was unacknowledged.
51415 - The alarm server loads the alarm save file inefficiently
The alarm server loaded the alarm save file in an inefficient manner. This issue has been resolved.
Hardware alarm display objects assigned by AlarmDsp() Cicode function kept refreshing themselves and losing
their focuses, which prevented users from doing any interactive controls such as clicking on them. Since these
objects are able to keep the focus now, it is possible to handle user inputs like clicking to acknowledge the alarm.
In addition, it is also possible to properly scroll alarm lists using AlarmSetInfo() Cicode function.
51544 - Changes made through AlarmSumSet are not replicated to the redundant alarm server
Changes made through AlarmSumSet are not replicated to the redundant alarm server. This problem is now fixed.
51552 - A new alarm is not captured if it has the same timestamp as when the alarm entered the off state
Timestamped analog and timestamped digital alarms were not capturing new alarms if they went to into the off
state and then at exactly the same timestamp transitioned into an on state. This problem has has now been
resolved.
51968 - A memory leak occurs when calling the cicode functions AlmTagsOpen and AlmTagsClose
multiple times
52404 - Alarm field format {High} displays 6 decimal point constantly in active alarm page
When using alarm display field {High} in the alarm display format, the High setpoint of the alarm will always be
displayed with 6 decimal point. For example, when we set the High setpoint of an analog alarm to 100.52, in
runtime when alarm is triggered, active alarm page will show the High setpoint value as 100.519997. Variable tag
is REAL data type and format is ###.##. The alarm tag format is also set to ###.##. Please note that the same
issue may apply to field {HighHigh}, {Low}, {LowLow}, etc. The secondary problem is that unset alarm threshold
values should not appear as 3.4e38.
IO System
49730 - The compiler does not raise an error when two IODevices are configured with the same
persistance file path
Runtime was crashing if two IODevices were configured with persistance enabled and the same persistance file
path. This problem could occur when the two IODevices were on the same IO server or in two different IO servers
that were running on the same PC. The compiler should have been identifying this incorrect configuration and
raising a compile error to stop the project from being run until the configuration was corrected. This compile error
has now been added.
50732 - IO server runtime crash if specifies the non-printable characters in the persistence path
IO server runtime crashes if non-printable characters exist in the persistence path. Example:
[RUN]?DISK_PLC.cache (the '?' is invalid)
The crash still occurs, but the invalid path is now logged so the erroneous configuration setting can be quickly
identified and rectified.
51119 - IOServer crash at start up when the [Data] directory is removed and IODevices use default
persist path
If a folder does not exist at runtime it is a general practice to create the folder automatically - this wasn't being
done for the data folder when the project used persisted devices. Missing folders should be created if they do not
exist. An error will be logged if the folder cannot be created. Not having the persistance data folder is more serious
than the alternative of having a wrongly named data path.
51794 - A memory leak occurs when calling the cicode function DllCallEx multiple times
The cicode function DllCallEx allocates memory for the arguments passed into it when it is called. This memory
should have been freed once the dll call had completed, but it was not. This problem has now been fixed.
52718 - Pop up menu is slow. It can be clicked again, and a second menu is created.(Related references
50130)
The semaphore used by the CICODE DspPopupMenu() to prevent re-entry during menu operation was not
implemented correctly. Specifically, the CICODE DspPopupMenu() function leverages CTUTIL!DspPopupMenu
which creates a native thread running it's own WndProc. On a busy system, this can take hundreds of milliseconds
be launch/render the Menu, thus the need to properly protect against re-entry. This has now been fixed.
Cicode
50464 - Error 424 "Tag not found" at startup under heavy CPU load
CitectSCADA version 7.20 Service Pack 2 16
This error code could be produced when a client timed out waiting for server responses to tag exists requests. A
new error, 532 "Tag resolve timeout", is produced instead. The timeout is also now configurable via
[Client]ResolveTimeout (in milliseconds, default 3000).
51056 - Wrong cicode function may be called if the same function name is defined multiple times.
Wrong private cicode function may be called at runtime if the same function name is used multiple times across
several cicode files with the same file name. For example, private function ABC in Cicode.ci located in one of the
included projects and another private function ABC in Cicode.ci located in the main project. This issue has been
fixed.
51124 - Client process unhandled exception occurs when assigning string value in cicode
Directly assigning a long string in cicode under specific conditions will cause an exception to occur in the client
process. No exception log is created, a windows popup informs that the process has stoped.
conditions:
initial string declaration such as:
STRING sStr1 = "2011-01-18 17:44:32.908 +10:00 [TRACE] [DCB ] [IODev..
Cicode debugger attached.
Stack windows open in cicode editor.
51305 - v7.20 CSV_MessageBox in multi monitor environment displays a pop-up box on wrong monitor
CSV_MessageBox uses an ActiveX control written in Visual Basic 6.0. Unfortunately VB6's "Screen" intrinsic
property is not multi-monitor aware, so it returns the width and height of the Primary monitor, only. This have now
been fixed.
Super Genies opened by AssWin() function lost its associations after calling SetLanguage() function. When the
Super Genies were closed and reopened to display new pages on the designated locale, the associations were
closed as well during page closing. This meant the way to refresh existing pages had to change. SetLanguage()
function now use new way to refresh Super Genies without closing them.
52064 - DspInfo(hInfo, 9, 0) does not return the "Cluster" name, it is returned blank
A pointer to retrieve cluster names wasn't assigned properly by the function DspInfo(hInfo, 9, 0) in some cases.
Since the code path which occurred this issue has been fixed, now the client process can retrieve proper cluster
names using DspInfo() Cicode function.
52081 - PageProcessAnalystPens() function doesn't replace the pens but rather adds them
PageProcessAnalystPens() did not replace trend tags of existing pens on the given *.PAV file by user unlike
Cicode Reference but rather adds new trend pens on the given pane, which made users impossible to utilize pre-
defined *.PAV files in order to apply prepared pen styles. Since this function now replaces trend tags of the
existing pens on *.pav file, it is possible to pre-define pen styles on *.PAV files. The other pens on the given pane
will be removed but any other pens on other panes will be kept as are.
52572 - Cicode function ServerIsOnline() traps an error when the server is off-line
When the target server is off-line the Cicode function ServerIsOnline() generates a 'Citect hardware error' rather
than returning the correct status. The Cicode function ServerIsOnline() should return 1 when the server is online
and 0 when the server is off-line and not show a hardware error.
Display System
49251 - Parameter [Page]StartupMode does not take effect on monitors other than the primary monitor
Parameter [Page]StartupMode does not work well under Multiple Monitors setup. The startup mode only applies to
the window on the primary monitor. Windows on other monitors starts up with the default mode. This problem is
now fixed. The parameter applies to windows on multiple monitors (configured via parameter
[MultiMonitors]Monitors) when Vijeo Citect starts.
Runtime Issues
While SCADA runtime is executing, if the Copy path in the CtEdit Section of the Citect.ini file in the Config folder, is
changed to point to a completely different project the application malfunctions. This has been fixed by refusing to
use a project in the Copy path if the project name is different.
Setting the "Port" field on a 7.10 project to same value as the "Port" field in a 7.20 project causes the old data
format to be sent to a port expecting the new data format. In practise, the 7.10 "port" should be set to the same
value as the 7.20 "Legacy Port".
51011 - Alarm server crashes eventually if it has a signficant number of configured alarms
A single alarm server with around 150,000 configured alarms was not able to process some tasks in a timely
manner. Those backlogged tasks eventually grew until the system was unable to allocate more space. This issue
has been resolved.
51089 - Trend Server crashed due to Trend.Acq kernel task not allowing other kernel tasks (esp.
CSAtoPSI.KernelTaskQueue) to run
A TrendServer with 50k+ trends was hogging the kernel processing. Processing all 50,000 trend tasks took over
40 seconds. This meant that other kernel tasks did not get a fair run and the number of tasks in the
CSAtoPSI.KernelTaskQueue grew and grew. The trend acquisition task now runs for about 100 ms before
allowing other kernel tasks to run. Trend acquisition continues from where it was left off on the next execution of
the task. This mean the statistics calculations had to change.
51430 - The title of the Cancel button in Japanese language might appear truncated
When using the Message Cicode function with the Mode parameter set to 1 in Japanese language, the title of the
Cancel button appears truncated. This problem has been resolved.
A Citect internal feature was over-writting the message a user wrote to the 'prompt' field with an error message
and with "" (blank) when there was no error. Citect internal features should not (in general) display error messages
in the 'prompt' field. The 'prompt' field is normally reserved for messages generated by the customers' projects.
Error messages of this type should be displayed as Citect 'hardware' errors.
52230 - Use of global String variables in CiVBA code can cause Citect runtime to crash.
Use of global String variables in CiVBA code can cause Citect runtime to crash. This issue has now been fixed.
If you use TagSubscribe's callback functionality, the subscription handle passed back is first converted to a string
and then incorrectly truncated to the first four characters. Subscriptions whose handles are greater than 9999 will
then be passed back an incorrect subscription handle when the event is fired. This has now been fixed.
Web Issues
51831 - The URL parameter StartPage=<page name> is not always working in WebClient
When the StartPage URL parameter is used in WebClient, the specified page might not be loaded, and the default
page defined in citect.ini will be displayed instead. This issue has been resolved.
Remaining Modules
47659 - "Invalid Time Format" compile errors after upgrading v7.0 projects(Related references 42623)
Some period strings valid in French and German installs of Citect v7.0 could not be upgraded in v7.20. This would
result in "Invalid Time Format" errors at compile time. This fix provides an addition to the Migration Tool, where all
period strings contained in French and German v7.0 projects will be upgraded.
50293 - Accumulator does not work if all three counters are not defined
Accumulators only work if all three counters - number of triggered times, run time and totalised value - are present
on the configuration, or they do not save accumulated data on variable tags. Now accumulators work with any
possible combination of these three counters, it is possible to select one to three counters to use instead of
configuring all counters on accumulator configuration.
50306 - Display Client V 7.20 start up is more than 3 times slower than in v7.10 using a multiple cluster
project.
There was a performance problem with the Display Client in V 7.20 taking a very log time to start on a multi cluster
project. Compared to V 7.10 it was taking 3 times more time for the Display Client to start. Performance
optimizations have been done and the client start up time has been reduced substantially. Now it is slightly below
the start up time in V 7.10 using the same project.
50435 - TZD field of the Timestamp present in the SYSLOG.DAT file is not showing the correct Local
time offset from the UTC.
A race condition was possible in the IOServer process that can manifest in a crash. This issue has been resolved.
50545 - Corrected missing string substitution fields discovered in several of the Localized versions.
A handful of substitution string fields were discovered missing in the localization of Chinese, German, Japanese,
Spanish and Russian. These have been put back in order.
50608 - Compile Error - Operand Expected and Close Bracket Expected with Blank Genie Substitution
and non-default display value
When a genie parameter is not set (left empty) for a numeric object with a non-default format (e.g. "###), an
expression code of "():###" (TXT_STR) is generated and saved in the page .CTG file which then fails to compile.
Compile Error:
Field: TXT_STR
Table: PGDynObj.dbf
Error: Operand Expected
Context: Line [1]:({)}:###
What should happen is the same thing if a numeric object with an empty numeric expression field is added to a
page - ####.# is displayed
Note:
The problem was in the Citect Graphics Builder (it was saving the wrong information). An existing problem of this
nature can't be 'fixed' automatically, the user will have to use the fixed Citect Graphics Builder to edit the page and
re-save it to make it save the right thing. After doing that the compile will succeed.
50676 - IODeviceInfo does not reflect IO Device State changes made using IODeviceControl
In configuration with two redundant instances of the same I/O device configured on the same I/O server, the
IODeviceInfo call on the client returns a value which is not consistent with the current I/O device state on the I/O
server. After the code disables the unit, the code now initiates a heartbeat which will then update the server
information.
50710 - Project dbf addin crashes when Master.dbf contains two or more projects with the same title.
When Master.dbf contains two or more projects with the same title (as a result of mucking around with
EnvironmentManager, etc.) the project dbf addin crashes. Example Master.dbf:
JRS_1Rollup Hampton Conveyor Control System
JRS_2Nitric
JRS_3Include
JRS_4Legacy CitectSCADA generic features/templates
JRS_5Template CitectSCADA generic features/templates
50721 - Corrected missing string substitution fields discovered in the Chinese version.
This is a duplicate of bug 50545. A handful of substitution string fields were discovered missing in the localization
of Chinese. These have been put back in order.
[Kernel]WinShutdown parameter was not online changeable, which made users impossible to change the policy to
Windows session ending after startup of their projects. Since it is online changeable now, it is possible to change
the way to respond to shutdown attempts using Computer Setup Editor after startup of user projects.
Defining multiple primary IO devices with the same name would result in the error "Cannot Create Task <IO Server
name>" at startup. This situation is now detected at compile time, with an error "Same primary IO device name
used with two different network numbers".
Users can set DisableConnection = 1 to prevent the display client from connecting to a particular server. However,
if the server has redundancy configured, communications between the primary and standby servers are broken.
This issued has been fixed.
50975 - Invalid error message, "Class does not support Automation or does not support expected
interface".
When changing back and forth between pages that contained ActiveX object and when CiVBA code was being
used, an invalid error message was logged. An internal variable was not being cleared correctly when the page
was closed. This resulted in the invalid error message being logged.
51123 - Re-purpose the 'Citect 0' statistics to report on the cycle time and execution time of the page
animation routine(Related references 48149)
Previously, the 'Citect 0' statistics recorded the time between page loads. i.e. The operator loads 'Page 1' and then
90 minutes later loads 'page 2'. This statistic was not very useful so it has been removed and replaced with two
new statisitcs.
The first Citect window created (e.g. containing a main citect page) will have the number 0, the next Citect window
created (e.g. containing a popup page) will be 1, etc.
(Cycle) Min Max Avg CPU (Exec) Min Max Avg Count PageAnm 0 0.020 0.355 0.177 02 0.001 0.022 0.003 1157
PageLoad 0 0.283 0.283 0.283 00 0.283 0.283 0.283 1
These example statistics show that one page was loaded in the main window and that it took 0.283 seconds to
load the page elements, subscribe the tags and display the information.
The stats also show that it is taking 0.003 seconds on average to animate the page each animation cycle and that
the animation cycles are occurring every 0.177 seconds on average.
51125 - Crash when using latest version of PlusADOCon with CSV_DB_* functions(Related references
50845)
Customers who had updated to a later version of PlusADOCon.dll (1.17.0.0+) were experiencing a crash when
using the CSV_DB_* functions. This was because the interface to the DLL had changed. This issue has now been
fixed.
51505 - Crash when performing kernel dump on TrendServer in CSAtoPSI.Subs list (length 50k+)
When performing a kernel dump on TrendServer with 50k+ subscriptions, the kernel dump failed in the middle of
outputting the CSAtoPSI.Subs list. The length of the tables output to the kernel.dat files should be able to be
regulated and should not result in excessive file size or CPU use. The new Citect.ini parameter,
[Debug]MaxTableOutputLength (Default=200, Max=32000, -1=unlimited), will limit the length of tables when they
are output to a kernel.dat file.
51585 - Carriage return and Line feed do not display properly in 7.20
Control characters (ASCII code less than 32) in string tags were replaced with space characters during tag read
procedure of I/O server, which made it impossible to store control characters such as Carriage Return and Line
Feed characters in string tags. Since tag read procedure do not modify control characters any more, it is possible
to store and display control characters in string tags properly.
51671 - Client process crashed when calling InfoForm on a display tag with cluster name as prefix
A pointer wasn't initialised at declaration or by the function InfoGetClusterTag() in some cases. The function,
InfoGetClusterTag() was changed to use arrays rather than addresses of pointers to null terminated char strings.
The client process should not crash when calling InfoForm on a display tag with cluster name as prefix (fully
qualified name).
51753 - The processing of a tag write callback on different thread to the Kernel Task main thread may
result in an Unhandled ArgumentOutOfRangeException in Subscriptions List after startup.
The processing of a tag write callback on different thread to the Kernel Task main thread may result in an
Unhandled ArgumentOutOfRangeException in Subscriptions List after startup. This issue has now been fixed.
51881 - Stand-by alarm server fails to pick up after primary goes down
When the primary alarm server goes down, the stand-by suffers a keep alive timeout and generates a
MSG_CLOSE event. At this stage the standby should set itself to primary.
In previous versions this was done on MSG_ERROR.
Graphics Builder Automation Interface broken by 7.20 service pack 1. Specifically, seven new members were
added to IGraphicsBuilder interface in an improper way, breaking backwards binary compatibility. That is with
anything that uses early binding. A more robust implementation is now in place, with the new members added to
the end of the existing interface.
52193 - For Category and Priority based alarm queries, the Alarm Server does not check whether there
is a redundant peer available before sending the tran message.
For Category and Priority based alarm queries, the Alarm Server does not check whether there is a redundant
peer available before sending the tran message, and the tran error logging produces a garbled trace. This issue
has now been fixed.
52522 - Cannot remove or change saved credentials saved during modes 5 or 6 for
[Client]AutoLoginMode.
When certain [Client]AutoLoginMode types are used, the details of a successful login are saved. When
[Client]AutoLoginMode is changed to one which requires you to login via the login dialog, these previously saved
credentials were not being deleted. This has now been fixed.
Installation
Applying a service pack to an installation containing a hotfix newer than the service pack would not overwrite the
hotfix files. This has now been fixed.
43936 - Project status is not being set to "Uncompiled" after Service Pack Install.
Project status is not being set to "Uncompiled" after Service Pack Install. This issue has now been rectified.
48864 - Graphics Builder runtime error when object links are missing on the page
Graphics Builder generated a runtime error when it opens a page with missing object links and a user tries to
cancel the process. It has been fixed. Link updates cancellation does not cause the Graphics Builder error.
49585 - Objects on top of a Gradient Filled rectangle disappear from Graphics Builder
Graphics Builder display error has been fixed. Gradient filled objects used to disappeare when another window or
a dialog overlapped them.
50202 - Tag import fails for OPC tags with spaces in branch.(Related references 46491, 47730)
Tag import is failing for OPC tags with spaces anwywhere in the branch name. This has now been fixed.
50204 - Only 7 of the 8 characters in EngUnits field are displayed at runtime(Related references 24451)
The compiler was failing to allocate enough space for all 8 characters of the engineering units field. This has now
been resolved.
50228 - Cannot display any object larger than the computer's display resolution(Related references 47067,
47557)
Graphics Builder crops any symbol or genie that is larger than the current display resolution. This issue has been
resolved.
50278 - Moving a number or text object erases a gradient filled rectangle object underneath in the Graphic
Builder
When moving a number or text object on top of a gradient fill rectangle object, the rectangle object appears
erasing in the Graphic Builder. This problem has been fixed.
A substitution string was missing in two strings of the German version. This causes Graphics Builder to crash
when upgrading an old project. This issue has been resolved.
50744 - Web Deployment creation fails using a non-default INI file(Related references 49547)
50745 - Opening a genie page with an ActiveX control may produce an error(Related references 50315)
Opening a genie with an ActiveX control may result in a popup with the following message:
"The ActiveX control is conflicting with Citect and may produce unreliable results.
It is strongly recommended that you remove this ActiveX control from the page, save the page and then close and
restart Citect Explorer to avoid further problems."
This issue has been resolved.
Example Project
49412 - Phantom Tab menu toolbar is displayed on windows that are beyond the limit of 9
Up to nine (9) instances of the tab menu toolbar (one on each window) can be displayed on screen at the same
time. On the windows that are beyond this limit, phantom items would be displayed on the tab menu toolbar. The
limitation is now handled gracefully such that no items will be displayed on windows that are beyond the limit.
Compiler
When Reports containing\using large amounts (>32KB) of CICODE are compiled, the Compiler would crash. This
has now be fixed.
Alarms
40919 - Writing to a local variable configured as an integer array takes too long.
Writing to a local variable configured as an integer array takes 10 times longer than to a local variable configured
as a string array, if that local variable is attached to the alarm description field in the digital alarm form. This issue
has been fixed.
42023 - Setting the thresholds property of time-stamped analog alarms would not update the threshold
value in standby alarm server.
When an alarm threshold property was set, the threshold value on the primary alarm server was updated, but the
value of the same threshold on the standby alarm server was not updated. This issue has now been resolved.
44329 - AlmTagsGetField() function could not return the correct value of "GROUP" (Suppression Group)
and "PRIORITY" (Suppression Level) fields.
AlmTagsGetField() function could not return the correct value of "GROUP" (Suppression Group) and "PRIORITY"
(Suppression Level) fields.
To avoid on-the-fly alarm catagories validation, the alarm catagories' loading was changed from demand-driven to
at-startup. This change reduces system load at runtime but it causes unwanted delay for projects with lots of alarm
catagories, so the loading is changed back to demand-driven after improving the run-time validation code.
50147 - A Multi-Digital alarm will trigger continuously when in an off state if state 000 is configured to
trigger the alarm
When a Multi-Digital alarm was in a state that has been configured as an off state, the state was being incorrectly
set to match that of state 000 (all three variable tags with value 0). So if state 000 was configured to trigger the
alarm, the alarm was then triggering every alarm scan. This problem has now been resolved.
50232 - The millisecond component of alarms is always formatted to be zero(Related references 49958)
v7.10 SP3 introduced internally generated millisecond-resolution timestamps for digital and analog alarms,
however this was not correctly formatted. This results in all alarms displaying a timestamp of .000. For PowerLogic
SCADA customers this was also resulting in some event log entries being overwritten. This has now been fixed.
Alarm server may crash when the alarm area is not in the
range 0 - 255, this has been fixed
Trends
50224 - When SPC Trend Plot is printed the span may not match the displayed span(Related references
43911)
SPC Trend Plot when printed shows the same span as the
on-screen span even when the sub-group size is not 1
50494 - Trends setup to roll over monthly and yearly do not work in 7.20
Monthly trends would fail to reload if the previous month did not have 31 days. Similarly, yearly trends would fail to
reload if the previous year did not have 366 days.
IO System
47983 - When using more than 256 modenet devices get "Channel Offline Cannot talk" for all
channels(Related references 45339, 38535, 40418, 46257, 48669)
When a test project is with 512 channels configured, then the error "More than 250 Ports defined" does NOT
appear. If the number of channels is increased to 513 or more, then the error "More than 512 Ports defined"
appears.
Note: The Kernel tasks was set to 32767 and Kernel Queues was set to 8000. And if not then 'Kernel tasks
exceeded' and 'kernel Queues exceeded' errors show up during starting, and the IOServer never starts.
The test project consists of 512 channels of which 4 channels are connected to Real PLC and the rest are
connected to a MODBUS Simulator running in a remote machine. When this test project is run, NONE of the
If the number of Channels is reduced to 256, then all of the Channels and Units come ONLINE. If the number is
increased to 257, then one of the channel goes OFFLINE and the rest come ONLINE. If it is further increased to
258, then two of them go OFFLINE and the rest come ONLINE. In summary, based on the test results, only 256
channels are being handled properly by the MODNET driver.
The driver was changed to allow for more than 250 devices, but the SCADA program also needed to be changed.
The SCADA program was combining the board number and the channel number into one 16 bit integer (8 bits for
each).
The fix is to use only the top 4 bits for the board number (max 16) and the bottom 12 bits for the channel number
(max 4096).
Both the Modnet driver change and the SCADA change must be applied to allow the use of more than 256 modnet
devices.
49977 - QualityToStr(q,3) is showing the "Device comm. Loss" instead of "Waiting For Initial Data"
The timer responsible for timing out unresponsive client subscriptions was taking up more CPU usage than it
should have been. This was causing higher than expected CPU usage, especially on the alarm server. This
problem has now been fixed.
Setting Cache TRUE/FALSE dropdown on the IODEvices form has no effect on whether reads are cached or not,
only the Cache Time is used. This has been fixed - setting Cache to FALSE will now disable caching regardless of
the configured Cache Time
50213 - Mismatched protocols, ports and/or memory modes between Primary and Standby devices should
produce compile-time errors.(Related references 46861, 34122)
Mismatched protocols, ports and/or memory modes between Primary and Standby devices should produce
compile-time errors. This has now been corrected.
50447 - Trends and Alarms are not updated when running an IO server containing multiple DRI based
drivers
Only one driver was able to register to update trends and alarms through the DRI. This was causing alarms and
trends to only update on one of the drivers in the IO server. This problem has now been fixed.
50766 - When many devices are configured, losing a connection leads to a non-responsive I/O server.
When the network disconnected for an I/O server, each device going offline caused an event which would send a
heartbeat message. As the number of devices increased, the performance hit of this increased exponentially
eventually leading to a system that does not respond for minutes. Heartbeat messages are now rate limited to
prevent this scenario.
51214 - Alarm and Trend values can have incorrect time stamp for TagReadEx calls.
Alarm and Trend values can have incorrect time stamp for TagReadEx calls. This issue has now been rectified.
Cicode
49542 - 0 was returned when calling ServerGetProperty using RDBMemTime on a Trend server with no
trend tags defined.
0 was returned when calling ServerGetProperty using RDBMemTime on a Trend server with no trend tags
defined.
This issue has been resolved. RDBMemTime on a Trend server now returns the time-stamp of _Trend.RDB that
was loaded into the memory.
49835 - The "I/O Device Statistics" form does not display IO devices that have a "Number" over 4095
The "I/O Device Statistics" form does not display IO devices that have a "Number" over 4095. This issue has been
resolved.
QueLength() returned a 16 bit signed integer, rather than a 32 bit integer. This presents a real problem for queues
longer than 32767 -> queue length may be reported as a negative number, or an incorrect positive number (eg for
queues longer than 65534).
The issue has now been resolved.
When illegally calling the blocking PageTrend cicode function on a foreground cicode task, the first pen was still
added even though the cicode was aborted. This has been rectified, and now the aborted cicode will not result in
any pens being added (and a Hardware Alarm will be generated). This blocking function should only be called on a
background cicode task.
50910 - DllCallEx truncating LONG return type to SHORT causing incorrect data being returned from the
DLL call.
DllCallEx truncating LONG return type to SHORT causing incorrect data being returned from the DLL call. This
issue has now been rectified.
Display System
49893 - Static square object configured with gradient fill disappears at runtime
A static object configured with gradient fill on the tab template will disappear at runtime after the page has been
resaved. This problem has now been fixed.
49994 - Fullscreen mode [Animator]FullScreen = 1 or 2 does not work when DynamicSizing is turned off
Fullscreen mode [Animator]FullScreen = 1 or 2 does not work when DynamicSizing is turned off. This problem is
now fixed.
50007 - Under the parameter setting of [Page]DynamicSizing = 0, scrollbars may not appear / hide properly
when switching between pages of different sizes
Under the parameter setting of [Page]DynamicSizing = 0 (which turns off dynamic sizing / scaling of page
contents), when the user switches between page of different solutions, scrollbars may not show or hide as
expected. This problem is now fixed. By default, scrollbars will appear if the page content does not fit the window
and vice versa. The scrollbars can be permanently turned off by setting Citect.ini parameters
[Page]AllowHScrollbar and [Page]AllowVScrollbar to 0.
When a number or text object is placed within a group and there is a value set for the angle within the group's
rotation movement property page, the number or the text object will not rotate with the group in runtime. This
problem has been fixed.
50203 - Button shows a stripe when the cursor is hovered over another graphic(Related references 44769)
XP-style buttons with custom fill colours may be rendered with a stripe when the cursor is hovered over another
graphic object. This issue has been resolved.
50223 - Keyboard Commands (ENTER) does not register following a pop-up box / menu(Related references
42726)
When a popup menu is dismissed/cancelled by clicking away from it, the enter key no longer works properly.
Specifically, you need to either press the Escape key, or click something that captures keyboard focus. There
were also issues when used by touch screen systems. These problems have now been fixed.
Runtime Issues
42814 - [Code]WriteLocal=0 does not work for page or user subscriptions(Related references 42397)
Subscriptions automatically created for pages, as well as manually created by calling the TagSubscribe cicode
function, were not honouring the
[Code]WriteLocal parameter. Instead they were being forced to update the local cache on any write.
Tag Browsing
50214 - Tag import from OFS was taking a long time if there were many tags.(Related references 48890)
Tag import from OFS was taking a long time if there were many tags. This issue has been fixed.
50219 - Tag import fails after recreating a deleted project(Related references 44643)
If Tag Import is used to import tags into a project and that project is subsequently deleted and recreated, further
attempts to import will result in an invalid template error. This error was caused by the template path being saved
to the citect.ini file and not recreated with the new project. The issue has been resolved, if a template file does not
exist the normal default is used.
Web Issues
48928 - Web Client not updating components deployed via ACTIVEX.ZIP and/or MISC.ZIP
When deploying new components to Web Clients via ACTIVEX.ZIP and/or MISC.ZIP, existing versions of these
were not being updated. This has now been corrected.
Remaining Modules
When running some large projects, the following message was noticed in the IoServer Syslog file: TranWrite(0,
246): State != TRAN_STATE_ONLINE, state=0 This was due to an incorrect connection state transition on the
connection established between the IoServer and the client. Eventually this error will cause the server to shutdown
with the following error "Software Protection Failure. Cannot connect to Client.". This problem is fixed.
if CodeTrace is active, some buit-in CiCode functions may cause a crash by using values as pointers. This issue
has been resolved.
Under heavy loads, or when deleting groups on client disconnection, Citect's OPC server would occasionally
crash. This has now been fixed.
50211 - Externally defined CiVBA functions are not executed in some circumstances(Related references
48070)
After installing Hotfix HF710SP246889 to enable the CiVBA code to compile, some CiVBA functions that call other
CiVBA functions in another BAS file may not run. This has been addressed by changes in our code to overcome a
limitation in the 3rd party VBA code.
A hardware error has also been provided to provided notification if the situation happens again.
Windows shutdown sequence was blocked by Runtime Manager window while Citect is running despite
[Kernel]WinShutdown=1. Runtime Manager has been fixed so that it will conditionally respond to
WM_QUERYENDSESSION based on [Kernel]WinShutdown. The issue has now been resolved.
50218 - CSV_MessageBox() does not display the correct text for user-defined buttons on Vista(Related
references 46354, 50746)
CSV_MessageBox() does not display the correct text for user-defined buttons on Vista and Windows Server 2008
operating systems. This was caused by change in sequence of child windows (controls) in the operating system
MessageBox. The fix applies text on buttons irrespective of their sequence in the parent window.
50220 - Advanced Filters will not filter Alarm Summary by time and date(Related references 38852)
When filtering Alarm Summaries, the current Alarm‟s data was being used instead of the historical data recorded
within each such Alarm.
The issue has now been resolved.
50226 - Foreground SQL is prevented by default. A hardware alarm is generated if an SQL Cicode function
is invoked in foreground.(Related references 46692)
Foreground SQL is has always been problematic, but can also cause crashes in SCADA. By default, the user SQL
Cicode calls are no longer allowed in foreground Cicode.
CitectSCADA version 7.20 Service Pack 2 30
50227 - Runtime scales the expression for fill animations incorrectly(Related references 46736)
If a complex expression is defined for a fill animation, the runtime produces incorrect results. This issue has been
resolved.
50231 - Windows Error Reporting prevents process restart after crash(Related references 49810)
A dialog asking to send crash information to Microsoft can appear after the runtime crashes, in which case the
process will not restart. Note that [CrashHandler]NoEmail=1 must be set to prevent the analogous Citect dialog
and ensure the process restarts.
50524 - Reports are not executed if a Standby Report is defined in the project.
If a Standby Report Server is defined in a CITECT project, neither of the Report Servers would run reports. This
has now been corrected.
We did not implement any code to retain changes to column widths made by the user at runtime, so that when a
table refreshes, the widths reset. This has now been fixed.
50746 - CSV_MessageBox() does not display the correct text for user-defined buttons on Vista(Related
references 46354)
CSV_MessageBox() does not display the correct text for user-defined buttons on Vista and Windows Server 2008
operating systems. This was caused by change in sequence of child windows (controls) in the operating system
MessageBox. The fix applies text on buttons irrespective of their sequence in the parent window.
50780 - The SCADA system should record the non-default SCADA parameter settings(Related references
50621)
A new file, "Params.dat" has been added to the log folder that contains a historical record of the non-default
SCADA parameters.
Example:
[Params.dat]
2010/12/01-14:42:07.847 [Code] Threads= 128 Default= 64 2010/12/01-14:42:07.852 [Code] TimeSlicePage=
5000 Default= 500 ...
Also, the kernel dump has been extended to include a complete list of current SCADA parameter settings.
Example
CiCode: DumpKernel(0x0100, "Parameters")
[kernel.dat]
Citect Diagnostics Wed Dec 01 2010 02:43:53 PM
========================================================================
--------------------Parameters
[ALARM.CLUSTER1.ALARMSERVER1] CLUSTERS= Cluster1
[ALARM.CLUSTER1.ALARMSERVER1] CPU= 0
[ALARM] ALARMDISABLE= 0
...
50983 - Tag name is not printed in the log message if a Super Genie substitution contains type casting
When a substitution for Super Genies contains both data type and association in the form of ?<Data Type>
<Association>?, the actual variabe tag name doesn't appear in log messages when the Super Genie is displayed
or used. This problem has been rectified.