APP下载

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

2012-08-15梅大成

网络安全与数据管理 2012年17期
关键词:断点主站字符

孟 强,梅大成,秦 勃,叶 强

(西南石油大学,四川 成都,610500)

在工业控制领域,可编程逻辑控制器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)。主站首先发送请求帧 10DA SA FC FCSED(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的通信过程如下:

(1)首先主站PLC发出读命令,数据格式为:

0 1 2 3 4 5 6 7 8 9 10111213141516 68 1B 1B 68 02 01 6C 32 01 00 00 02 02 00 0E 00 00

17181920212223242526272829303132 0401 120A 100200 100001840003209F 16

对于读取固定地址的固定长度的NetR命令,其中第6、11、12、31字节的数据会发生改变,其他数据保持不变。第6字节数据为功能码,只有在首次触发时为6CH,下次读命令则为7CH,如果无通信故障,会一直保持不变,否则会在5CH与7CH之间一直交替执行,通信恢复正常后,保持5CH或7CH不变。第11、12字节数据总是相同的,而且每执行一次NetR命令,它们的值会增1,达到FFH后,又从00H开始。第31字节数据为校验和,表示第4~第30字节的数据和的256余数。

(2)从站PLC接收判断正确后,则作出响应返回E5。

(3)主站接到从站响应后,则发出确认读命令10 02 01 5C 5F 16,其中第3字节数据5CH为功能码。当首次读命令的功能码为6CH或7CH时,该字节数据为5CH;当首次读命令功能码为5CH时,该字节数据为7CH。

(4)从站接收到确认读指令后,才会将有用数据返回给主站PLC,返回数据格式为:

0 1 2 3 4 5 6 7 8 9 10111213141516 6825 2568010208 320300000202000200 14

1718 1920212223 242526272829303132 33 0000 0401FF 04 00 8000112233 44556677 88

3435 3637383940 41 42 99 AA BB CC DD EE FF DA 16

返回的有用数据为第 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。

串口通信初始化程序:

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 数据字符检验程序

接收校验程序如下:

发送校验程序如下:

单片机在接收到一条完整的信息后,首先会进行数据帧分析,通过比较,判断主站PLC发送的数据帧类型,并对判断正确的请求帧给予正确的响应,返回给PLC正确的数据格式。使用Keil开发工具编写C51程序代码,采用结构化程序设计思想,程序流程图如图1所示。

图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.

猜你喜欢

断点主站字符
寻找更强的字符映射管理器
字符代表几
一种USB接口字符液晶控制器设计
一类无限可能问题的解法
消失的殖民村庄和神秘字符
主导电回路发生断点故障判断方法探讨
基于OS2主站系统的海量数据共享技术研究
多表远程集抄主站系统
基于改进经济压差算法的主站AVC的研究
关口电能计量故障监测报警装置及主站研究