Посібник по промисловим мережам
Складаєьться з полів
Поле | Розмір | Призначення |
---|---|---|
APDU header | 10 або 12 байт (відповідь про помилку) | S7 заголовок |
param | залежить від номера функції | блок параметрів |
data | блок даних, у свою чергу включає: - заголовок даних - корисне навантаження |
Типи заголовків:
1 - PrepareReadRequest, PrepareWriteRequest, ConstructUpload, ConstructDoUpload, ConstructEndUpload, ConstructEndUpload, Stop, Start, CopyRAMtoROM, NegPDUlengthRequest, DeleteProgramBlock, ConnectPLCS7online
2 -
3 - ConstructReadResponse, ConstructBadReadResponse, ConstructWriteResponse,
7 - BuildAndSendPDU
Позиція | Призначення | можливі значення |
---|---|---|
0 | 0x32 | |
1 | Header type | 1,2,3 або 7, заголовки типів 2 та 3 довжиною в 2 байти |
2,3 | unknown | наразі невідомо. Можливо, його можна використовувати для довгих чисел? |
4,5 | sequence number | Це можна використовувати, щоб переконатися, що отримана відповідь відповідає запиту з тим же номером |
6,7 | length of parameters | довжина параметрів, які слідують за цим заголовком |
8,9 | length of data | довжина даних, які слідують за параметрами |
10,11 | error code | присутні лише в заголовках типу 2 і 3. Це містить інформацію про помилку. |
typedef struct {
uc P; /* allways 0x32 */
uc type /* Header type, one of 1,2,3 or 7. type 2 and 3 headers are two bytes longer. */
uc a,b; /* currently unknown. Maybe it can be used for long numbers? */
us number; /* A number. This can be used to make sure a received answer */
/* corresponds to the request with the same number. */
us plen; /* length of parameters which follow this header */
us dlen; /* length of data which follow the parameters */
uc result[2]; /* only present in type 2 and 3 headers. This contains error information. */
} PDUHeader;
Position | meaning | possible values |
---|---|---|
0 | номер функції | |
інші | залежить від номера функції |
1 - PGCommunication 1 - communication with programming device (PG) (default in Libnodave) 2 - OPCommunication 2- communication with operator panel (OP)) 3- S7BasicCommunication 3 - communication with another CP
S5DB 0x01
S5SB 0x02
S5PB 0x04
S5FX 0x05
S5FB 0x08
S5DX 0x0C
S5OB 0x10
OB - ‘8’ ( 56
)
DB - ‘A’ (0x41
,65
)
SDB - ‘B’ (0x42
,66
)
FC - ‘C’ (0x43
,67
)
SFC - ‘D’ (0x44
,68
)
FB - ‘E’ (0x45
,69
)
SFB - ‘F’ (0x46
,70
)
0x3
System info of 200 family0x5
System flags of 200 family0x6
analog inputs of 200 family0x7
analog outputs of 200 family0x80
direct peripheral access0x81
0x82
0x83
0x84
data blocks0x85
instance data blocks0x86
not tested0x87
don’t know what it is28
S7 counters29
S7 timers30
IEC counters (200 family)31
IEC timers (200 family)0x86
system data area ?0
just the raw memoryПід час читання або запису значень поле даних саме по собі складається із:
Заголовок:
{
0x12, 0x0a, 0x10,
0x02, /* 1=single bit, 2=byte, 4=word */
0,0, /* length in bytes */
0,0, /* DB number */
0, /* area code */
0,0,0 /* start address in bits */
};
Байт | Значення | |
---|---|---|
0 | 0x04 (READ) або 0x05 (Write) | |
1 | 0 | |
2 | 0x12 | |
3 | 0x0a | |
4 | 0x10 | |
5 | 0x02 | 1=single bit, 2=byte, 4=word (AI,AO) |
6 | 0 | length in bytes, byteCount / 256 |
7 | 0 | length in bytes, byteCount & 0xff |
8 | 0 | DB number, DBnum / 256 |
9 | 0 | DB number, DBnum & 0xff |
10 | 0 | area code |
11 | 0 | start address in bits, start & 0xff; |
12 | 0 | start address in bits, (start / 0x100) & 0xff |
13 | 0 | start address in bits, start / 0x10000 |
13 |
Параметри
Байт | Значення |
---|---|
0 | 0x04 |
1 | 0 |
Параметри
Байт | Значення |
---|---|
0 | 0x05 |
1 | 0 |
Параметри
Position | meaning | possible values |
---|---|---|
0 | номер функції | |
інші | залежить від номера функції |
Параметри
Position | meaning | possible values |
---|---|---|
0 | номер функції | |
інші | залежить від номера функції |
Параметри
Position | meaning | possible values |
---|---|---|
0 | номер функції | |
інші | залежить від номера функції |
Параметри
Байт | Значення |
---|---|
0 | 0x1D |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
5 | 0 |
6 | 0 |
7 | 0 |
8 | 9 |
9 | 0x5f |
10 | 0x30 |
11 | 0x41 (blockType) |
12 | 48 |
13 | 48 |
14 | 48 |
15 | 48 |
16 | 49 |
17 | 65 (‘A’) |
Параметри
Байт | Значення |
---|---|
0 | 0x1e |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
5 | 0 |
6 | 0 |
7 | 1 (uploadID) |
Параметри
Байт | Значення |
---|---|
0 | 0x1f |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
5 | 0 |
6 | 0 |
7 | 1 (uploadID) |
uc paDelete[]= {
0x28,0,0,0,0,0,0,0xFD,0,
0x0a,0x01,0x00,
'0','C', //Block type in ASCII (0C = FC)
'0','0','0','0','1', //Block Number in ASCII
'B', //Direction?
0x05, //Length of Command
'_','D','E','L','E' //Command Delete
};
paDelete[19] = 'B'; //This is overriden by sprintf via 0x00 as String seperator!
Параметри
Position | meaning | possible values |
---|---|---|
0 | номер функції | |
інші | залежить від номера функції |
Параметри
Байт | Значення |
---|---|
0 | 0x29 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
5 | 0 |
6 | 9 |
7 | ‘P’ |
8 | ‘_’ |
9 | ‘P’ |
10 | ‘R’ |
11 | ‘O’ |
12 | ‘G’ |
13 | ‘R’ |
14 | ‘A’ |
15 | ‘M’ |
Параметри
Байт | Значення |
---|---|
0 | 0x28 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
5 | 0 |
6 | 0 |
7 | 0xFD |
8 | 0x00 |
9 | 9 |
10 | ‘P’ |
11 | ‘_’ |
12 | ‘P’ |
13 | ‘R’ |
14 | ‘O’ |
15 | ‘G’ |
16 | ‘R’ |
17 | ‘A’ |
18 | ‘M’ |
Параметри
Байт | Значення |
---|---|
0 | 0x28 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
5 | 0 |
6 | 0 |
7 | 0xfd |
8 | 0 |
9 | 2 |
10 | ‘E’ |
11 | ‘P’ |
12 | 5 |
13 | ‘_’ |
14 | ‘M’ |
15 | ‘O’ |
16 | ‘D’ |
17 | ‘U’ |
Домовленість про довжину PDU length
Байт | Значення |
---|---|
0 | 0xF0 |
1 | 0 |
2 | 0 |
3 | 1 |
4 | 0 |
5 | 1 |
6 | 3 (maxPDUlength / 0x100) |
7 | 0xC0 (maxPDUlength % 0x100) |