Fixes and Minor Enhancements

Citect SCADA 2018 Release Notes

Release Notification (Updated 25 May 2018)

This is a detailed listing of resolved problems and minor enhancements in this release. (See What's New in the Citect SCADA Online Help for details of new features for this version.)

Bug Fix Index

Alarms

Authentication / Security

Cicode

Compiler

CTAPI

Display System

General

IO System

Licensing

Localisation

OPC Connector

Process Analyst

Project Development Utilities

Runtime Issues

Time Scheduler

Trends

Web Client

Remaining Modules

Help

Enhancement Index

Alarms

IO System


Bug Fixes

Alarms

62577 - Main / Non-main status of an Alarm Server is now available via Cicode

There was no way to get the status (Main / Non-main) of an Alarm Server via Cicode. A new mode (4) has been added to the cicode function ServerInfo to get Main / Non-main status at runtime via Cicode.

64626 - 'UserLocation' property was not being written to an alarm device

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.

64718 - AlarmSetInfo did not return an error when attempting to index beyond the end of the client cache

When AlarmSetInfo was called with types 0 (alarm page number) or 1 (alarm list offset) and an index beyond the current end of the cache, the result would not return an error. Cicode error code 569 - "Attempted to index to an alarm that is currently out of range" - has now been added.

64822 - Dynamic data in an alarm description cannot be combined with a multi-language expression

When an alarm description combined dynamic data with a multi-language expression, such as "@(Motor Control) {LOOP_2_PV:###EU}", the alarm description would not correctly show both the translated text and the tag expression. Translations and tag value expressions are now handled correctly.

64968 - Limit alarms on timestamped analog alarms will not display until the setpoint has been initialised

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.

64977 - Alarm server ceased to operate when Yokogawa OPCAE client connects to CS OPCAE server

Alarm server ceased to operate when Yokogawa OPCAE client connected to CS OPCAE server. The Alarm server will now continue to operate.

64984 - StrToLocalText() translation string look up unsuccessful for alarm properties

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.

64989 - A timestamped alarm may be raised with an old timestamp, and fast transitions may not be captured

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.

64996 - Timestamped Alarms are raised with the current time instead of the PLC time when the server is started up without any historical data

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.

65001 - The alarm server does not start in extended memory mode

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.

65044 - Alarm operation functions generate an exception report when an invalid cluster is passed

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.

65047 - Cicode Functions AlarmCount and AlarmCountEquipment consume significant CPU usage

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.

65116 - AlarmEventQueue missed alarms (all states)

Event queue missed alarms that were no longer in the legacy adaptor view due to the default server user setting the area on the alarm server. This is now being prevented.

65117 - Alarm summary page takes a long time to display

Citect SCADA historic data access used the historic file index DB table inefficiently causing a delay with the alarm summary and SOE view. Data access is now optimized to improve performance.

65131 - Events for alarms that cannot be found in the database may not appear in the alarm event queue

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.

65166 - Timestamped Alarms unable to be acknowledged if triggered from analog tags.

Timestamped Alarms did not support analog tag trigger variables, thus undefined behaviour may have resulted if bound to such a tag. This has now been changed so that analog tags can be used and the alarm will trigger when the value transitions from 0.

65201 - Alarm auto-archiving

Alarm auto-archiving resulted in the error message "Archive request rejected - Cluster1_AlarmServer1<random_characters> is unreachable". Note that if permissions to write to a folder are insufficient (or for any other valid reason), alarm auto-archiving request will get rejected.

65261 - Alarm Acknowledgment may have wrong username

In some scenarios an alarm acknowledged by a Windows user may be recorded as being acknowledged by another Windows user.

65449 - Spanish translations in a user project were not loaded when using "Spanish (Spain)" locale

Spanish translations in a user project were not loaded when the user logged in using the "Spanish(Spain)" language option. This was because the system incorrectly interpreted the locale as Spanish (Spain, Traditional Sort) with LCID 1034. The system now correctly interprets the locale of "Spanish(Spain)" as LCID 3082.

65517 - The timer expression on Hres Timestamped alarms was not always correctly evaluated.

In certain circumstances, the timer expression was not able to be evaluated when the timestamp was requested for the alarm. This was causing the previous timestamp to be used for the state change.

65523 - Alarm server writes untranslated alarm descriptions to alarm devices

The alarm server would write untranslated alarm descriptions into alarm devices. This was due to the untranslated text having localized expression @(Text) symbols. The alarm descriptions are now properly translated in alarm devices.

65584 - The alarm log devices would sometimes not report an AckTime or OffTime

The AckTime and OffTime for alarms in the alarm log devices would sometimes not be reported, depending on the order of On, Ack and Off events. The alarm log device will now report the AckTime and/or the OffTime of the alarm if it has been set.

65610 - The [Alarm]ArchiveAfter INI parameter not displaying correctly in diagnostics

The INI diagnostics would report a value one larger than the [Alarm]ArchiveAfter INI parameter setting. For example, the parameters section of the kernel dump would provide a value of '5' even when the default of '4' was in use. The INI parameter is now read correctly.

65621 - Improved performance during standby to main switch-over on alarm server

Improved performance on the alarm server during standby to main switch-over by removing unnecessary alarm change event.

Authentication / Security

65126 - Citect SCADA runtime limitation of 256 roles per logged on user

The runtime limitation of 256 roles per logged-on user has been increased to 1024 roles.

Cicode

64578 - New INI parameter [Alarm]ShowAllConfigured

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.

64813 - Form launched via LibAlarmFilterForm does not filter on DELTATIME field

When specifying DELTATIME as a filter criteria using the alarm filter form launched via Cicode function LibAlarmFilterForm, a validation error message would display. This was due to the DELTATIME field being treated as string data type by the filter form. Now, when the user specifies DELTATIME as filter criteria, the acceptable value can be either in number (of seconds) or in time period format, HH:mm:ss.ttt.

64852 - SubscriptionGetValue and SubscriptionGetTag Cicode functions return 0 (zero) when subscription is pending or an invalid array index is specified

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.

65010 - AlarmCount() in blocking mode becomes stuck in wait state

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.

65137 - FormPosition() ignores X and Y values and displays form in a static position on screen.

FormPosition() ignored the X and Y values. FormPosition will now respect X and Y Cicode function arguments.

65237 - DspPlaySound does not return an error message when the sound file is not accessible

Previously, if a sound file was not accessible when passed to the DspPlaySound function, the return value would indicate the function was successful even if the sound was not played. The sound file path is now checked to see if it can be accessed, if not FALSE is returned by the function and a hardware alarm is raised.

65299 - QueOpen does not support periods in queue names

Periods were not accepted in queue names in QueOpen, and a created queue that had invalid tag name characters in the name could not be retrieved correctly. QueOpen now supports periods in the name and handles invalid characters.

65361 - Unable to detect if an alarm server is in a startup state

Citect SCADA was unable to detect the startup state of the alarm server. To address this, the Cicode function ServerGetProperty has been updated to allow the property "ServerStartState" to be requested via the "sProperty" argument. It will return zero (0) if the server is starting, or 1 if it is running. Note this new property is only supported for alarm servers.

65385 - Cannot select trend pen from comment using the Select Pen dialog

It was not possible to select a trend pen from a comment using the Select Pen dialog on the standard trend templates if the trend comment was configured with localisation denotation, @(). You can now select a pen from a comment that is translated to their local language.

65397 - Serialization via dot net Cicode

Dot Net Cicode did not support serialization of objects. This is now supported.

65405 - The TagWrite Cicode function cannot write decimal values due to a different user locale's decimal point symbol

The TagWrite function would take the System Default Locale (non-Unicode language settings on Windows) to write decimal values. If the System Default Locale's decimal symbol was different to that for the current user locale (for example, a comma), TagWrite would not recognize decimal point symbol correctly. The decimal point symbol now comes from user locale information, which means writing decimal values using TagWrite will count the decimal point symbol correctly as per the current user locale.

65445 - Null Date is passed into callback functions assigned to the Calendar Library Control upon mouse double-click and right-click events.

The Calendar library control supports substitution of #Date for callback functions. The date that is clicked on the Calendar control will now be passed to the callback function where #Date is specified on mouse left-click, double-click and right-click events.

65604 - Cicode functions DLLClassCreate and DLLClassDispose would not release memory

The Cicode functions DLLClassCreate and DLLClassDispose (which are used to create .Net objects) would increase memory but would not release it. These functions now handle memory correctly.

151604 - Cicode functions EquipBrowseOpen/First/Next do not honor SetArea()

Using SetArea() to restrict the viewable areas wa having no effect on the equipment returned from a EquipBrowse session.

150872 - Cicode function DevModify() is modifying unrelated devices

DevModify() was modifying unrelated devices. If the format configuration was different on two devices, then only one updates as expected.

Compiler

64866 - Compiler message "out of handles" is generated despite [CTEDIT]DbFiles=510

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.

65499 - "Expression too big" compile error message is thrown after upgrading to Citect SCADA 2016

Since Citect SCADA 7.50, the compiler generates 64 bit p-code from Cicode expression which uses more space than 32 bit p-code. This could make the projects exceed the p-code buffer that would otherwise fit the 32 bit p-code. This issue has been resolved by doubling the p-code buffer size so that the extra space needed by the 64 bit p-code will be covered.

156543 - Compiler would not pick up orphan I/O devices

If the server, computer and network address definitions were deleted, but OFS I/O device definitions in memory mode were left over, the compiler failed to pick this up as a bad configuration. As a result, OFS push alarms were not functioning correctly.

CTAPI

65246 - A schema import into Historian is unsuccessful due to [LAN]EarliestLegacyVersion setting

A schema import into Historian 4.60 would be unsuccessful from Citect SCADA 7.50 if [LAN]EarliestLegacyVersion was set to less than 7300. Instead of using [LAN]EarliestLegacyVersion, the I/O server version is now used to determine how to load a tag table's schema.

65322 - Process Analyst returns CTAPI error 439 after opening a PAV file

Opening of PAV files may cause connection failures impacting data display being not available and browsing of trends/alarms/variables resulting in CtApi offline messaging.

65478 - Browse session in CtAPI may cause server memory leak

When the CtAPI function CtFindFirstEx is called, followed immediately by CtApi Shutdown, the browse session may not be cleared. This could cause a memory leak on server side. This situation will no longer occur.

65603 - Process Analyst does not show the correct alarm state in alarm pen

Process Analyst was not able to show the correct alarm state in an alarm pen if the alarm did not transition during the [Alarm]KeepOnlineFor period. The alarm pen will now show the correct alarm state.

Display System

63991 - Page animation causes unexpected shutdown

SCADA may have shutdown randomly due to an unprotected Win32 API call. This situation is now guarded against.

64835 - PageDisplay() is not setting keyboard command focus correctly

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.

65424 - Client taskbar icon not visible on Windows 2012

Runtime client window would not display the taskbar icon when [Animator]FullScreen=1 and [Page]DynamicSizing=0 on Windows 2012 (& earlier) if the taskbar buttons were set to 'Never combine' in the control panel.

65452 - Cicode function Message() creates dialog box in the incorrect location on Multi-monitor systems.

The Cicode function Message() displays a dialog box in the incorrect location on a multi-monitor system. This issue has been fixed and the dialog box is now displayed correctly.

65481 - Objects not released on pages with Time Scheduler

After a page with Time Scheduler was closed, some managed objects were not released. This no longer occurs.

161491 - Scrollbar thumb does not respect Page Size vs Window Size

When a page is displayed in a window smaller than the page size, the scroll bar thumb size would display incorrectly. The scrollbar will now reflect the relative size of the page against the window it is displayed in.

159318 - Genie with %AN% substitution is not initialised properly when other substitutions are left as defaults

The %AN% substitution is a special case that is automatically filled with the Genie instance AN. But if no other parameters were changed from their default values, this was not occurring, so the substitution was replaced with an empty string. This will no longer cause compile errors.

156626 - Find and replace found text when graphics option selected

Find and replace found text in the equipment model grid even when graphics was the only option ticked. The find and replace function now correctly applies the search options.

 

General

39704 - Navigation based on keyboard commands may not work on the Process Analyst page

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.

64927 - Database Exchange columns display incorrectly after column adjustment

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 record source 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.

64934 - High CPU usage on pages based on Tab Style templates

'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 perform more efficiently. In order for these performance improvements to be obtained, the active project needs to be recompiled on a Citect SCADA PC that has Citect SCADA 2018 installed. 

64951 - ServerIsOnline() returns 1 before the server comes online

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.

64983 - High CPU and network usage occurs when an alarm server with a redundant peer uses up a large amount of memory

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.

65122 - Files from custfiles.zip overwritten when using include projects

At runtime, if an include project had been previously compiled, an older version of a custom file could overwrite a newer version. The client has now been modified to only extract files from main project's custfiles.zip at startup. This prevents a custom file from being overwritten with an older version if one of the include projects had been compiled previously.

65147 - Driver may not initialise if port name is greater than 31 characters

A driver may not initialise if a specified port name is greater than 31 characters. This limitation on a port name is now enforced by the compiler.

65157 - Partial associations did not work for local variables

Partial associations did not work for local variables; #ASS was presented. This was due to a cluster being assigned to a local variable.

65204 - Alarm server out of memory during database swap

The alarm server would potentially run out of memory during a database swap. This is prevented during a standby to main switchover by not allowing the alarm count subscriptions to be created until after the configuration changes have completed.

65280 - After updating the Citect SCADA project, the IO Server would stop with Exception 0xe0434352 at kernelbase.dll

After updating the Citect SCADA project, the IO Server would stop with Exception 0xe0434352 at kernelbase.dll due to the IOserver restoring tag. Valid tag element from cache. The cached value did not match with the current project. The cached "Valid" tag element is now discarded if its definition has been changed.

65346 - Equipment tree may be slow to load on Web Client when no symbols are configured

When running the Citect SCADA Web Client, the equipment tree could be slow to load if there were non-existent symbols to be displayed for each node. The issue has been resolved by setting the newly added form field "Hide Symbol Icons" to TRUE in the tree and equipment tree Genie.

65484 - Out of range Area number in Alarms may cause Alarm server to stop

Compiler has been enhanced to detect out of range Area values so they will not be populated into RDB and cause the Alarm server to stop.

65488 - The page keyboard command was executed even though an ActiveX control had focus

Keyboard commands should execute when an ActiveX has focus, unless the control specifically processes the key pressed. This functionality change was introduced to fix bug 39704. However, the CiText control is designed to accept all keys but was not marking the message as handled, so they were processed again. This no longer occurs.

65516 - Eng units don't display properly when using super genie association.

Eng units were not displaying properly when using super genie associations. This issue has now been addressed and English units are now displayed correctly.

65616 - Graphics Builder may leak memory when updating pages or packing

While performing either an update pages or pack operation, Graphics Builder may have leaked memory that was not restored when the operation completed.

65636 - Super Genie associations not substituting in log messages

Multiple dynamic Genie associations were not resolving properly in log messages. Log messages now function correctly.

I/O System

64999 - Setting Processor Affinity could throw an exception if more than 64 cores

On systems with more than 64 cores, setting processor affinity could throw an exception which would cause problems in the Runtime Manager backend. This exception is now captured and ignored.

65075 - Incorrect hardware alarm raised when both primary and standby I/O devices are online

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.

65083 - The tag value may be incorrect after write when [Code]WriteLocal is set to 1

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.

65386 - Limit on the number of boards configured for the I/O server is insufficient

It was found that configuring more than 40 boards in Citect SCADA 2016 (or more than 50 in v7.50, or more than 80 in v7.40) would cause the I/O server to be non-operational, with the Kernel stating "No Drivers Configured". There is no longer a limitation on the maximum number of boards.

65465 - Incorrectly configured tag in PLC might cause TagRead not return

A timeout mechanism has been introduced when an I/O server subscribes a tag to the driver. Therefore, a TagRead will now be processed without errors even if the tag has been configured incorrectly in the PLC. 
[IOSERVER]ReadTagSubscriptionTimeout 
Defines the timeout for reading tag subscription. 
Allowable Values: 1 to 300 (seconds) 
Default Value: 5

65552 - IOServer Memory device persistence cache is using local culture which may result is I/O server shutdown if the decimal symbol is changed in the OS number format settings

IOServer Memory device persistence cache is using local culture which may result is an I/O server shutdown if the decimal symbol is changed in the OS number format settings. The IOServer Memory device persistence cache has been changed to use InvariantCulture.

65586 - Incorrect alarm event record time captured

An incorrect alarm event Record Time was being captured. The peer replication was working correctly, but the legacy level of the standby IOserver code held a copy of the tag value which was the last value read by the standby I/O device when the primary I/O device was previously off-line. This old value was being published to I/O clients (for example, the alarm server) when the subscription switched from the primary I/O device to the standby I/O device. The fix has the standby I/O device use the peer replicated value (the last value read by the primary I/O device before it went off-line) rather than the old value held by the legacy standby I/O device code.

Licensing

65068 - Reconnection to a client process via CtAPI uses a new CtAPI license

If you reconnected to a Citect SCADA client process via CtAPI from the same IP address, and within the time out period specified by LicenseReservationTimeout, a new CtAPI license would be used. The CtAPI client now passes the correct IP address to the server.

Localisation

65016 - The last page on Configurator would not display localised text

The last page in the Configurator would not display localised text correctly.

65028 - Inaccurate translations in French.DBF files

The existing French translations of the "Yes - Close" button and "Time" column on alarm lists were inaccurate. The localized strings have been updated.

65200 - Russian characters may not display correctly in Process Analyst

When the Russian language was used, the time span combo box in Process Analyst may have shown square characters instead of Russian characters. The font has been changed from "MS Sans Serif" to "Microsoft Sans Serif".

65647 - Localized text in alarm format would not align properly

When text fields in an alarm format are localized using @(...) syntax, the width was not handled properly which meant the text may be displayed with wrong alignment.

OPC Connector

64787 - OPC A&E registration did not always work correctly

OPC A&E registration will now work correctly for the current system networking mode and the alarm server network configuration.

Process Analyst

43218 - New Process Analyst property and event required to view location

The property ViewLocation and the event ViewLoadedSaved have been added to Process Analyst.

64843 - CopyToFile will not complete when called via _ObjectCallMethod function

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.

64973 - Trend comments not translated to client runtime language

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.

64992 - Process Analyst should use the format of the variable tag if no format is specified in the trend tag

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 defined for the variable tag in the trend expression will be used by the Process Analyst.

65141 - Process Analyst would truncate value rather than correctly rounding.

Rounding logic was not working correctly. This has been fixed so that Process Analyst can now round correctly to the nearest whole integer in all cases.

65354 - Issue introduced by previous Bug fix 65141. Year value was truncated.

Using the local console with thousands separator, e.g. "2,017" instead of "2017" caused truncation of Year from "2,017" to ",017". The thousand separator characters are now removed from the string when converting from number to string.

65472 - Process Analyst cannot connect to local CTAPI server if Runtime Manager runs as a Windows Service

Process Analyst could not initiate a connection to a local CTAPI server when the CTAPI server process was running as a Windows Service with Runtime Manager configured as a service. This was due to Process Analyst's initialization procedure using an incorrect attribute to detect a client process type. The initialization procedure has now been modified to detect a client process correctly before initiating a local CTAPI connection.

65480 - GDI leaks occur in Process Analyst

The number of GDI objects in Citect SCADA runtime would increase over time until it reached the maximum allowed value (10000 per process).

65482 - Process Analyst cursor and labels become positioned out of the viewable area

Opening a saved view (PAV file) in Process Analyst sometimes resulted in the cursor being positioned outside the Process Analyst's viewable area. This was due to viewable area being smaller than the original size. The cursor position is now adjusted to the middle of the viewable area. The cursor labels positions are also adjusted accordingly.

65512 - Process Analyst unable to search tags when connected to CitectHistorian

Periodically when using Process Analyst to connect to CitectHistorian via Historian web service users would receive the message "The search failed with the following error: A request to the Historian Web Service has failed." This was due to authentication failure caused by internal memory management problems in Process Analyst.

Project Development Utilities

64908 - Startup or Shutdown Cicode functions are not called when configured for an OPC DA server

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 SCADA 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 SCADA 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.

64949 - Update pages may not work properly when removing a keyboard command from a Super Genie

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.

65022 - The tab key and default button no longer work in Find/Replace dialog

The tab key and default button stopped working in the Find/Replace dialog.

65153 - The tab key and default button stopped working for the Find User Function dialog

The tab key and default button stopped working for the Find User Function dialog.

65235 - Graphics Builder stops operating when opening a template file that is corrupted

Graphics Builder would cease to operate when opening a template file that may be corrupted. The issue is now fixed. A message box will now appear during Update pages (or when opening corrupted template), if the template is found to be corrupted.

65245 - Migration Tool error unable to find an entry point in DLL 'CtProj.dll"

The Citect SCADA 2016 March Update caused the Migration Tool to produce the error message "Unable to find an entry point named 'GetProjectOID' in DLL 'CtProj.dll'". This no longer occurs.

65316 - Computer Setup Wizard unable to open the profile settings file on a runtime-only installation

The Setup Wizard was unable to locate the path for the selected profile in the Master.DBF file in a runtime-only installation as the file does not exist in such an installation. This has now been fixed such that the Setup Wizard searches for the profile within the User\<Project Path> folder. 
Note: For the fix to work, you need to copy the compiled User project folder to the "RUN" folder.

65436 - Events fired by Graphics Builder Automation Interface are not captured by managed event handlers

When the Graphics Builder Automation Interface fired events, the event dispatch IDs were being used to invoke the client side event sink handlers. The original dispatch IDs were stored in the type library for the client event sink implementation to use. However, the Microsoft tool generated managed metadata proxy DLL may have used different dispatch IDs for the events. The Graphics Builder Automation Interface has been changed to discover the client side event dispatch IDs to invoke the client side event handler.

65468 - References for a deleted Genie substitution can still be detected following a page update

Running update pages after deleting a Genie substitution from its template does not remove its references in pages. The references could still be found with the Find and Replace utility. Find and Replace has now been updated to exclude orphaned properties from the search result.

Runtime Issues

64824 - Stopped processes remain stopped when launched a second time

When Citect SCADA or Runtime Manager were launched for a second time, Runtime Manager would ignore the request if there were any Citect SCADA processes running at the time. This behaviour has now been changed so that any stopped processes will be started when Citect SCADA is launched for a second time.

65214 - Running alarm server in extended mode produces citect.ini missing message

The registry lookup location for alarm server running in extended mode is now corrected.

65325 - Processes do not start when Runtime Manager is run from another application

If Runtime Manager was already running, clicking on a Run button in any other application (Citect SCADA Studio, Cicode Editor, Graphics Builder) would bring Runtime Manager to the foreground, but not run any processes (unless at least one process was already running already). Processes are now forced to start when the Run button is used.

65571 - SNMPII driver sends invalid DCB to the I/O server for post handling

If a project contained an invalid TestOIDStr setting for the SNMPII driver, the I/O server would irregularly receive invalid DCB from the driver for the post handling. This has been resolved by adding the protection and error logging when invalid DCB is received by the I/O server.

65661 - Server startup unsuccessful due to incorrect processing of the ServerIsOnline Cicode function

The I/O, alarm, report and trend servers would not start due to incorrect processing of the ServerIsOnline Cicode function. This problem could possibly manifest itself in other RPC functions as well. This was due to a loop in the TranIsRemote function which incorrectly assumed that all the hTran array handles were from the current process. Only the last tran in the TranIsRemote function is now checked.

65687 - OPC DA Server component cannot be started with parameter enabled for [Device]AlwaysCreateHistory

The help states that process need not be defined for all devices if running in single process mode after enabling [Device]AlwaysCreateHistory. However, OPC DA Server component cannot start unless a process is defined for all devices.

149982 - Variable tags that use equipment.item references do not show #COM

Variable tags that used equipment.item references would not show #COM if the cluster context was not provided and tag existed on both clusters. #COM is now displayed on page as cluster context is ambiguous. Note that older style variable tags will show #COM.

Time Scheduler

64506 - BACnet calendar objects can be viewed despite area restrictions

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.

64937 - Scheduler ActiveX property added for Special Days View

It is now possible to hide/show the Special Days View tab on Scheduler. A new ActiveX property (IsSpecialDaysViewHidden) was added to the Scheduler control.

65063 - Unable to Write to Calendar objects from Scheduler interface

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.

65152 - Entry action was not performed when the default state was entered in the scheduler

By design, before this change, no entry action was performed when on schedule change there was no actual change in the state of a tag. For example, there are two schedules with "on" state one after another, or there is a state change without a schedule (i.e. the default state) to a schedule with the default state. Now, an entry action is always performed when a transition occurs from one schedule to another, regardless of whether there is an actual change in the state of a tag.

65239 - Tagwrite ignores decimal format after opening Scheduler in other locale

Scheduler changed the thread current culture to match the locale of the current logged in user. However, this caused TagWrite to treat "," as a decimal separator instead of ".".

65531 - New ActiveX property required in the Time Scheduler to control special days highlighting

A new ActiveX property, HighlightSpecialDays, was required by the Time Scheduler. Binding this to a tag that is 0 will remove the orange highlight of the special days in the Configuration View. A value of 1 will show the highlighting of special days as normal. Not configuring the HighlightSpecialDays property to a tag will show the special days.

160735 – A Special Day cannot be deleted after dragging

If a Special Day was dragged into a previous special day and deleted, the new special day could not be deleted. Also, you could not modify the special day name. Special Days that are deleted from the data source are now not copied when the object model is copied.

Trends

65177 - User defined path was discarded when the maximum cache size was exceeded

The user defined path was discarded when the maximum cache size of 243 entries was exceeded. The cache has been used to store the project paths and user defined paths to improve performance. The system will no longer discard the user defined paths even the cache is full.

65255 - ServerIsOnline returns offline for standby trend server when called

In a redundancy architecture, most of the time the standby trend server was showing as offline when ServerIsOnline is invoked. This is a regression issue introduced by Bug 64951. The server now correctly handles tran connections.

65256 - Yearly archive period can now be specified for trend tags in Japanese language

Japanese language users can now put the trend PERIOD value in the format "DD? 1?". For example, "13? 1?" can now be used for "13th January" (note the space in between). This means the trend files should be archived once a year on a particular day.

65542 - The scale of a trend of type REAL is taken from underlying variable tag

New trend range fields have been added. When the trend range fields are configured, they will override the range obtained from the tag(s) in the Trend Expression field. This has been enabled for all tag types.

65542 - Trend server has memory increase

A project left running overnight would cause the trend server memory to increase linearly.

 

Web Client

65395 - Web Client will not automatically login when refreshed in IE11

When the Citect SCADA Web Client had AutoLoginMode set to 1, auto-login would not be successful with the current Windows user when a refresh occurred in Internet Explorer 11. The Web Client's internal shutdown flag is now cleared when a reload occurs.

Remaining Modules

64003 - Unable to enter literal braces into Equipment Editor

Literal braces, "{{" and "}}", are required in Equipment Editor for generating alarm description fields. For example, "OP = {{Equip_{equipment.TAGPREFIX}_Output}}" generates the alarm field "OP = {Equip_Tank1_Output}". Literal braces are now supported in the Equipment Editor, and no longer flagged as an invalid field.

64798 - Periodic reports may not rollover correctly

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.

64850 - Equipment Update does not report non-existing equipment types

Equipment Update was ignoring any non-existing equipment types that were being used by equipment. This has been addressed by logging the error message to the EquipGen.log when Equipment Update function discovers any non-existing equipment types.

64851 - Compiler may point to incorrect lines in VB script

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.

64953 - The maximum number of include projects is insufficient

The maximum number of projects that can be included in a project has been increased from 243 to 1024.

64982 - Duplicating an equipment type could result in an invalid equipment type

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.

65121 - Project cannot be set to active when restored from command line

Using ctback32.exe in a command line with the auto (silent) flag '-a' restored the nominated project into Citect SCADA, however the restored project could not be made active.

65190 - The Computers view in the Deployment activity may show target versions that are not from the selected project

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.

65270 - _SxwLogin_GetMenuHnd would return -1 even when a login menu was present

The function "_SxwLogin_GetMenuHnd" in SxwLogin.ci would return -1 even when a login menu was present in the menu configuration table. The Level 1 menu entry for the login menu was being localised with the "@()" notation in the menu configuration table, even though it was not intended to be displayed. The _SxwLogin_GetMenuHnd function was correctly searching for the non-localized version "Login" so the "@()" characters just had to be removed from the menu entries in order for the function to be able to find the login menu.

65284 - TagGen function 'ToProperty' does not support key/value pair if a separator is used

The TagGen function 'ToProperty' did not support a key/value pair if the value string contained a separator character. TagGen has been enhanced to allow 'ToProperty' to work on the source string even if the value string of the key/value pair contains a separator character.

65340 - File extension ".rpt" is not added to a new Report Format File

If the name provided for a Report Format File did not include an extension, then a default extension of ".rpt" was not being added when the file was created. Support for this has now been restored.

65356 - Deployed versions of runtime projects are not deleted from a client workstation

This could happen if previously deployed project files or folders are missing, or they are no longer accessible by the deployment service. Prior to this fix, the deployment service would log an error and further clean up attempts would cease. The product now logs an error and continues with subsequent clean up attempts.

65360 - C# calls in Citect SCADA and .NET Extension would not support multi-threading

.NET Cicode functions now support calling multiple objects concurrently. Calling methods on one object no longer blocks calls to other objects.

65364 - Duplication of an equipment type replaces ToProperty with Split

When duplicating an equipment type, the new type presented by the XML template will have the <array name="param_list"> with Split expression, where it should be a ToProperty expression.

65365 - Update Equipment dialog in localized installations has incorrect layout

The Update Equipment dialog in some localized installations had an incorrect layout. The dialog content was updated in the English layout, but the localized layouts were not updated.

65368 - The Update Equipment dialog shows a portion of the error section when no error occurred

The Update Equipment dialog was showing a portion of the error section of the dialog when no error occurred. The dialog size has been adjusted to address this issue.

65369 - Port on the server configuration page does not show correct port number

The port on the server configuration page would not show the correct port number once configured (the default is always shown as 443). The port now shows the configured port number.

65391 - PAV files in the Analyst Views subdirectories are not deployed

Process Analyst view files (PAV files) in the Analyst View subdirectory were not being deployed to a deployment client. All PAV files, as well as subdirectories of the Analyst View directory, are now packed and deployed to the deployment client.

65447 - ASCII_DEV type devices are not rolling over as expected

A device will be locked when a report is running to prevent an incomplete report from being rolled over on file. A race condition can happen at the time a device is due for rollover; a device lock cannot be acquired due to a previous running report. The effect is that the device will not rollover, and multiple report content gets logged in the same file. A check for device synchronization now occurs at the end of each report run.

65479 - Deployment page logs out when deploying a large project

The Deployment page would log out when a large project was taking a long time to deploy. Uploading a large project is no longer interrupted by the CitectIDE logging out due to an inactivity timeout.

65506 - Runtime only installation does not support profile selection

Previously, Computer Setup Wizard did not allow selection of a profile on a runtime-only installation. Citect SCADA runtime would also be prevented from starting up with a profile specified. This is now supported.

65536 - Grouped custom parameters containing the colon symbol ":" are not properly saved

When an equipment has grouped parameters that contain the colon symbol ":" it may cause the Equipment Editor to skip the parameters when loading the equipment.

65537 - Renaming an equipment type causes auto-generated tags to be removed

When you renamed an equipment type in a project, it would cause the corresponding auto-generated tags to be removed. This was due to the equipment update not being able to match an equipment name referenced by the equipment model to the type name hard-coded in the corresponding XML template document. The XML template document created by the Equipment Editor is no longer hard-coded and can be reset dynamically by the equipment update.

65575 - Equipment update will not run successfully after project is renamed

Renaming a project using the properties in Citect SCADA Studio's Project view caused the Equipment Update to stop working. Equipment Update was using the project folder name as the project name to retrieve the project location from the master.dbf for the include projects. When the project name was changed to something different to the project folder name, the Equipment Update could not build up the include project list. Equipment Update has been changed to use the project name.

65608 - Cannot delete a project version that appears to be unused

Unable to delete a project version that has unexpected assignments that are not displayed on the CitectIDE. In changing the project or version that is assigned to a machine this cleans assignments that could otherwise prevent deleting unused project versions.

65611 - Moving equipment in equipment hierarchy can result in deleted equipment

When equipment was moved between equipment containers, the Equipment Editor would only move the equipment visually; the underlying data item was not moved properly. The previous container still referenced the equipment's data item, which meant the equipment could be deleted with the original equipment container. This has been resolved by removing the referenced equipment data item from its previous parent container when moving equipment.

Help

65567 - Citect SCADA help cannot open on Windows 10 LTSB machine

The Citect SCADA help cannot open on Windows 10 LTSB (Long Term Servicing Branch) edition because this edition does not include Microsoft Edge. Check if opening the help using the default browser is successful. If it is unsuccessful, then try again using Internet Explorer.


Enhancements

Alarms

64997 - Timer delay for HRes Timestamped alarms not configurable

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.

IO System

65043 - Drivers should not require compatibility stamping on a new operating system

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.