《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 以单片机作为S7-200 PLC从站的PPI协议的设计
以单片机作为S7-200 PLC从站的PPI协议的设计
来源:微型机与应用2012年第17期
孟 强,梅大成,秦 勃,叶 强
(西南石油大学,四川 成都,610500)
摘要: 为了将单片机加入到SIEMENS S7-200系列PLC的PPI(点对点协议)通信网络中,就需要分析PPI通信协议格式。本文利用CommMonitor6.0(串口监视精灵)工具,监控PLC与PLC之间的通信,通过总结分析出其数据格式,然后编写相应的单片机C51程序,使PLC能够使用NetR/NetW(网络读写命令)与单片机进行数据交换。
关键词: PIC PLC 单片机 PPI NetR NetW
Abstract:
Key words :

摘  要: 为了将单片机加入到SIEMENS S7-200系列PLCPPI(点对点协议)通信网络中,就需要分析PPI通信协议格式。本文利用CommMonitor6.0(串口监视精灵)工具,监控PLC与PLC之间的通信,通过总结分析出其数据格式,然后编写相应的单片机C51程序,使PLC能够使用NetR/NetW(网络读写命令)与单片机进行数据交换。
关键词: PLC;单片机;PPI;NetR;NetW

 在工业控制领域,可编程逻辑控制器PLC(Programmable Logic Controller)以其可靠性高、抗干扰能力强,通用性强、灵活性好、功能齐全、编程简单、使用方便以及安装简便等特点而得到了广泛的应用。现代工业控制系统大都向着分散化、网络化和智能化方向发展,如何实现现场分散的控制设备的网络通信十分重要。
 西门子公司的S7-200系列PLC支持PPI、MPI、Profibus和自由口通信等多种通信方式。采用MPI协议需要相应的CP卡或MPI卡支持,如CP5511通信卡;若采用Profibus协议,则需要Profibus-DP模块EM277;若采用自由口方式,则在PLC中需要编写通信程序,占用PLC有限的程序存储空间,同时也难以保证在恶劣复杂环境下通信数据的正确可靠性;若采用PPI协议,只需在整个通信网络中选定1个PLC作为通信主站点,其他PLC都作为从站点,主站PLC通过NetR/NetW指令周期性地与从站PLC进行数据交换,这种通信方式非常简单可靠,得到了广泛的应用。
 在实际应用中通常又需要PLC能够与其他设备通信,本文以单片机串口通信为例,详细地分析了NetR/NetW指令的通信流程与数据格式,并设计出了单片机串口通信协议,使PLC能够使用NetR/NetW指令与单片机通信。
1 S7-200系列PLC网络读写指令分析
1.1 PPI协议简介

 PPI是西门子公司专门为S7-200系列PLC开发的通信协议,内置于S7-200 CPU中。PPI物理上基于RS485接口,通过屏蔽双绞线就可以实现PPI通信,是一种主-从通信协议。主站设备发送要求到从站设备,从站设备响应,从站本身不能主动发出信息。为了进行PPI通信,S7-200系列PLC专门配备了网络读指令及网络写指令,使用STEP 7-Micro WIN中的NetR/NetW Wizard可以很方便地配置网络通信。使用该向导可以编辑最多24条网络读写指令,每条网络读写指令最多能够读或者写16 B的数据。其核心是使用顺序控制指令,这样在任一时刻只有一条NetR/NetW指令有效。在主程序中必须用SM0.0指令来调用该向导生成的子程序,以保证它的正常运行。该子程序有3个参数:  
 (1)Timeout(超时)。0为不计时;1-36767为设置以秒为单位的超时延时时间。如果通信有问题的时间超出此延时时间,则会报告错误。
 (2)Cycle(周期)。所有网络读/写操作每完成一次切换状态。  
 (3)Error(错误)。0为无错误;1为出错,通过检查NetR/NetW指令缓冲区状态字节,可以获取错误代码。
1.2 PPI协议数据帧分析
 利用CommMonitor6.0工具监控单主站PLC之间的通信,可以获得4种不同的数据帧。
 (1)令牌帧:SD1,DA SA;
 (2)无数据字段的固定长度的请求帧或应答帧:SD2,DA SA FC FCS ED;
 (3)有可变数据字段的请求或应答帧:SD3,LE LER SD3 DA SA FC DU FCS ED;
 (4)短应答帧:SC。
 SD1~SD3为开始定界符,以区别不同类型的帧格式,SD1=0xDC,SD2=0x10,SD3=0x68;LE=LER,表示从DA至DU的数据长度;DA为目的地址,指示接收该帧的站;SA为源地址,指示发送该帧的站;FC为帧控制字节,包含用于该帧服务和优先权等的详细说明;DU为数据字段,包含有效的数据信息;FCS为帧校验字节,表示从DA到DU之间的校验和的256余数;ED为帧结束定界符(0x16);SC为单一字符(0xE5),用于从站的确认。
 当系统主站PLC上电运行后,在一定时间(即用户所设定的Timeout时间内)会进行通信网络初始化,首先生成令牌并初始化令牌环,由于是单主站系统,该主站将会一直持有该令牌。接着主站就会不断地搜索它管辖范围的从站,通常从用户所配置的第一条NetR/NetW指令的从站地址开始,搜索范围也由用户设定(一般为0~31)。主站首先发送请求帧10 DA SA FC FCS ED (FC功能码为49H,表示有回答要求的从站状态查询),从站正确接收到后将发送响应帧10 SA DA FC FCS ED (FC功能码为00H,表示应答肯定)。接着主站继续搜索下一个从站,一定时间内如果没有从站响应,则将继续进行下一个网络地址搜索。主站PLC一直重复循环此过程,并将从站状态信息记录下来,直到Timeout时间到,主站才开始真正执行由用户所配置NetR/NetW操作。
1.3 NetR指令分析
 由NetR/NetW指令向导
创建的指令,最多只能读取16 B的信息,而且指令是顺序执行的,完成一条读指令需要两次数据收发。在测试过程中,设定主站PLC地址为01,从站PLC地址为02,主站从PLC从站的VB100~VB115存储区读取16 B的通信过程如下:


 返回的有用数据为第25~第40字节的共16 B,第41字节为第4~第40字节的数据的校验和,而且第11、12字节的数据必须与主站读命令的第11、12字节保持一致。
这样经过两次收发数据,才能正确完成一次数据的读操作。
1.4 NetW指令分析
 (1)首先主站PLC发出写命令,数据格式为:68 2F 2F 68 02 01 6C 32 01 00 00 02 02 00 0E 00 14 05 01 12 0A 10 02 00 10 00 01 84 00 03 20 00 04 00 80 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF 30 16。其中,第6、11、12字节数据规则与NetR命令一致,第51字节数据为校验和,第35~50字节的数据为真正的要写入从站的有用数据。
 (2)从站PLC正确接收后,则作出响应,返回E5。
 (3)主站接收到此响应后,则发出确认写命令10 02 01 5C 5F 16,第3字节数据规则与NetR命令一致。
 (4) 从站接收到确认写命令后,返回确认命令 68 12 12 68 01 02 08 32 03 00 00 02 02 00 02 00 01 00 00 05 01 FF 4C 16。第11、12字节数据与主站写命令应保持一致,这样收发两次数据,才能完成一次数据的写操作。
2 单片机串口通信协议设计
2.1 串口通信方式选择

  PPI协议物理上采用RS485标准,每个字符扩展成11 bit,采用NRZ(不归零)编码。首先是1 bit开始位,它总是二进制“0”,接着是8 bit信息位,之后是1 bit奇偶校验位(PPI协议规定为偶检验),最后是1 bit停止位,它总是二进制“1”。
 因此,应将单片机串口通信设置为工作方式3:9 bit UART通信模式,8 bit数据位与1 bit奇偶检验位,奇偶校验方式使用偶校验;定时器1用作波特率发生器,选择工作方式2,8 bit自动重装模式,在这里使用9 600 b/s波特率,由式(1)、(2)计算可得,TL1=0xFD。
baudrate=2SMOD×T1溢出率/32(1)
T1溢出率=fosc/(12×(256-TL1))(2)
 串口通信初始化程序:
TMOD|=0x20;    
//定时器1选择方式2,8 bit自动重装模式
TH1=0xFD;        
TL1=0xFD;        
PCON &=0x7F;    //SMOD=0,波特率不加倍
SCON=0xD0;    //串口通信选择方式3,9 bit UART模式,8 bit数据位,1 bit校验位
TR1=1;
2.2 接收信息起始条件和结束条件选择
 在串口通信过程中,单片机有可能从一个字符的中间开始接收字符,从而导致校验错误和接收信息功能终止,为避免出现此类问题,就需要在接收开始前,对信息的起始和结束条件进行定义。
由于PLC会发送3种不同类型的数据帧,并且单片机需要及时做出正确的响应,因此,单片机在接收到不同的数据帧时应作出不同的响应。单片机采用中断的方式接收数据,而由于在PPI协议中,并没有固定的起始字符,经过分析,采用断点检测的方法来作为接收起始条件。断点是指在小于一个完整字符传输时间的一段时间内,接收数据一直为0,只有在断点之后接收到的字符才会存入到信息缓冲区,任何在断点之前接收到的字符都被忽略。一个完整字符传输时间定义为传输起始位、数据位、校验位和停止位的时间总和。在本系统中,通信波特率为9 600 b/s,因此传输一个完整的字符(11 bit)时间为t=11/9 600,即为1.145 83 ms,为了方便,断点检测时间可以设定为2 ms。
 信息结束采用字符间隔定时器的方式来判断一条信息的结束。字符间隔时间是指从一个字符的结尾(停止位)到下一个字符的结尾(停止位)之间的时间。在数据传输过程中,如果两个字符之间的时间间隔超过了所设定的时间,则表示这条信息接收完成。由于定时器总是包含接收一个完整字符的时间,因此该时间值应设置为大于在指定波特率下传输一个字符的时间(在此为1.145 83 ms),在这里设置为2 ms。单片机在每接收到一个字符后,都要重启字符间隔定时器,如果超时,则表示信息接收完成。
由于单片机硬件资源有限,只提供2个定时器,定时器1用作波特率发生器,断点检测和字符间隔定时器的时间都为2 ms,因此可以共用定时器0。为了计算方便,定时器0选择工作方式1(16 bit定时器),初值为TH0=0xFF,TL0=0xFD。
2.3数据字符检验程序
 接收校验程序如下:
ACC=SBUF;
if(RB8==P)
{
  rxd_buf[rxd_count]=ACC;      //暂存到接收缓冲区
      rxd_count++;
    }
    else            //接收校验错,则需要重新开始接收
{
  rxd_en=0;                    //停止接收标志
      rxd_count=0;
      return;            
    } 
 发送校验程序如下:
ACC=txd_buf[txd_count];
TB8=P;
SBUF=txd_buf[txd_count];
 单片机在接收到一条完整的信息后,首先会进行数据帧分析,通过比较,判断主站PLC发送的数据帧类型,并对判断正确的请求帧给予正确的响应,返回给PLC正确的数据格式。使用Keil开发工具编写C51程序代码,采用结构化程序设计思想,程序流程图如图1所示。

3 结果验证

 


 最后通过通信测试验证,PLC主站能够使用NetR/NetW指令很方便地读取单片机的数据或向单片机写入给定的数据。而且在具有多个PLC从站的PPI网络中,通过设定不同从站地址,将多个单片机接入到该网络中,作为主站的PLC也能够正常地访问各个从站PLC与单片机从站,它们之间的通信稳定可靠,且互不影响,这也为以后在PPI网络中扩展其他智能设备提供了可行性。
参考文献
[1] 张扬,蔡春伟,孙明建.S7-200 PLC原理与应用系统设计[M].北京:机械工业出版社,2007.
[2] 孙鹤旭,梁涛,云利军.Profibus现场总线控制系统的设计与开发[M].北京:国防工业出版社,2007.
[3] 马忠梅,籍顺心,张凯,等.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2005.
[4] 廖常初.PLC编程及应用[M].北京:机械工业出版社,2008.

此内容为AET网站原创,未经授权禁止转载。