您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 西门子MPI协议分析
SiemensMPI协议解析nono95599nono@163.comnono95599nono@163.comnono95599nono@163.comnono95599nono@163.com摘要:在使用上位机和西门子s7300系列PLC实现自动化过程控制当中,选择MPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。但是西门子公司没有公布MPI协议的格式,用户如果想使用MPI协议监控,就必须购买其监控产品或第三方厂家的组态软件。这样给用户自主开发带来一定困难,特别是自行开发的现场设备就不能通过MPI协议接入PLC。而采用其它通讯方式也存在编程复杂,需要购买软件和授权等局限性。本文通过数据监视、采集、分析的方法,解析出了MPI协议的关键报文格式,可用于实现上位机、现场设备与支持MPI协议的CPU之间通讯,从而提供了一种高效率低成本的通信方式。关键字:MPI协议前言工业的现代化,很大程度体现在工业生产过程的自动化,其中信息的传输,数据的交换也成为评价工业自动化水平高低的标准。网络通迅方式的多样化和通迅速率的高速化,使信息交换领域从设备控制层延伸到企业管理层。信息技术的飞速发展,促进了自动化系统结构的变革,以网络为主干的分布式控制系统已成为当今自动化系统的主流趋势。因此,网络通迅的实时性和可靠性,以及网络故障的诊断和排除都成为工业网络通信关注的焦点。MPI网络是西门子工业控制系统中经常用到的一种通迅方式,使用RS485物理接口进行数据传输。下面主要阐述西门子MPI协议的解析方法以及关键报文格式。MPI协议概述MPI协议,其英文全名为Multi-point-Interface。在PLC之间可组态为主/主协议或主/从协议.如何操作依赖于设备类型:如果控制站都是s7—300/400系列PLC,那么就建立主/主连接关系,因为MPI协议支持多主站通讯,所有的s7—300CPU都可配置为网络主站,通过主/主协议可以实现PLC之间的数据交换。如果某些控制站是s7—200系列PLC,则可以建立主/从连接关系,因为s7—200CPU是从站,用户可以通过网络指令实现s7—300CPU对s7200CPU的数据读写操作。分析思路西门子Step7V5.4软件是S7-300系列PLC(包括ET200S)的开发工具,上位机通过其PCI插槽上的通讯卡(CP5613A2)接口以及通讯电缆连接到PLC的编程口上,并且通讯卡接口和PLC编程口都是RS485接口标准。这说明,PC机实际上是可以通过RS485串口同ET200CPU(IM151-7)通讯,只是我们不知道通讯协议而已。因此,在上位机上运用西门子提供的PRODAVES7软件读写PLC时,通过监视通讯口上的数据,我们就有可能分析出通信报文格式。然后,撤掉西门子通讯卡,直接通过RS485串口向PLC发送报文来验证其正确性,并作进一步的操作。本着这一思想,采用以下步骤获得这些报文。步骤硬软件需求硬件:串口分支器及通讯电缆,西门子CP5613A2通讯卡,ADVANTECH公司PCI-1601A通讯卡,西门子ET200S(IM151-7CPU以及相关模块)。软件:step7v5.4,simaticnet2006edition,prodaves7,serialportmonitor,PCI1601Adriver,visualc++。硬件连接如图1-0图1-0安装完相关软件及驱动程序以后,进行硬件测试以及软件平台搭建(1)串口分支器制作及通讯电缆的连接(附录A)(2)运用STEP7V5.4对ET200S组态以及相关初始化设置(附录B)(3)PCI1601A通讯卡的测试(附录C)(4)串口监视软件设置和测试(附录D)(5)PRODAVES7调试运行(附录E)完成设置和调试后,打开串口监视软件,并将PLC上电,运行PRODAVES7并在其中进行各种操作(load、unload、read、write等)时启动数据监视,通过比较分析发现:(1)与S7-200不同,ET200S不管出于何种状态(run或stop),一经上电,就不断发出数据查找设备,在读写数据过程中也不间断。(2)连接、读出、写入和断开时检测到一系列有规律的数据。经过多次监测比较分析,可得到相关操作的数据帧格式,初始化设定PLC与上位机的地址分别为02和00;为描述方便,现在对数据帧格式做以下符号约定SD:(StartDelimiter)开始定界符LE:(Length)报文长度LER:(RepeatedLength)重复数据长度SD:(StartDelimiter)开始定界符上位机Cp5613A2PCI1601AA啊AET200S编程口DA:(DestinationAddress)目标地址SA:(SourceAddress)源地址FC:(FunctionCode)功能码DSAP:(DestinationServiceAccessPoint)目的服务存取点SSAP:(SourceServiceAccessPoint)源服务存取点FS:(FrameSequence)帧序列号UU:(unkownunit)未知操作单元,其数值通常为固定值GU:(groupunit)分组单元DU:(DataUnit)数据单元FCS:(FrameCheckSequence)校验码END:(EndDelimiter)结束分界符分析结果连接(load)过程(1)设备查找在PLC(ET200S)上电启动进入run状态后,开始不断发出数据查找设备,数据帧格式如下。DA从00到1F共32个站号,令牌帧和总线访问帧按照严格的帧时序(15帧/s),交替发出。令牌帧:DCDASADCDA02总线访问帧:SDDASAFCFCSEND10DA0249FCS16在prodaves7中运行Load命令后,上位机也开始不断发出数据查找设备,数据帧格式如下。DA从00到1F共32个站号,令牌帧和总线访问帧按照严格的帧时序(19帧/s),交替发出。令牌帧:DCDASADCDA00总线访问帧:SDDASAFCFCSEND10DA0049FCS16SD、DC、FC、END均占据一个字节长度,为固定数值,分别等于10、DC49、16,FCS采用求和校验,等于DA+SA+FC。(2)握手上位机在收到et200s发出的令牌帧(dc0202)后以其令牌帧(dc0000)作为回复,等待et200s应答,如果收到dc0002,pc机立即回复dc0200,令牌握手成功。总线访问握手方式与令牌握手一致。在读写操作过程中,应答握手也不间断。飞读取操作一次读操作的步骤包括上位机发出读命令帧(pc_request_frame_read),PLC作出正确的响应,并将确认信息帧(plc_ack_frame_read)返回给上位机,接着反馈回正确的数据信息帧(plc_return_frame_read)给上位机,上位机接到此帧数据,校验确定后对PLC做出确认信息帧(pc_ack_frame_read),这样完成一个读取数据的过程。在读取操作过程中,上位机和PLC共进行两次应答。上位机发送pc_request_frameEt200接收判断Et200s发送plc_ack_frame上位机等待、定时Et200s发送plc_return_frame上位机接收信息并判断上位机发送确认信息pc_ack_frame操作结束总线访问准备读取命令读取数据时上位机的请求帧格式如下,该帧占据38字节长度,记作pc_request_frame_read(38)。SDLELERSDDASAFCDASPSSAPFSUUGUDUFCSENDSDLELERSD占据4字节长度,为固定值。pc_request_frame_read(0)=68pc_request_frame_read(1)=1F,帧长度校验,为DA+SA+FC+DSAP+SSAP+FS+GU+DU的字节个数。pc_request_frame_read(2)=1F重复帧长度,与帧长度校验记法相同。pc_request_frame_read(3)=68DASAFCDSAPSSAPFS各占据7字节。pc_request_frame_read(4)=82数值上等于目标站地址加上80pc_request_frame_read(5)=80数值上等于源站地址加上80pc_request_frame_read(6)=5C、7Cpc_request_frame_read(7)=16、15pc_request_frame_read(8)=02、01pc_request_frame_read(9)=F1为分界符,其值不变。pc_request_frame_read(10)=00~FF,帧序号,对相同操作时自加计数。在应答握手时用来判断当前应答帧是否为本请求的应答。UU占据6字节长度,均为固定值pc_request_frame_read(11)=32pc_request_frame_read(12)=01pc_request_frame_read(13)=00pc_request_frame_read(14)=00pc_request_frame_read(15)=33pc_request_frame_read(16)=02、01GU占据6字节长度,混合读写时可以进行操作pc_request_frame_read(17)=00pc_request_frame_read(18)=0Epc_request_frame_read(19)=00pc_request_frame_read(20)=00pc_request_frame_read(21)=04pc_request_frame_read(22)单一读写时pc_request_frame_read(22)=01,其他不变化;混合读写时pc_request_frame_read(22)为其他值。DU单元占据12字节长度从pc_request_frame_read(23)到pc_request_frame_read(26)这4字节为固定数值pc_request_frame_read(23)=12pc_request_frame_read(24)=0Apc_request_frame_read(25)=10pc_request_frame_read(26)=02pc_request_frame_read(27)和pc_request_frame_read(28)这2字节共同表示读取的数据个数,当读取的存储区是I、Q、M、DB时表示字节个数,当存储区是C、T时表示读取的计数器或定时器的个数。如果读取两个字节,则为:pc_request_frame_read(27)=00pc_request_frame_read(28)=02如果读取一个计数器或者定时器,则为:pc_request_frame_read(27)=00pc_request_frame_read(28)=01pc_request_frame_read(29)、pc_request_frame_read(30)共同表示要操作的DB号,如果读取其他区,则二者分别为0000。pc_request_frame_read(31)表示存储区类型,具体参考表1-1存储区IQMDBCT标示符818283841C1D表1-1pc_request_frame_read(32)pc_request_frame_read(33)pc_request_frame_read(34)共同表示操作的起始地址,对于I、Q、M、DB存储区按照bit计算,对C、T存储区按照其个数计算。若读取DB1B1时则依次为pc_request_frame_read(32)=00pc_request_frame_read(33)=00pc_request_frame_read(34)=08若读取C1或T1时则为pc_request_frame_read(32)=00pc_request_frame_read(33)=00pc_request_frame_re
本文标题:西门子MPI协议分析
链接地址:https://www.777doc.com/doc-4477934 .html