PSDIRECT Users Guide Rev 2.2.1
PSDIRECT Users Guide Rev 2.2.1
Contents
1 User information.......................................................................................................... 5
3.2.1 Step 3 – Install “Siemens H1 ISO transport” (Not used for TCP/IP).................................................... 8
1 User information
Type Detail
Manufacturer www.ProSCADA.com
Device name Siemens S5 and S7 PLCs
Communications method Direct DLL interface into driver poll cache MMF
1.2 Introduction
In large applications where CitectSCADA has to talk to many Siemens PLC’s, a need has
arisen to have a higher performance Siemens Driver interface. Simatic Net has a lot of
limitations on the number of PLCs it can connect to and also the performance of the
Siemens API has been an issue. CitectSCADA also needed a way to optimise the way
that it communicates to the PLCs, particularly if the user attempted to poll large
configurations of Function block instance DB’s directly (User Defined types).
The back-end server polls the data from the PLC’s at configurable intervals. The
back-end puts the data in a memory cache.
The front-end is a native CitectSCADA driver that reads the data from the cache
instantly with 0 delay (does not poll the PLC’s).
1. The Polling of the data is completely de-coupled from the rate at which the clients
are requesting it, which means the clients cannot choke up the IO server with
requests - no matter how badly the system is configured.
2. With a traditional CitectSCADA Driver, all polling is Dynamic & client driven. With
this driver each block of data has an individual poll time. This allows each block
of data to be optimised to poll as SLOW as is acceptable for that sub-application.
This then leaves more resources available for other data that needs to be faster.
For example: poll analog’s at 5 second interval, set-points & run-hours at 30 second
PSDIRECT driver for CitectSCADA
3. The data is already available when a client polls it and data is displayed immediately
without delay. For example popup screens open instantly with data from the cache.
4. The back-end polls raw blocks of data from the PLC. The front-end can then request
any data type from this one polled block. This results in substantial efficiencies
when you have many mixed data types in close address proximity. For example:
Siemens Instance DB’s (User Defined types) like the PID loop DB’s are very
complicated structures containing floats, words & bits. The CitectSCADA S7NT
driver would generate a poll for each data type whereas this driver would read the
information in one network poll block of bytes to be stored in the cache, the Front
end driver then processes a CitectSCADA Driver request for each data type from
the same cached data.
To setup Siemens Simatic Net on a PC and to test the communication can be very tedious.
Multiple IO servers have to be used to communicate to more than 20 PLC effectively.
The PSDIRECT driver will take 5 minutes to install. The driver works with any standard
10MB, 100MB or 1GB Ethernet card. To date more than 50 PLCs on a single system have
been tested with one standard 100Mb card. Multiple Ethernet cards can be used to
communicate to PLCs, however there are no real performance or reliability gains. The
driver works equally well sharing CitectSCADA, Windows workgroups, & Siemens ISO thru
1 Ethernet card. A good Ethernet switch handles different link speeds & network node
isolation & redundancy.
The PLC’s are the bottlenecks & the total Ethernet bandwidth used by the Ethernet card is
< 5% typically. This driver maximises the communication to all the PLC’s on you network
by implementing a multithreaded parallel polling strategy.
This driver supports up to 64 PLC’s on one Network. It has been proven on a system with
50 PLC’s & 80 000 IO.
PSDIRECT driver for CitectSCADA
Citect32.EXE
The flow of information in the driver starts at the network protocol “Siemens H1 ISO
Transport”. This protocol is supplied with the driver. No Siemens hardware or software is
required at the CitectSCADA side.
The Polling of Blocks of data from the PLC is performed by the hidden application
<xxx>SPOLL.EXE. This application is started whenever client applications request data.
On start-up, the last configuration file used is opened. The application copies the
configuration file into a memory mapped file (MMF/CACHE) and then updates all polled
data to the MMF.
The tag interface DLL SIXSTSR.DLL converts IO address strings into internal references to
find the data in the MMF.
The PSDirect.DLL is a standard CitectSCADA Array block driver which reads the tags using
Native PLC address references. This means you can configure an IO Server with a
minimal “Comms” project and run different tag projects on the Display Clients as per normal
CitectSCADA conventions.
PSDIRECT driver for CitectSCADA
3 Setup guide
3.2.1 Step 3 – Install “Siemens H1 ISO transport” (Not used for TCP/IP)
*This step is optional, depending on the protocols used to talk to the PLC’s, if you are
using TCP/IP you DO NOT Require the ISO transport – Please go to Section 4 Setting up
the driver.
Now you need to install the low level “Siemens H1 ISO transport”
4. Press “Add”
7. Press “OK”
PSDIRECT driver for CitectSCADA
9. Press “OK”
The Default configuration file will open, this includes 3 PLC’s an S5, S7 & TI.
Since you will probably be using an S7 select the S5 PLC & press delete, do the same for
the TI PLC
The S7 example configuration is setup to poll M0-M99; this address exists in all S7 PLC’s
so it should poll correctly without setting up a Step 7 program on the PLC.
Before setting addresses etc. please set the protocol type in the channel settings
• Open the channel settings to set the protocol – press the button
PSDIRECT driver for CitectSCADA
You have a choice between TCP/IP and ISO. If ISO is chosen then the ISO transport must
be installed (supplied with the driver).
• Set the PLC’s address, for ISO this is a 12 digit Hexadecimal MAC address, for
TCP/IP this is of the form 0.0.0.0
The read TSAP setting defaults to “R=0;S=2” which means read the CPU in Rack 0 Slot 2.
This is Correct for an S7-300. On a S7-400 with 2 slot power supply, meaning the CPU is
in Slot 3, this should be R=0;S=3. **Note the Slot is the slot number of the CPU, NOT the
CP 443 card!
***For the S7-200 PLC set the read TSAP to “CP243” because the S7-200 does not comply
with the rack & slot system.
Now “Reload” the configuration by pressing the button. This is IMPORTANT; always
reload any configuration change changes. The configurator works on the configuration file
on disk, the reload command loads that into memory, briefly interrupting the polling as it
does so
Now check that you have communications. The transmit and receive counters at the
bottom of the window should increment
The Serial S7 Driver uses a different Backend driver to the Ethernet however the
configuration is almost identical. The main difference is the Channel settings where you
setup the com port & baud rates. The Local MPI address is normally 1, if you have 2
SCADA’s on the network then you need to set SCADA to 1 & SCADAB to 2 (No PLC may
then use 2) & enable the Multi master setting.
PSDIRECT driver for CitectSCADA
** There is an example CitectSCADA project installed with the PSDIRECT Front end driver
in “C:\Program Files\Citect\CitectSCADA\PSDIRECT Sample”
Read more about it in The Appendices at the end of this document. The following is a
simple Fresh setup.
A:
Communications failure
The block is currently not in use, it is off poll, all the blocks on a backup
server should be in this state
This block is newly configured & is not currently being polled. You need
to reload the configuration
A: If using ISO protocol Check that the siemens ISO transport is installed, if you see
the message in the bottom window “failed to open ISO channel 1” then the ISO
transport is not correctly installed OR there may be a problem in the registry and the
driver is not using the correct Ethernet card.
The read TSAP setting defaults to “R=0;S=2” which means read the CPU in Rack 0
Slot 2. This is Correct for an S7-300. On a S7-400 with 2 slot power supply,
meaning the CPU is in Slot 3, this should be R=0;S=3. **Note the Slot is the slot
number of the CPU, NOT the CP 443 card!
Q: Why do I see messages like “No- Address Error DB15,W248” in the bottom window
of the configurator ?
A: This means that Citect is reading that address however this address is not
configured for polling.
• Note that this issue may occur with I & Q addresses where you have many small
non-contiguous poll blocks in the backend. What is occurring is that Citect is
aggregating address blocks. The only possible solution is to use the small
blocksize version of the front end driver- this means changing the Citect IO device
protocol from PSDIRECT1 to PSDIRECT6. This change may still not eliminate the
reporting of the errors however Citect will get valid data.
• You only see these errors when Citect tries to access the data, so seldom used
addresses may not be noticed.
***Note this only changes the edited version you need to “reload” to make it
active. Then you should see fewer address errors, you then need to Learn
addresses again. Read more
Q: How do I update the configuration after making changes ? Or why do newly added
blocks show a status
A: Save the file then Select File|Reload off the menu, or press
A: You need to make sure that the poll blocks exactly match the configuration in the
PLC. The PLC WILL NOT allow you to poll across an address for which no IO
cards exist. You need to break this up into smaller blocks. **Note Citect Does not
recommend writing directly to outputs for safety reasons.
The poll block ST0->ST200 must be defined in the driver poll configuration
Now if the driver loses communication to the PLC the Unit status will go bad &
CitectSCADA’s redundancy system will switch over to the backup IO Server
**Note the “AlwaysReturnNoError”=1 is intended for debugging only. When set you
will see correct values only if the driver is successfully polling, if not INVALID data
may be displayed & no redundancy failovers will occur.
• This driver polls as fast as the PLC allows, the PLC is the bottleneck(slow side), the
figures below are per PLC, the driver performance scales linearly per PLC.
• S7-315 CPU typically achieves 15-20 polls per second (We believe it is crippled)
• S7-416 CPU typically achieves up to 150 polls per second (10 x faster). This is with
2 IO Devices talking to the same PLC.
• A Vipa PLC typically achieves up to 40 polls per second with default settings, if
communications resources are increased this can reach 100+
PSDIRECT driver for CitectSCADA
• The driver has a Built in Limit of 100 polls per second per IO Device, so in some
cases you can get better performance by splitting your data into 2 IO Devices.
However we do not recommend this as, the spare PLC resources should be
reserved for Writing data & PLC-PLC communications & other Citect IO servers.
A: read the section about optimisation & try some of the following modifications at the
PLC side.
• Try to increase the PLC scan cycle by moving code to the Idle processing OB’s OR
process half the code each scan & thereby doubling the scan cycle.
• Try Increasing the PLC process time dedicated to communications this is in the
CPU Properties seen below
A: This is more complicated than an S7 Please read the Driver help file for Full
instructions. In addition there are example PLC programs in the backend
distribution in the PLC directory.
A: You are using more than one IO Channel device on the IO server, please put all IO
Devices including different PLC types under one single IO Channel object.
Q: I have redundant PLC’s can I configure redundancy at a lower level than the Citect
level ? i.e. use a single Citect IO device but 2 IP addresses in the backend.
A: Yes simply configure the second IP addresses & rack & slot in the Backup fields
PSDIRECT driver for CitectSCADA
7.1 CitectSCADA
CitectSCADA V5.41 or higher.
CitectSCADA V5.50 has the most installations at this time.
CitectSCADA V6.0 has been successfully tested
***NOTE When using the ISO protocol DO NOT install any siemens software on the
machine.
***NOTE Some problems have been encountered with Broadcom cards, recommend Intel
PSDIRECT driver for CitectSCADA
CitectHMI/SCADA Data
Address Format Type
Digital, Byte, INT, BCD, LONG,
DB<no>,<index>[.<bitno>] LONG_BCD, REAL, STRING
Digital, Byte, INT, BCD, LONG,
DI<no>,<index>[.<bitno>] LONG_BCD, REAL, STRING
A<index>[.<bitno>] INT, BYTE, Digital
Q<index>[.<bitno>] INT, BYTE, Digital
E<index>[.<bitno>] INT, BYTE, Digital
I<index>[.<bitno>] INT, BYTE, Digital
Digital, Byte, INT, BCD, LONG,
M<index>[.<bitno>] LONG_BCD, REAL, STRING
PA<index>[.<bitno>] INT, BYTE, Digital
PQ<index>[.<bitno>] INT, BYTE, Digital
PE<index>.<bitno> INT, BYTE, Digital
PI<index>.<bitno> INT, BYTE, Digital
T<index>(10ms) BCD (PLC s5time format)
T<index>(100ms) BCD (PLC s5time format)
T<index>(1s) BCD (PLC s5time format)
T<index>(10s) BCD (PLC s5time format)
Z<index> BCD
REAL (PLC s5time format - See note 1
TDB<no>,<index > below)
REAL (PLC s5time format - See note 1
TDI<no>,<index > below)
REAL (PLC s5time format - See note 1
TM<index > below)
Siemens STRING data type (See
SDB<no>,<index> note 5 below)
S7-200 V memory area see
V<index>[.<bitno>] S7200
Syntax:
The syntax is defined as follows (case insensitive)
DB<no> <index>
DI<no> <index>.<bit no>
<area>
Where:
DB or DI data block or instance block
<no> number of the data block or instance block
<area> A output
Q output
E input
I input
M bit memory
PE peripheral input
PI peripheral input
PA peripheral output
PSDIRECT driver for CitectSCADA
PQ peripheral output
<index> element number relative to start of block
<bitno> bit within the element number
NOTE:
1. Addressing format T, TDB, TDI, TM: When one of these address formats is used,
the Sseven driver will convert a time value (from CitectHMI/SCADA Real to
Siemens S5Time or vice versa) using the smallest time base it can fit in. Range: 0 -
9990.00 seconds. (0 <= Values < 0.01 will be truncated to 0 and Values > 9990.01
will generate an Alarm). Precision may suffer in the conversion, e.g. 10.01 will be
converted to 10.00 (1100 S5Time format).
2. Addressing: DB, DI, A, E, M, PA , PE, TDB, TDI, and TM are using byte
addressing. T, C, and Z are using word (two bytes) addressing. They are the same
as in STEP7.
3. STRING data type: CitectHMI/SCADA STRING data type is not the same as
Siemens' STRING data type. It is equivalent to Siemens' CHAR Array data type. A
NULL terminator (Siemens' BYTE data type, value = 0) is required. If Siemens'
STRING needs to be accessed accessed, use the SDB Address.
4. the TDB & TM S5 timer data types are supported, however note the following
caveat. If the tag data type is INT the value returned is in seconds, the address in
the PLC is a 16 bit int and arrays function normally. If the data type is REAL the
value is also in seconds & sub seconds but addresses must be on 4 byte
boundaries – skipping blank word addresses in the PLC CitectSCADA S7 Drivers.
5. S7 STRING data type is supported using the SDB address. There is a serious
limitation however, ONLY 1 STRING is supported per DB, or at least block size
apart. The Citect array size should be < the S7 Max string length. The values may
be written from Citect & the string length byte will be set by the driver. The string
will only read up to the max string length.
T Siemens Timer
C Siemens Counter
*Note: Siemens Timer & counters in TM & TDB memory IS supported
**An Additional Address the SW addresses is available for status & debugging please read
Using the Special Debug addresses
PSDIRECT driver for CitectSCADA
Data
Types Address Format CitectHMI/SCADA Data Type
DATA BCD / DIGITAL / INT / LONG / LONGBCD /
WORDS D<data block>:<word> REAL / STRING
DIGITALS D<data block>:<word>.<bit> DIGITAL
DATA BCD / DIGITAL / INT / LONG / LONGBCD /
WORDS DX<data block>:<word> REAL / STRING
DIGITALS DX<data block>:<word>.<bit> DIGITAL
Timer TDB<data block>:<word> INT,REAL
EXAMPLES:
Address D010:001.14
Address D0010:002
The Sinec TF system has an extra layer of abstraction that names memory objects to TF
names. Normally in CiTect projects these memory variables are arrays of 16 bit words. To
convert these addresses :
• Look in the TF configuration and find the Data block address of each TF array
• Search & replace the VARIABLE.DBF file with <TF array name> replace with
D<dbn>:<add DB offset to TF array index>.<bit>
To add these parameters to the CITECT.INI file use the following format
[PSDIRECT]
AlwaysReturnNoError=1
**Note setting the AlwaysReturnNoError to 1 like this is only useful for testing or
engineering purposes.
PSDIRECT driver for CitectSCADA
Check to see if there are any popup dialogs from CitectSCADA or the Driver
indicating a problem, if so write down the message displayed.
Open the kernel & View the Driver’s page
Check the “Driver Errors” & “Timeouts” counters
If these two counters are incrementing then CitectSCADA variables are addressing
variables not configured in the back-end driver.
Check which IO devices (PLC’s) are offline in CitectSCADA
Open the CitectSCADA kernel and go to the IO Servers page
The statuses on the left indicate what is happening on this IO server, the statuses on
the right indicate the status of the IO Server currently in use.
PSDIRECT driver for CitectSCADA
ST24 Reconnections Increments every time the driver attempts to reconnect after
the connection a failed. If this is going up, you have a bad
network
ST26 Poll recs per sec Poll rate for this PLC - useful for checking optimisation.
The rate in mission control should be the sum of these.
ST28 Disconnect Req’s Increments when PLC sends Disconnect Request. This
Means that your Network is OK but the CP143 setup is not.
The PLC is refusing connection requests.
ST12 Reconnections Increments every time the driver attempts to reconnect after
the connection a failed. If this is going up, you have a bad
network
ST13 Poll recs per sec Poll rate for this PLC - useful for checking optimisation.
The rate in mission control should be the sum of these.
ST14 Disconnect Req’s Increments when PLC sends Disconnect Request. This
Means that your Network is OK but the CP143 setup is not.
The PLC is refusing connection requests.
PSDIRECT driver for CitectSCADA
• In the file dialog select the user\<root project> directory and open
VARIABLE.DBF or _VARIABL.RDB
• Remember to Save & Reload to make the configuration active
2. After creating the Backend devices you can remove any address errors by selecting
“Learn Addresses” from the options menu. This only functions while Citect is running
and the Address errors are flooding the bottom window.
PSDIRECT driver for CitectSCADA
• Note that to make the new added, or stretched blocks active you need to save &
reload the configuration.
• When this is done there may still be address errors, select “Learn Addresses”
again & reload again.
• This process is not perfect you may still have to edit some manually
To achieve optimum performance you may still need to optimise the poll times of each
block (see next section). You should at least sort the poll blocks in excel to tidy up.
PSDIRECT driver for CitectSCADA
12 Communication Optimisation
Set points, Outputs, controls or any value that never changes in the PLC (only
changes when modified from CitectSCADA) can be setup so that they hardly use any
channel bandwidth at all. Set the polltime to a large value like 60 seconds. If a value
is written the driver automatically forces the block to update so the user does not
notice the slow poll times.
Prioritize your data; find out how fast the data changes in the PLC. Do not poll faster
than necessary especially while you are constructing your system. You can always
speed up certain blocks later once your system is fully configured. Generally analog
values can be polled slower e.g. 5 sec but Digital Inputs may need 1 sec.
PSDIRECT driver for CitectSCADA
• Setup the PLC with an IP address and ping to test from the CitectSCADA
• Check that you have transmits & receives and the status of the blocks goes good
The stress test writes huge amounts of data and reads it back comparing it to that written,
any mismatches increment the error counters.
PSDIRECT driver for CitectSCADA
14 Setting
Setting Up Heartbeat monitoring
The S7 driver continues polling normally when the PLC is in Stop mode resulting in frozen
values on the screen. To force #COM’s when the PLC is in stop mode requires
configuration of the Heartbeat monitoring feature..
For each IO device (Unit) configured, a parameter of the following form is entered into the
Citect.INI file
HeartBeatAddress_<devname>=<address>
Where <devname> is the name of the IO device in CitectSCADA and in the backend driver
And <address> is a PLC address of a variable that MUST change very 5 seconds at least if
the PLC is running. A simple way of achieving this is to increment an integer in OB1 of the
PLC scan cycle. ** The address format here is the same as the OPC server so you specify
W for Integer & D for longs etc.
Examples
HeartBeatAddress_S7PLC=MW0
HeartBeatAddress_PumpHouse=DB100,W44
15 S7 200 Setup
1/ Run the Micro Win Ethernet Wizard
2/ We recommend that the CP243 be installed in position 0
3/ Set the CP243’s Ethernet address
4/ Configure a New connection & set it as follows