S7-200 PPI通信协议
PPI通信协议是一种主从式的通信协议,上位机即PC机为主,PLC为从。通信开始由计算机发起,PLC予以响应。
1)、计算机按通信任务,用一定格式,向PLC发送通信命令。
2)、PLC收到命令后,进行命令校验,如无误,则向计算机发送数据E5H或F9H,作出初步应答。
3)、计算机收到初步应答后,再向PLC发送SD DA SA FC FCS ED确认命令。
这里,SD为起始字符,为10H;DA为目的,即PLC地址02H;SA为数据源,即计算机地址00H;FC为功能码,取5CH;FCS为SA、DA、FC和的256余数,为5EH;末字节ED为结束符,也是16H。如按以上设定的计算机及PLC地址,则发送10、02、00、5C、5E、及16,6个字节的十六进制数据,以确认所发命令。
4)、PLC收到此确认后,执行计算机所发送的通信命令,并向计算机返回相应数据。它的通信过程要往复两次才完成一次的通信,比较麻烦,但较严谨,不易出错。
SD LE LER SD DA SA FC DASP SSAP DU FCS ED
SD:(Start Delimiter)开始定界符,占1字节,为68H
LE:(Length)报文数据长度,占1字节,标明报文以字节计,从DA到DU的长度;
LER:(Repeated Length)重复数据长度,同LE
SD: (Start Delimiter)开始定界符(68H)
DA:(Destination Address)目标地址,占1字节,指PLC在PPI上地址,一台PLC时,一般为02,多台PLC时,则各有各的地址;
SA:(Source Address)源地址,占1字节,指计算机在PPI上地址,一般为00;
FC:(Function Code)功能码,占1字节,6CH一般为读数据,7CH一般为写数据
DSAP:(Destination Service Access Point)目的服务存取点,占多个字节
SSAP:(Source Service Access Point)源服务存取点,占多个字节
DU:(Data Unit)数据单元,占多个字节
FCS:(Frame Check Sequence)占1字节,从DA到DU之间的校验和的256余数;
ED:(End Delimiter)结束分界符,占1字节,为16H
命令类型
1)读命令 读命令长度都是33个字节。字节0~21,都是相同的,为:“68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10”。而从字节22开始,将根据读取数据的软器件类型及地址的不同而不同。
字节22,表示读取数据的单位。为01时,1bit;为02时,1字节;为04时,1字;为06时,双字。
字节23,恒0。
字节24,表示数据个数。01,表示一次读一个数据。如为读字节,最多可读208个字节,即可设为DEH。
字节25,恒0.
字节26,表示软器件类型。为01时,V存储器;为00时,其它。
字节27,也表示软器件类型。为04时,S;为05时,SM;为06时,AI;为07时AQ;为1E时,C;为81时,I;为82时,Q;为83时,M;为84时,V;为1F时,T。
字节28、29及30,软器件偏移量指针(存储器地址乘8),如:VB100,存储器地址为100,偏移量为800,转换成十六进制就是320H,则字节28到30这三个字节就是00、03、及20.
字节31、32为FCS和ED。
返回数据 与发送命令格式数据相同,但包含一条数据。具体是:
SD LE LER SD DA SA FC DASP SSAP DU FCS ED
这里的SD、LE、Ler、SD、SA及FC与命令含义相同。但SD为PLC地址,DA为计算机地址。此外:
字节16:数据块占用的字节数,即从字节21到校验和前的字节数。一条数据时:字,为06;双字,为08;其它为05.
字节22:数据类型,读字节为04.
字节23、24:读字节时,为数据个数,单位以位计,1个字节为08;2个字节为10(16进制计),余类推。
字节25及其后至校验和之前,为返回所读值。
如读VB100开始3个字节,其命令码为:
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 03 00 01 84 00 03 20 8D 16(红色02为字节为单位,03为读3个字节)
返回码:
68 18 18 68 00 02 08 32 03 00 00 00 00 00 02 00 07 00 00 04 01 FF 04 00 18 99 34 56 8B 16
(这里红色99、34、56分别为VB100、VB101、VB102的值)
2)写命令 写一个字节,命令长为38个字节,字节0~字节21为:
68 20 20 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
写一个字,命令长为39个字节,字节0~字节21为:
68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
写一个双字数据,命令长为41个字节,字节0~21为:
68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
字节22~字节30,为写入数据的长、存储器类型、存储器类型、存储器偏移量。这些与读数据的命令相同。字节32如果是写入的是位数据,这一字节为03,,其它则为04.
字节34写入数据的位数:01:1位,08:1字节,10H:1字,20H:1双字。
字节35~字节40为校验码、结束符。
如果写入的是位、字节数据,字节35就是写入的值,字节36为00,字节37为校验码,字节38为16H、结束码。如果写入的是字数据(双字节),字节35、字节36就是写入的值,字节37为校验码,字节38为16H、结束码.如果写入的是双字数据(4字节),字节35~字节38就是写入的值,字节39为校验码,字节40为16H、结束码。
如写入QB0=FF,其命令为:
68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 02 00 01 00 00 82 00 00 00 00 04 00 08 FF 86 16
如写入VB100=12,其命令如下:
68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 02 00 01 00 01 84 00 03 20 00 04 00 08 12 BF16
如写入VW100=1234,其命令如下:
68 21 21 68 02 00 7C 32 01 00 00 00 00 00 0E 00 06 05 01 12 0A 10 04 00 01 00 01 84 00 03 20 00 04 00 10 12 34 FE 16
请注意以上红体字的含义。
以上命令如执行成功,则返回
68 12 12 68 00 02 08 32 03 00 00 00 00 00 02 00 01 00 00 05 01 FF 47 16
否则返回:
68 0F 0F 68 00 02 08 32 02 00 00 00 00 00 00 00 00 85 00 C3 16
3)STOP命令 stop命令使得S7-200CPU从run状态转换到stop状态(此时cpu模块上的模式开关应处于run或term位置)。计算机发出如下命令:
68 1D 1D 68 02 00 6C 32 01 00 00 00 00 00 10 00 00 29 00 00 00 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16
PLC返回:E9,同时PLC即转为stop状态。
但计算机再发确认报文(10 02 5C 5E 16)
PLC将返回:68 10 10 68 00 02 08 32 03 00 00 00 00 00 01 00 00 00 00 29 69 16
到此,才算完成这个通信过程。
4)RUN命令 run命令使得S7-200 cpu从stop状态转换到run状态(此时cpu模块上的模式开关应处于run或term位置)。PC机发出如下命令:
68 21 21 68 02 00 6C 32 01 00 00 00 00 00 14 00 00 28 00 00 00 00 00 00 FD 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16
PLC返回:E9,同时PLC即转为RUN状态。
但计算机再发确认报文(10 02 5C 5E 16)
PLC将返回:68 10 10 68 00 02 08 32 03 00 00 00 00 00 01 00 00 00 00 29 69 16
至此,才算完成这个通信过程。
注:以上介绍的不是西门子发布的正式通信协议,还有其它内容。但多带有一些猜测的成分。建议结合些通信的例子来进行测试。