收藏 分销(赏)

SiemensMPI协议解析.doc

上传人:精*** 文档编号:3359499 上传时间:2024-07-03 格式:DOC 页数:21 大小:114.54KB 下载积分:10 金币
下载 相关 举报
SiemensMPI协议解析.doc_第1页
第1页 / 共21页
SiemensMPI协议解析.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
Siemens MPI协议解析 摘要:在使用上位机和西门子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—300 CPU都可配置为网络主站,通过主/主协议可以实现PLC之间的数据互换。假如某些控制站是s7—200系列PLC,则可以建立主/从连接关系,由于s7—200 CPU是从站,用户可以通过网络指令实现s7—300 CPU对s7200 CPU的数据读写操作。 分析思绪 西门子Step 7 V5.4软件是S7-300系列PLC(涉及ET200S)的开发工具,上位机通过其PCI插槽上的通讯卡(CP5613A2)接口以及通讯电缆连接到PLC的编程口上,并且通讯卡接口和PLC编程口都是RS485接口标准。这说明,PC机事实上是可以通过RS485串口同ET200 CPU(IM151-7)通讯,只是我们不知道通讯协议而已。因此,在上位机上运用西门子提供的PRODAVE S7软件读写PLC时, 通过监视通讯口上的数据,我们就有也许分析出通信报文格式。然后,撤掉西门子通讯卡,直接通过RS485串口向PLC发送报文来验证其对的性,并作进一步的操作。本着这一思想,采用以下环节获得这些报文。 环节 硬软件需求 硬件:串口分支器及通讯电缆,西门子CP5613A2通讯卡,ADVANTECH公司 PCI-1601A通讯卡,西门子ET200S(IM151-7CPU以及相关模块)。 软件:step7 v5.4 , simatic net 2023 edition, prodave s7 , serial port monitor,PCI1601A driver,visual c++。 硬件连接如图1-0 上位机 ET200S编程口 PCI1601AA啊 A Cp5613A2 图1-0 安装完相关软件及驱动程序以后,进行硬件测试以及软件平台搭建 (1) 串口分支器制作及通讯电缆的连接(附录A) (2) 运用STEP 7 V5.4对ET200S组态以及相关初始化设立(附录B) (3) PCI1601A通讯卡的测试(附录C) (4) 串口监视软件设立和测试(附录D) (5) PRODAVE S7 调试运营(附录E) 完毕设立和调试后,打开串口监视软件,并将PLC上电,运营PRODAVE S7并在其中进行各种操作(load 、unload、 read 、write等)时启动数据监视,通过比较分析发现: (1) 与S7-200不同,ET200S不管出于何种状态(run 或 stop),一经上电,就不断发出数据查找设备,在读写数据过程中也不间断。 (2) 连接、读出、写入和断开时检测到一系列有规律的数据。通过多次监测比较分析,可得到相关操作的数据帧格式,初始化设定PLC与上位机的地址分别为02和00;为描述方便,现在对数据帧格式做以下符号约定 SD:(Start Delimiter)开始定界符 LE:(Length)报文长度 LER:(Repeated Length)反复数据长度 SD: (Start Delimiter)开始定界符 DA:(Destination Address)目的地址 SA:(Source Address)源地址 FC:(Function Code)功能码 DSAP:(Destination Service Access Point)目的服务存取点 SSAP:(Source Service Access Point)源服务存取点 FS: (Frame Sequence)帧序列号 UU:(unkown unit)未知操作单元,其数值通常为固定值 GU:(group unit) 分组单元 DU:(Data Unit)数据单元 FCS:(Frame Check Sequence)校验码 END:(End Delimiter)结束分界符 分析结果 连接(load)过程 (1)设备查找 在PLC(ET200S)上电启动进入run状态后,开始不断发出数据查找设备,数据帧格式如下。DA从00到1F共32个站号,令牌帧和总线访问帧按照严格的帧时序(15帧/s),交替发出。 令牌帧: DC DA SA DC DA 02 总线访问帧: SD DA SA FC FCS END 10 DA 02 49 FCS 16 在prodave s7 中运营Load命令后,上位机也开始不断发出数据查找设备,数据帧格式如下。DA从00到1F共32个站号,令牌帧和总线访问帧按照严格的帧时序(19帧/s),交替发出。 令牌帧: DC DA SA DC DA 00 总线访问帧: SD DA SA FC FCS END 10 DA 00 49 FCS 16 SD、DC、FC、END均占据一个字节长度,为固定数值,分别等于 10、 DC 49、16,FCS采用求和校验,等于DA+SA+FC。 (2)握手 上位机在收到et200s发出的令牌帧(dc 02 02)后以其令牌帧(dc 00 00)作为回复,等待et200s应答,假如收到dc 00 02,pc机立即回复dc 02 00,令牌握手成功。总线访问握手方式与令牌握手一致。在读写操作过程中,应答握手也不间断。 总线访问准备 上位机发送pc_request_frame Et200接受判断 Et200s发送plc_ack_frame 上位机等待、定期 Et200s发送plc_return_frame 上位机接受信息并判断 飞 上位机发送确认信息pc_ack_frame 操作结束 读取操作 一次读操作的环节涉及上位机发出读命令帧(pc_request_frame_read),PLC作出对的的响应,并将确认信息帧(plc_ack_frame_read)返回给上位机,接着反馈回对的的数据信息帧(plc_return_frame_read)给上位机,上位机接到此帧数据,校验拟定后对PLC做出确认信息帧(pc_ack_frame_read),这样完毕一个读取数据的过程。在读取操作过程中,上位机和PLC共进行两次应答。 读取命令 读取数据时上位机的请求帧格式如下,该帧占据38字节长度,记作pc_request_frame_read(38)。 SD LE LER SD DA SA FC DASP SSAP FS UU GU DU FCS END SD LE LER SD 占据4字节长度,为固定值 。 pc_request_frame_read(0)=68 pc_request_frame_read(1)= 1F,帧长度校验,为DA+SA+FC+DSAP+SSAP+FS+GU+DU的字节个数。 pc_request_frame_read(2)=1F 反复帧长度,与帧长度校验记法相同。 pc_request_frame_read(3)=68 DA SA FC DSAP SSAP FS 各占据7字节。 pc_request_frame_read(4)=82数值上等于目的站地址加上80 pc_request_frame_read(5)=80数值上等于源站地址加上80 pc_request_frame_read(6)=5C、7C pc_request_frame_read(7)=16、15 pc_request_frame_read(8)=02、01 pc_request_frame_read(9)=F1为分界符,其值不变。 pc_request_frame_read(10)=00~FF,帧序号,对相同操作时自加计数。在应答握手时用来判断当前应答帧是否为本请求的应答。 UU占据6字节长度,均为固定值 pc_request_frame_read(11)=32 pc_request_frame_read(12)=01 pc_request_frame_read(13)=00 pc_request_frame_read(14)=00 pc_request_frame_read(15) =33 pc_request_frame_read(16)=02、01 GU占据6字节长度,混合读写时可以进行操作 pc_request_frame_read(17)=00 pc_request_frame_read(18)=0E pc_request_frame_read(19)=00 pc_request_frame_read(20)=00 pc_request_frame_read(21)=04 pc_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)=12 pc_request_frame_read(24)=0A pc_request_frame_read(25)=10 pc_request_frame_read(26)=02 pc_request_frame_read(27) 和pc_request_frame_read(28)这2字节共同表达读取的数据个数,当读取的存储区是I、 Q、M 、DB时表达字节个数,当存储区是C、 T时表达读取的计数器或定期器的个数。 假如读取两个字节,则为: pc_request_frame_read(27)=00 pc_request_frame_read(28)=02 假如读取一个计数器或者定期器,则为: pc_request_frame_read(27)=00 pc_request_frame_read(28)=01 pc_request_frame_read(29)、pc_request_frame_read(30)共同表达要操作的DB号,假如读取其他区,则两者分别为00 00。 pc_request_frame_read(31)表达存储区类型,具体参考表1-1 存储区 I Q M DB C T 标示符 81 82 83 84 1C 1D 表1-1 pc_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)=00 pc_request_frame_read(33)=00 pc_request_frame_read(34)=08 若读取C1或T1时则为 pc_request_frame_read(32)=00 pc_request_frame_read(33)=00 pc_request_frame_read(34)=01 pc_request_frame_read(35)是帧校验码,采用和取余算法: (DA+SA+FC+DSAP+SSAP+FC+UU+GU+DU )mod 16#100 pc_request_frame_read(36)、pc_request_frame_read(37)是结束符,为固定值,分别等于16 E5。 PLC接受到请求命令(pc_request_frame_read)时,确认后返回一个数据帧表达回应,占据15字节长度,记作plc_ack_frame_read(15),格式如下: SD LE LER SD DA SA FC DASP SSAP UU FS FCS END SD LE LER SD plc_ack_frame_read(0)=68 plc_ack_frame_read(1)=08 plc_ack_frame_read(2)=08 plc_ack_frame_read(3)=68 DA、SA plc_ack_frame_read(4)=80 plc_ack_frame_read(5)=82 FC plc_ack_frame_read(6)=7C 5C DSAP、SSAP plc_ack_frame_read(7)=02 plc_ack_frame_read(8)=16 UU plc_ack_frame_read(9)=B0 plc_ack_frame_read(10)=01 FS plc_ack_frame_read(11) 帧序号,和pc_request_frame_read(10)保持一致。 FCS plc_ack_frame_read(12) 帧校验,等于(DA+SA+FC+DSSAP+SSAP+UU+FS+FCS)mod 16#100 END plc_ack_frame_read(13)=16 plc_ack_frame_read(14)=E5 在发送完响应数据帧(plc_ack_frame_read)后PLC接着给上位机反馈其所要读取的数据信息帧(plc_return_frame_read),其长度因读取字节个数而长短不定,格式如下: SD LE LER SD DA SA FC DASP SSAP FS UU GU DU FCS END SD LE LER SD plc_return_frame_read(0)=68 plc_return_frame_read(1) plc_return_frame_read(2) plc_return_frame_read(3)=68 DA SA FC DSAP SSAP FS各占一个字节 plc_return_frame_read(4)=80 plc_return_frame_read(5)=82 plc_return_frame_read(6)=5C plc_return_frame_read(7)=16 plc_return_frame_read(8)=02 plc_return_frame_read(9)分界符,为固定值F1 plc_return_frame_read(10),与plc_ack_frame(11)保持一致。 UU占据8个字节长度,均为固定值 plc_return_frame_read(11)=32 plc_return_frame_read(12)=03 plc_return_frame_read(13)=00 plc_return_frame_read(14)=00 plc_return_frame_read(15)=33 plc_return_frame_read(16)=02 plc_return_frame_read(17)=00 plc_return_frame_read(18)=02 GU占据6字节长度 plc_return_frame_read(19)=00 plc_return_frame_read(20) 等于读取的自己个数加4,假如读取一个字节时为05 plc_return_frame_read(21)=00 plc_return_frame_read(22)=00 plc_return_frame_read(23)=04 plc_return_frame_read(24) 单一读取时为01,分组读取时为其他值。 DU占据(4+pc_request_frame_read(27)+ pc_request_frame_read(28))字节长度 plc_return_frame_read(25)=FF plc_return_frame_read(26)=04 plc_return_frame_read(27)、plc_return_frame_read(28)共同表达返回所读取的数据位数,按照bit计算;假如读取了一个字节,则他们分别为 00、08。 PLC返回所要读取的数据,按照从低地址到高地址的顺序依次存放。 plc_return_frame_read(29) plc_return_frame_read(30) . . plc_return_frame_read(n) n=28+读取的字节数 plc_return_frame_read(n+1)为FCS,采用和取余校验。 END plc_return_frame_read(n+2)=16 plc_return_frame_read(n+3)=E5 上位机在接受到数据通过确认以后向PLC发送一个确认帧(pc_ack_frame_read),一共15字节长度,记作pc_ack_frame_read(15)。 格式如下: SD LE LER SD DA SA FC DASP SSAP UU FS FCS ED SD LE LER SD pc_ack_frame_read(0)=68 pc_ack_frame_read(1)=08 pc_ack_frame_read(2)=08 pc_ack_frame_read(3)=68 DA SA pc_ack_frame_read(4)=82 pc_ack_frame_read(5)=80 FC pc_ack_frame_read(6)=5C DSAP SSAP pc_ack_frame_read(7)=16 pc_ack_frame_read(8)=02 UU pc_ack_frame_read(9)=B0 pc_ack_frame_read(10)=07 FS pc_ack_frame_read(11) 和 plc_return_frame(10) 保持一致 FCS pc_ack_frame_read(12) 采用求和取余校验算法,等于(DA+SA+FC+DSSAP+SSAP+UU+FS)mod 16#100 END pc_ack_frame_read(13)=16 pc_ack_frame_read(14)=E5 读数据过程完毕。 写入操作 一次完整的写入操作环节涉及:一方面上位机发出写命令信息帧(pc_request_frame_write),PLC接受以后判断,若对的,则做出响应,并将确认信息(plc_ack_frame_write)帧返回给上位机,并反馈回对的的数据(plc_return_frame_write)帧给上位机,上位机接到此帧数据,校验对的后对PLC做出确认信息(pc_ack_frame_write),这样就完毕一个读取数据的过程。在读取操作过程中,上位机和PLC共进行两次应答。 写入时上位机的请求帧(pc_request_frame_write)所占据字节长度不拟定,跟写入的数据个数有关。记作pc_request_frame_write(),格式如下: SD LE LER SD DA SA FC DASP SSAP FS UU GU DU FCS END SD LE LER SD pc_request_frame_write(0)=68 pc_request_frame_write(1)pc_request_frame_write(2)写入一个字节时为24,写入两个字节时为25… pc_request_frame_write(3)=68 DA SA FC DSAP SSAP FS pc_request_frame_write(4)=82 pc_request_frame_write(5)=80 pc_request_frame_write(6)=5C pc_request_frame_write(7)=16 pc_request_frame_write(8)=02 pc_request_frame_write(9)=F1 pc_request_frame_write(10)为帧序号,从00到FF UU占据6字节长度 pc_request_frame_write(11)= 32 pc_request_frame_write(12)=01 pc_request_frame_write(13)=00 pc_request_frame_write(14)=00 pc_request_frame_write(15)=43 pc_request_frame_write(16)=02 GU 占据6字节长度 pc_request_frame_write(17)=00 pc_request_frame_write(18)=0E pc_request_frame_write(19)、pc_request_frame_write(20)共同表达写入的字节个数加4。假如要写入2个字节,则依次为00 、06。 pc_request_frame_write(21)=05 pc_request_frame_write(22)=01 DU 占据的长度和要写入的字节个数有关,其长度为 (16+ pc_request_frame_write(21)+pc_request_frame_write(22)- 4)个字节,置复位操作按照一个字节计算。 pc_request_frame_write(23)=12 pc_request_frame_write(24)=0A pc_request_frame_write(25)=10 pc_request_frame_write(26)与存储区有关,当写C区时,为1C, M区置复位时为01,写其他存储区为 02 pc_request_frame_write(27)=00 pc_request_frame_write(28)=01 pc_request_frame_write(29)、pc_request_frame_write(30)共同表达所要写入的DB号,写其他存储区时,为00 00,注意I区和T区不能进行写操作。 pc_request_frame_write(31)表达存储区类型,参考表1-2 存储区 Q M DB C 标示符 82 83 84 1C 表1-2 pc_request_frame_write(32) pc_request_frame_write(33) pc_request_frame_write(34) 以上三个字节表达要写入的起始地址。对于C区,则为起始计数器的编号,若对C2写入,则依次为00 00 02。对其他区写操作时则表达起始位地址,假如要写DB1B1,则依次为 00、00、08。 pc_request_frame_write(35)、pc_request_frame_write(36)与存储区有关,写入C区时依次为00 09,置复位操作时依次为00 03,写入其他区(涉及对M区写入字节)是依次为00、04 。 pc_request_frame_write(37)、pc_request_frame_write(38)共同表达写入的数据量,与存储区类型有关。写C区时表达写入的字节个数,例如对一个计数器进行写操作,则其值依次为00、02;写其他存储区区时表达要写入的数据位数,按照bit计算,若写DB1B0,则依次为00、08。 pc_request_frame_write(39) pc_request_frame_write(40) pc_request_frame_write(41) . . pc_request_frame_write(n) 以上若干字节表达要写入的数据,按照低地址到高地址的顺序排列,其中对C区进行写操作时,数据表达为BCD码,对其他其他存储区写入时,数据均为十六进制格式表达。 n=38+ pc_request_frame_write(19)+pc_request_frame_write(20)- 4)。 pc_request_frame_write(n+1)为FCS,采用求和取余算法,等于 (DA+SA+FC+DSAP+SSAP+FS+UU+GU+DU)mod 16#100 END pc_request_frame_write(n+2)=16 pc_request_frame_write(n+3)=E5 PLC在接受到请求数据帧确认后,返回确认信息帧(plc_ack_frame_write) 占据15字节长度,格式如下: SD LE LER SD DA SA FC DASP SSAP UU FS FCS ED SD LE LER SD plc_ack_frame_write(0)=68 plc_ack_frame_write(1)=08 plc_ack_frame_write(2)=08 plc_ack_frame_write(3)=68 DA SA FC DSAP SSAP plc_ack_frame_write(4)=80 plc_ack_frame_write(5)=82 plc_ack_frame_write(6)=5C plc_ack_frame_write(7)=02 plc_ack_frame_write(8)=16 UU plc_ack_frame_write(9)=B0 plc_ack_frame_write(10)=01 FS plc_ack_frame_write(11) 与pc_request_frame_write(10)保持一致。 FCS plc_ack_frame_write(12),采用求和取余校验算法。 END plc_ack_frame_write(13)=16 plc_ack_frame_write(14)=E5 plc_return_frame_write帧格式 SD LE LER SD DA SA FC DASP SSAP FS UU FCS ED 记作plc_return_frame_write(29) SD LE LER SD plc_return_frame_write(0)=68 plc_return_frame_write(1)=16 plc_return_frame_write(2)=16 plc_return_frame_write(3)=68 DA SA FC DSAP SSAP FS plc_return_frame_write(4)=80 plc_return_frame_write(5)=82 plc_return_frame_write(6)=7C plc_return_frame_write(7)=02 plc_return_frame_write(8)=16 plc_return_frame_write(9)=F1 plc_return_frame_write(10),FS,同plc_ack_frame_write(11)保持一致。 UU占据15字节长度 plc_return_frame_write(11)=32 plc_return_frame_write(12)=03 plc_return_frame_write(13)=00 plc_return_frame_write(14)=00 plc_return_frame_write(15)=43 plc_return_frame_write(16),和pc_request_frame_write(16)保持一致。 plc_return_frame_write(17)=00 plc_return_frame_write(18)=02 plc_return_frame_write(19)=00 plc_return_frame_write(20)=01 plc_return_frame_write(21)=00 plc_return_frame_write(22)=00 plc_return_frame_write(23)=05 plc_return_frame_write(24)=01 plc_return_frame_write(25)=FF FCS plc_return_frame_write(26),采用求和取余校验算法。 END plc_return_frame_write(27)=16 plc_return_frame_write(28)=E5 pc_ack_frame_write帧格式 SD LE LER SD DA SA FC DASP SSAP UU FS FCS ED 记作pc_ack_frame_write(15) SD LE LER SD pc_ack_frame_write(0)=68 pc_ack_frame_write(1)=08 pc_ack_frame_write(2)=08 pc_ack_frame_write(3)=68 DA SA FC DSAP SSAP pc_ack_frame_write(4)=82 pc_ack_frame_write(5)=80 pc_ack_frame_write(6)=7C pc_ack_frame_write(7)=16 pc_ack_frame_write(8)=02 UU pc_ack_frame_write(9)=B0 pc_ack_frame_write(10)=07 FS pc_ack_frame_write(11)plc_return_frame_write(29)保持一致。 FCS pc_ack_frame_write(12)采用求和取余校验算法。 END pc_ack_frame_write(13)=16 pc_ack_frame_write(14)=E5 写数据过程完毕。 对于读写数据帧的FC以及DSAP和SSAP做以说明 FC DSAP SSAP Pc_request_frame_read 7C 5C 15 01 16 02 Plc_ack_read 7C 5C 01 15 02 16 Plc_return_read 5C 7C 01 15 02 16 Pc_ack_read 5C 7C 15 01 16 02 在解析读写数据报文以后,可以撤掉cp5613通讯卡,以验证其对的性 测试源码见附录F。 结束语 本文运用串口监视的方法,通过简朴易行的操作解析出siemens MPI协议的报文格式,其结果具有很大的使用价值(1)使用户不用购买西门子专用的通讯解决卡就可以让上位机和PLC的通信,从而实现所需控制功能,节约成本。(2)减少了用户自主开发的难度,使通讯编程变得简朴明了,无需购买软件和授权等就可以使用MPI协议监控PLC的工作状态。 参考文献 STEP 7V5.4编程手册 Siemens s7300系列硬件手册 Visual C++串口编程实践
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服