This library contains function associated with S7 addressing. Functions are provided to set, get and delete the addressing for a dpe
09/07/2014 Marco Boccioli
09/07/2014 Marco Boccioli
01/08/2014 Marco Boccioli
12/11/2012 Marco Boccioli
12/11/2012 Marco Boccioli
13/09/2011 Marco Boccioli
_fwPeriphAddressS7_set | ( | string | dpe, | |
dyn_anytype | addressConfig, | |||
dyn_string & | exceptionInfo | |||
) |
Set the S7 addressing Note: This function should not be called directly. Call the fwPeriphAddress_set instead.
dpe | input, data point element to configure | |
addressConfig | input, object containing address configuration details | |
exceptionInfo | output, details of any exceptions are returned here |
int fwPeriphAddressS7_parseInt | ( | string | parsedString, | |
int | errCode = EXC_S7PARSEINT , |
|||
int | startPos = 0 , |
|||
int | length = 0 | |||
) |
private void fwPeriphAddress_parseS7Address_DBx | ( | string | addr | ) |
Parse the DBx part of the address, throwing exceptions as necessary
private void fwPeriphAddress_parseS7Address_main | ( | string | addr | ) |
Allowed patterns {T,Z}y {DBx.DBX , M , E , I , A , Q}y[.z] {DBx.DB, M , E , I , A , Q}{B,W,D}y {DBx.DB, M}DyF
Note that "DB*y" are supposed to be already truncated to "B*y" and bit-included "Qy.z" are converted to "Q#y.z" (actually "Q#y"), and "DBXy.z" into "X#y.z" (actually "X#y"). similarly Ty and Zy were changed to T::y and Z::y
In short: the "addr" will always have two letters: either padded with "#" on 2nd char, or DBX truncated to BX
private errClass throwS7Exception | ( | int | errCode, | |
string | errTxt = "" | |||
) |
fwPeriphAddress_checkS7Parameters | ( | dyn_string | dsParameters, | |
dyn_string & | exceptionInfo | |||
) |
Check if data is Ok to set a S7 address
The address is generally a dot-separated string, with:
There may also be the symbolic addressing. Again, the first item (before the dot) is the connection name, while the second has some specific formatting.
It may also be a timer or a counter, in which name there are again only 2 items.
Alarm addresses ("TestS7.:1:2:3") are not supported.
Here are a couple of examples:
MyS7Connection.DB498.DBB512:200 - data block 498, start at byte 512, take a blob, and extract 200 bytes; the connection is defined as "MyS7Connection" inside WinCC OA
MyS7Connection.DB1.DBX30.3 - data block 1, start at byte 30, take bit 3 in "MyS7Connection"
MyS7Connection.T5 - timer 5
MyS7Connection.Z3 - counter 3
dsParameters | parameters used to set the _address config (see constants definition) | |
exceptionInfo | for any error. If a parameter is incorrect, exceptionInfo is not empty ! |
_fwPeriphAddressS7_get | ( | string | dpe, | |
dyn_anytype & | addressConfig, | |||
bool & | isActive, | |||
dyn_string & | exceptionInfo | |||
) |
Get the S7 addressing Note: This function should not be called directly. Call the fwPeriphAddress_get instead.
dpe | input, data point element to read | |
addressConfig | output, object containing address configuration details | |
isActive | output, TRUE is addressing is active, else FALSE | |
exceptionInfo | output, details of any exceptions are returned here |
_fwPeriphAddressS7_delete | ( | string | dpe, | |
dyn_string & | exceptionInfo | |||
) |
Delete the S7 addressing Note: This function should not be called directly. Call the fwPeriphAddress_delete instead.
dpe | input, data point element to configure | |
exceptionInfo | output, details of any exceptions are returned here |
_fwPeriphAddressS7_initPanel | ( | string | dpe, | |
dyn_string & | exceptionInfo | |||
) |
Initialise the graphics of the address panel symbol. Note: This function should only be called from fwPeriphAddres.pnl.
dpe | input, data point element to configure | |
exceptionInfo | output, details of any exceptions are returned here |
string _fwPeriphAddressS7_setValuesFromRef | ( | string | reference, | |
string | sSystemName | |||
) |
Set S7 panel values Note: This function fills the panel fields in funciton of the REFERENCE selected by the user in several fields of the fwPeriphAddressS7.pnl
reference | input, user introduced reference | |
sSystemName | input, system name |
int _fwPeriphAddressS7_getTransfo | ( | ) |
Recuperate transformation type Note: This function recuperates the selected trasnforamtion type selected by the user in several fields of the fwPeriphAddressS7.pnl
string _fwPeriphAddressS7_encodeAddress | ( | ) |
Encode the S7 address Note: This function encodes the S7 address introduced by the user in several fields of the fwPeriphAddressS7.pnl
int _fwPeriphAddressS7_getDir | ( | int | directionModeS7, | |
int | receiveMode | |||
) |
Get the S7 IO mode Note: This function gets the IO mode from the user selection in the _fwPeriphAddressS7.pnl. new constants are defined to the In/out modes
directionModeS7 | input, direction mode (Output, Input, Input/Output) | |
receiveMode | input, type mode (TSPP, Polling, Single Query) |
_fwPeriphAddressS7_setIOMode | ( | int | io, | |
int | im, | |||
string | sSystemName | |||
) |
Set the S7 IO mode Note: This function sets the IO mode from the user selection. There is the case "1" which is also used to set up the INPUT mode when user introduce an PLC peripherial INPUT from the address field.
io | input, direction mode (Output, Input, Input/Output) | |
im | input, type mode (TSPP, Polling, Single Query) | |
sSystemName | input, system name |
!!pollgroup
const string fwPeriphAddress_TYPE_S7 = "S7" |
const unsigned fwPeriphAddress_S7_LOWLEVEL = 11 |
const unsigned fwPeriphAddress_S7_SUBINDEX = 12 |
const unsigned fwPeriphAddress_S7_START = 13 |
const unsigned fwPeriphAddress_S7_INTERVAL = 14 |
const unsigned fwPeriphAddress_S7_POLL_GROUP = 15 |
const string UN_S7_FORMAT_BIT = "DBX" |
const string UN_S7_FORMAT_BYTE = "DBB" |
const string UN_S7_FORMAT_WORD = "DBW" |
const string UN_S7_FORMAT_DOUBLE = "DBD" |
const unsigned UN_S7_ADDR_MODE_INOUT_TSPP = 6 |
const unsigned UN_S7_ADDR_MODE_INOUT_POLL = 7 |
const unsigned UN_S7_ADDR_MODE_INOUT_SQ = 8 |
const string S7_PLC_INT_DPTYPE_CONN = "_S7_Conn" |
const int fwPeriphAddress_S7_TYPE_MIN = 700 |
const int fwPeriphAddress_S7_TYPE_UNDEFINED = 700 |
const int fwPeriphAddress_S7_TYPE_INT16 = 701 |
const int fwPeriphAddress_S7_TYPE_INT32 = 702 |
const int fwPeriphAddress_S7_TYPE_UINT16 = 703 |
const int fwPeriphAddress_S7_TYPE_BYTE = 704 |
const int fwPeriphAddress_S7_TYPE_FLOAT = 705 |
const int fwPeriphAddress_S7_TYPE_BIT = 706 |
const int fwPeriphAddress_S7_TYPE_STRING = 707 |
const int fwPeriphAddress_S7_TYPE_UINT32 = 708 |
const int fwPeriphAddress_S7_TYPE_DATETIME = 709 |
const int fwPeriphAddress_S7_TYPE_BLOB = 710 |
const int fwPeriphAddress_S7_TYPE_MAX = 710 |
const int EXC_S7ADDR_WRONG_NUM_PARAM = 1 |
const int EXC_S7ADDR_WRONG_ADDRTYPE = 2 |
const int EXC_S7ADDR_WRONG_DRIVER_NUMBER = 3 |
const int EXC_S7ADDR_WRONG_DATA_TYPE = 4 |
const int EXC_S7ADDR_WRONG_MODE = 5 |
const int EXC_S7ADDR_WRONG_INTERVAL = 6 |
const int EXC_S7ADDR_WRONG_ACTIVE = 7 |
const int EXC_S7ADDR_WRONG_LOWLEVEL = 8 |
const int EXC_S7ADDR_EMPTY = 10 |
const int EXC_S7ADDR_TOO_MANY_COLONS = 11 |
const int EXC_S7ADDR_BAD_NUM_OF_GROUPS = 12 |
const int EXC_S7ADDR_BAD_DATALEN = 13 |
const int EXC_S7ADDR_DBX_BADZBIT = 21 |
const int EXC_S7ADDR_DBX_BADDBXY = 22 |
const int EXC_S7ADDR_DBX_BADYNUMBER = 23 |
const int EXC_S7ADDR_DBX_BADDBX = 24 |
const int EXC_S7ADDR_DBX_BADXNUMBER = 25 |
const int EXC_S7ADDR_DBX_BADTZNUMBER = 26 |
const int EXC_S7ADDR_DBX_FNOTALLOWED = 27 |
const int EXC_S7PARSEINT = 99 |