Citect SCADA 5.42 Service Pack A

Материал из archestra.info
Перейти к: навигация, поиск

CitectSCADA Version 5.42 r0 Service Pack A

The following files have been updated by this Service Pack.

CITECT32.EXE CITRENDARCHIVEFILEOFFSET.DLL CITRENDARCHIVEFILEOFFSET8BYTE.DLL CTAPI.DLL CTAPI.H CTAPI.LIB CTCICODE.EXE CTCMP32.EXE CTDRAW32.EXE CTENG32.DLL CTKC.DLL CTUTIL32.DLL CTVERSION.XML CT_IPC.DLL ERRSTR.DBF ERRSTR.NDX TREND.CI ZOOM.CI

FOR GENERAL INFORMATION ABOUT SERVICE PACKS, SEE KNOWLEDGE BASE ARTICLE Q2181


  • 18624 -Citect has trouble handling mouse events for ActiveX controls

If a combo box control was used on a normal CitectSCADA page, mouse events were correctly handled making it possible to change the selection in the combo box using a left-mouse-click. If the combo box was then used on a popup page, the mouse event was not handled correctly unless the popup is moved to the page origin. The problem has now been resolved.

  • 18992 - Memory leak while connecting to an inaccessible Citect Server

A memory leak was caused by asynchronous TCP/IP connections when a client attempted to connect to a Citect server that didn't exist on the network. This leak was caused by the messages being sent to indicate that the connection request failed. This memory leak has now been resolved.

  • 19002 - A Project with a scheduled IODevice may crash on startup if the period is less than one minute.

The QueWrite() function was unable to handle a double queue write operation properly. The problem has been fixed by a modification to the QueWrite() function so that if the element passed in is already in a queue, no action occurs. Similar changes were made to QueInsert().

  • 19073 - "Data Not Yet Valid" error suppression required

"Data Not Yet Valid" errors are streamed to the Kernel window and Syslog.dat file for every point on a device. In a wide area SCADA system, these streaming errors can fill up the syslog.dat file and impact the Kernel "Main" window. A new parameter has been added to the OPC driver to control whether or not the error "Data not yet valid" is displayed or suppressed. To suppress the error, set: [OPC] SuppressDataNotYetValidError=1 (default = 0) If you open the Kernel page "drivers", and press "V" for verbose, you will see the "DataNotYetValid" error count increasing. In the Kernel "page unit", a message "Error suppressed" will also be displayed.

  • 19341 - CTAPI will not read tags properly across multiple Citect projects

This problem was caused by incorrect caching of metadata by CTAPI. The metadata is only retrieved once, regardless of the number of connections to different Citect projects. The caching logic has been changed so that metadata is associated with each connection.

  • 19484 - Citect crashes when accessing ActiveX objects

An architecture problem was identified where ActiveX event handler code (Cicode or CiVBA) was used with a variable tag. The crash depended on the timing between event synchronize and the tag request system. 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 both the ActiveX event system and code request system can have independent flags.

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

In 5.41 Service Pack B, the code was changed to partially protect the system from this problem. However the semaphore handling part was not protected, causing possible animation freezes. The problem has now been resolved.

  • 19540 - QueInitHdr() macro not setting Next & Prev pointers to null

The Next & Prev pointers were left undefined after theQueInitHdr() macro was used. This was changed for additional safety in case an item is examined between being initialized and written to a queue.

  • 19545 - Multiple queue writes

Investigation has found writes of the same buffer into the Req.Post.Task.Read queue happening. This could potentially cause an animation hang. This problem was traced to the Com system, and usage of the function ComBuild(COMBUF* pCom). This has been fixed by checking at the start of each iteration whether the pCom object in question is still in the queue.

  • 19564 - Cicode editor losing changes

If a Cicode file was saved and then further changes were made, switching to a second application and back would cause the Cicode Editor to eliminate the post save changes. An error would also occur if a bookmark or breakpoint existed before a document was reloaded but afterwards was an invalid line number. A dialog has been added asking the user whether or not to reload the document.

  • 19652 - Trend does not zoom out as expected

If a rubber band selection was drawn on a trend page, the zoom out button did not work as expected. A change was made to the ZOOM.CI file to confirm an appropriate setting for TimeZoom and ScaleZoom before accepting AreaSelected=0.

  • 19758 - Deadlock Detection error while the Event Service is running

CTAPI has been updated to clean up ctCancelI/O, and modify query timeout so it will just return the timeout error. Code has also been added to the Kernel window to display the CTAPI search queue to help monitor the CTAPI query.

  • 19803 - I/O problems cause gaps for all trended tags

When I/O problems caused a gap for a trended tag, it was also reflected in all trended tags. The parameter [Trend]BlockByI/ODevice was set to a default of one (1) and documented.

  • 19824 - alarm descriptions lost for 8 bit DCB values

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

  • 19867 - New INI parameters for trend redundancy

The following [Trend] INI parameters have been added: [Trend]TrendDebug is a dynamic INI setting that enables traces; [Trend]ClientRequestTime determines the maximum time the client will wait on a Trendsettable() before deciding it will not happen and returning an error; [Trend]TrendsetErrorHandling allows you to change the default Cicode trendsettable() error handling method.

  • 20019 - SCADA connector regularly loses comms

The SCADA connector, used for data transfers with Plant2Business, was suffering regular comms failures at a half-hour interval. It would fail then recover almost immediately. Changes made to solve this problem included: 1. Changed WriteFile()/ReadFile() for sockets to the send/receive pair. 2. Upgraded CitectSCADA to use Winsock2 rather than Winsock. 3. Initialize the C runtime library when loading the CT_IPC.DLL. 4. Added debug tracing to CTAPI.

  • 20097 - Cicode setting in a project will crash CitectSCADA

The following setting in the Citect.ini can produce a crash. [debug] kernel=1 [kernel] Win2=Table,cicode This problem has now been resolved.

  • 20133 - _TblTable not protected, causes crashes at shutdown

_tblTable was freed but not set to NULL. Also, the macros using this were not protected against NULLs and BAD_HANDLES. This was a problem during shutdown because code can still attempt to access the _tblTable after it has been freed. This code has now been protected.

  • 20134 - Protection for NULL exit routines

There was no protection for NULL exit routines, nor any ability to recover if one of the exit routines caused an exception. This has been changed to allow Citect to continue shutting down by implementing a new ini parameter [Debug]ShutdownProtect (which enables exit exception handling). Logging has also been added, which is enabled via the ini parameter [Debug]LogShutDown (which enables shutdown traces).

  • 20187 - Adjustments to AlwaysCallDestroyChannel

The code added for bug 19799 has been extended to this call. The driver exit function is also gated. The INI parameter name "AlwaysCallDestroyChannel", has been changed to "AlwaysStopChannel" to be more consistent with the existing StopUnit() call of "alwaysStopUnit".

  • 20214 - Hebrew characters not working in Cicode Editor

This problem was caused by lack of support for Unicode in the Dundas libraries. However, Windows has a mechanism for language support via the use of the extended ASCII character set. RTF has a standard of supplying language information in grouping and using this in conjunction with this extended ASCII set has provided a degree of language support.

  • 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 I/O 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}. This was causing CitectSCADA to crash when devices were coming back online. The problem has been resolved.

  • 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 that of the latest sample.

  • 20663 - 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 alarms 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). When this happens the alarm ON actions do not trigger on startup.

  • 20681 - CTAPI deadlock when calling ctClose function

The CTAPI client could deadlock when calling ctClose() function. This problem occurred after an enhancement to the ctCancelIO() function. The issue has now been resolved.

  • 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 an unsuccessful call to CreateDIBSection(...).

  • 20712 - Genies move and resize at runtime

Citect runtime animator was rounding transformed coordinates to the nearest pixel. This is different to the truncation method which Graphics Builder uses. This only affects circles and rectangles. All point maps for circles and rectangles have been modified to truncate transformation results.

  • 20791 - Exponential format does not work in trends

The format specifier for exponential notation, for 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. The problem has now been resolved.

  • 20793 - Occasional crash on shutdown

Occasionally, GPFs would occur on the primary I/O server at shutdown of the CitectSCADA application. A counter to keep track of the number of Active 'Win32IPCThread' instances and an event which signals each time an IPCThread exits have been added.

  • 20855 - No Hardware Alarm is generated when redundant data path fails

If you had an I/O Server and a PLC running as two physical data paths (ie. two serial ports) and the standby cable (data path) became disconnected, there was no hardware alarm despite the Kernel page showing the standby I/O device to be offline. The driver now after n timeouts will channel offline and generate a hardware alarm. Previously it only returned timeouts, which result in a "unit not responding" message but no hardware alarm.

  • 20867 - GPF importing multi-digital alarms

This problem was caused by the state of multi-digital alarms being set to ALARM_COM_BRK_AT_START when the state description is requested. The FmtArgState function uses the state field as an index into the AlmDesc array, which is beyond the bounds of the array when the state is ALARM_COM_BRK_AT_START. The FmtArgOld has been changed as well, as it also uses the state to index into the AlmDesc array.

  • 20898 - Disabling the "device offline" hardware alarm

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

  • 20938 - FileExist() Cicode function causes temp hang

The Cicode function FileExist() causes Citect to hang for roughly 15 seconds if the function is pointed to a file on a remote machine and that machine is not available. This problem occurred because the Windows API call to "access" may have taken a long time when the path refers to the network. FileExist() call will now work in asynchronous mode so as not to hang Citect.

  • 21024 - Random tooltips appearing on a page

It appeared that a tooltip was attached to a genie that had long been removed. The tooltip would appear not only on the genie, but all over the page at ANs which were not even user editable. An INI parameter, [General]UseConfigurableKeywords, was added to allows customers to remove orphaned tooltips, when appropriate.

  • 21276 - CTAPI will pop up deadlock message box

CTAPI will pop up a deadlock message box when the system time has been changed on a Citect server. The CTAPI client timeout was the cause in this case. PostMessage() was used instead of SendMessage() to solve the problem.

  • 21370 - "I/O device cache file not loaded - has changed" error

This error message is caused by a mismatch in the port and phone number of the fields for cache entries. To resolve this problem, the checks of the Address, Port and Phone number when checking cache entries have been removed from the ValidateUnit function.

  • 21452 - Duplicate tag names in included projects do not report errors

A compile error may not have been reported if duplicate tag names were used in separate projects. Also, if the InfoForm function was used, it would display information for one of the tags while actually using the other tag's details when communicating. The problem was fixed by adding a flag to determine if the first was called for a given project during compilation.

  • 21539 - Crash on dongle failure

Instead of giving a "Software Protection Failure" message when a dongle was not present, Citect would GPF or disappear. Protection to the function ClientCheckPriv() was added to resolve this problem.

  • 21551 - Redundant report accessing common device file

This problem came from the way that DevOpen(hDev, mode) was implemented. It became possible for both the Primary and Standby Server to have the one device open at the same time. The solution was to modify DevOpen(hDev, mode) so that if the device is already open and the mode is DEV_LOGGING, then the file pointer is moved to the end of the file.

  • 21587 - Citect crash caused by Trend Backfill

Modifications have been made to the function trnRdnTableRun to stop the crash caused when pInst is NULL, and to perform a trnRdnUpdate() to re-request trend redundancy data.

  • 21610 - CodeClose() causing memory leak

A fundamental function of CodeClose() is to free the Cicode strings allocated locally to the stack, where this hasn't already been performed due to the premature shutdown of the Cicode function. This was achieved through the function CodeFreeString(pCode), which used the variable "pCode > CallDepth" in its implementation. However, pCode > CallDepth would set it to zero before the call to CodeFreeString(pCode) This resulted in the strings never being freed, potentially causing a memory leak. The problem has been resolved.

  • 21663 - A new alarm is regenerated after using AlarmClear

The problem was being caused by Citect clearing all the state information when AlarmClear() is called. This meant that the next time the ArgDigProc task woke up, it would think the incoming state was 000. Since the current state (which hadn't actually changed) appeared to be different to 000 it redisplayed the alarm.

  • 21814 - Memory leak with summary alarm display

A memory leak was possible due to a problem with the function EventUnpack(). The problem has been resolved.

  • 22090 - Duplicate Project IDs

The compiler has been changed to check for duplicate project IDs within the included projects of the project being compiled, not all projects in the master database.

  • 22482 - System hang when a server is lost

It is possible for Citect to hang if a server that should be available becomes unavailable. This bug has been rendered invalid by the solution to bug 22506 as we now use asynchronous sockets.

  • 22506 - Primary trend server hangs when the standby server crashes

To overcome this problem, the IPC code was changed so that WinSock2 operations are performed asynchronously. This results in the send/receive being replaced with WSASend/WSARecv. A new INI parameter [IPC]SocketShutdownTimeout has been introduced for use with receive when flushing out the buffer at shutdown.

  • 22556 - Memory Leak in the MsgRPC Cicode function

Calling a remote procedure using the MsgRPC Cicode function would cause a memory leak if the target server was actually the local machine.

  • 22824 - ctGetNumberOfLicenses now reads Pocket and Batch licences

The CTAPI function ctGetNumberOfLicenses is now able to read license information for PocketSCADA and CitectSCADA Batch.

  • 23439 - TCP/IP socket implementation requires blocking send mode

Code was added so that if a user configured SocketSendTimeout to equal 0 in the Citect.INI file, then Citect would permanently block instead of timeout and close the connection. This is necessary under rare circumstances on site.

  • 23493 -Crash on Primary trend server during trend backfilling

A crash caused by a memory overwrite in the function ReadForwardByTime, called during event trend redundancy, in CiTrendEventHistoryFile.cpp has now been resolved.