fieldbusbook

Посібник по промисловим мережам

S7 TCP/IP

Протокол S7

APDU

Складаєьться з полів

Поле Розмір Призначення
APDU header 10 або 12 байт (відповідь про помилку) S7 заголовок
param залежить від номера функції блок параметрів
data   блок даних, у свою чергу включає:
- заголовок даних
- корисне навантаження

APDU Header

Типи заголовків:

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;

Param

Position meaning possible values
0 номер функції  
інші залежить від номера функції  

Функції

Communication types

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)

Області памяті (Area)

Read/Write

Під час читання або запису значень поле даних саме по собі складається із:

Заголовок:

{
	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    

FuncRead (0x04)

Параметри

Байт Значення
0 0x04
1 0

FuncWrite (0x05)

Параметри

Байт Значення
0 0x05
1 0

Download

FuncRequestDownload (0x1A)

Параметри

Position meaning possible values
0 номер функції  
інші залежить від номера функції  

FuncDownloadBlock (0x1B)

Параметри

Position meaning possible values
0 номер функції  
інші залежить від номера функції  

FuncDownloadEnded (0x1C)

Параметри

Position meaning possible values
0 номер функції  
інші залежить від номера функції  

Upload

FuncStartUpload (0x1D)

Параметри

Байт Значення
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’)

FuncUpload (0x1E)

Параметри

Байт Значення
0 0x1e
1 0
2 0
3 0
4 0
5 0
6 0
7 1 (uploadID)

FuncEndUpload (0x1F)

Параметри

Байт Значення
0 0x1f
1 0
2 0
3 0
4 0
5 0
6 0
7 1 (uploadID)

DeleteBlock

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!

FuncInsertBlock (0x28)

Параметри

Position meaning possible values
0 номер функції  
інші залежить від номера функції  

Control

Stop

Параметри

Байт Значення
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’

Start

Параметри

Байт Значення
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’

CopyRAMtoROM

Параметри

Байт Значення
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’

NegPDUlengthRequest

Домовленість про довжину PDU length

Байт Значення
0 0xF0
1 0
2 0
3 1
4 0
5 1
6 3 (maxPDUlength / 0x100)
7 0xC0 (maxPDUlength % 0x100)