第4章S7-200PLC的通信功能4.1PPI通讯4.1.1概述•PPI协议是S7-200PLC中最基本的一种通信方式,通过S7-200CPU自身的端口(port0或Port1)即可完成,是S7-200CPU默认的通信协议。•PPI是一种主-从协议,协议定义了主站和从站,网络中主站向网络中的从站发出请求,从站只能对主站发出的请求做出响应,自己不能发出请求。主站也可以对网络中其他主站的请求做出响应。•S7-200的通信口为RS-485接口,PC/PPI多主站电缆用于计算机与S7-200之间的通信,有RS-232C/PPI和USB/PPI两种电缆。•PPI网络连接示意图如图10-1所示,要求如下:(1)每个网段至多32个网络节点;(2)每个网段最长50米(不用中继器),可通过中继器扩展网络,最多9个中继器;(3)网络可包含127节点;(4)网络可包含32个主站;(5)网络总长9600米。一个网段一个网段一个网段50米最多1000米50米图4-1PPI网络连接示意图•PROFIBUS连接器和电缆将CP通信卡和S7-200通信口连接。•不同主/从站之间也可以通过PROFIBUS连接器和电缆进行连接通信。•PPI是主/从协议,默认情况下网络中的S7-200CPU均为从站,其他CPU、SIMATIC编程器或文本显示器(例TD400C等)为主站。•PPI网络包括单主站PPI网络和多主站PPI网络。图4-2多主站PPI网络结构图4.1.2使用网络读写指令实现PPI通信•如果在用户程序中使用了PPI主站模式,一些S7-200CPU在RUN模式下可以做主站,它们可以用网络读(NETR,NetRead)和网络写(NETW,NetWrite)指令读写其他CPU中的数据。•S7-200PLC之间的PPI通信可以使用PROFIBUS网线直接连接CPU上PORT0或PORT1,然后在CPU内调用网络读写指令即可实现。•1.网络读写指令NETR/NETW•网络读取(NETR)指令开始一项通讯操作,通过指定的端口(PORT)从远程设备收集数据。网络写入(NETW)指令开始一项通讯操作,通过指定的端口(PORT)向远程设备写入数据。•每一个NETR/NETW指令可从/向远程站读取/写入16个字节信息。网络读写指令是通过TBL参数表来指定报文头,TBL参数表如表4-1所示。字节700DAE0错误代码1远程地址2远程站的数据区指针(I、Q、M、V)3456数据长度7数据字节08数据字节1...22数据字节15表4-1网络读写指令TBL错误代码如表4-2所示:错误代码定义0无错误1远程站响应超时2接受错误:奇偶校验错,响应时帧或校验出错3离线错误:相同的站地址或无效的硬件引发冲突4队列溢出错误:激活超过8个的NETR/TREW指令5通信协议错误:没有使用PPI协议(SMB30)而调用NETR/NETW指令6非法参数:NETR/NETW表中包含非法或无效的值7没有资源:远程站点正在忙中(上装或下载程序)8第7层错误:违反应用协议9信息错误:错误的数据地址或数据长度10保留表4-2错误代码表2.设定通信协议•在程序的开始必须设定通信协议。SMB30用于配置通信端口0(Port0),SMB130用于配置通信端口1(Port1),此两个特殊寄存器字节的含义如表10-3所示。•表10-3中:pp(校验选择)、d(每个字符的数据位)、bbb(自由口波特率)均为自由口通信时才需要设定的参数,在PPI通信时都设置为0即可。•mm协议选择3.设定NETW和NETR的TBL参数表图4-3网络写指令NETW图4-4网络读指令NETR4.通信参数设定•CPU通信端口的设定可以通过STEP7Micro/WIN软件的“系统块(SystemBlock)”选项来进行。•最高地址(HighestAddress•波特率•地址间隔刷新系数(GapUpdateFactor)4.1.3使用向导实现PPI通信图4-5“网络读/写操作”对话框•单击图4-5“下一项操作”按钮,进入第二项“网络读/写操作”对话框•单击“下一步”,出现分配存储区对话框•接下来,要调用向导生成的子程序来实现数据的传输,主站程序及注释如图10-6所示。图4-6主站主程序4.2自由口通信•S7-200CPU的串行通讯口可由用户程序控制,这种操作模式称为自由口模式。自由口通信是一种基于RS485硬件基础上,允许应用程序控制S7-200CPU的通信端口,以实现一些自定义通信协议的通信方式。•当选择了自由口模式,程序可以使用接收中断、发送中断、发送指令(XMT)和接收指令(RCV)来控制通讯操作。在自由口模式下,通讯协议完全由程序控制。SMB30(用于端口0)和SMB31(如果CPU有两个端口,则用于端口1)用于选择波特率和奇偶校验。•S7-200CPU处于自由口通信模式时,所有的通信任务和信息定义均需由用户编程实现。•只有CPU处于RUN模式时,才能进行自由端口通讯。4.2.1自由口模式下的发送和接收指令•S7-200CPU的自由口通信的数据字节格式必须含有一个起始位、一个停止位,数据位长度为7位或8位,校验位和校验类型(奇、偶校验)可选。S7-200CPU的自由口通信定义方法为将自由口通信操作数传入特殊寄存器SMB30(端口0)和SMB130(端口1)进行端口定义,自由口通信操作数定义如表4-4所示。•自由口通信模式主要使用XMT(发送)和RCV(接收)两条指令及相应的特殊寄存器。•XMT指令利用数据缓冲区指定要发送的字符,用于向指定通信口以字节为单位发送一串数据字符,一次最多发送255个字节。表4-5XMT指令的缓冲区格式•RCV指令可以接收一个或多个字符,最多有255个字符,这些字符存储在缓冲区中。•RCV指令的缓冲区格式如表4-6所示。当超界或奇偶校验错时,接收信息功能自动终止。必须为接收信息功能操作定义一个启动条件(x或z)和一个结束条件(y,t或最大字符数)。•协议支持使用字符中断控制来接收数据。表4-6RCV指令的缓冲区格式4.2.2自由口通信举例1.自由口发送实例要求:记录定时中断次数,将计数值转化为ASCII字符串,再通过CPU224XP的Port0发送到计算机串口,计算机接受并利用超级终端显示与S7-200CPU通信的内容。(1)PLC编程规定缓冲区为VB100到VB114,使用数据块进行缓冲区定义,如图4-7所示,16#0D和16#0A用于计算机的超级终端显示需要。图4-7组态数据块•主程序如图4-8所示,根据I0.3状态初始化端口1为自由口通信。•SBR_0程序如图4-9所示,定义端口0为自由口,初始化定时中断。图4-8自由口通信主程序图4-9SBR_0子程序•SBR_1子程序如图4-10所示,用于定义端口0为普通PPI从站通信口。•图4-10SBR_1子程序•INT_0程序如图4-11所示,对定时中断计数并从端口0发送计数值•图4-11INT_0子程序图4-10SBR_1子程序图4-11INT_0子程序(2)超级终端设置超级终端(HyperTerminal)是Windows操作系统提供的通信测试程序,本例用来监测计算机和S7-200CPU之间的串口通信。超级终端组态步骤如下:1)执行Windows菜单命令“开始”“附件”“通信”“超级终端”,为要新建的连接输入连接名称。2)选择连接时要使用的串口。3)设置串口通信参数并保存连接,注意此处设置要与PLC程序中对应。4)使用超级终端接收S7-200CPU发送的信息。图4-12超级终端接受显示2.自由口接收实例要求S7-200CPU从端口0接收计算机发送的字符串,并在信息接收中断服务程序中把接收到的第一个字节传送到CPU输出字节QB0上显示。(1)PLC编程主程序如图4-13所示,根据I0.3状态初始化端口1为自由口通信。图4-13自由口通信主程序•SBR_0子程序如图4-14所示,用于定义端口0为自由口,初始化接收指令。图4-14SBR_0程序•SBR_1子程序如图4-15所示,定义端口0为普通PPI从站通信口。•INT_0中断子程序如图4-16所示,在QB0输出接收到的第一个字节。(2)配置超级终端•打开前面建立的超级终端链接,进入属性窗口,点击“ASCII码设置”按钮,在弹出的ASCII码设置窗口中,勾选“以换行符作为发送行末尾”和“本地回显键入的字符”两项。4.3MODBUS通信•Modbus通信协议是Modicon公司提出的一种报文传输协议,它广泛应用于工业控制领域,并已经成为一种通用的行业标准。不同厂商提供的控制设备可通过Modbus协议连成通信网络,从而实现集中控制。4.3.1Modbus报文格式•Modbus地址通常是包含数据类型和偏移量的5个或6个字符值。第一个或前两个字符决定数据类型,最后的四个字符是符合数据类型的一个适当的值。(1)Modbus主站寻址Modbus主设备指令支持下列Modbus地址:00001至09999是离散输出(线圈);10001至19999是离散输入(触点);30001至39999是输入寄存器(通常是模拟量输入);40001至49999是保持寄存器。(2)Modbus从站寻址•Modbus地址与S7-200地址对应关系如表4-7所示。000001Q0.0000002Q0.1000003Q0.2……000127Q15.6000128Q15.7010001I0.0010002I0.1010003I0.2……010127I15.6010128I15.7030001AIW0030002AIW2030003AIW4……030032AIW62040001HoldStart040002HoldStart+2040003HoldStart+4……04xxxxHoldStart+2x(xxxx-1)•Modbus通信协议有ASCII和RTU(远程传输单元)两种报文传输模式。(1)ASCII模式ASCII模式采用LRC(纵向冗余校验)方式进行校验,其报文格式如表4-8所示。表4-8ASCII模式的报文格式(2)RTU模式•RTU模式的报文格式如表4-9所示。•地址•功能码:Modbus功能代码,1个字节;Modbus协议支持的功能码共16条(1~16),其中西门子ModbusRTU协议库支持最常用的8条,如表4-10所示;•信息数据•CRC:循环冗余校验,两个字节。功能码描述1读取单个/多个线圈的实际输出状态。功能1返回任意数量输出点的接通/断开状态(Q)。2读取单个/多个线圈的实际输入状态。功能2返回任意数量的输入点的接通/断开状态(I)。3多个保持寄存器。功能3返回V存储器的内容。保持寄存器在Modbus下是字类型,在一个请求中最多可读120个字。4读单个/多个输入寄存器,返回模拟输入值。5写单个线圈(实际输出)。功能5将实际输出点设置为指定值。该输出点不是被强制,用户程序可以重写由Modbus的请求而写入的值。6写单个保持寄存器。功能6写一个单个保持寄存器的值到S7-200的V存储区。15写多个线圈(实际输出)。功能15写多个实际输出值到S7-200的Q映像区。起始输出点必须是一个字节的开始(如Q0.0或Q2.0),并且要写得输出的数量是8的倍数。这是Modbus从站协议指令的限定。这些点不是被强制,用户程序可以重写由Modbus的请求而写入的值。16写多个保持寄存器。功能16写多个保持寄存器到S7-200的V区。在一个请求中最多可写120字。表4-10西门子ModbusRTU协议库支持最常用的8条功能码表4-9RTU模式的报文格式•RTU模式下,报文中的每个8位字节被转化为两个16进制字符,然后以字节为单位进行传输,并采用CRC(循环冗余校验)方式进行校验。•目前支持Modbus通信的DCS系统和过程仪表大都采用基于串行接口的ModbusRTU模式,西门子提供了针对西门子PLCModbusRTU通信的协议库。•如果要在西门子PLC上实现ModbusASCII模式通信,可根据相关协议规定利用自由口通信模式自主编程实现。4.