您的当前位置:首页正文

以单片机作为S7200PLC从站的PPI协议的设计

2024-02-16 来源:小奈知识网
以单片机作为S7-200PLC从站的PPI协议的设计

以单片机作为S7-200PLC从站的PPI协议的设计

摘要:为了将单片机加入到SIEMENSS7-200系列PLC的PPI

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

在工业控制领域,可编程逻辑控制器PLC(ProgrammableLogicController)以其可靠性高、抗干扰能力强,通用性强、灵活性好、功能齐全、编程简单、使用方便以及安装简便等特点而得到了广泛的应用。现代工业控制系统大都向着分散化、网络化和智能化方向发展,如何实现现场分散的控制设备的网络通信十分重要。西门子公司的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指令与单片机通信。1S7-200系列PLC网络读写指令分析1.1PPI协议简介

PPI是西门子公司专门为

S7-200系列PLC开发的通信协议,内置于S7-200CPU中。PPI物理上基于RS485接口,通过屏蔽双绞线就可以实现PPI通信,是一种主-从通信协议。主站设备发送要求到从站设备,从站设备响应,从站本身不能主动发出信息。为了进行PPI通信,S7-200系列PLC专门配备了网络读指令及网络写指令,使用STEP7-MicroWIN中的NetR/NetWWizard可以很方便地配置网络通信。使用该向导可以编辑最多24条网络读写指令,每条网络读写指令最多能够读或者写16B的数据。其核心是使用顺序控制指令,这样在任一时刻只有一条NetR/NetW指令有效。在主程序中必须用SM0.0指令来调用该向导生成的子程序,以保证它的正常运行。该子程序有3个参数:(1)Timeout(超时)。0为不计时;1-36767为设置以秒为单位的超时延时时间。如果通信有问题的时间超出此延时时间,则会报告错误。状态。

(2)Cycle(周期)。所有网络读/写操作每完成一次切换(3)Error(错误)。0为无错误;1为出错,通过检查

NetR/NetW指令缓冲区状态字节,可以获取错误代码。1.2PPI协议数据帧分析

利用CommMonitor6.0工具监控单主站PLC之间的

通信,可以获得4种不同的数据帧。(1)令牌帧:SD1,DASA;

(2)无数据字段的固定长度的请求帧或应答帧:SD2,DASAFCFCSED;(3)有可变数据字段的请求或应答帧:SD3,LELERSD3DASAFCDUFCSED;

(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)。主站首先发送请求帧10DASAFCFCSED(FC功能码为49H,表示有回答要求的从站状态查询),从站正确接收到后将发送响应帧10SADAFCFCSED(FC功能码为00H,表示应答肯定)。接着主站继续搜索下一个从站,一定时间内如果没有从站响应,则将继续进行下一个网络地址搜索。主站PLC一直重复循环此过程,并将从站状态信息记录下来,直到Timeout时间到,主站才开始真正执行由用户所配置NetR/NetW操作。1.3NetR指令分析

由NetR/NetW指令向导创建的指令,最多只能读

取16B的信息,而且指令是顺序执行的,完成一条读指令需要两次数据收发。在测试过程中,设定主站PLC地址为01,从站PLC地址为02,主站从PLC从站的VB100~VB115存储区读取16B的通信过程如下:返回的有用数据为第25~第40字节的共16B,第41字节为第4~第40字节的数据的校验和,而且第11、12字节的数据必须与主站读命令的第11、12字节保持一致。这样经过两次收发数据,才能正确完成一次数据的读操作。1.4NetW指令分析

(1)

首先主站PLC发出写命令,数据格式为:682F2F6802016C320100000202000E00140501120A100200100001840003200004008000112233445566778899AABBCCDDEEFF3016。其中,第6、11、12字节数据规则与NetR命令一致,第51字节数据为校验和,第35~50字节的数据为真正的要写入从站的有用数据。(2)从站PLC正确接收后,则作出响应,返回E5。(3)主站接收到此响应后,则发出确认写命令1002015C5F16,第3字节数据规则与NetR命令一致。(4)从站接收到确认写命令后,返回确认命令681212680102083203000002020002000100000501FF4C16。第11、12字节数据与主站写命令应保持一致,这样收发两次数据,才能完成一次数据的写操作。2单片机串口通信协议设计2.1串口通信方式选择

PPI协议物理上采用RS485标准,每个字符扩展成11bit,

采用NRZ(不归零)编码。首先是1bit开始位,它总是二进制“0”,接着是8bit信息位,之后是1bit奇偶校验位

(PPI协议规定为偶检验),最后是1bit停止位,它总是二进制“1”。因此,应将单片机串口通信设置为工作方式3:9bitUART通信模式,8bit数据位与1bit奇偶检验位,奇偶校验方式使用偶校验;定时器1用作波特率发生器,选择工作方式2,8bit自动重装模式,在这里使用9600b/s波特率,由式(1)、(2)计算可得,TL1=0xFD。baudrate=2SMOD×T1溢出率/32(1)T1溢出率=fosc/(12×(256-TL1))(2)化程序:TMOD|=0x20;重装模式TH1=0xFD;&=0x7F;

串口通信初始

//定时器1选择方式2,8bit自动

TL1=0xFD;

PCON

//SMOD=0,波特率不加倍SCON=0xD0;

//串口通信选择方式3,9bitUART模式,8bit数据位,1bit校验位TR1=1;2.2接收信息起始条件和结束条件选择

在串口通信

过程中,单片机有可能从一个字符的中间开始接收字符,从而导致校验错误和接收信息功能终止,为避免出现此类问题,就需要在接收开始前,对信息的起始和结束条件进行定义。由于PLC会发送3种不同类型的数据帧,并且单片机需要及时做出正确的响应,因此,单片机在接收到不同的数据帧时应作出不同的响应。单片机采用中断的方式接收数据,而由于在PPI协议中,并没有固定的起始字符,经过分析,采用断点检测的方法来作为接收起始条件。断点是指在小于一个完整字符传输时间的一段时间内,接收数据一直为0,只有在断点之后接收到的字符才会存入到信息缓冲区,任何在断点之前接收到的字符都被忽略。一个完整字符传输时间定义为传输起始位、数据位、校

验位和停止位的时间总和。在本系统中,通信波特率为9600b/s,因此传输一个完整的字符(11bit)时间为t=11/9600,即为1.14583ms,为了方便,断点检测时间可以设定为2ms。

信息结束采

用字符间隔定时器的方式来判断一条信息的结束。字符间隔时间是指从一个字符的结尾(停止位)到下一个字符的结尾(停止位)之间的时间。在数据传输过程中,如果两个字符之间的时间间隔超过了所设定的时间,则表示这条信息接收完成。由于定时器总是包含接收一个完整字符的时间,因此该时间值应设置为大于在指定波特率下传输一个字符的时间(在此为1.14583ms),在这里设置为2ms。单片机在每接收到一个字符后,都要重启字符间隔定时器,如果超时,则表示信息接收完成。由于单片机硬件资源有限,只提供2个定时器,定时器1用作波特率发生器,断点检测和字符间隔定时器的时间都为2ms,因此可以共用定时器0。为了计算方便,定时器0选择工作方式1(16bit定时器),初值为TH0=0xFF,TL0=0xFD。2.3数据字符检验程序{

接收校验程序如下:ACC=SBUF;if(RB8==P)

//暂存到接收缓冲区//接收校验错,则需要

//停止接收标志};

发送校验程序TB8=P

rxd_buf[rxd_count]=ACC;

}

else

rxd_count++;重新开始接收{rxd_count=0;如

rxd_en=0;

return;

ACC=txd_buf[txd_count]

SBUF=txd_buf[txd_count];单片机在接收到一条完整的信息后,首先会进行数据帧分析,通过比较,判断主站PLC发送的数据帧类

型,并对判断正确的请求帧给予正确的响应,返回给PLC正确的数据格式。使用Keil开发工具编写C51程序代码,采用结构化程序设计思想,程序流程图。

3结果验证

最后通过通信测试验证,PLC主站能够使用NetR/NetW指令很方便地读取单片机的数据或向单片机写入给定的数据。而且在具有多个PLC从站的PPI网络中,通过设定不同从站地址,将多个单片机接入到该网络中,作为主站的PLC也能够正常地访问各个从站PLC与单片机从站,它们之间的通信稳定可靠,且互不影响,这也为以后在PPI网络中扩展其他智能设备提供了可行性。

因篇幅问题不能全部显示,请点此查看更多更全内容