Siemens S7 Driver I/O Addressing
The syntax of the S7 memory addresses and the legal ranges for each of the supported PLCs are as follows:
The syntax for memory addresses takes one of 3 forms:
- [Area][Byte Address].[Bit Index]
- [Area][Data Size: B, W or D][Starting Byte Address]
- [Data Block Number DBx].DB[Data Size: B, W, X, or D][Starting Byte Address]
Memory Area | Area Prefix | Notes |
---|---|---|
Input | E (or I) | |
Output | A (or Q) | |
Memory | M | |
Special Memory | S | S7-200 ONLY |
Variable Storage | V | S7-200 ONLY |
Timer | T | |
Counter | Z (or C) | |
Data Blocks | DBx DBy | |
Peripheral Input | PE (or PI) | |
Peripheral Output | PA (or PQ) | |
Analog Input | AE (or AI) | S7-200 ONLY |
Analog Output | AA (or AQ) | S7-200 ONLY |
Local | L | |
Flags | F | Not supported in S7-200 |
Notes and Examples:
The "PLC Type" selection on the Options tab is used only to determine what types of addresses the driver allows us to request, remembering that the driver really only differentiates between S7 200 & all other S7 types.
Typically, most information is read from and written to data blocks (type DB). These are the individual memory areas in the PLC that represent variables of the individual function block instances in the PLC program, along with the global data for the program.
Addresses of DB type values in the PLC will follow the format of the PLC program with which VTScada is communicating. Note that the addressing format for accessing both global data blocks and instance data blocks is the same with only the data block number and location within that block changing.
To access a variable within a data block, you must know a minimum of three things about it:
- The data block number.
- The data type of the variable within the data block.
- The starting byte number within the data block for the variable you want to access.
Putting these three elements together, the format of a data block address becomes:
DBx.DByz
Where:
- x is the data block number
- y is the data type and may be one of the following four values:
- X – bit
- B – unsigned byte
- W – unsigned word (2 bytes)
- D – unsigned double word (4 bytes)
- z is the starting byte number for the variable within the block. The starting byte number can be determined using the manufacturers supplied PLC programming software to examine the contents of the data blocks.
For example, if you have a data block #440 with a integer value that starts at the first byte of the block, you would address this variable as:
DB440.DBW0
For a double word starting at byte 23 in the same block, you would use:
DB440.DBD23
Alternatively, if you have a floating point value located at byte 45 of data block #10, you can address this as:
DB10.DBD45/FLOAT
Note that in this case VTScada will initially read the data as a double word (DBD45) and then convert it to a float using the /FLOAT qualifier.
This same methodology can also be used to change the unsigned short and long integers read from the PLC into signed using the qualifiers /SWORD and /SDWORD respectively. For example, to read a signed short integer from block #5 starting at byte #21, use address:
DB5.DBW21/SWORD
When reading bit data types, an additional address component to specify the bit number must also be added to the address in the form:
DBx.DBXz.b
Where b defines the bit number to read from byte z.
For example, to read bit 5 from byte 41 of data block 109, use address:
DB109.DBX41.5