PLCPPI协议及VB程序Word文档下载推荐.docx

上传人:b****5 文档编号:18830204 上传时间:2023-01-01 格式:DOCX 页数:16 大小:24.87KB
下载 相关 举报
PLCPPI协议及VB程序Word文档下载推荐.docx_第1页
第1页 / 共16页
PLCPPI协议及VB程序Word文档下载推荐.docx_第2页
第2页 / 共16页
PLCPPI协议及VB程序Word文档下载推荐.docx_第3页
第3页 / 共16页
PLCPPI协议及VB程序Word文档下载推荐.docx_第4页
第4页 / 共16页
PLCPPI协议及VB程序Word文档下载推荐.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

PLCPPI协议及VB程序Word文档下载推荐.docx

《PLCPPI协议及VB程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PLCPPI协议及VB程序Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。

PLCPPI协议及VB程序Word文档下载推荐.docx

目的地址

SA:

源地址

FC:

功能码(6CH)

DSAP:

目的服务存取点

SSAP:

源服务存取点

DU:

数据单元

FCS:

校验和

ED:

结束符(16H)

3.1读命令分析

一次读一条数据

对于一次读取一个数据,读命令都是33个字节。

前面的0—21字节是相同的,为:

681B1B6802006C320100000000000E00000401120A10

因为是PC上发的读PLC数据的命令,SA=00,DA=02,如果有多个站,DA要改成相应的站号。

读命令中从DA到DU的长度为1B即27个字节。

从22字节开始根据读取数据的类型、位置不同而不同。

表一是读不同存储器命令的Byte22—32。

字节2223242526272829303132

功能读取长度数据个数存储器类型存储器偏移量指针校验和结束

读q0.00100010000820000006416

读m0.00100010000830000006516

读M0.10100010000830000016616

读SMB34020001000005000110F916

读VB1000200010001840003208B16

读VW1000400010001840003208D16

读vd1000600010001840003208F16

读i0.50100010000810000056816

读i0.70100010000810000076A16

表一读命令的Byte22-32

从表中我们可以得出以下结果:

Byte22读取数据的长度

01:

1Bit02:

1Byte04:

1Word06:

DoubleWord

Byte24数据个数

这里是01,一次读多个数据时见下面的说明。

Byte26存储器类型

V存储器00:

其它

Byte27存储器类型

04:

S05:

SM06:

AI07:

AQ1E:

C81:

I82:

Q

83:

M84:

V1F:

T

Byte28,29,30存储器偏移量指针(存储器地址*8),如:

VB100,存储器地址为100,偏移量指针为800,转换成16进制就是320H,则Byte28—29这三个字节就是:

000320。

Byte31校验和,前面已说到这是从(DA+SA+DSAP+SSAP+DU)Mod256。

一次读多条数据

对于一次读多个数据的情况,前21Byte与上面相似只是长度LD,LDr及Byte14不同:

Byte14数据块占位字节,它指明数据块占用的字节数。

与数据块数量有关,长度=4+数据块数*10,如:

一条数据时为4+10=0E(H);

同时读M,V,Q三个不同的数据块时为4+3*10=22(H)。

Byte22总是02即以Byte为单位。

Byte24以字节为单位,连续读取的字节数。

如读2个VD则Byte24=8

Byte19---30按上述一次读一个数据的格式依次列出,

Byte31---42另一类型的数据,也是按上述格式给出。

以此类推,一次最多读取222个字节的数据。

3.2写命令分析

一次写一个DoubleWord类型的数据,写命令是40个字节,其余为38个字节。

写一个DoubleWord类型的数据,前面的0—21字节为:

6823236802006C320100000000000E00000401120A10

写一个其它类型的数据,前面的0—21字节为:

(与上面比较,只是长度字节发生变化)

6821216802006C320100000000000E00000401120A10

从22字节开始根据写入数据的值和位置不同而变化。

表二是几个写命令的Byte22—40。

字节22232425262728293031323334353637383940

写入位置及值长度数据个数存储器类型存储器偏移量指针位数值、校验码、结束符

M0.0=10100010000830000000003000101007116

M0.0=00100010000830000000003000100007016

M0.1=10100010000830000010003000101007216

vb100=10020001000184000320000400081000AE16

vb100=FF02000100018400032000040008FF009D16

VW100=FFFF04000100018400032000040010FFFFA616

VD100=FFFFFFFF06000100018400032000040020FFFFFFFFB816

表二写命令的Byte22—40

经分析我们可以得出以下结果:

Byte22--Byte30写入数据的长度、存储器类型、存储器偏移量与读命令相同。

T,C等不能用写命令写入。

Byte32如果写入的是位数据这一字节为03,其它则为04

Byte34写入数据的位数

01:

1Bit08:

1Byte10H:

1Word20H:

1DoubleWord

Byte35--40值、校验码、结束符

如果写入的是位、字节数据,Byte35就是写入的值,Byte36=00,Byte37=检验码,Byte38=16H,结束。

如果写个的是字数据(双字节),Byte35,Byte36就是写入的值,Byte37=检验码,Byte38=16H,结束。

如果写个的是双字数据(四字节),Byte35—38就是写入的值,Byte39=检验码,Byte40=16H,结束。

3.3其它命令分析

强制写入

I、Q、S等不能使用上述的写命令写入数据,只能用强制写入的方式。

前0—35字节值如下(长度字段要根据实际情况而定),需要注意的是Byte8=07,

682B2B6802006C320700000000000C00120001120812480B0000000000FF09000E000110

后面的内容如下:

Byte32占位字节,从下一字节开始到校验和前的字节数。

说明同读数据的Byte14.

Byte36强制写入数据的长度

1Byte

Byte38数据个数,这里是01,一次强制写多个数据时见下面的说明。

Byte40存储器类型

Byte41存储器类型,见读命令的说明。

Byte42、43、44存储器偏移量指针(存储器地址*8)

Byte45、46、47、48值、校验码、结束符

取消强制写

强制写入I、Q等后,这些值就不能被程序改变,除非使用”取消强制命令”。

取消强制命令的格式与强制写入相似,变化的有以下几点:

(1)是没有”值”这一段,即没有Byte45—48。

这影响到长度字节LE,LEr;

占位字节Byte32.

(2)Byte16=10H,(3)Byte32=0CH,也就是第一条,没有”值”这一段,数据块长度变短了。

对于一次强制写入或取消多个数据的情况可以参照写入命令写出相应的报文,这里不再给出。

STOP命令

STOP命令使得S7-200CPU从RUN状态转换到STOP状态(此时CPU模块上的模式开关开应打在RUN或TERM位置)。

PC发出如下命令,PLC返回F9,此时PLC已进入等待状态,PC再发确认报文(10025C5E16),完成一个命令过程。

681D1D6802006C3201000000000010000029000000000009505F50524F4752414DAA16

RUN命令

RUN命令使得S7-200CPU从STOP状态转换到RUN状态(此时CPU模块上的模式开关开应打在RUN或TERM位置)。

PC发出下命令,PLC返回F9,此时PLC已进入运行状态,PC再发确认报文(10025C5E16),完成一个命令过程。

6821216802006C3201000000000014000028000000000000FD000009505F50524F4752414DAA16

3.4读出数据分析

一次读出一条数据

PLC响应的数据也是用PPI封装的。

如果用一次读一条数据命令,响应的报文中就只包含一条数据,此响应报文的Byte16<

=8。

Byte04:

DA=00Byte05:

SA=02即从02PLC站发往PC。

Byte16:

数据块占位字节,从Byte21到校验和前的字节数。

一条数据时:

Word=06DoubleWord=08其它为05。

Byte22:

数据类型,位=3,其它=4。

Byte24:

数据宽度,Bit=01,Byte=08,Word=10H,DoubleWord=20H

Byte25—28:

值。

如果网络上只可能有一个站会发回响应报文,那么可以简单的根据LE长度字节判断返回值的位置:

LE=16H,返回值是字节,或位类型的值,响应报文的Byte25即是返回值;

LE=17H,返回值是字(双字节)类型的值,响应报文的Byte25,26即是返回值;

LE=19H,返回值是双字(四字节)类型的值,响应报文的Byte25—28即是返回值。

更准确的方式是要根据返回报文的SA,DA,及存储器位置等信息识别目标地址和源地址,确认是这次申请的返回数据,然后经过校验检查,得到正确的数据。

一次读出多条数据

如果用的是一次读多条数据的命令,响应的报文中就包含有多条数据。

这些数据只有类型参数,没有偏移量参数,所以要注意根据读命令的顺序将其一一对应起来。

数据块占位字节,从Byte21到校验和前的字节数,与数据块数量和类型有关。

Byte20:

数据块的个数。

Byte21开始为数据块,每一个数据块都以FF04开始,接下来的两个字节表示这一数据块的长度,以位计算,然后依次是连续的数据。

下一个数据块也是以FF04开始,重复上述格式,直到结束。

4应用

PC与与PLC通讯

在采用PC机与PLC通讯时,计算机采用PPI电缆或普通的485串口卡与PLC的编程口连接,PC机采用VB编程,遵循PPI协议,主从式的通讯方式,一次读写操作的步骤包括:

首先上位机发出读写命令,PLC作出接收正确的响应(返回应答数据E5H),上位机接到此响应则发出确认命令(10025C5E16),PLC完成正确的读写响应,返回给上位机相应数据。

这样收发两次数据,完成一次数据的读写。

那么我们就可以利用上述PPI协议,读写S7-200PLC中的各种类型数据,包括I、Q、SM、M、V、T、C、S等数据类型,能够直接读出以上变量中的位、字节、字、双字等,(其中读位变量时,实际是读取该位所在的字节值)。

可以改变PLC的运行状态(RUN/STOP)。

在编程时,最好将读取的检测值、输出值等数据,存放在PLC的一个连续的变量区中,当上位机读取PLC的数据时,就可以一次读出这组连续的数据,减少数据的分次频繁读取。

当修改设定值等数据时,进行写数据的通讯操作。

现场设备与PLC通讯

利用PPI协议除了能与上位机(PC)通讯外,更重要的是为现场设备与S7-200CPU之间的通讯提供了捷径。

自行开发的设备可以方便的利用PPI协议通过485/232接口接入S7-200CPU,联入PLC的网络,包括控制面板,采集器等。

5总结

通过分析STEP7Micro/win32软件与S7-200CPU的通讯数据,我们得到了西门子PPI协议的关键报文格式,这一结果对工程实践具有较高的参考价值。

在不使用西门子或其它组态软件的情况下,利用分析得到的PPI协议实现了上位机对PLC的监控。

现场设备与PLC通讯方面的工作正在进行中。

另外这种对通讯端口进行监测、分析的方法也对一些未知协议的测定和通讯错误的检查具有指导意义。

参考资料

1.周晓平,姜建芳,苏少钰,陈迅.S7-200系列PLC与监控计算机通信实现的研究.微计算机信息2004;

1.

2.SIEMENS.SIMATICS7-200可编程序控制器系统手册.02ed,2000.

3.郝莉,王东兴.PROFIBUS从站与S7-200PLC的通讯研究.北京机械工业学院学报(综合版)2000;

15

PPI通讯VB程序例

rivateDeclareSubSleepLib"

kernel32"

(ByValdwsecondsAsLong)

PrivateSubLabel3_Click()

EndSub

PrivateSubLabel9_Click()

PrivateSubCommand1_Click()

DimleixingAsString

DimxxAsString

DimhaAsString

DimdizhiAsString

Dimstr_read(0To32)AsByte

DimiAsInteger

DimTemp_FCSAsVariant

Dimstr_val(0To5)AsByte

dizhi=Text2.Text

leixing=Text1.Text

Ifleixing="

s"

Orleixing="

sm"

i"

q"

v"

vb"

vw"

vd"

Then

xx=&

H4

ha=&

H1

EndIf

Ifleixing="

H5

EndIf

H81

H82

m"

H83

H84

H2

str_read(0)=&

H68

str_read

(1)=&

H1B

str_read

(2)=&

str_read(3)=&

str_read(4)=&

str_read(5)=&

H0

str_read(6)=&

H6C

str_read(7)=&

H32

str_read(8)=&

str_read(9)=&

str_read(10)=&

str_read(11)=&

str_read(12)=&

str_read(13)=&

str_read(14)=&

HE

str_read(15)=&

str_read(16)=&

str_read(17)=&

str_read(18)=&

str_read(19)=&

H12

str_read(20)=&

HA

str_read(21)=&

H10

str_read(22)=&

str_read(23)=&

str_read(24)=ha

str_read(25)=&

str_read(26)=&

str_read(27)=xx

str_read(28)=&

str_read(29)=(Str(dizhi)*8)\\256

str_read(30)=(Str(dizhi)*8)Mod256

Fori=4To30

Temp_FCS=Temp_FCS+str_read(i)

Nexti

str_read(31)=Temp_FCSMod256

str_read(32)=&

H16

MSComm1.Output=str_read

Text4.Text="

"

Sleep(50)

str_val(0)=&

str_val

(1)=&

str_val

(2)=&

str_val(3)=&

H5C

str_val(4)=&

H5E

str_val(5)=&

MSComm1.Output=str_val

Else:

IfMsgBox("

数据类型输入错误,正确类型为SSMIQMVVBVWVD"

1+32+0,"

关闭"

)=1Then

PrivateSubCommand2_Click()

UnloadForm4

PrivateSubForm_Load()

MSComm1.CommPort=1

MSComm1.Settings="

9600,e,8,1"

MSComm1.InputLen=0

MSComm1.RThreshold=28

MSComm1.InputMode=comInputModeBinary

MSComm1.PortOpen=True

PrivateSubMSComm1_OnComm()

Dimrcv_array()AsByte

Dimdis_arrayAsString

Dimrcv_lenAsLong

DimyyAsString

DimhahaAsString

rcv_array=MSComm1.Input

rcv_len=UBound(rcv_array)

ReDimtemP(0ToUBound(rcv_array))

Fori=0Torcv_len

dis_array=dis_array&

Hex(rcv_array(i))&

"

IfLen(dis_array)=38Then

yy=Mid(dis_array,34,1)

IfLen(dis_array)=39Then

yy=Mid(dis_array,34,2)

IfLen(dis_array)=42Then

yy=Mid(dis_array,35,4)

IfLen(dis_array)=45Then

yy=Mid(dis_array,35,5)

Text3.Text=Val("

&

H"

&

yy)

Text4.Text=dis_array

西门子PPI通讯协议

S7-200PLC之PPI协议

通过硬件和软件侦听的方法,分析PLC内部固有的PPI通讯协议,然后上位机采用VB编程,遵循PPI通讯协议,读写PLC数据,实现人机操作任务。

这种通

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1