*********************
Fixes and Minor Enhancements
CitectSCADA 2015 Service Pack 1 Patch 38
Release Notification (Updated 20 March 2019)
This is the final Patch for CitectSCADA 2015; no further patches will be made available on this version.
For future updates please upgrade your CitectSCADA installation to a newer version.
This is a detailed listing of fixes and minor enhancements in this release.
Windows may ask you to provide the original CitectSCADA installer to complete the patch uninstallation process.
Please uninstall the previous CitectSCADA update before installing the new one.
Known Issues Index
Bug Fix Index
Enhancement Index
Known Issues
When a Citect SCADA display client is connected to a standby alarm server, alarm summary records on an alarm summary page may not be updated until a view refresh or page refresh is triggered.
With some projects, the Project Analysis tool may not generate the project information file (ProjectSummary.xml). Instead, a diagnostics dialog is displayed with an ERROR title. This indicates the Project Analysis tool was not able to analyze the project. It does not necessarily mean that the project itself has issues.
If you are running a primary alarm server that has been upgraded to Service Pack 1 Patch 19 or later, up to Service Pack 1 Patch 26, and you attempt to connect a standby server that does not have Patch 19 or later, up to Service Pack 1 Patch 26 installed, the standby server may not start and a configuration error message will be generated. However, if the server without Patch 19 or later, up to Service Pack 1 Patch 26 is already running when the upgraded server starts up, this issue will not occur. For an online upgrade, please ensure that a redundant alarm server without Patch 19 or later, up to Service Pack 1 Patch 26 is running prior to starting a peer alarm server with Patch 19 or later, up to Service Pack 1 Patch 26. For an offline upgrade, please upgrade all alarm server peers to Service Pack 1 Patch 19 or later, up to Service Pack 1 Patch 26 prior to starting them. This issue does not apply to Service Pack 1 Patch 27 or later.
Bug Fixes
The v8.10 and v8.00 February 2019 updates, and v7.50 Patch 37, introduced a new optimized search mode for finding the alarm event prior to the requested window (bug 65818). If a patched client made this request (for example, for Process Analyst alarm trends) to an unpatched alarm server, the server could stop. To prevent this, a new INI parameter has been introduced [Alarm]EnablePrevRecordOptimisation, which defaults to 0 and should only be set to 1 when all associated alarm servers have been patched. The client will have to be restarted for the new INI to come into effect.
Due to a race condition, a Citect SCADA process would stop working if it attempted to write to an XML file at the same time as other processes. The race condition has now been removed.
A regression issue introduced in a recent patch resulted in remote Citect SCADA clients not returning the license on exit. This has now been corrected.
Citect Historian did not get alarms beyond 1 week because of an issue with CtAPI acquiring alarm data beyond that duration. The problem has now been resolved.
Changing the [Alarm]StreamSize parameter could result in reset of Alarm Summary data when the Alarm Server is restarted. This is because the procedure to convert Alarm Summary records according to the new stream size did not read old data as expected. The conversion procedure has now been revised to retain Alarm Summary entries on stream size change so that existing Alarm Summary data can be preserved.
Citect alarm was not visible from display client when a particular user login was used. This was because the user session did not retry after executing an internal initialization query successfully. This issue is one of the causes of missing alarms. When this issue occurred, alarm server trace log with AlarmServerComms category would display the following message: "ServerConnector(Viewer_MNP:UCluster|UALMA).QueryManager.ExecuteQueryTasks(): Error executing query: SELECT * FROM DTAlarmState. System.Data.Odbc.OdbcException (0x80131937): ERROR [S1000] [Schneider Electric][Citect SCADA 8.0 database driver]The system is offline. " This issue is now resolved. The trace message would still occur, but a user session would retry the query later until it is successful.
When [Alarm]SummaryTimeout INI parameter was a low value (for example, 1) and SummaryMode INI parameter was 2 or 3, the alarm server performance would be impacted after running for a few weeks. The reduced performance was due to the background thread for Alarm Summary Logging executing unnecessary large queries. An optimization was made to reduce the query size as long as there were no long lasting active alarms (i.e. an alarm was turned on but never off over a long period of time such as 2 weeks). In the case of there were long last active alarms, users are recommended to locate the corresponding alarm summary records using AlarmSumFirst() and AlarmSumNext() Cicode functions on the main alarm server process, and then call AlarmSumCommit() to flush the record into the log device. Once the outstanding alarm summary records are flushed, the optimization will take place.
Cocide functions DllClassGetProperty and DllClassCallMethod caused a memory leak resulting in a crash. An internal Citect memory allocation was not being released. The more often these built-in Cicode functions were called, the faster memory leaked. This has been fixed now.
When you use the Project Analysis command, the file called "ProjectSummary.xml" would not include tags counts for included projects. If an I/O device associated with a tag was not primary mode, it would cause the Project Analysis to discard the rest of the project and sub projects. Project Analysis now handles this scenario as expected.
When Citect runtime is published as an RDWeb/RDS application, and is configured with [Animator]FullScreen=1, the application now displays correctly instead of displaying a black bar the size of a titlebar at the top of the screen.
Refreshing the variable tags page would not always update the value for tags that are not currently monitored (alarmed, trended or displayed) on other pages. Navigating to another page that did not display the tags would also not work. Now, when the data browse page has been refreshed, the tag value will be up-to-date at that point in time. In addition, the data browse page was never designed to show live data, so text has been added to the top of the page to mitigate any confusion. The engineer will need to run Update Pages and save the affected pages in Graphics Builder for this text to appear.
In certain circumstances the client point counts were interpreted incorrectly
Since Citect SCADA 2015 SP1 Patch 10, the citect.ini parameter [Lan]SecureLogin is not supported. The parameter is also not supported in Citect SCADA 2016 release and Citect SCADA 2018 release. If you need to communicate with an older version, the use [Lan]EarliestLegacyVersion parameter.
The "What's New" page used in the Example project displayed content for an incorrect product version when switching to variants of English languages, for example, English(Australia) or English (United Kingdom). Some other HTML pages would not display at all. This correct files are now included in the Example project.
The Equipment Editor did not recurse the project hierarchy when building the equipment tree view. It would just iterate the active project and its first level includes. The view model has now been updated to recurse the project hierarchy. Additionally, the Add New Equipment dialog now lists all the available projects in the project drop-down.
Driver protocols with similar names will no longer be confused with one another by the Driver Runtime Interface (DRI) library. So, for example, while OPC and OPC1 protocols belong to the same driver DLL, OPCLX protocol will not be confused with them and will not be put into memory mode by accident, and so on.
The Template Name drop-down list had no entries under the Appearance tab of Page Properties dialog if the project name contained more than 32 characters. Since a project name can now include up to 64 characters, the dialog initializing function now accepts 64 characters.
An unnecessary warning message, "Some variable tags not found", has been removed for Genies with properties similar to "%Prefix%_Suffix.ON", as such warning should only appear when the Genie instance is put on the page and cannot be resolved there.
If tabs/tables created from the Library Controls Genies were wider than 1000 pixels, the tabs/columns displayed on the right-hand side of the control may not have been clickable. This manifested as the last tab on the page list tabs on the HD1080 version of the SxW style page could not be activated. This was due to insufficient storage being provided to store the coordinates of tab/column positions beyond 1000 pixels. The element size of a string array has been changed to prevent unexpected truncation.
Time stamped alarms would sometimes stop updating when the INI parameter [Alarm]HResTimerExprDelay was set to a small value. This was due to the alarm going into a permanent requesting state, however no timestamp requesting activities were scheduled due to an error condition. While the alarm was in requesting state, transitions were skipped. Time stamped alarms now handle the error condition correctly. In addition, the alarm exits the requesting state when the timestamp requesting activity is aborted.
ServerInfoEx could not get the login name of a /x remote client. From now on, second clients will function like remote clients unless the parameter [Client]AdditionalClientsArePartOfTrustedNetwork is set to 1 (Trusted – connects internally using server password).
If a line was longer than the window width, the Find & Replace dialog's Replace button would only replace every other occurrence of the search text in that line. This now works as expected.
Deleting the A condition expression for a multi-state animation in the Display Value, Fill Color or Symbol Set property page, then pressing the Apply button, would result in the deleted condition replacing the new A (previously B) condition. The shared expression property is now updated when the A condition is deleted.
The Alarm.State property tag of time stamped alarms would remain stuck in state 32 (ComBreak) when the time expression was configured. The state would not change until the time value changed. The correct state is now reported when the trigger and time expression come online.
TagWrite to local variables were being incorrectly interpreted as locale sensitive when only the local string variables should have been. This lead to '.' being incorrectly replaced with ',' for some local string variables of type under some localization settings.
When calling TaskNew, the newly created task will not execute its code until the caller has completed the TaskNew function. This prevented two Cicode executions being in progress simultaneously, which could cause incorrect behavior.
Previously, a report was only capable of running Cicode if it had an output device configured. This is no longer a requirement.
A hardware alarm was being generated when the alarm filter popup was displayed for an SxW project. The popup now only runs once the ActiveX controls have been initialized.
The Process Analyst would stop working when attempting to change the style or color of an alarm pen. The properties can now be adjusted without implication.
A hardware alarm was being generated every time a triggered report was sent to printer with format file as '.txt'. The associated Cicode functions have been modified to handle this scenario correctly.
On a Turkish operating system, the error message “Invalid ruleset entered” occured when applying an alarm filter using "OnTime". Filters using "OnTime" are now correctly handled on a Turkish operating system.
When the alarm server was processing HRes (legacy time stamped) alarms, there was the potential for Citect SCADA to shut down unexpectedly. Legacy time stamped alarms are now handled correctly.
When a user logged in to Citect SCADA runtime using English locale on a non-English installation, some of the buttons displayed on dialogs would show unexpected characters. The conversion of characters retrieved from the resource DLL is now handled correctly.
Occasionally the I/O server would not startup when the PSIServer log category was enabled during a debugging session. This was caused by an unhandled null value when the tag value quality was bad. The null value is now handled and logged as "<null>" in the I/O server trace log.
When defining a search filter for adding new pen(s) in Process Analyst, you had to use the same language that the trend server used for the "Comment" field. Client locale information is now stored in a browse session so the server knows what language the client is using. The server loads the dictionary for the language before applying filtering.
When a customer was operating CitectSCADA under the Turkish locale or had manually set the regional format of their machine to "Turkish (Turkey)" a variable tag search in Process Analyst would result in error code 0x1000019E and no matching tags would be returned. This was due to the way in which the letter "i" is treated in Turkish where the uppercase variant is the dotted "?", as opposed to the lack of a dot in English. Searching for variable tags is implemented using Regex expressions to find a match in the input string, which in this case comprises of tag field names, such as "iodev". By default however, when the regular expression engine performs case-insensitive comparisons, it uses the casing conventions of the current culture to determine equivalent uppercase and lowercase characters. The issue was therefore resolved by specifying the flag "RegexOptions.CultureInvariant" in the call to Regex.IsMatch which would then correctly yield a list of matching variable tags.
When English (Australia) or some other English variant was selected as the Citect SCADA login language, it would change to English US internally. English (Australia) and English (UK) have now been added to the language DBF in the include project so that they will no longer be reported as unsupported languages.
If a Role defined for a user was in a different case to the same role in the Roles table, the SOE and Alarm Summary pages will not display the user. The Citect SCADA compiler will now check case sensitivity for roles to prevent this from occurring.
ConfirmShutdown() in the Example project gets coordinates of currently selected Window to calculate where the shutdown confirmation dialog should be displayed. If a popup window is displayed, the shutdown confirmation dialog is displayed relative to the popup instead of the main window. The dialog will now display correctly.
The Cicode function AlarmSetThresholdRec() would not reset threshold when the third argument was left blank. Setting the threshold to empty will now set the value to the numeric value that is the equivalient of an unconfigured threshold.
The "LOGSTATE" field in alarm log file was not translated according to [Language]LocalLanguage setting in Citect.INI file. The system now applies the translation to the log state description in the the language specified in [Language]LocalLanguage INI parameter.
Process Analyst scaling would not resolve correctly in a multi-cluster environment with the duplicated tag names defined across multiple clusters. This would happen when there was some ambiguity in Cicode expressions that did not specify a cluster name as part of the tag name when the project contains multiple clusters. The problem can be resolved by adding the cluster name in the expression. To support this, a new compiler warning has been implemented to warn users about the potential ambiguity, "W1039 Tag usage is ambiguous...". The new warning can be suppressed with the Citect.ini parameter [CtEdit]SuppressCompilerWarning = W1019.
Alarm process may stop when adding a comment on an SOE entry during locating internal string resources to leave an alarm log to the log device configured on Alarm Categories setting. It is now resolved by adding the missing string in internal resource files.
When using CtBack32.exe to automate the backup of a project, no control checks were performed to confirm that the specified project name existed in the Master.DBF. If an incorrect project name was specified, CtBack32.exe would attempt to backup the whole hard drive (showing the error message: "Opening file - BOOTSECT.BAK"). CtBack32.exe now confirms that a project exists before attempting a backup.
A client would launch several command prompts for SE.Citect.PlaySound.exe when audible alarms were used. SE.Citect.PlaySound.exe is a program that was created to to play audible warning sounds to work around a memory leak issue in some versions of Windows. Now, when it is launched, it is not visible on the screen or in the task bar, and it does not block Cicode.
When Graphics Builder used an associated NDX file to perform key based reads on DBF files, the graphics database could become corrupted if the NDX and DBF files do not match. Now, if Citect SCADA is set to use NDXs to access DBFs ([CtEdit]DbfNdxMode = 0), Graphics Builder will iterate through all the page related DBFs to check if they are empty or not. If a page DBF is empty, its index is reset.
The dongle licensing was not working properly for Windows 10 build 1803 due to Sentinel library not supporting newer Windows build versions. Sentinel have provided a patch to rectify the issue.
In the dialog box "Citect Process Analyst Control Properties/Main Page/Appearance/Alarm", the appearance of alarm default properties were not displaying properly. This has now been fixed by correcting the ProcessStateList subclass.
If a DBF device was configured to roll over at 00:00:00, the one at 1st Jan 00:00:00 may have been missing. This now works correctly.
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. This has been fixed now.
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.
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.
Device history files were duplicated on rollover when running as a service and using a service display client. During Citect SCADA process initialization, the external display client "/x client" is incorrectly evaluated as single-process. When [Device]AlwaysCreateHistory was enabled, the rule which determines which process should log to a Citect device did not apply. This is now corrected.
Multiple dynamic Genie associations were not resolving properly in log messages. Log messages now function correctly.
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 an 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.
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. This has now been fixed.
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. This is now fixed.
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.
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.
Improved performance on the alarm server during standby to main switch-over by removing unnecessary alarm change event.
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. This has now been fixed.
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.
While performing either an update pages or pack operation, Graphics Builder may have leaked memory that was not restored when the operation completed. This has now been rectified.
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. This has been fixed.
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.
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.
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. TheINI parameter is now read correctly.
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.
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.
Renaming a project using the properties in Citect 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.
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.
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.
Changes implemented for bug 65380 ("Device history files duplicated on rollover when running as a service using a service display client") caused a regression issue and have been reverted. The fix was originally included in the Citect SCADA 2016 January 2018 update, and v7.50 SP1 Patch 24. The issue will be readdressed at a later date.
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.
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.
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 description are now properly translated in alarm devices.
CtBack32.exe would not restore INI files that it had backed up into a project .ctz file. The file could be extracted manually with an archive tool, but could not be extracted using CtBack32. INI files are now handled correctly by the restore process.
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.
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..
Eng units were not displaying properly when using super genie associations. This issue has now been addressed and English units are now displayed correctly.
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.
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.
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
IOServer Memory device persistence cache is using local culture which may result is IOServer crash if the decimal symbol is changed in the OS number format settings. IOServer Memory device persistence cache has been changed to use InvariantCulture.
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, Tranditional Sort) with LCID 1034. The system now correctly interprets the locale of "Spanish(Spain)" as LCID 3082.
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.
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. This issue has been resolved.
.NET Cicode functions now support calling multiple objects concurrently. Calling methods on one object no longer blocks calls to other objects.
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.
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.
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.
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.
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 unlocalized version "Login" so the "@()" charcters just had to be removed from the menu entries in order for the function to be able to find the login menu.
Afer a page with Time Scheduler was closed, some managed objects were not released. This no longer occurs.
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.
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. The layout has now been corrected.
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. This issue has been addressed.
Keyboard commands should execute when an ActiveX has focus, unless the control specifically processes the key pressed. This functionality change was introduced to fix customer 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.
The number of GDI objects in Citect SCADA runtime would increase over time until it reached the maximum allowed value (10000 per process). The no longer occurs.
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.
When the Ciect 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.
Alarm auto-archiving was resulting in the error message "Archive request rejected - Cluster1_AlarmServer1<random_characters> is unreachable". This has been fixed now. Note that if permissions to write to a folder are insufficient (or for any other valid reason), alarm auto-archiving request will get rejected.
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.
Double-clicking on some form fields results in an error dialog reporting a problem with opening file SCADAHelp. This issue has been resolved.
Fixed the issue that in some scenarios an alarm acknowledged by a Windows user may be recorded as being acknowledged by another Windows user.
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.
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.
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.
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.
Alarm server ceased to operate when Yokogawa OPCAE client connected to CS OPCAE server. The Alarm server will now continue to operate.
Citect 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.
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.
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.
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.
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.
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.
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.
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.
Using ctback32.exe in a command line with the auto (silent) flag '-a' restored the nominated project into Citect, however the restored project could not be made active. This has now been rectified and the restored project can be made active.
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. This issue is now fixed.
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.
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.
After updating the Citect 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. To fix, the cached "Valid" tag element is now discarded if its definition has been changed.
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", which resolves the problem.
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.
The registry lookup location for alarm server running in extended mode is now corrected.
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 ".". This issue has been fixed.
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.
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.
An 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.
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.
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.
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 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.
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 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.
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.
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.
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.
Mode 2 of the 'Shutdown' Cicode function allows all Runtime processes to be restarted automatically. If the [CTEDIT]Run Citect.ini setting has been modified prior to this type of restart, or if a different project has been specified as an argument to the Shutdown function, then that new project will be run as part of the restart. However, this will leave Runtime Manager in a state where it still thinks the old project is in use. As a result, you are unable to restart an individual process as Runtime Manager thinks the project paths are inconsistent across the processes. The inconsistency checks have now been moved to the back end of the Runtime Manager, where it has more accurate information about the current state of the system.
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 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.
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.
Running an OPC DA server as a Windows service on a machine without a local license used an extra control client license. The OPC DA server can now run as a Windows service without using an additional local license.
The existing French translations of the "Yes - Close" button and "Time" column on alarm lists were inaccurate. The localized strings have been updated.
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.
Following the installation of 7.50 SP1 patch 10, the Runtime Manager was not displaying during the startup of Citect SCADA runtime processes. Changes have now been made so that the Runtime Manager appears at startup.
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 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.
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.
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.
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.
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.
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.
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.
Database Exchange ActiveX control
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.
'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].
The last page on Configurator would not display localised text correctly. The Configurator has now been repaired.
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.
Fixed the issue that if cluster name contains logical operation name such as "AND", "OR" or "NOT", in some case alarm server may crash or not responding.
Following the installation of 7.50 SP1 Patch 8, the users table sometimes became filled with duplicate entries for the default server user if Cicode was performing alarm property operations from a server node. This could lead to 100% CPU usage. The way users are added has been corrected.
Calling the Cicode function DisplayRuntimeManager() when running Citect v7.50 as a service would not bring Runtime Manager to the front and would launch another client. Runtime Manager is now brought to the front without launching another instance of the client when this function is called.
When writing "(11:00:00.000;0)" to a BACnet schedule tag using TagWrite, "(11:00:00,000;0)" was being output to the device, which is invalid. The '.' (decimal point) was changed to ',' (decimal comma). TagWrite attempts to get the details of the destination tag (i.e., the tag's type), but if not found the function assumed a value type rather than a string type. In a system with multiple clusters, and no cluster name provided in TagWrite( ), the system could not identify the correct tag. Passing the cluster name to TagWrite( ) will resolve this. The program has been changed to search tags in all clusters if a cluster has not been 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.
Calling Cicode function TagInfo("", 0) would return random characters. An empty string is now returned.
Citect SCADA runtime would shut down randomly when opening dialog windows (for example, FormNumPad). An oversight in the code resulted in an internal function returning an invalid value in some circumstances.
In 7.50 SP1 Patch 9, a regression issue was introduced that prevented the page for a Super Genie from being created. This was resolved and a fix was included in Patch 10.
Process Analyst was rounding values incorrectly on the cursor. For example, 3.985 was not rounding up to 4.0. The rounding routine has now been fixed.
Fixed the issue that when ProcessAnalystSetPen is called to change tag of an existing pen, the scale was not updated according to the new tag.
Setting the Citect.ini parameter [General]RegionalNumbersFormat=0 is intnded to result in all numbers being formatted for display using English ("." decimal separator), regardless of which region locale is in use on the computer. However, this has not been working as expected since version 7. Additional handling has now been added to the I/O system to correct this.
When configuring a redundant pair of alarm servers with dual-network cards, the first server would start successfully. However, the second server would not start. This was due to restrictions around specific connections needing to come from specific network cards. This rule has been relaxed to allow the connection to come from either configured network card, which allows the second server to now start.
Acknowledging, enabling, disabling or adding a comment to an alarm on an alarm list (which is not a summary of events) using the Tab Style include project would cause the alarm list to refresh and scroll to the top. The alarm list will no longer do this. In addition, when the above action was performed with the INI parameter [Alarm]SummaryAutoRefreshMode set to 0, the alarm list would be refreshed. The list will no longer be refreshed.
The Cicode function AlarmComment returned error message 537 when called multiple times. This Cicode function now operates as expected.
Setting the citect.ini parameter [Kernel]Watchdog=1 enables the kernel watchdog. If a citect runtime process hangs when this parameter has been set, the process should be terminated and a dump should be captured. This was not occurring if an alarm server in extended memory mode was hanging.
A history of user login and logout operations can be seen in events that are added to the Sequence of Events view in the alarm system. Each login and logout was propagated across all servers in each cluster, and this was resulting in multiple events in the Sequence of Events view per operation. We now track the location of the login and reference count so only one event is logged for each login and logout in the Sequence of Events.
A timing related issue could occur, whereby an alarm server process could cease operating before completing the shutdown process. This has been resolved.
A component in the alarm server was not adequately shielded for multi-threaded access, so it was possible for one thread to access this component while another was modifying it, which could lead to the Alarm Server ceasing operations. This has been resolved by adding protection to the component.
The alarm server may not start successfully if a project contains a user called "guest", and [Alarm]DBLogServerCore=1024 has been specified in the Citect.ini. Guest is a reserved word; users should not use this name. The documentation has been updated to explain this and the compiler has now been updated to generate an error message if a user is created with this name.
The default language setting specified by [LANGUAGE]LocalLanguage does work properly when using a CSV_Include project because the CSV_User_Login Cicode function is hardcoded to use "English(United States)" as the default language. This hardcoded default setting now been removed.
When a CitectVBA function gets called aggressively in a short amount of time, VbCallOpen would not load the function. This was due to an internal object management issue of [BIN]Enable40.dll library. This behavior has now been fixed to open CitectVBA functions correctly.
The IFDEF macro could be used to check the existence of a variable tag, and then optionally add a logical operator to the Cicode in its place (such as the NOT operator). This usage was broken by a bug fix in 2015 SP1, resulting in compilation error messages. The bug fix has been rolled back to resolve this issue.
Since Citect 2015 SP1 Patch 1, calling the Shutdown() Cicode function with mode 2 only restarts the client process instead of all processes. This regression was caused by the fix for Bug 64201, and has now been addressed.
If a string contains a double bytes character with 0x5e as it's first or second byte, this byte would be wrongly removed and cause erratic display. This has been fixed.
If an I/O server restarted during a browse operation, the browse operation would not complete. This behavior has been modified to complete the browse operation with an error message.
In Process Analyst, when adding a new cursor the column heading for the cursor time displays as "TEMPNAME Time". The column should be named according to the corresponding cursor name, eg Cursor1 Time, Cursor2 Time, etc.
From SP1 Patch 2 onwards, the Process Analyst requests an additional field from the trend server when browsing for trends to improve the formatting of the trend values displayed. However, the browse requests would not work if the Client was connected to any trend servers that did not have SP1 Patch 2 or above installed. To avoid this, we now check the version of the trend servers and no longer request the additional field if the trend server does not support it.
When update pages, back colour, dimensions and environment variables etc are copied from template when [Animatior]TemplateUpdate is set to 1, as it is supposed to be.
Calling Shutdown() with sDest = "All Clients" will result in all PCs that are running servers in multi-process mode being shutdown. Calling Shutdown() with sDest = "All Servers" will not shutdown any PCs that are running servers in multi-process mode. This has been addressed by changing this function to check what servers are running on the PC, not just what servers are running inside the client process.
The Shutdown() Cicode function should return error 513 if sDest = "All Clients" or "All Servers" or "Everybody", but [Shutdown]NetworkStart=0 in the citect.ini file of the PC where Shutdown() is called from, as this will block the operation. It should return error 274 if Mode = 6 but sDest != "All Clients" or "All Servers" or "Everybody" as it is invalid to use the not originator mode for an operation that applies to a specific node. It should also return error 274 if Mode < 1 or > 8, as there is no support for any modes outside this range. It should return error 281 if sDest != "" and the alarm server is not running, as an alarm server needs to be running to propagate the request through to the other Citect PCs in the system.
Fixed the issue that Process Analyst may allocate too much memory slowly when showing a view.
When some of the pens (out of max 8) no longer exist, internal error value is no longer set.
The Alarm Server was not managing it's startup tasks correctly, so if a shutdown was initiated before startup was complete, the alarm server may have prematurely ceased operations, whilst the Alarm Database was still in use causing it to be shutdown.
User Location in Logged on event in SOE page was wrong in some scenarios. Now it is always the IP address of the machine from where the user logged on.
If an alarm server is configured with two network addresses, and the network cable corresponding to the first network address is unplugged, when the alarm server is started, display clients would not show alarms from the alarm server. A hardware alarm will occur stating that the database is not connected. This issue has been resolved by confirming the internal connection to the database is made through both configured network addresses.
On a particular customer site, the alarm database for a redundant pair of alarm servers occasionally gets into a state whereby a few alarms can no longer be found in the database. When this occurred, these alarms were not being shown in the active alarm list when their alarm condition is on. Changes have been made so that these alarms will now be displayed regardless of if they can be found in the alarm database.
When ServerIsOnline was called with bLocal set to 1, it would only be successful if the cluster was specified. In a single cluster system this function should just use that cluster internally if not specified, so that the cluster argument is not required in single cluster systems.
For logging devices of type SQL_DEV, a device open was retrieving the data for the entire table even though only the table header information was needed. This results in unnecessary load on the SQL server and network. A data read is now only performed when the ini setting [Device] SQLSelect = 1.
A "Data browse session EOF" hardware alarm was raised when applying filter to the tag drop-down list in TagDebugForm. The way the tag drop down list is populated has now been fixed.
It was possible for two different calls to the AlmTagsOpen cicode function to use the same instance identifier, causing citect to stope operating. We now check the instance identifier is unique.
In the situation where the ServerRPC cicode function is being called to run cicode on a specified server, if these requests are processed right in the middle of the server being shutdown, Citect may cease operating prematurely. Protection has now been added so the request will not be processed in this situation rather than the server crashing.
InUse property in Page Property displayed "No" as state though it had been used on the page. The Page property will now display whether the genie is in use or not.
In Citect 2015, the introduction of some bug fixes and the partial associations feature have caused pages with a large amount of super genie associations to display slower. The code has now been optimised to reduce the impact of these changes, allowing these pages to be displayed faster, although still not as quick as in previous versions.
On some customer sites, the Run\Copy\Backup feature is used to distribute project changes through a networked system. This feature contains several background threads to monitor these network paths that are configured through the citect.ini parameter [CTEDIT]Run, [CTEDIT]Copy, and [CTEDIT]Backup. We were not removing these threads on shutdown, leading to them potentially accessing cleaned up resources which would cause citect to stop working.
When connecting a client through RDS, the use of page metadata Cicode functions in startup Cicode may have caused startup to be unsuccessful. An invalid handle check is now used.
When running Citect as a service on a single computer (a standalone system), alarms would not display and I/O data would present as #COM if the server was run in single process mode. This has been resolved by confirming that Citect listens for local connections when this configuration is specified.
The Alarm Category flag 'Show On Active' was filtering the behaviour of the Cicode function AlarmAck modes 2 and 3. 'Show On Active' no longer has any affect on AlarmAck mode 2 and 3. The filter for alarm acknowledgement was changed from active alarms to all configured alarms.
SCADA may have shutdown randomly due to an unprotected Win32 API call. This situation is now guarded against.
"Trend pen not found" and "Data not ready" hardware alarms were occuring due to improved error checking in the trend system. The trend information Cicode functions have now been changed so the correct errors are still set and accessible by calling IsError(). However, errors in these functions will not result in hardware alarms.
When adding a new parameter to an equipment type, the parameter value does not come across to the existing equipment instances. The Equipment Editor now correctly handles default values for parameters added to an equipment type.
When using the Include Trend template, it was not possible to change the trend span time to greater than 255:00:00 as it rolled over to 1:00:00. This was due to the Cicode function UsrStrToPeriod truncating the Hours and Minutes part to 8 bit (0-255) in some scenarios. This limitation has been removed.
In Graphics Builder, it was taking a long time to open pages with a lot of Genies. A new parameter,[CtEdit]DbfNdxMode, now sets the method used to read DBF files that are indexed for reading records that match a key value. This improves the time taken to open graphics pages.
AlarmBrowseOpen leaked a small amount of memory that built up to a large amount if called repeatedly. This was identified and fixed.
Specifying a [General]StartDelay would cause Citect processes to become unresponsive in Runtime Manager. Runtime Manager now reports that the processes have a delayed start.
The initial height used for column separators in SQL Table library controls was incorrect. The separators were initialized with a shorter-than-expected height before it was gradually adjusted to the expected height over time. Column separators are now initialized with the expected height.
The Alarm Category flag 'Show On Active' was erroneously filtering the behaviour of the alarm Cicode function AlarmQueryFirstRec and related functions. 'Show On Active' no longer has any affect on AlarmQueryFirstRec.
An invalid argument error was returned when associating a filter with an alarm list via the Cicode function AlarmSetInfo. This occurred if it was immediately proceeded by a call of AlarmSetInfo that changed the alarm type displayed in an alarm list. For example, "AlarmSetInfo(hAn,3,n)" followed by "AlarmSetInfo(hAn,12,'xxx')". The scenario is now handled correctly.
An internal SQL SELECT statement was prepared with too many nested parentheses (as many as 1000 deep) when the customer's project contained a large number (2000+) of categories. This caused an internal component to cease operation. The code was changed to remove unnecessarily deep nested parentheses.
When an alarm server was started, the message "failed to get in-process user session" would sometimes appear in the tracelog. This message no longer displays if not required.
In a multi-cluster project, when [AlarmLog]NumFiles was set to enable logging, logged results were dominated by the cluster which made the first connection to the log file in shared mode. Then all other alarm entries from different clusters were replaced by alarms from the cluster. The alarm data from each alarm server is now logged into separate log files prefixed with their corresponding cluster names.
A delay would occur if a pages contained 500 (or more) AlarmCount function calls. Optimisations have been implemented in the AlarmCount and AlarmCountEquipment Cicode functions to reduce delays when displaying pages with more than 500 calls to these functions.
The alarm server would sometimes shutdown unexpectedly if too many alarm filter conditions were selected. Now. if a requested filter is too complex (for example, it contains too many conditions or too many nested brackets), the filter is cleared (no filter is used). The hardware alarm "Too many alarms in filters" is generated on the client components, and a tracelog error message is logged.
If an alarm was acknowledged while still active, and subsequently became inactive, the user would be reported as "System" in the alarm summary, rather than the user who had acknowledged the alarm. This correct username is now displayed.
If alarm transitions happened quickly (less than every 1 second), the alarm summary information would potentially become incorrect. Each time an alarm is ON or OFF, two events would be generated. The issue was caused by using the incorrect event. The event with the correct timestamp is now used.
Hardware alarms such as "Name does not exist" and "Divide by zero" randomly occurred while a project was running, even though no hardware cause was detected. The SXW_Style templates have been updated so the hardware alarms will not occur any more.
Invoking the Cicode function Date(INT) with format 11 no longer results in a hardware alarm and returns the expected time string.
The IFDEF macro would not support string arguments correctly. If there were quotation marks in the argument expression, the compilation error message "Close quotation mark expected" would occur. The macro now handles quotation marks correctly.
A compile error message was generated when multiple tag names had a common string for the last 63 characters. When Tag Item is not specified for tags (such as alarms, variables, trends and accumulators), the compiler will use the tag name instead. Because Tag Item has a length limit of 63 characters, only the last 63 characters are used when tag name exceeds 63 characters. This behavior has been changed to only apply to alarm tags.
The storage method of the trend was not obtainable in query through CTAPI. A new field STORMETHOD has now been added in the Trend table so that the storage method can be queried through CTAPI.
If equipment types (or templates) included predefined values for linked Genies, it could cause an equipment update to not work or produce unexpected results. The process used to parse templates during tag generation has now been modified.
The TagBrowsing component has been updated so the I/O server will no longer shutdown unexpectedly.
When running the combination of single process mode with either an OPC Server or EWS Server, events did not execute correctly. These server types now interpret single process mode correctly.
Although the [Client]Clusters parameter can hold 1024 characters in the INI file, only the first 512 were actually read from the file. This could be observed via the tooltip in Computer Setup Editor, the logging in params.dat, the default tick boxes in the cluster page of Computer Setup Wizard, and also by the number of clusters that are actually connected. The 1024 characters are not truncated anymore.
Values were flickering between #COM and #BAD when the server password was incorrect. A fix has been implemented so that #COM now displays consistently.
Sometimes startup functions would not execute because they were started before other required subsystems were initialized. A wait (for up to 5 sec) is now used before running startup Cicode.
Changes introduced in v7.50 SP1 meant that packing a project could remove the wrong records from a DBF file. The pack process now correctly handles deleted rows.
The writes for I/O devices in memory mode were not added to TagWriteEventQue. Memory mode I/O devices are now initialized in a way that will enable this functionality.
Such events now use "ClusterName_ServerName" when referencing alarm servers.
String tags referenced in Cicode expressions for alarm and trend tags would lead to the tag being displayed as #BAD. String tags are now supported in alarm and trend Cicode expressions.
The alarm server would shut down unexpectedly when processing an alarm filter that contained the alarm property 'Paging'. The expected type of the property has been changed from string to bool.
When alarm server was restarted/reloaded, if the alarm description in the RDB was static (potentially has been modified by user), it would not reload. If this is the case, it will now be loaded from RDB and overwrite the old value.
In multi-cluster project, the TrnSelect Cicode function would not use the cluster context specified and TrnSetPen would not work. Now, when no cluster is set in the trend control on a graphic page and code is used to set pens at runtime, then the cluster name defined in TrnSelect() will be the name of the default cluster for the trend control.
The Cicode functions TabAlarm_Row_Disable, TabAlarm_Row_Enable, TabAlarm_Row_Ack were returning an error message following successful operation. The local variable "retValue" is now updated when called by these functions.
Modeless forms that are launched off a page such as the TagDebug form will no longer close when navigating to another page.
The calling process would shut down if the "_LibControl_StrReplace" string was exactly the maximum size (255 characters). "_LibControl_StrReplace" can now be used for maximum length strings.
AssGetProperty would return tag name information for tags that did not exist. In the event of page reloads, all tag associations are now updated, allowing functions like AssGetProperty to get correct tag information.
The Cicode function FileReadLn would not return 275 (overflow) if the line has more than 255 characters. The detection of the various conditions that occur when the limit of the output buffer is reached has now changed.
The compiler was generating "File does not exist" or "Out of file handles" error messages when it compiled reports in which some report format files had path expansion in their names (for example, "[Run]:"). The compiler now closes file handles after reading param.dbf.
The parameters system in the compiler was not allowing for a large amount of nested projects within included projects. The allowed amount of nesting has been increased so that the parameters system will now allow a project to compile successfully.
When running Citect as a service, there was no way to specify the use of an alternate Citect.ini file. Command line arguments are provided to services by specifying them as start parameters in the services console. However, this change does not persist, so it is a once only operation. To persist command line arguments for a service, you can either use the SC Config command line tool to set the BinPath of a service to contain the arguments, or you can directly modify the ImagePath field for the service under HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services in the registry to contain the arguments. Citect now supports this modification to the "Citect Runtime Manager" service, and it can be used to specify the path to an alternate Citect.ini file to be used through the /I command line argument.
Cluster information was missing from the full 'cluster.tagname' reference when using AssGetProperty function with AssFullName parameter. GenieGetCluster() would return empty cluster for a single cluster project (even in cases when the cluster was specifically requested). This no longer occurs.
The PageDisplay Cicode function has been modified to support graphic pages that have a "." in the name, and not just a cluster prefix in the "Page" argument.
When a graphic object's expression string reached 254 characters, the Graphics Builder would shut down unexpectedly when the loading the object's expression data. The expression buffer size has now been changed from 253 to 254 to fully take the advantage of DBF max field data capacity.
Cluster information was missing from a full name 'cluster.tagname' when the AssInfoEx(sArg,nType)function was used with type 19. This has now been corrected.
Timestamped digital alarms and timestamped analog alarms were not being displayed when their trigger was active after deleting the alarm database and restarting the alarm server. The I/O server now sends the current value of the corresponding variable tags to the alarm and trend servers on connect, which resolves this issue.
Customers can now select brief driver trace details by setting the paramter [IOServer]DebugVerboseMode=0. Also, when the syslog file is displayed in the Kernel, it is truncated at 255 characters wide. The width of the window also impacts how many characters are displayed.
If more than one pen is on an axis in dual axis mode, the axis visualisation is overlaid. Only the recently selected pen's axis for the left and right axis is visible. In dual axis mode there will be an axis visible on both sides of the control.
Vertical axis scaling would reset every Info Request poll period. If the vertical scale information has already been updated for a pen, subsequent Info Requests will not update it again.
From v7.40 Spk1 onwards, setting the INI [Device]AlwaysCreateHistory parameter may not have created the required history files. This functionality has been restored, and startup is now aborted for processes that would attempt to manage the history files concurrently due to an incorrect device configuration.
Trend data requests that occurred at the same time for trends on different clusters were clashing, causing some requests to timeout after five minutes. The cause of the request clashing has been identified and resolved, allowing the Process Analyst to now correctly display the data for all trends in a multi-cluster system.
The alarm server would place the 'system.*.xml' file into the [RUN] folder. If this folder was not accessible, it was expected that all Citect process to function properly if [CtEdit]Backup was configured. The alarm server now puts the dynamically created 'system.*.xml' file into the [Data] folder so that it can solely depend on the backup folder.
In v7.50, reading a local variable array in a multi-cluster project resulted in the Cicode general hardware error message "Tag not found <tag>". This occured when using array notation after an array name (for example, "MyLocVarArry[2]"). In v7.50 Service Pack 1, this occured for single-cluster projects. This no longer occurs in single or multi-cluster projects.
Calling DevOpen() or DevControl() before PageInfo() within the same Cicode function block could sometimes make PageInfo() use the wrong page context. DevOpen() and DevControl() have been modified and are now responsible for restoring the original page context.
Cicode FileReadBlock function returns one less character than required. The function has been modified to handle the correct number of characters.
When zooming the text in Cicode Editor, breakpoints would show in incorrect lines, and setting/clearing breakpoints would be inaccurate. The markings for breakpoints and bookmarks now scale correctly.
If a dial up device changed status while there were pending read requests, the I/O server may have shutdown unexpectedly. A status change is now handled correctly.
Equipment Editor would shut down unexpectedly when running on a Turkish operating system. This can be avoided when accessing data row fields if the column names use invariant lowercase.
Key codes related to mouse right button were not working. If the nKeyCode is a mouse key code, a check on the mouse position is now made to confirm it is within the bounds of the focused object.
Tool tips may not be visible when the startup page is shown for the first time until it can find focus. This issue has been fixed.
When Aero themes are used in Windows and WinNewAt is called with mode 256, the popup window is sometimes slightly off screen. The popup window will now display correctly.
Some transient condition resulted in network adapters returning an MTU of 0. This was being used to incorrectly calculate the buffer size of the MTU, causing an unexpected shutdown. A default value is now used with the message, "Could not determine MTU from interfaces, using default of {0}", (where {0} will reflect the default send buffer size as defined in the app.config).
The parameter [Language]CaseSensitive was not working, which meant the case specified in language files was being ignored when text was displayed. The functionality for this parameter has now been reimplemented.
When Citect is using single process mode, it creates "Systems.xml". When using multi-process mode it creates "Systems.<ServerType><ClusterName>.<AlarmServerName>.xml". A recent related change also creates the "Systems*.xml" files in the [DATA] folder. The OPC AE registration routine now processes all "Systems*.xml" files in the [DATA] folder.
The report server may not shutdown successfully if the shutdown occurs when it is in the middle of reading a tag for totalizer, number of starts. The report server will now shutdown as expected.
It was not possible to restrict key sequence command action for a left mouse double click so that it only occured when the mouse position was over a specific object. New key codes LBUTTON_CMD_DBL, RBUTTON_CMD_DBL and MBUTTON_CMD_DBL have been added. When these key codes are assigned to a key sequence command action, the command will only be run when the mouse position is over the focused object during a double-click.
After updating to 7.50 Spk1, On pages created from the old standard trend templates, users can no longer drag mouse pointer on the trend graph to form rubber band for zooming. The functionality is now restored.
After applying Service Pack 1 to version 7.50, the user could no longer move the trend cursor with the mouse on pages that were based on the legacy standard style trend templates. Mouse operations, such as moving trend cursor and zooming in trend span, now work as expected.
Data browsing appeared to be performing poorly on a high latency network. Increasing the data package size reduced the number of required interactions, which has improved performance of data browsing when network latency is high.
Batched alarm events were not being correctly added to AlarmEventQue. Batched alarms are now handled in a way that allows them to be added to the alarm event queue.
When a large number of alarm counts are in use concurrently, device status change would slow down alarm server performance so that the alarm updates would get delayed. The alarm count subsystem has now been optimised to consume less process resources to reduce the delay and provides a new equipment-based alarm count Cicode function for better filtering performance.
Trend tag format setting in Project Editor was ignored for the cursor position value, minimum value, maximum value and average value in Process Analyst. Process Analyst now discovers the format setting through the trend browse it performs and applies it to the display values.
The locale argument was being ignored when a login as a Windows user occurred. The supplied locale ID is now used instead of the default ID.
When calling the Shutdown() function with mode 6, the specified remote destination process shut down without restarting as expected. To fix this, the correct runtime message type is now used so only targeted processes on the destination will restart.
Database Exchange ActiveX control
When calling Visual Basic functions from a 32 bit Citect process with argument types of string, int, long or real, there was the potential for Citect to shut down unexpectedly. Extra memory is now allocated for Visual Basic function arguments.
Trying to display a non-existent page can incorrectly open a page with a name that has the same eight leading characters as the non-existent page. Under default settings for the parameter [Genaral]LongFilename=1, a long file name is now used for every page file. The page display Cicode functions will only try to open a page using its entire name.
Calling DspAnNew() and some other display Cicode functions on client process with display disabled could cause an unexpected system shut down. For example, this may occur with system services with the parameter [Client]DisableDisplay=1. These functions now close gracefully when display is disabled.
The alarm server was shutting down unexpectedly due to a complex alarm filter being used. This was corrected by using use range test instead of a blocked group, which reduced usage on the alarm server.
The menu tree on pages created in SxW_Style_Include template did not respond to scrolling. Library control initialization no longer retries endlessly if an non-exist or empty function is specified in the library gene setting.
Graphics Builder was using excessive memory and font handles whenever an update pages operation was performed. This meant Graphics Builder would stop operating if several update pages operations were performed without restarting the application. Graphics Builder can now run many more update pages operations without a restart.
A particular scenario was encountered with communications between Citect SCADA processes (RPC) that had the possibility of causing an unexpected system shutdown. This has now been rectified.
If the privilege level has not been set for a control on a page, the privilege level is now taken from the PAV file.
Enhancements
User can now specify a day range in the Special Days View of Scheduler by specifying the Start and End day. Special days that are adjacent to each other and have the same name will be grouped together into a single block in the Special Days View.
The property ViewLocation and the event ViewLoadedSaved have been added to Process Analyst.
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.
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.
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.
The runtime limitation of 256 roles per logged-on user has been increased to 1024 roles.
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.
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.
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.
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.
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.
Previously no IFDEFHRESALM function was available for HRES alarms like there is for other alarm types (eg IFDEFDIGALM). This function is now available.
An "external client" process is one that starts up and obtains a remote (network) license in order to operate. This type of client starts with the /X flag. Now we have introduced an additional client start up flag /O (which means "local license only"). When the client starts up with /X /O flags, it is expected to grab a license from a local System Services Client, which is another client process running locally with a /V flag. The /V flag means the client is running as a service.
The Citect login form shows a dropdown list of languages that can be used. This shows all languages supported across all include projects. Some customers prefer to only show languages defined in the top level project. This can now be achieved by setting the following citect.ini parameter: [Language] DefinedLanguagesOnly = 1 The default value of 0 will retain the existing functionality.
Kommentarer
0 kommentarer
Logg på hvis du vil legge inn en kommentar.