|
The new Syntax has the following motivation
| Bytes | TIA Name | Suitable Java Equivalent | Supported S7 PLCs |
|---|---|---|---|
| 1 bit | BOOL | boolean | all |
| 1 | BYTE, CHAR, SINT | byte | all |
| 1 | USINT | short | all |
| 2 | WORD, INT | short | all |
| 2 | UNIT | int | all |
| 4 | DWORD, DINT | int | all |
| 4 | UDINT | long | all |
| 4 | REAL | float | all |
| 4 | TIME | ? | ? |
| n+2 | STRING (equals STRING[254]) / STRING[n] | String | all |
Addressing is different for non-primitive and primitive types.
The general syntax for addressing primitive values in a Datablock is
%DB{db-number}.DB{bit-length-code}{byte-offset}(.{bit-offset})?
db-number: number of datablock
bit-length-code:
X - 1 bit
B - 8 bit / 1 byte
W - 16 bit / 2 byte
D - 32 bit / 4 byte
byte-offset: offset in byte to start of data block
bit-offset: offset in bit to start of bit |
For non primitive objects the (pointer?) notation from TIA is used which is
P#DB{db-number}.DBX{byte-offset}.{bit-offset}
Note, here, bit offset is not optional but usually always 0 |
Generally the TIA Syntax is used:
BOOL, INT, UINT, REAL
Furthermore the follwoing modifiers to the base types are used:
S = Short
D = Double
L = Long
Examples are:
SINT USINT DINT LREAL LINT ULINTtax |
Please see https://support.industry.siemens.com/tf/WW/en/posts/string-data-type/51621?page=0&pageSize=10
A short description of the syntax and intern format is found here
, or here https://support.industry.siemens.com/cs/mdm/109755202?c=94063831435&lc=en-WW
The following Syntax is valid and will be supported:
STRING[n] // String with max number of characters: n STRING // equivalent to STRING[254] |
Note that a 2 byte prefix is used, so n+2 bytes have to be read from the plc. The first byte represents the max length of the String, i.e., n above. The second one represents the actual length, i.e., the number of bytes to convert to string (starting from offset 2, then). All bytes represent ASCII Chars. |
I did not find any suitable information on how Strings are adressed, except that simple characters can be adressed similar to a byte array.
As it makes no sense at all to use a "width" identifier for the String, I suggest to use the syntax
%DB{block-id}.{byte-offset}:STRING[length]
%DB{block-id}.{byte-offset}:STRING |
where the second version refers to the first version with length 254.
This Synatx is motivated by the Syntax which TIA uses e.g. for markers ("%M4.1") where there is only one kind of datatype.
%DB3.DX4.1 %DB3.DX4.1:BOOL %DB3.DB4:INT %DB3.DB4:UINT %DB3.DW4:REAL |
https://support.industry.siemens.com/cs/mdm/109755202?c=69436189067&lc=en-WW
Data type | Absolute address | Example | Description |
|---|---|---|---|
BOOL | %DBn.DBXx.y | %DB1.DBX1.0 | Data bit 1.0 in DB1 |
BYTE, CHAR, SINT, USINT | %DBn.DBBy | %DB1.DBB1 | Data bit 1 in DB1 |
WORD, INT, UINT | %DBn. DBWy | %DB1.DBW1 | Data word 1 in DB1 |
DWORD, DINT, UDINT, REAL, TIME | %DBn.DBDy | %DB1.DBD1 | Data double word 1 in DB1 |