西门子S7-200PLC自由口与PPI通讯的区别 点击:4222 | 回复:4



零下二度

    
  • 精华:1帖
  • 求助:5帖
  • 帖子:340帖 | 6056回
  • 年度积分:13
  • 历史总积分:24395
  • 注册:2011年5月08日
发表于:2012-07-08 13:53:09
楼主
1、PPI协议是专门为西门子S7-200PLC开发的通信协议。西门子S7-200 CPU的通信口(Port0、Port1)支持PPI通信协议,西门子S7-200的一些通信模块也支持PPI协议。Micro/WIN与CPU进行编程通信也通过PPI协议。
 
编程时西门子PPI电缆使用方法

  进入 STEP7 Micro/WIN 编程软件中的“设置 PG/PC 接口”,选中“ PC/PPI cable ( PPI )”条目后点击“ Properties… ”按钮。

  在“ Local Connection ”的下拉框中选中“ USB ”选项。

  在“ PPI ”的 Station Parameters 设置中进行如下设置: Address : 0 , Timeout : 1s

 在“ PPI ”的 Network Parameters 设置中根据你的需要可选择以下通信协议的任何一个:

 高级 PPI   :勾选 Advanced PPI 复选框;

   多主站 PPI :勾选 MultiplemasterNetwork 复选框;

   普通 PPI   :不勾选以上二个复选框,这是默认的选项。

 !注:要与西门子最新推出的 S7-200CN CPU 正常编程通信,必须满足以下条件:

(1) 、使用编程软件 STEP 7-Micro/WIN V4.0 SP3 以上版本

(2)、将编程软件的工作环境设置为中文状态



零下二度

  • 精华:1帖
  • 求助:5帖
  • 帖子:340帖 | 6056回
  • 年度积分:13
  • 历史总积分:24395
  • 注册:2011年5月08日
发表于:2012-07-08 13:53:30
1楼
S7-200 CPU的PPI网络通信是建立在RS-485网络的硬件基础上,因此其连接属性和需要的网络硬件设备是与其他RS-485网络一致的。
S7-200 CPU之间的PPI网络通信只需要两条简单的指令,它们是网络读(NetR)和网络写(NetW)指令。
PPI协议是西门子的专用协议,其具体详情是不公开的,一般用于西门子设备之间的通讯。
 
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)源地址,指该地址的指针,为地址值乘以8
DA:(Destination Address)目标地址,指该地址的指针,为地址值乘以8
FC:(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接收到读写命令,校验后正确,返回的数据格式为 E5H
3、确认读写命令的数据格式为:
SD SA DA FC FCS ED 
其中SD为起始符,为10H
SA为数据源地址
DA为目的地址
FC为功能码,取5CH
FCS为SA+DA+FC的和的末字节
ED为结束符,取16H

零下二度

  • 精华:1帖
  • 求助:5帖
  • 帖子:340帖 | 6056回
  • 年度积分:13
  • 历史总积分:24395
  • 注册:2011年5月08日
发表于:2012-07-08 13:53:42
2楼
PPI协议的软件编制
        在采用上位机与PLC通讯时,上位机采用VB编程,计算机采用PPI电缆或普通的485串口卡与PLC的编程口连接,通讯系统采用主从结构,上位机遵循PPI协议格式,发出读写申请,PLC返回相应的数据。程序实现如下:
1、串口初始化程序:
     MSComm1.CommPort = 1
     MSComm1.Settings = "9600,e,8,1"
     MSComm1.InputLen = 0
     MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary
PPI协议定义串口为以二进制形式收发数据,这样报文的通讯效率比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 I
Str_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 Byte
Dim Dis_Array As String
Dim RCV_Len As Long
RCV_Array = MSComm1.Input ‘取出串口接收缓冲器的数据。
RCV_Len = UBound(RCV_Array)
ReDim Temp(0 To UBound(RCV_Array))
For i = 0 To RCV_Len
Dis_Array = Dis_Array & Hex(RCV_Array (i)) & " "
Next i
Text1.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的数据时,就可以一次读出这组连续的数据,减少数据的分次频繁读取。当修改设定值等数据时,进行写数据的通讯操作

零下二度

  • 精华:1帖
  • 求助:5帖
  • 帖子:340帖 | 6056回
  • 年度积分:13
  • 历史总积分:24395
  • 注册:2011年5月08日
发表于:2012-07-08 13:53:49
3楼
2、自由口:
S7-200 CPU的通信口可以设置为自由口模式。选择自由口模式后,用户程序就可以完全控制通信端口的操作,通信协议也完全受用户程序控制。
S7-200 CPU上的通信口在电气上是标准的RS-485半双工串行通信口。此串行字符通信的格式可以包括:
一个起始位
7或8位字符(数据字节)
一个奇/偶校验位,或者没有校验位
一个停止位
自由口通信速波特率可以设置为1200、2400、4800、9600、19200、38400、57600或112500。
凡是符合这些格式的串行通信设备,理论上都可以和S7-200 CPU通信。
自由口模式可以灵活应用。Micro/WIN的两个指令库(USS和Modbus RTU)就是使用自由口模式编程实现的。

dustfjm

  • 精华:0帖
  • 求助:1帖
  • 帖子:4帖 | 168回
  • 年度积分:0
  • 历史总积分:303
  • 注册:2015年8月13日
发表于:2016-08-10 09:12:20
4楼

就是我读plc数据想同时读两条数据,但每次都只返回一个数据!

比如我相读取

QB0,MB0

我发送的数据

68 27 27 68 02 00 6C 32 01 00 00 00 00 00 18 00 00 04 01 12 0A 10 02 00 01 00 00 82 00 00 00 12 0A 10 02 00 01 00 00 83 00 00 00 21 16

PLC返回E5

我再发送确认指令

10 02 00 5C 5E 16

plc返回

68 16 16 68 00 02 08 32 03 00 00 00 00 00 02 00 05 00 00 04 01 FF 04 00 08 05 5B 16

但这只读到了qb0,mb0读不到,

求助   帮我看下是哪里的问题

谢谢了



热门招聘
相关主题

官方公众号

智造工程师