系统功能SFC14SFC15.docx
《系统功能SFC14SFC15.docx》由会员分享,可在线阅读,更多相关《系统功能SFC14SFC15.docx(15页珍藏版)》请在冰点文库上搜索。
系统功能SFC14SFC15
PROFIBUS教程(十三)——系统功能SFC14与SFC15
▪作者:
PLC-CNC 发表于:
现场总线 回复 QQ留言 收藏此帖 发表日期:
2010-06-0318:
14
▪关键字:
PROFIBUSSFC14SFC15教程PROFIBUS教程
在STEP7中的I/O存取命令不允许用单字节、单字或双字命令去存取具有3个或大于4字节的相连续的DP数据区域(模块)。
为了存取这种封闭结构的相连续的数据区域,使用系统功能DPRD_DAT和DPWR_DAT。
一、系统功能SFC14DPRD_DAT
为了读一个DP从站的相连续的输入数据区域,使用系统功能SFC14DPRD_DAT,每个读存取涉及一个专用输入模块。
如果一个DP从站有若干个相连续的输入模块,则必须为所要读的每个输入模块分别安排一个SFC14调用。
表1列出了你必须定义的SFC14的输入和输出参数。
表1SFC14DPRD_DAT的参数
参数
说明
数据类型
存贮器区域
描述
LADDR
INPUT
WORD
I,Q,M,D,L
(不变的)
用HWConfig组态的DP从站的输入模块开始地址规定
(十六进制格式)
RET_VAL
OUTPUT
INT
I,Q,M,D,L
SFC的返回值
RECORD
OUTPUT
ANY
I,Q,M,D,L
所读用户数据的目的区域
参数描述
RECORD
参数RECORD描述在S7CPU上用于从DP从站读取的相连续输入数据的目的区域。
在这里你定义的长度必须与用HWConfig程序为DP从站的输入模块所定义的长度相一致。
请注意,RECORD参数属于数据类型ANY-Pointer。
对于ANY-Pointer只允许的数据类型是BYPE。
RET_VAL
表2中指出了系统功能SFC14的参数RET_VAL的出错代码。
表2SFC14DPRD_DAT的参数RET_VAL返回值
出错代码
W#16#…
说明
0000
无错误发生
8090
对于指定的逻辑基本地址没有模块被组态或超出对于连续的数据所允许的长度
8092
在数据类型ANY-Pointer参数中指出类型不是BYPE
8093
由LADDR指定的逻辑地址,不存在可以从中读取连续的数据的模块
80A0
所选择的模块有缺陷
80B0
在外部DP接口上从站故障
80B1
指定的目的区域的长度与通过HWConfig指定的用户数据长度不一致
808x
对于外部DP接口系统出错
80B2
对于外部DP接口系统出错
80B3
‥‥
80C0
‥‥
80C2
‥‥
80Fx
‥‥
87xy
‥‥
二、系统功能SFC15DPWR_DAT
从S7CPU传送一个连续的输出数据到DP从站,使用系统功能SFC15DPWR_DAT。
每个写存取涉及一个专用的输出模块。
如果DP从站有若干个连续的数据输出模块,则对每个要写入的输出模块必须分别安排一个SFC15调用。
表3指出了必须定义的SFC15的输入和输出参数。
表3SFC15DPWR_DAT的参数
参数
说明
数据类型
存贮器区域
描述
LADDR
INPUT
WORD
I,Q,M,D,L(不变的)
用HWConfig组态的DP从站的输出模块开始地址的规定(十六进制格式)
RECORD
OUTPUT
ANY
I,Q,M,D,L
所要写的用户数据的源区域
RET_VAL
OUTPUT
INT
I,Q,M,D,L
SFC的返回值
参数描述
RECORD
参数RECORD描述要从S7CPU写入DP从站的连续的输出数据的源区域。
在这里指定的长度必须与用HWConfi组态的DP从站的输出模块的长度相一致。
请注意,参数RECORD属于数据类型ANY-Pointer,对于ANY-Pointer只允许是数据类型BYTE。
RET_VAL
表4中列出了SFC15的参数RET_VAL出错代码。
表4对SFC15DPWR_DAT规定的返回值
出错代码
W#16#…
说明
0000
未出现错误
8090
对于指定的逻辑基准地址没有模块被组态的模块或超出所允许的连续的数据长度
8092
在数据类型ANY-Pointer参数中指出类型不是BYPE
8093
由LADDR指定的逻辑地址,不存在可以对它写入连续的数据的模块
80A1
所选择的模块有缺陷
80B0
在外部DP接口上从站故障
80B1
所指定的源区域的长度与通过HWConfig组态指定的用户数据长度不一致
80B2
对于外部DP接口系统出错
80B3
对于外部DP接口系统出错
80C1
在模块上先前写作业的数据还未被模块处理完
808x
对外部DP接口系统出错
80Fx
‥‥
85xy
‥‥
80C2
‥‥
三、用I/O存取命令的数据通信
SIMATICS7系统的CPU通过用STEP7程序编写的专用的I/O存取命令来寻址分散外围设备模块的I/O数据。
这些命令直接调用I/O存取或通过过程映象调用I/O存取。
用于读和写分散I/O信息的数据格式可以是字节、字或双字。
图1解释用不同数据格式与DP从站的I/O通信。
然而,有些DP从站模块有更复杂的数据结构。
它们的输入和输出数据区域有3个字节或大于4个字节的长度。
这些数据区域也称谓连续的I/O数据区域。
在使用连续的数据区域的DP从站的参数集中,参数“Consistency”必须设置为“All”。
对于连续的数据,输入和输出数据不能通过过程映象来传送,也不能用通常的I/O存取命令来调用数据交换。
原因在于对DP主站上的输入/输出数据的CPU更新循环。
DP输入/输出数据的更新只能由DP主站与DP从站间的循环数据交换(总线循环)而确定(见图2)。
因此,从DP主站来的数据或到DP主站的数据可能已经在寻址的DP从站I/O数据的一条STEP7存取指令与下一条I/O存取指令之间被更改了。
由于这个缘故,仅对用户程序用字节、字或双字命令无任何中断地编址的I/O结构和区域才能保证数据的连续性。
更新PII(过程映象输入表)。
传送PIO(过程映象输出表)到输出。
必须控制复杂功能的DP从站,如闭环控制器或电气驱动等,它们通常不能用简单的数据结构来完成这些任务。
这些DP从站需要更大的输入和输出区域,而且在这些I/O区域中的信息常常是相连不可分割的。
因此,它们不能用字节、字和双字的结构来存贮。
这样的数据区域称之为“连续的”。
在一个输入/输出模块内,用组态报文可以指定长度可达64字节或字(128字节)的数据区域。
为了对这些相关的模块读或写信息,必须使用DP从站的连续的输入/输出数据区域和特殊的功能。
在SIMATIS7中,系统功能SFC14DPRD_DAT和SFC15DPWR_DAT是为此目的保留的。
图3指出系统功能SFC14和SFC15的工作原理。
SFC的参数LADDR是一个指针,它指向要读出的输入数据区域或指向要写入的输出数据区域。
在SFC参数中,所指定的DP从站的输入或输出模块的起始地址必须与早先用HWConfig程序组态时规定的地址相同,而且这些地址用十六进制数表示。
四、用SFC14DPRD_DAT和SFC15DPWR_DAT交换连续的数据
下面的实例项目解释SFC14和SFC15的使用。
实例中所使用的硬件与前面教程十的描述相同(S7-300/CPU315-2DP作为I-从站),但此项目限于一个S7DP主站(S7-400)和一个I-从站(S7-300)。
因此,必须去掉在前面实例中已组态的ET200B和ET200M节点。
用合适的PROFIBUS电缆将S7-300的DP接口与S7-400控制器彼此连接,并接通设备的电源。
此项目基于假定两个可编程控制器均已复位,即它们的工作内存、装载内存和系统内存均被完全清零。
两个PLC都处在RUN状态(开关位置RUN-P)。
I-从站的两个连续的输入/输出数据区域每个都有10字节长,且参数
“Consistency”设置为“All”。
这就是说,在I-从站上和DP主站的输入/输出数据通信必须使用系统功能SFC14和SFC15。
用于I-从站(带CPU315-2DP的S7-300)的用户程序
本实例项目中的I-从站具有大于4字节的连续的输入/输出区域。
因此,正如使用S7DP主站一样,必须使用系统功能SFC14和SFC15来传送I/O数据。
切记,由DP主站用SFC15发送的输出数据被I-从站用SFC14来读出并作为其输入数据,反之也适用于从I-从站来的作为DP主站的输入数据。
图4对此作了解释。
SIMATICS7-300控制器的CPU不识别编址错误。
因此,对于CPU315-2DP,可以将用SFC发送的I/O数据放在另外的未被占用的过程映象区域中,例如可以用IB100~IB109和QB100~QB109。
因此在用户程序中,就可以用简单的位、字节、字和双字指令来编址这个数据。
现在,让我们来生成用于I-从站所需的用户程序。
在SIMATICManager中,打开项目S7-PROFIBUS-DP,双击文件夹SIMATIC300,再通过文件夹CPU315-2DP和S7-Program进入Blocks文件夹(图5)。
双击Blocks文件打开它,由HWConfig生成的组织块OB1和系统数据块(SDBs)已经设置在此文件夹中。
注意,必须节省并符合HWConfig中配置的硬件,否则HWConfig不能生成系统数据,此时将看到无系统数据文件夹。
·双击OB1打开它,自动打开STEP7程序LAD/STL/FBD。
用STL视图为OB1编程。
·在程序编辑器中,键入命令“CALLSFC14”,并用RETURN键确认。
SF14DPRD_DAT显示出输入和输出参数。
如图6所示定义这些输入和输出参数。
输入装载和发送指令,然后调用SFC15,再为此系统功能定义输入和输出参数。
当这两个SFC被调用时,用于这些标准功能的相关块的外形就自动地从STEP7标准库(…\SIE-MENS\STEP7\S7Libs\STDLIB30)中拷贝给命名为Blocks的文件夹。
图5带有打开的Blocks文件夹的SIMATICManager
图6带OB1(用于CPU315-2DP的实例程序)的STEP7中的STL程序编辑器
·为了能容易地监视DP主站上的数据通信,用适当的装载和传送指令(见图6)将所接收的第1个数据字节(IB100)转送到要被发送的第1个数据字节(QB100)。
此后,将拷贝来自I-从站输入数据区域的由DP主站发送的第1个数据字节立刻返回到I-从站的输出数据区域,然后返回DP主站。
·用Save保留OB1,并关闭用于OB1的程序编辑器(在本例中,即STL编辑器)。
在Windows95/NT的工具条中,转换到SIMATICManager。
现在,这Blocks文件夹应包含块对象Systemdata、OB1、SFC14和SFC15。
当DP主站改变它的运行模式或崩溃时,操作系统通过调用I-从站上的某个OB作出反应。
如果在I-从站上这些OB丢失,则CPU立即自动地切换到STOP。
因此,下一步是在I-从站上建立相关的出错OB,以防止CPU在此情况下进入STOP。
·当DP主站的CPU从RUN转换到STOP时,在I-从站上的组织块OB82(诊断中断)被调用。
为了防止CPU由于不存在OB82而STOP,应在SIMATIC300
(1)站的Blocks文件夹中插入OB82。
请按下面的过程进行:
右击Blocks文件夹打开上下文菜单,然后选择INSERTNEWOBJECT→ORGANIZATIONBLOCK,在“Properties-OrganizationBlock”对话框中的“Name”字段中键入“OB82”,用OK退出对话框。
返回SIMATICManager就可以看到对象OB82观已插入在Blocks文件夹中。
·当DP主站崩溃时,在I-从站上调用组织块OB86(机架故障)。
为防止I-从站的CPU在这样的情况下进入STOP,必须建立OB86。
其建立过程与建立OB82的过程相同。
·用工具条中的DOWNLOAD按钮或从菜单条中选择PLC→DOWNLOAD,拷贝Blocks文件夹中的所有块进入CPU315-2DP。
为此,必须用MPI电缆把PG编程装置或PC连接到CPU315-2DP,PLC的电源必须打开。
在下载时,CPU315-2DP的运行模式开关必须处在RUN-P或STOP位置。
·下载后,切换CPU315-2DP的开关回到RUN。
这就是说,如果在下载期间运行模式开关处于STOP,则现在把它从STOP转换到RUN-P。
如果在下载期间此开关已经处在RUN-P位置,则将自动地询问现在是否起动CPU315-2DP。
用OK确认。
用于DP接口的CPU315-2DP的LED具有如下状态:
“SFDP”LED点亮,而“BUSF”LED闪烁。
用于DP主站(带CPU416-2DP的S7-400)的用户程序
为了生成本实例项目中的DP主站程序,打开SIMATIC400
(1)站的Blocks文件夹。
打开OB1并调用SFC14和SFC15,如图7所示。
CALLSFC14
LADDR?
W#16#3E8//输入模块的起始地址(1000,十进制)
RET_VAL?
MW200//返回值在存贮字200中
RECORD?
P#DB10.DBX0.OBYTE10//指针指向输入数据的数据区域
CALLSFC15
LADDR?
W#16#3E8//输出模块的起始地址(1000,十进制)
RECORD?
P#DB20.DBX0.OBYTE20//指针指向输出数据的数据区域
RET_VAL?
MW200//返回值在存贮字202中
图7用于使用SFC14和SFC15数据通信的DP主站程序(实例)
为了避免因不存在诊断和出错OB而使DP主站CPU进入STOP,应在DP主站CPU上建立OB82和OB86。
使用数据块DB10和DB20作为I-从站的输入/输出数据的数据区域。
要保证有足够的空间用于这些DB。
·选择Blocks文件夹,打开块捷菜单并使用INSERTNEWOBJECT→DATABLOCK,插入一个新的数据块。
在“Properties_DataBlock”对话框中的“Name”字段登入DB10,用OK退出此对话框。
·双击Blocks文件夹中的DB10,在“NewDataBlock”对话框中,选择Create组中的“DataBlock”,用OK确认。
这就打开了DB编辑器,用10字节(字节0到9)的长度登入BYTE-ARRAY(ARRAY=相同数据类型元素的集合)(见图8)。
保存DB10。
用相同的方法建立DB20,但此次在Name列中键入“Outputdata”。
保存DB20,关闭用于DB10和DB20的编辑屏幕。
·使用任务条返回到SIMATICManager中的Blocks文件夹。
现在,选择DOWNLOAD命令拷贝Blocks文件夹中的所有块到CPU416-2DP中。
在PG编程装置或PC与CPU416-2DP之间务必用MPI电缆连接,CPU的运行模式开关处在STOP状态。
·下载以后,设置CPU的运行模式开关为RUN-P。
现在CPU416-2DP必须处在RUN模式。
这里有关DP的出错LED(“SFDP”LED或“BUSF”LED)必须没有被点亮或闪烁。
如果这些LED处于关闭状态,则DP主站与I-从站间的DP数据通信将无任何出错地执行。
五、测试DP主站和I-从站间的数据交换
为了测试输入/输出数据的交换,对此项目我们选择在线查看。
在SIMATICManager中,选择View→ONLINE。
确保在PG/PC编程装置与CPU416-2DP之间正确地用MPI电缆连接。
打开SIMATIC400
(1)文件夹,右击CPU416-2DP打开快捷菜单。
选择PLC→MONITOR/MODIFYVARIABLES。
现在,可以更改这些变量以监视系统的响应。
如图9所示登入两个变量DB20.DBB0(I-从站的第1个输出数据字节)和DB10.DBB0(I-从站的第1个输入数据字节)。
登入修正值,例如对第1个输出数据字节为“B#16#11”。
现在,在菜单条中选择VARIABLE→MONITOR或从工具条中选择MONITOR按钮来监视这些变量,两个监视值指示“B#16#00”。
现在,在菜单条中,选择VARIABLE→ACTIVATEMODIFYVALUES为I-从站的第1个输出数据字节激活手动登入值。
可以看到两个变量的监视值立即转变为设定值。
其原因是I-从站从DP主站接收到的数据立即由用户程返回给DP主站。