CitectSCADA and CitectHMI

Release Notification


Version 5.50 Release


Fixed Problems and Enhancements

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

* NCR 17057 - Mouse wheel support

The mouse wheel was not supported by the Citect runtime (Citect32.exe), e.g. to scroll oversized pages. Problem resolved by adding mouse message handler for wheel mouse support.

* NCR 18622 - GPF occurs in Example project in the SPC system

The crash is the result of a SPC sub group process calculation which results in a value of -1.#QNAN00000000 being "calculated". This will go on to cause a crash in the SrvSPCProcessCalc function of tr_acqu.c when the value is divided by 2 (NoSubgroups). The problem has been addressed.

* NCR 18699 - Crash in Citec32.exe during shutdown

As the point where the crash happened has been identified, an extra pointer has been added to ensure that the crash never happens again.

* NCR 19059 - CitectInfo() returns erroneous value

CitectInfo("Memory", "", 0-3) returns erroneous value if the result is greater than 2147483648.If the result of the CitectInfo() function is greater than 2 GB (2147483648), the returned value is a rolled over value which is erroneous. CitectInfo now provides the option to scale the result by kbyte or mbyte.

* NCR 19075 - String tags from OPC server don't display properly on Super Genie

A string tag placed on a super genie displays only a blank value (when there is a string in the tag). The tag displays the string properly if it is displayed directly on a page. The solution involved changing the BitWidth to 1024 from 2040.

* NCR 19311 - Errors installing on an XP machine with .NET installed

Installing v5.42 on an XP machine with Visual Studio .NET installed will cause two error dialogs to be displayed near the end of the installation. The first is an application error and the second error involves Regsvr32 crashing. Problem now resolved.

* NCR 19484 - Citect is crashing when the customer is accessing ActiveX objects

An architecture problem was discovered with ActiveX event handler code (Cicode or CiVBA) using variable Tag. The problem has been fixed by adding an event state field in the code instance structure to indicate the code blocking from ActiveX event synchronize system, so the both ActiveX event system and code request system can have independent flag to check with and to decide whether keep the Cicode blocked or put it into ready state.

* NCR 19520 - IODevice toggles online / offline when status tags are enabled.

If the OPC driver has the settings GoOfflineForBadTag=0 and LeaveTagsActive=0, the driver should only check status tag for connection status. The bug is the driver checks all items when the status tags are enabled (in GetServerStatus()). If one of the items has a bad quality, driver will set unit offline.

* NCR 19539 - Kernel queue write & insert functions are not handling a double write

In 5.41 SPB, the code was changed to partially protect the system from this problem. However the semaphore handling part was not protected. This meant we went from a possible GPF to animation freezes. The problem has now been resolved.

* NCR 19549 - FTP Server failure not flagged

When running Citect as an FTP Server alongside another FTP service (like the FTP Publishing Service for Internet Information Services), the Citect IDC FTP Server does not start and there is no error indicating a problem. To monitor for this problem, the parameter FTPWatchTime has been added allowing a period to time to be set before a error code is shown on kernel window and logged. The generic hardware alarm "FTP server is not running" is also raised.

* NCR 19550 - TrnGetBufValue returns an invalid value

The Cicode function TrnGetBufValue returns an invalid value when offset = -1 and the display period of the trend is greater than the sampling period. If a text object is created to display the value of TrnGetBufValue it will return '-1.#QNB'. The problem was due to the fact that the trend system may not know the value of a tag at the exact value of a trend update.

* NCR 19564 - Cicode editor losing changes

If a Cicode file was saved and then further changes are made, switching to a second application and returning to the Cicode Editor eliminated the post save changes. The problem was caused by the Cicode Editor reloading the documents every time that the editor view was activated. So if a change was made after a save and the user changes focus outside of the view and then back again, the file would be reloaded to the last saved point losing any subsequent changes.

* NCR 19593 - Hebrew characters not working in Cicode editor

This problem is actually caused by a lack of support for Unicode in the Dundas libraries. However Windows also has a mechanism for language support via the use of the extended ASCII character set. Problem has been resolved.

* NCR 19621 - Computer Setup Wizard does not work with more than 63 include projects

Using more than 63 include projects will cause an error "Too Many Client tasks. Driver's SQLSetConnectAttr failed". This problem was caused by the dBase CDatabase open connection limit of 64. The Computer Setup Wizard (CSW) opens all the include projects to allow the retrieval of I/O Servers, Reports, Events and Pages. To prevent us having to reopen the include project when we wish to list a project's entries we leave the database connection open until the CSW closes. However since we can only have 64 open at any one time the 65 connection attempt was failing and hence the error was being displayed. The CSW has been modified to allow 63 fixed connections with a 64th rolling connection.

* NCR 19733 - Citect has trouble handling mouse events for ActiveX controls

If a combo box control is used on a normal Citect page, mouse events are correctly handled and it’s possible to change the selection in the combo box using a left-mouse-click. If the combo box is then used on a popup page the mouse event is not handled correctly unless the popup is moved to the page origin. This is an issue with the ActiveX control because it works fine on a normal Citect page. Most likely an issue with the way mouse events are handled in VBA for popup windows.

* NCR 19764 - Doing a save as in the Cicode Editor moves cursor

If you save a Cicode file, with Save As, you will find that the cursor jumps to the beginning. Also, if you do a Save and put the cursor on a next line (or somewhere else) it jumps to the beginning of the Cicode file. Problem has been fixed.

* NCR 19769 - #COM problem with ABLOGIX upgrade

When using ABLOGIX driver V2.0.5.1, some project pages have shown permanent #COM on the entire page, and the IO device will cycle offline / online / offline referencing a particular tag as a timeout. This tag reads OK in isolation. If the same page is viewed when running with ABLOGIX driver V1.8.4.1, then all the data is visible and there are no errors. The bit block size in protdir.dbf was changed to 512 bits instead of 2048 as the device does not support requests for more than 512 bits.

* NCR 19772 - Trend popup stats problem

When you open the Trend stats popup, it starts a task that reads the trend data and performs the calculations on it. Unfortunately, it specified the default display mode instead of the current display mode when reading the data. The code has been modified to fix this.

* NCR 19803 - IO problems cause gaps for all trended tags

When IO problems cause a gap for a trended tag, it also caused gaps for all trended tags. Bad. The parameter [Trend]BlockByIODevice was set to a default of one (1) and documented.

* NCR 19824 - alarm descriptions lost for 8 bit DCB values

Hardware alarms that are sent back via a DCB for an 8 bit item lose their description text. Two additional bytes were added in the buffer to accommodate the extra bytes for the LONG.

* NCR 19863 - OPCStatusTags doesn't work with Boolean data types

A device couldn’t come online even when the OPCStatusTag’s value was set to "1". It appears that OPC status tags parameter doesn’t support the Boolean data type.

* NCR 19919 - RemoveTrendCache GPF

This crash appears to have been caused by thread synchronisation issues with RemoveTrendCache() being called from two threads. WriteCacheController::ThreadFn() creates a Timer object to perform a delayed RemoveTrendCache() on the member object m_CurrentCache. If WriteCacheController::ThreadFn() detects that this hasn't been performed then it will perform it explicitly. It appears that it is possible for the Timer function to commence and remove the m_CurrentCache object, setting it to NULL, and then become pre-empted and the WriteCacheController::ThreadFn() may detect that the object is still present and try to remove it a second time, causing a GPF.

*NCR 19942 - Projects with spaces in the name cause problems

If you create a new project with a space in the name (eg "Test Project") this will be created in a path called, C:\Citect\User\Test\Test Project. Notice the extra "Test" subdirectory. This problem has now been resolved.

* NCR 20080 - channel offline code for TCP/IP

There was a problem with the channel offline code for TCP/IP stopping the driver from ever releasing the socket for failed COMXXX operations and timeouts. Issue has been resolved.

* NCR 20097 - Cicode setting in a project will crash CitectSCADA

The following setting in the Citect.ini can produce a crash.





Project will run only the first time after PC is restarted. Shutting down and rerunning the project will cause a crash.

* NCR 20109 - CitectSCADA fails to initialize a PLC

If a PLC was turned off, or not on the network at the time the Citect IO servers started, and then became available, when Citect registers its variable tags with RSLinx, RSLinx creates an optimised packet for every tag, instead of a true optimised packet with multiple variables. This caused the CPU utilisation to go to 100% for approximately five minutes, flushed the packets and stopped attempts to read from the PLC. The problem is now resolved.

* NCR 20215 - CiUSAFE utility update

CiUSAFE utility has been updated for release with 5.5.

* NCR 20124 - Trend system crashes on shutdown

Trend system sometimes did not initialise properly (but it manages to continue running). On shutdown it crashed because it tried to 'free' memory that was never 'malloced' because initialisation terminated prematurely.

* NCR 20252 - IDC freezes up

The IDC will freeze on startup if the project path length is exactly 53 bytes length.

This problem was found to be caused by the server sending garbage data every 100 bytes in ftp commands.

* NCR 20286 - ABLOGIX #COM error

A #COM error was displayed when there were a multiple devices on multiple ports. This proved to be a configuration issue. You need set the slot number of the Logix5550 processor in Address field of I/O Devices form.

* NCR 20267 - Writing OPC tag causes unit to go offline

This is caused by the CiOPCGroup::CiOPCGroupThread::WriteToServer method. When an exception is thrown from the write it is caught but then rethrown. This rethrow comes all the way out to the DeviceTask and out of the thread loop. This sends the unit offline. This could be dealt with differently but this is done quite deliberately just in case there was something wrong with the session to the server.

* NCR 20418 - Alarm server starting with devices offline

When the alarm server starts, it sets the state of alarms to ALARM_COM_BRK_AT_START if the related IO devices are offline. Multi-digital alarms are configured so that they log the transition to a device, and the format contains the field {OLD_DESC} (undocumented). This was causing CitectSCADA to crash when devices were coming back online. The problem has been resolved.

* NCR 20445 - Request to increase field length output using TrnExportDBF()

No matter what field length you have, the field name size for DBF files is always limited to 10 characters (9 + null terminator). There is no way around this limitation as it is defined by the DBase III file format. The difference between field lengths for 2 byte and 8 byte trends is purely because of the difference in precision of the value.

* NCR 20473 - Clock triggered reports cannot be generated

The bug happens because non-triggered reports still check the error from the previous Cicode call, which will be the previous reports error as there is no Cicode attached to this report. The fix was to only check the error if a Cicode call is actually made.

* NCR 20569 - GPF at address 0x005590fa

Crash logs for this GPF show that Citect was crashing when it ran out of Cicode Handles (limit is 64). The solution is to put in a check for a NULL pointer returned from TblHndToPtr(). We could then exit CodeKill() because the Cicode function has already finished.

* NCR 20587 - Genies using properties that are greyed out

This problem occurred because both the Touch and Keyboard properties are actually chained to the main object. The update path destroyed these chained objects and rebuilt them, however, a nested object (on a page or in another Genie) needed to be created based on a parent template. This problem was solved by branching the execution when updating via a Ctrl Dbl Click dialog.

* NCR 20599 - OPC driver does not deactivate tags on standby

Unless tags are removed from RSLinx OPC server, they will continue to scan. Driver now implements a new feature which will optionally deactivate all tags.

* NCR 20633 - Alarm on action failure on startup

Alarm on action fails to execute on startup if there is no alarm save file. The [Alarm]Ack parameter doesn't leave the alarm's unacknowledged on startup. It leaves them in their last state. In order to leave them unacknowledged this parameter must be 0 but the ALAMSAVE.DAT must be disabled (by deleting it or setting [Alarm]SavePeriod to 0) as well. When this happens the alarm ON actions do not trigger on startup.

NCR 20650 - ABRS Linx devices going offline

A project ran for 49.71 days and then all tasks froze and all PLC devices went offline.. It appeared to have effected the ABRSLinx devices only. The problem is that just before KerRawTime() rolls over, 'pre-empt' will be set to a low value. Then when the conditional statement is executed KerRawTime() will be greater than pre-empt although the Timeout has not elapsed. This causes the Cicode to be prempted and a hardware alarm is raised.

* NCR 20652 - Compiler crash when large number of projects

The crash has been converted into a compiler error - "out of handle".

NCR 20659 - Enhancement to the TrnExportXXX Cicode functions

A new option has been added to the DisplayMode for TrnGetTable functions allowing the selection of a new Condense Method option that sets the condense method to use the newest of the samples.

* NCR 20681 - CTAPI deadlock when calling ctClose function

The CTAPI client could get deadlock sometimes when calling ctClose() function. This problem is happened after the enhancement of ctCancelIO() function. The problem was the _beginthread() function has been used to create the cancel IO thread. To solve this problem the _beginthreadex() function should be used as Microsoft guarantee that the thread handle returned by _beginthreadex() will always be valid until you close it by using CloseHandle() function.

NCR 20687 - Citect runtime crash

This crash was happening in a call to memcpy() where the destination pointer was NULL. The memcpy() in question was being performed in the function GrDibDCAttachToBitmap() following a presumably unsuccessful call to CreateDIBSection(...).

* NCR 20696 - problems with TrnSetPen()

TrnSetPen() function worked fine in v5.31 but didn't work properly in v5.41 . The problem occurs when the 'EndTime' value for all the other available pens is zero or if there are no available pens other than the pen in question. The result is that a Trend request is performed with a Request Time of zero. The cause of the issue is that The 'EndTime' value for the pen used is set to zero in 'trnCliPenDef()', formerly it was set to current time, but was changed prior to Citect version 5.40 r0.

*NCR 20763 - Problem with Shutdown() Mode 3

With Windows auto login enabled and Citect in the start-up group, the following code "Shutdown("", ParameterGet("CTEDIT", "RUN", ""), 3);" should cause a shutdown of Citect, log off Windows, Log on and Citect restart. It causes a Citect shutdown, log off and re-boot computer, as per Mode 4. Citect must be configured to be run at startup for Mode 3 to work as documented.

* NCR 20791 - Exponential format does not work in trends

The format specifier for exponential notation, example #s#, works for variable tags if displayed on graphic page but does not work for Trend Tags in trend templates. The format can be specified in the trend tag (F2 extended form) and compiles but does not display in exponential format in run-time on the trend pages.

* NCR 20793 - Occasional crash on shutdown

Occasionally GPFs occur on the primary IO server at shutdown of the CitectSCADA application. A counter to keep track of the number of Active 'Win32IPCThread' instances has been added, which is incremented each time new IPCThread is created and decremented each time one exits. An Event which signals each time an IPCThread exits has also been added.

* NCR 20851 Subsequent calls to PlotOpen cause graphic to continually shift

When an AN is dynamically created using DspAnNew(), subsequent calls to the plotting functions PlotOpen(), PlotLine(), PlotClose() caused the display graphic to shift down the screen.

* NCR 20869 - CTAPITrend parameter truncation

When running a project, if 7 of the trends with long tag names (17 characters) and 1 trend with a standard tag name is configured in Trend Viewer, "spikes" can be displayed for the last few pens. This was caused by the apparent truncation of the CTAPITrend() parameters at 255 bytes.

* NCR 20875 - Crash on resize of 'page rdb _units.units'

If you open 'page rdb _units.units' in the kernel and then resize (full page) that kernel window then Citect will crash.

* NCR 20897 - ActiveX Objects not printing

ActiveX objects did not appear on Bitmaps obtained from the WinFile function, or on print outs from WinPrint as ActiveX objects are not drawn on to the run time canvas. The WinFile and WinPrint Cicode functions call the _GrDevCanvasToBitmapScale function, which is responsible for creating a scaled bitmap image of the screen to be used for printing. However the _GrDevCanvasToBitmapScale functions previously only scaled the graphics canvas onto a new bitmap so ActiveX objects were not seen. Changes have been made inside the _GrDevCanvasToBitmapScale functions to send a DSP_ACTIVEX_PAINT message to all graphics objects on the page.

* NCR 20898 - Disabling the "device offline" hardware alarm

A way to disable the "device offline" hardware alarm is required for an IO device that has been manually disabled using IODeviceControl in Type 1 mode. The solution uses a Citect.ini parameter at the Modbus unit/IOdevice level called: [MODBUS.Port_Name.Iodev_name]

* NCR 20907 - Animation freeze

Runtime display may freeze if system time/date is changed backwards. The animation freeze is caused by the Citect being unable to select a suitable cached DspTbl entry to evict when the table is full.

* NCR 21136 - Unit not responding when a disk device is on the same server

A variable was not initialized properly in SSTAB driver. It has been fixed in SSTAB driver version B.

* NCR 21254 - [General]mscyrptslowstartupfix INI has wrong default

the [general]mscyrptslowstartupfix Citect.ini parameter has now been defaulted to 1.

* NCR 21441 - GPF on shutdown with external I/O device connected

A CitectSCADA project was sometimes suffering a GPF on shutdown if an external I/O device was connected. The problem was related to order of InitBuffPool().

* NCR 21684 - CTAPI/WebService only allows 8 digits in the AlarmRecNo

When the WebService requested alarm record numbers from the CTAPI, the result only returned an 8 digit Alarm Record Number. In larger projects, the record number can be a 9 digit number. When trying to acknowledge alarms from CitectSCADA Pocket, using record numbers it fails as Pocket is only aware of 8 digits and not 9. The CTAPIAlarm function has the DevModify line specifying {RECNO,8} as the format. This has been changed to {RECNO,10}.

* NCR 21711 - CiUSafe shows both P2B and Citect data

When using CiUSafe with combined keys, product will now read "<citect type> / Plant2Business". Version will still only display the Citect version, but the P2B fields for Historian and Event service will be shown in the license field.