PPI协议,还有高级PPI协议,是一个主从设备协议。主设备向从属设备发出请求,从属设备作出应答。在网络中,可安装30多台从属设备。该协议没有公开。有人通过通信侦听的方法,对通信过程进行分析,已大体弄清PPI协议的内容,并已在互联网公布。有了协议,使用VB、VC等编程平台,去编写计算机与S7-200的通信程序时,在PLC方就不必编写有关通信程序,比使用自由协议当然要简单得多。以下根据有关分析,摘其要点说明如下:
(1)通信过程。
在PPI网上,计算机与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收到此确认后,执行计算机所发送的通信命令,并向计算机返回相应数据。
它的通信过程要往复两次,比较麻烦,但较严谨,不易出错。
提示:如为读命令,情况将如上所述。但如为写或控制命令,PLC收到后,经校验,如无
算机发送数据E5H,作出初步应答;另一方面不需计算误,一方面向计算机发送数据E5H,作出初步应答;另一方面不需计算机确认,也将执行所发命令。但当收到计算机确认信息命令后,会返回有关执行情况的信息代码。
(2)命令格式。
计算机向PLC发送命令的一般格式如下:
其中,
SD(Start Delimiter):开始定界字符,占1个字节,为68H;
LE(Length):数据长度,占1个字节,标明报文以字节计,从DA到DU的长度;
Ler(Repeated Length):重复数据长度,同LE;
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。
(3)命令类型。
1)读命令。读命令的长度都是33个字节。字节0~21,都是相同的,为681B 1B 68(DA)(SA)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时,双字。建议用02,即读字节。这样,一个字节或多个字节都可用。
字节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、SA及FC与命令含义相同。但SD为PLC地址,DA为计算机地址。此外,
字节16:数据块占用的字节数,即从字节21到校验和前的字节数。一条数据时,字,为06;双字,为08;其他为05。
字节22:数据类型,读字节为04。
字节23、24:读字节时,为数据个数,单位以位计,1个字节为08;2个字节为10(十六进制计),余类推。
字节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个字节)(www.daowen.com)
返回码为
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
这里黑体字993456分别为VB100、VB101、VB103的值。
2)写命令。写一个字节,命令长为38个字节,字节0~21为
68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
写一个字,命令长为39个字节,字节0~21为
68 21 21 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
写一个双字数据,命令长为41个字节,字节0~21为
68 23 23 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
字节22~30,为写入数据的长度、存储器类型、存储器偏移量。这些与读数据的命令相同。字节33如果写入的是位数据,这一字节为03,其他则为04。
字节34写入数据的位数,01:1位,08:1字节,10H:1字,20H:1双字。
字节35到字节40为校验码、结束符。
如果写入的是位、字节数据,字节35就是写入的值,字节36为00,字节37为校验码,字节38为16H、结束码。如果写入的是字数据(双字节),字节35,字节36就是写入的值,字节37为校验码,字节38为16H、结束码。如果写入的是双字数据(四字节),字节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 BF 16
如写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
如写VD100=12345678,其命令为
68 23 23 68 02 00 7C 32 01 00 00 00 00 00 0E 00 08 05 01 12 0A 10 06 00 01 00 01 84 00 03 20 0004002012345678 E016
注意以上诸黑体数字的含义!
以上命令如执行成功,则返回
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-200 CPU从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状态。
但计算机再发确认报文(10025C 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
到此,才算完成这个通信过程。
如PLC CPU模块上的模式开关处于STOP位置,则不能执行此命令。PLC返回E9,计算机再发确认报文(10025C 5E 16)后,将返回如下数据:
68 11 11 68 00 02 08 32 03 00 00 00 00 00 02 00 00 80 01 28 02 EC 16。
提示:以上介绍的不是西门子发布的正式通信协议,还有其他内容。但多带有一些猜测的成分。建议用本章第3节的VB例子程序或用其他通信监听程序,再继续进行些测试。这样,将弄清更多的通信协议细节。但有了上述协议,对建立PLC监控系统基本也够用了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。