Fixes and Minor Enhancements
Citect SCADA 2016 Update (April 11, 2017)
Release Notification (Updated 10 April 2017)
This is a detailed listing of fixes and minor enhancements in this release.
Bug Fix Index
In the Computers view in the Deployment activity, all versions were made available through the Target drop down, which was confusing if there were multiple versions from different project sources. The Target version field should only show versions related to the selected project. Now, if there are no compatible versions for the selected project, then the target version field will be blank. If the selected project contains previous versions, they will still be visible from the drop down but they will not be selectable.
When the ActiveX control was in focus it would not pass the keyboard messages to the containing graphics window; in such cases the graphics page was bypassing the keyboard command matching process, thus the keyboard commands on the graphics page were being disabled. Keyboard handling has been enhanced for graphics pages that contain ActiveX control(s). When an ActiveX control is in focus for keyboard inputs, and if that ActiveX control does not consume the keyboard inputs, then keyboard commands on the graphics page will continue to function.
After removing a keyboard command from a Super Genie and triggering "update pages", the keyboard command would not be removed from the page that was linked to the Super Genie. Now, after deleting page keyboard commands from a Super Genie, running "Update Pages" will delete those keyboard commands from the linked Super Genie instance page. Note that the [Animation]TemplateUpdate parameter needs to be enabled for this to occur. See the Citect SCADA online help topic "Edit a Super Genie Library Object" and "[Animator]TemplateUpdate" for more information on this change.
The hardware alarm "Stand-by I/O Device activated" was incorrectly raised when both primary and standby I/O devices were online. The behaviour for scanning the status of devices has now been updated.
If the CPU core was specified to be greater than or equal to 31, the alarm server would not start in extended memory mode. This code has now been modified to allow any valid CPU value.
The Cicode function PageDisplay() is not always setting keyboard command focus to the nearest object to the mouse cursor when it is a dynamically drawn library control. The keyboard command cursor focus is now set correctly.
The Cicode function ServerIsOnline() always returns 1 when called from within the same process as the server. The function now only returns 1 once the server is able to service tran requests.
The maximum number of projects that can be included in a project has been increased from 243 to 1024.
In the case where a write succeeds but the actual value in PLC does not change, Citect SCADA may have an incorrect tag value. This could only happen with DRI based drivers. For example, in the BACnet driver the write to the AnalogOutput property results in write to the PriorityArray property and the AnalogOutput property value may not change. In that case the I/O server updates the value in Citect SCADA to the written one when [Code]WriteLocal is set to 1. If immediately after that the driver pushed the correct value and the I/O server did not update its cache, this could result in an incorrect value being displayed. This was caused by the I/O server handling the write complete event and value update event in the wrong order. This has now been corrected.
When viewing special days using the Special Days view in Time Scheduler, a user could see all special days including those to which they did not have area access (configured via the area field of the related equipment). The user can now only see special days and schedules to which they have appropriate access.
Unable to write to Calendar objects from Scheduler interface on both OS with English or non-English as system default culture. To fix the system date format was changed to use a different date separator, e.g. '.' character rather than the standard'/' character.
The 'UserLocation' property was not being written to an alarm device. There was no Alarm Record Format function mapping for the 'USERLOCATION' property. An Alarm Record Format function mapping for the 'USERLOCATION' property has now been added.
When timestamped analog alarms are configured with a setpoint and deviation, calling the AlarmNotifyVarChange Cicode function to push a value will not result in a limit alarm being raised until AlarmNotifyVarChange is again called to push a value for the setpoint. This will occur after every restart of the alarm server. We now confirm that limit alarms will be raised in this scenario, and that values and setpoints are persisted between restarts of the alarm server. This means the alarm will trigger with the correct logic, regardless of what setpoint or value notifications occur at a later point in time.
If StrToLocalText() was called on a translatable string using the new format from 7.30, and the string contained special characters such as brackets, the look up would not be successful. This function now supports translation strings in both the @(Native String, [,Width [,Justify]]) format and the @NativeString format.
Timestamped alarms that are configured with a Cicode expression for their timer field (not just a variable tag reference) may be raised with an old timestamp. Cicode is now re-evaluated as we calculate the timestamp to check this does not occur. Also, if the value of the timestamped alarm transitioned to off while waiting to obtain the timestamp of the on transition, then the off transition would not be captured, leaving the alarm in an on state. This has been resolved be re-evaluating the alarm once the timestamp has been obtained.
When an alarm server is started up for the first time, or for the first time after the alarm database history data has been deleted, it is treated as a special scenario whereby any alarms that are on at startup will be raised as acknowledged. In this scenario, Timestamped Alarms were being raised with the current time as the timestamp instead of the PLC time. This has been corrected so that the PLC time is always used for the timestamp when a Timestamped Alarm is raised.
When an invalid cluster name was passed to alarm operation functions (including AlarmAckTag, AlarmDisableTag, AlarmEnableTag and AlarmClearTag), the process being called would generate an exception report. An error code will now be returned by the function when the specified cluster is invalid.
When used on graphics pages or in user Cicode, calls to AlarmCount and AlarmCountEquipment would contribute significantly towards the CPU usage of the Citect SCADA process. Optimisations have been performed to reduce the amount of CPU usage consumed by these functions by approximately one third (33%).
The alarm event queue is enabled by setting [Alarm]EventQue=1 in the citect.ini file of the alarm server. Once enabled, each event on every alarm will be put into this queue, allowing users to read these events off the queue in cicode. In situations when the RecNo field of an alarm was invalid, this could cause events for that alarm to not be added to the event queue. This has been rectified by using the Tag field to identify the alarm rather than the RecNo field.
SCADA may have shutdown randomly due to an unprotected Win32 API call. This situation is now guarded against.
A new INI parameter named [Alarm]ShowAllConfigured has been added. When set to true, it will show all configured alarms on an alarm list using mode 4 (show configured alarms). Otherwise, it will only show alarms when the category setting ShowOnActive is true.
SubscriptionGetValue() and SubscriptionGetTag() Cicode functions return 0 (zero) when subscription is pending or an invalid array index is specified. Under these conditions, these functions now return empty string, and raise the correct code. The latter can be retrieved using the IsError() Cicode function.
The AlarmCount() and AlarmCountEquipment() Cicode functions can be called in blocking mode, which blocks the calling Cicode task until the count has been obtained. Calling these functions in blocking mode when you are not connected to an alarm server was resulting in the Cicode task being blocked forever. This has now been corrected; the Cicode task will now unblock and continue straight away if there is no alarm server available.
If VB script had incorrect syntax, the position reported by compiler may have been offset by a certain number of lines. The compiler now determines the correct number of appended lines.
On systems with a large number of included projects, it was possible for the compiler to generate an "out of handles" message, even if the Citect.ini parameter [CTEDIT]DbFiles had been set to its maximum value of 510. To resolve this, the compiler infrastructure has been improved.[CTEDIT]DbFiles has a new maximum of 32767, and a new default of 1024.
When running the Computer Setup Wizard, you can specify a Cicode function to be run when an OPC DA server is started. The specified function was not being run for OPC DA servers. Citect runtime was searching for the setting to be configured with a cluster name of blank, which is incorrect. OPC DA Servers will not have a cluster name, so Citect runtime has been modified to only search for the setting under either the [OpcDaServer] section or the [OpcDaServer.ServerName] section for this type of server.
When a Database Exchange column width was changed, the column and width information of the view was saved and reused each time the view was refreshed, even if the query of the recordsource had changed. This would cause the new query to display incorrect columns. The saved columns of previous query are now cleared when the query is changed.
When duplicating an equipment type, the new equipment type may have been missing some of the elements, resulting in an invalid equipment type. A duplicated equipment type will now clone the source equipment type so the target equipment type will be valid.
The tab key and default button stopped working in the Find/Replace dialog. The dialog has now been repaired.
'Tab' Style templates use a large amount of Cicode to deliver their functionality. Some of these functions were causing high CPU usage, as they were being called regularly. To address this, these functions were converted to built-ins that performed more efficiently. In order for these performance improvements to be obtained, the active project needs to be recompiled on a Citect PC that has the patch installed. It is recommended that you manually back up and restore the following system files if uninstallation of this patch is required: citect.ci - USER]include; Display.ci - [USER]Tab_Style_Include; TabAlarm_Metadata.ci - USER]Tab_Style_Include; Tabmenu.ci - [USER]Tab_Style_Include; func0.DBF - [BIN].
If an alarm server uses up more than the [Alarm]MemoryWarningLimit in RAM, a hardware alarm is broadcast through the system to notify users. If the alarm server has a redundant peer, this message is also broadcast to the peer, which resulted in an infinite loop of the alarm servers constantly broadcasting the hardware alarm to each other, thus causing high CPU and network usage. This has been resolved by checking the message between alarm servers is only sent once.
The last page on Configurator would not display localised text correctly. The Configurator has now been repaired.
The existing French translations of the "Yes - Close" button and "Time" column on alarm lists were inaccurate. The localized strings have been updated.
The Process Analyst ActiveX control provides an API for executing commands through the _ObjectCallMethod Cicode function. Executing the CopyToFile command (CPA) through this mechanism was not completing, as it would wait for data requests to complete. We no longer wait for the data requests to complete when CopyToFile is called through this mechanism.
Trend comment were not being translated according to the runtime language selected on the display client. Localised comments for trend tags now will be shown on the object list of Process Analyst.
Periodic reports may not rollover correctly due to the report's device configuration. The device rollover period synchronisation is now based on the device configuration.
When Citect SCADA or Runtime Manager were launched for a second time, Runtime Manager would ignore the request if there were any Citect processes running at the time. This behaviour has now been changed so that any stopped processes will be started when Citect is launched for a second time.
Previously, the expression timer for HiRes Alarms was delayed by ScanTime. A new ini parameter, HresTimerExprDelay, has been introduced to allow the delay to be configurable.
Changes have been made to the I/O server so that it will not raise error messages if the drivers in use have not been stamped as supported on the Microsoft operating system Citect SCADA is running on. Drivers will be supported on all Microsoft operating systems that the version of Citect SCADA is supported on. Any driver that cannot be supported on a specific operating system will be stamped as unsupported on that operating system and an appropriate notification will be provided at startup.
Trend values are displayed in the Process Analyst using the format specified on the trend tag. In future, if the trend tag format is not specified, the format defnied for the variable tag in the trend expression will be used by the Process Analyst. To use this enhancement, the patch will need to be installed on the required trend server, and you will need to recompile your project on a Citect installation that also has been patched.
It is now possible to hide/show the Special Days View tab on the Time Scheduler. A new ActiveX property (IsSpecialDaysViewHidden) was added to the TimeScheduler control.