Applies To:
  • CitectSCADA 5.xx, 6.00
  • CitectHMI 5.xx, 6.00

Citect may not perform correctly when Processor Affinity is not set correctly.
Only affects PC's with multi processor.

Support have to manually gather information from customer each time.

The Exception mailer version 1.4 has been enhanced to gather PC processor information as shown below:

19/05/05-16:15:20 *****************************************************
19/05/05-16:15:20 Exception Report (v1.4)
19/05/05-16:15:20 CITECT32 Size 2568254 Version 6.0 r1 (Debug)
19/05/05-16:15:20 OS Type XP Version 5.1 (Service Pack 2)
19/05/05-16:15:20 PageSize :4096 (0x00001000)
19/05/05-16:15:20 Processor.Number :2 (0x00000002)
19/05/05-16:15:20 Processor.ActiveMask :3 (0x00000003)
19/05/05-16:15:20 System.Affinity :3 (0x00000003)
19/05/05-16:15:20 Process.Affinity :3 (0x00000003)
Note 1: not printed if Processor.Count =1

This sample log shows a computer with one hyperthreading processor (ie. 2 logical processors) . Citect is set to run on both processors, which is not recommended. See Q3781 to set the affinity to a single processor.

Processor Information Description

PageSize: Page size and the granularity of page protection and commitment. (Internal Use Only)

Processor.Number Number of logical processors. 2 or more indicates multiple processors or hyperthreading is enabled

Processor.ActiveMask Mask representing the set of processors configured into the system. Bit 0 is processor 0; bit 31 is processor 31.

System.Affinity: is a bitmask representing which logical CPUs are present on the machine. In all current version of Windows, the logical CPUs are numbered 0, 1, 2, and so on. On a single physical CPU machine without hyper-threading, only the lower bit in systemAffinityMask will be set, resulting in the value 1. On a single physical CPU machine with hyper-threading, or a dual physical CPU machine without hyper-threading, both lower bits will be set, and
systemAffinityMask will be 1+2=3. A dual physical CPU machine with hyper-threading would show systemAffinityMask as 1+2+4+8=15.

Process.Affinity: process affinity mask would tell you how many logical CPUs are available to your process.

Each bit in a binary value signifies a separate processor, numbered 0 to 31. For example, 0000 0000 0000 0000 0000 0000 0000 0101 indicates processors 0 and 2 are enabled but processor 1 is not in use. Only one bit should be set for ProcessAffinity for Citect. See KB Article Q3781 Permanently Setting the Processor Affinity for an Application in Windows NT or 2000 

Affinity, Processor, imagecfg