Посібник по промисловим мережам
Складаєьться з полів
| Поле | Розмір | Призначення |
|---|---|---|
| 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 access0x810x820x830x84 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) |