PLCPPI协议及VB程序Word文档下载推荐.docx
- 文档编号:18830204
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:16
- 大小:24.87KB
PLCPPI协议及VB程序Word文档下载推荐.docx
《PLCPPI协议及VB程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PLCPPI协议及VB程序Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
目的地址
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数据,实现人机操作任务。
这种通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PLCPPI 协议 VB 程序