Runtime > Debug Runtime > The Kernel > DriverTrace
DriverTrace

Lists the commands and information issued to a driver by Citect SCADA. It can be useful in debugging a driver, for example, it can help determine why a driver is unable to fully initialize.

Note: Running syslog traces can draw heavily on a CPU usage. monitor the impact on CPU performance when implementing a large number of traces.

Syntax

DriverTrace [OFF|CMDS|VER[BOSE]|ERR[OR]|PORT=<name>|MASK=<xxxxxxxx>|DUMP]

Where:

blank

Returns the current DriverTrace settings. This can be useful to determine the current mask or port settings before implementing a new trace. Just key DriverTrace into the Kernel and hit the return key to view the current settings.

OFF

Turns the DriverTrace off.

CMDS

Turns the DriverTrace on, but does not display the contents of the data buffer.

Note: Specific driver commands need to be enabled with the Kernel command DriverTrace[Mask], or the DriverTraceMask INI parameter.

VER[BOSE]

Turns the DriverTrace on, and displays the contents of the data buffer.

Note: Specific driver commands need to be enabled with the Kernel command DriverTrace[Mask], or the DriverTraceMask INI parameter.

ERR[OR]

Turns the DriverTrace on, but only traces DCBs with errors (DCBs are the internal data structures used for communication between the I/O server and a driver).

PORT

Allows traces to be limited to a particular driver port, by defining a port name. The default setting, PORT=*, will trace all ports.

MASK

A 4-byte hexadecimal number that represents a bit mask used to either include or exclude driver commands from the DriverTrace. The driver commands and their values are as follows:

Command

Bit Position

CTDRV_INIT

00000001

CTDRV_OPEN

00000002

CTDRV_INIT_CHANNEL

00000004

CTDRV_INIT_UNIT

00000008

CTDRV_READ

00000010

CTDRV_WRITE

00000020

CTDRV_CONVERT

00000040

CTDRV_CANCEL

00000080

CTDRV_CPU

00000100

CTDRV_DATABASE

00000200

CTDRV_STOP_UNIT

00000400

CTDRV_STOP_CHANNEL

00000800

CTDRV_CLOSE

00001000

CTDRV_FORMAT

00002000

CTDRV_STATS

00004000

CTDRV_DEBUG

00008000

CTDRV_INFO

00010000

CTDRV_STATUS_UNIT

00020000

CTDRV_INIT_CARD

00040000

CTDRV_UPDATE_INFO

00080000

CTDRV_UI_READ

00100000

CTDRV_UI_WRITE

00200000

CTDRV_EXIT

00400000

CTDRV_UNITACTIVATES 01000000
CTDRV_SUBSCRIPTIONS 02000000
CTDRV_EVENTUPDATES 04000000

CTDRV_STATUS_DISCONNECT

40000000

For example, the value you would use to include only the CTDRV_OPEN, CTDRV_INIT_UNIT and CTDRV_READ commands would be: 0000001A.

Most users will want to exclude the CPU function call, as this happens often. Do this by setting a mask of 7ffffeff.

The default <mask> is 7FFFFFFF.

DUMP

Lists the driver control blocks (DCBs) on the I/O Server awaiting delivery to a driver and actioning from the driver.

Examples

-> 07f96fdc Cmd: 03 CTDRV_INIT_UNIT   ,MOCKOPC, Port: PORT1, Unit: IODev1
(UR0,N1)
| 07f96fdc UnitType: 0 (0x0), UnitAddr: 0 (0x0), BitWidth: 1, UnitCount: 16
<-07f96fdc Cmd: 03 CTDRV_INIT_UNIT    ErrDriver 23 (0x17) and took 0ms
-> 07ff1584 Cmd: 04 CTDRV_READ        ,DISKDRV, Port: DISKDRV, Unit: IODevDisk
(UR1,N2)
| 07ff1584 UnitType: 1 (0x1), UnitAddr: 1 (0x1), BitWidth: 16, UnitCount: 5,
RawType: INTEGER
<+07ff1584 Cmd: 04 CTDRV_READ         ErrDriver 0 (0x0) and took 0ms
<+07ff1584 UnitType: 1 (0x1), UnitAddr: 1 (0x1), BitWidth: 16, UnitCount: 5,
RawType: INTEGER
<+07ff1584 000:      1      0      0      0      5
~> 00000000 Cmd: 25 CTDRV_SUBSCRIBE   ,MOCKOPC, Port: PORT1, Unit: IODev1
(UR0,N1)
>-00000000 SUBSCRIBE Tag=Tag4 UpdateRate=500ms
~< 000003e9 Cmd: 26 CTDRV_EVENTUPDATES,MOCKOPC, Port: PORT1, Unit: IODev1
(UR0,N1)
<-000003e9 DS Event UPDATE_MODE=ALL Tag=Tag4 RawValue=0x00
Timestamp=<time_not_set> RawQual=0x0000 DSError=0 (0x0)

Explanation of arrows used above

-> Flags information going down to the driver

|

<- Flags information back from the driver straight away

<+ Flags information back from the driver asynchronously (i.e. after some

small time delay)

~> Flags subscription based calls into the driver

>-

~< Flags subscription based updated from the driver

<-

(URx,Ny) addition to UNIT and Data driver traces

UR stands for Unit Record number and is 0 based, so a value of 3 would be the 4th device in the IODevice form. N stands for the (Network) Number in the IODevice form. The use of this is to distinguish between redundant units which may use the same unit name. Thus the trace will positively confirm which unit is in use.

See Also

Published June 2018