MPI协议解析待验证.docx
- 文档编号:9402231
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:17
- 大小:21.17KB
MPI协议解析待验证.docx
《MPI协议解析待验证.docx》由会员分享,可在线阅读,更多相关《MPI协议解析待验证.docx(17页珍藏版)》请在冰豆网上搜索。
MPI协议解析待验证
解析MPI读写数据报文
完成设置和调试后,打开串口监视软件,并将PLC上电,运行PRODAVES7并在其中进行各种操作(load、unload、read、write等)时启动数据监视,通过比较分析发现:
(1)与S7-200不同,ET200S不管出于何种状态(run或stop),一经上电,就不断发出数据查找设备,在读写数据过程中也不间断。
(2)连接、读出、写入和断开时检测到一系列有规律的数据。
经过多次监测比较分析,可得到相关操作的数据帧格式,初始化设定PLC与上位机的地址分别为02和00;为描述方便,现在对数据帧格式做以下符号约定
SD:
(StartDelimiter)开始定界符
LE:
(Length)报文长度
LER:
(RepeatedLength)重复数据长度
SD:
(StartDelimiter)开始定界符
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),交替发出。
令牌帧:
DCDASA
DCDA02
总线访问帧:
SDDASAFCFCSEND
10DA0249FCS16
在prodaves7中运行Load命令后,上位机也开始不断发出数据查找设备,数据帧格式如下。
DA从00到1F共32个站号,令牌帧和总线访问帧按照严格的帧时序(19帧/s),交替发出。
令牌帧:
DCDASA
DCDA00
总线访问帧:
SDDASAFCFCSEND
10DA0049FCS16
SD、DC、FC、END均占据一个字节长度,为固定数值,分别等于10、DC49、16,FCS采用求和校验,等于DA+SA+FC。
(2)握手上位机在收到et200s发出的令牌帧(dc0002)后以其令牌帧(dc0200)作为回复,等待et200s应答,如果收到dc0002,pc机立即回复dc0200,令牌握手成功。
总线访问握手方式与令牌握手一致。
在读写操作过程中,应答握手也不间断。
总线访问准备上位机发送pc_request_frameEt200接收判断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)。
SDLELERSDDASAFCDASPSSAPFSUUGUDUFCSEND
SDLELERSD占据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)=68DASAFCDSAPSSAPFS各占据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号,如果读取其他区,则二者分别为0000。
pc_request_frame_read(31)表示存储区类型,具体参考表1-1存储区
标示符
I81
Q82
M83
DB84
C1C
T1D
表1-1
pc_request_frame_read(32)
pc_request_frame_read(33)
pc_request_frame_read(34)共同表示操作的起始地址,对于I、Q、M、DB存储区按照M83DB84C1CT1Dbit计算,对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)mod16#100
pc_request_frame_read(36)、pc_request_frame_read(37)是结束符,为固定值,分别等于16E5。
PLC接收到请求命令(pc_request_frame_read)时,确认后返回一个数据帧表示回应,占据15字节长度,记作plc_ack_frame_read(15),格式如下:
SDLELERSDDASAFCDASPSSAPUUFSFCSEND
SDLELERSD
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)=7C5C
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)mod16#100END
plc_ack_frame_read(13)=16
plc_ack_frame_read(14)=E5
在发送完响应数据帧(plc_ack_frame_read)后PLC接着给上位机反馈其所要读取的数据信息帧(plc_return_frame_read),其长度因读取字节个数而长短不定,
格式如下:
SDLELERSDDASAFCDASPSSAPFSUUGUDUFCSEND
SDLELERSD
plc_return_frame_read(0)=68
plc_return_frame_read
(1)
plc_return_frame_read
(2)
plc_return_frame_read(3)=68
DASAFCDSAPSSAPFS各占一个字节
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)。
格式如下:
SDLELERSDDASAFCDASPSSAPUUFSFCSED
SDLELERSD
pc_ack_frame_read(0)=68
pc_ack_frame_read
(1)=08
pc_ack_frame_read
(2)=08
pc_ack_frame_read(3)=68
DASA
pc_ack_frame_read(4)=82
pc_ack_frame_read(5)=80
FC
pc_ack_frame_read(6)=5C
DSAPSSAP
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)mod16#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(),格式如下:
SDLELERSDDASAFCDASPSSAPFSUUGUDUFCSEND
SDLELERSD
pc_request_frame_write(0)=68
pc_request_frame_write
(1)
pc_request_frame_write
(2)写入一个字节时为24,写入两个字节时为25…pc_request_frame_write(3)=68
DASAFCDSAPSSAPFS
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号,写其他存储区时,为0000,注意I区和T区不能进行写操作。
pc_request_frame_write(31)表示存储区类型,
参考表1-2存储区标示符
Q82M83DB84C1C表1-2
pc_request_frame_write(32)pc_request_frame_write(33)pc_request_frame_write(34)以上三个字节表示要写入的起始地址。
对于C区,则为起始计数器的编号,若对C2写入,则依次为000002。
对其他区写操作时则表示起始位地址,如果要写DB1B1,则依次为00、00、08。
pc_request_frame_write(35)、pc_request_frame_write(36)与存储区有关,写入C区时依次为0009,置复位操作时依次为0003,写入其他区(包括对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)mod16#100
END
pc_request_frame_write(n+2)=16
pc_request_frame_write(n+3)=E5
PLC在接收到请求数据帧确认后,返回确认信息帧(plc_ack_frame_write)占据15字节长度,格式如下:
SDLELERSDDASAFCDASPSSAPUUFSFCSED
SDLELERSD
plc_ack_frame_write(0)=68
plc_ack_frame_write
(1)=08
plc_ac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MPI 协议 解析 验证