用户登陆 用户注册
您的位置:首页> 技术文章>内容正文
S7-200 PLC PPI协议
[正文]:通过硬件和软件侦听的方法,分析plc内部固有的ppi通讯协议,然后上位机采用vb编程,遵循ppi通讯协议,读写plc数据,实现人机操作任务。
这种通讯方法,与一般的自由通讯协议相比,省略了plc的通讯程序编写,只需编写上位机的通讯程序资源s7-226的编程口物理层为rs-485结构,siemens提供microwin软件,采用的是ppi(point to point)协议,可以用来传输、调试plc程序。
在现场应用中,当需要plc与上位机通讯时,较多的使用自定义协议与上位机通讯。
在这种通讯方式中,需要编程者首先定义自己的自由通讯格式,在plc中编写代码,利用中断方式控制通讯端口的数据收发。
采用这种方式,plc编程调试较为烦琐,占用plc的软件中断和代码资源,而且当plc的通讯口定义为自由通讯口时,plc的编程软件无法对plc进行监控,给plc程序调试带来不便。
siemens s7-200plc的编程通讯接口,内部固化的通讯协议为ppi协议,如果上位机遵循ppi协议来读写plc,就可以省略编写plc的通讯代码。
如何获得ppi协议?可以在plc的编程软件读写plc数据时,利用第三个串口侦听plc的通讯数据,或者利用软件方法,截取已经打开且正在通讯的端口的数据,然后归纳总结,解析出ppi协议的数据读写报文。
这样,上位机遵循ppi协议,就可以便利的读写plc内部的数据,实现上位机的人机操作功能。
软件设计系统中测控任务由siemens s7-226plc完成,plc采用循环扫描方式工作,当定时时间到时,执行数据采集或pid控制任务,完成现场的信号控制。
计算机的监控软件采用vb编制,利用mscomm控件完成串口数据通讯,通讯遵循的协议为ppi协议。
ppi协议西门子的ppi(point to point)通讯协议采用主从式的通讯方式,一次读写操作的步骤包括:首先上位机发出读写命令,plc作出接收正确的响应,上位机接到此响应则发出确认申请命令,plc则完成正确的读写响应,回应给上位机数据。
这样收发两次数据,完成一次数据的读写[5]。
其通讯数据报文格式大致有以下几类:1、读写申请的数据格式如下:sd le ler sd da sa fc dasp ssap du fcs ed  sd:(start delimiter)开始定界符(68h)le:(length)报文数据长度ler:(repeated length)重复数据长度sd: (start delimiter)开始定界符(68h)sa:(source address)源地址,指该地址的指针,为地址值乘以8da:(destination address)目标地址,指该地址的指针,为地址值乘以8fc:(function code)功能码dsap:(destination service access point)目的服务存取点ssap:(source service access point)源服务存取点du:(data unit)数据单元fcs:(frame check sequence)校验码ed:(end delimiter)结束分界符(16h)报文数据长度和重复数据长度为自da至du的数据长度,校验码为da至du数据的和校验,只取其中的末字节值。
在读写plc的变量数据中,读数据的功能码为 6ch,写数据的功能码为 7ch。
2、plc接收到读写命令,校验后正确,返回的数据格式为 e5h3、确认读写命令的数据格式为:sd sa da fc fcs ed  其中sd为起始符,为10hsa为数据源地址da为目的地址fc为功能码,取5chfcs为sa+da+fc的和的末字节ed为结束符,取16hppi协议的软件编制在采用上位机与plc通讯时,上位机采用vb编程,计算机采用ppi电缆或普通的485串口卡与plc的编程口连接,通讯系统采用主从结构,上位机遵循ppi协议格式,发出读写申请,plc返回相应的数据。
程序实现如下:1、串口初始化程序:     mscomm1.commport = 1     mscomm1.settings = "9600,e,8,1"     mscomm1.inputlen = 0     mscomm1.rthreshold = 1mscomm1.inputmode = cominputmodebinaryppi协议定义串口为以二进制形式收发数据,这样报文的通讯效率比ascii码高。
2、串口读取数据程序,以读取vb100数据单元为例:dim str_read(0 to 32) ‘定义发送的数据为字节为元素的数组。
str_ read (32) = &h16 ‘相应的数组元素赋值,按照以下格式:str_ read (29) = (100*8) \ 256   ‘地址为指针值,先取高位地址指针str_ read (30) = (100*8) mod 256 ‘取低位地址指针str_ read (24) = 1      ‘读取的数据长度(byte的个数)for i=4 to 30    temp_fcs = temp_fcs + str_read(i)next istr_read(31)= temp_fcs mod 256 ‘计算fcs校验码,其它数组元素赋值省略。
68 1b 1b 68 2 0 6c 32 1 0 0 0 0 0 e 0 0 4 1 12 a 10 2 0 1 0 1 84 0 3 20 8b 16 plc返回数据 e5 后,确认读取命令,发送以下数据:10 2 0 5c 5e 16然后上位机vb程序接受到以下数据:68 16 16 68 0 2 8 32 3 0 0 0 0 0 2 0 5 0 0 4 1 ff 4 0 8 22 78 16首先识别目标地址和源地址,确认是这次申请的返回数据,然后经过校验检查,正确后解析出第26号数据(&h22)即为vb100字节的数据。
3、串口写入数据程序,以写vb100数据单元为例:dim str_write(0 to 37) ‘定义发送的数据为字节为元素的数组。
str_write (37) = &h16   ‘相应的数组元素赋值,按照以下格式str_write (35) = &h10   ‘要写入的数据值(*************有误)68 20 20 68 2 0 7c 32 1 0 0 0 0 0 e 0 5 5 1 12 a 10 2 0 1 0 1 84 0 3 20 0 4 0 8 c b9 16 plc返回数据 e5 后,确认写入命令,发送以下数据:10 2 0 5c 5e 16然后上位机vb程序接受到以下数据:68 12 12 68 0 2 8 32 3 0 0 0 0 0 2 0 1 0 0 5 1 ff 47 16这是plc正确接收并写入信息的返回数据。
4、串口接收程序:在数据接收程序中,利用vb中mscomm控件,一次接收缓冲区中的全部数据,存放到数组形式的暂存单元中,然后分析每个元素的值,得到读写的数据。
dim rcv_array() as bytedim dis_array as stringdim rcv_len as longrcv_array = mscomm1.input ‘取出串口接收缓冲器的数据。
rcv_len = ubound(rcv_array)redim temp(0 to ubound(rcv_array))for i = 0 to rcv_lendis_array = dis_array & hex(rcv_array (i)) & " "next itext1.text = dis_array ‘接收到的数据送显示。
在程序的读写过程中,一次最大可以读写222个字节,目前给出的数据读写为整数格式。
数据类型 str_ read(27)    s 04h    sm 05h    i 81h    q 82h    m 83h    v 84h  以上程序,是以读写plc的v变量区为例,利用ppi协议还可以读写s7-200plc中的各种类型数据,包括i、q、sm、m、v、t、c、s等数据类型,能够直接读出以上变量中的位、字节、字、双字等,其中读位变量时,是读取该位所在的字节值,然后上位机自动识别出该位的值。
按照读写的数据类型,其中str_ read(27)的值各不同:在控制系统中,plc与上位计算机的通讯,采用了ppi通讯协议,上位机每0.5秒循环读写一次plc。
plc编程时,将要读取的检测值、输出值等数据,存放在plc的一个连续的变量区中,当上位机读取plc的数据时,就可以一次读出这组连续的数据,减少数据的分次频繁读取。
当修改设定值等数据时,进行写数据的通讯操作。



网站首页 培训课程 维修指南
技术文章 家电专栏 供应信息
求购信息 培训资讯 展会信息
电脑专栏 教程下载 资料下载
常用软件 PLC教程 PLC资料
变频伺服 低压电器 维修资料
人机界面 自控仪表 工控机类
文章标题: 搜文章
中国工控资源网手机版 2012
电话:010-67577139 13811659603
培训咨询QQ:657167934 471895637 销售咨询QQ:623769457
联系邮箱:zggkzyw@163.com
 京ICP备11002135号
报时(2026-04-04 05:12:52) 流量统计