PROFIBUS教程(十三)——系统功能SFC14与SFC15作者:PLC-CNC,发表于:现场总线共有0人回复,320次点击QQ留言收藏此帖在STEP7中的I/O存取命令不允许用单字节、单字或双字命令去存取具有3个或大于4字节的相连续的DP数据区域(模块)。为了存取这种封闭结构的相连续的数据区域,使用系统功能DPRD_DAT和DPWR_DAT。一、系统功能SFC14DPRD_DAT为了读一个DP从站的相连续的输入数据区域,使用系统功能SFC14DPRD_DAT,每个读存取涉及一个专用输入模块。如果一个DP从站有若干个相连续的输入模块,则必须为所要读的每个输入模块分别安排一个SFC14调用。表1列出了你必须定义的SFC14的输入和输出参数。表1SFC14DPRD_DAT的参数参数说明数据类型存贮器区域描述LADDRINPUTWORDI,Q,M,D,L(不变的)用HWConfig组态的DP从站的输入模块开始地址规定(十六进制格式)RET_VALOUTPUTINTI,Q,M,D,LSFC的返回值RECORDOUTPUTANYI,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参数中指出类型不是BYPE8093由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的参数参数说明数据类型存贮器区域描述LADDRINPUTWORDI,Q,M,D,L(不变的)用HWConfig组态的DP从站的输出模块开始地址的规定(十六进制格式)RECORDOUTPUTANYI,Q,M,D,L所要写的用户数据的源区域RET_VALOUTPUTINTI,Q,M,D,LSFC的返回值参数描述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参数中指出类型不是BYPE8093由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结构和区域才能保证数据的连续性。必须控制复杂功能的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点亮,而