西门子顺序功能图语言S7 Graph的应用
- 格式:doc
- 大小:1.44 MB
- 文档页数:17
西门子PLC编程软件STEP7编程语言西门子PLC广泛的应用在各种工业自动化领域。
用户在使用西门子PLC编程软件STEP7进行程序逻辑设计时,可以使用多种编程语言来实现。
本文下面介绍一下西门子PLC编程软件中的各种编程语言,为用户更好的设计西门子PLC的软件程序。
西门子PLC编程语言编程语言种类很多,各有各的优势,语句表和指令表类似,是编程语言的一种,在PLC中应用比较普遍,也是一种高级编程语言,PLC 中语句表、梯形图、SCL等编程语言的特点:1、顺序功能图(SFC-Seauential Fuction Chart)这是位于其它编程语言之上的图形语言,用来编程顺序控制的程序(如:机械手控制程序)。
编写时,工艺过程被划分为若干个顺序出现的步,每步中包括控制输出的动作,从一步到另一步的转换由转换条件来控制,特别适合于生产制造过程。
西门子STEP7中的该编程语言是S7 Graph。
2、梯形图(LAD-LAdder Diagram)这是使用最多的PLC编程语言。
因与继电器电路很相似,具有直观易懂的特点,很容易被熟悉继电器控制的电气人员所掌握,特别适合于数字量逻辑控制。
梯形图由触点、线圈和用方框表示的指令构成。
触点代表逻辑输入条件,线圈代表逻辑运算结果,常用来控制的指示灯,开关和内部的标志位等。
指令框用来表示定时器、计数器或数学运算等附加指令。
在程序中,最左边是主信号流,信号流总是从左向右流动的,不适合于编写大型控制程序。
3、语句表(STL-STatement List)是一种类似于微机汇编语言的一种文本编程语言,由多条语句组成一个程序段。
语言表适合于经验丰富的程序员使用,可以实现某些梯形图不能实现的功能。
4、功能块图(FBD-Function Block Diagram)功能块图使用类似于布尔代数的图形逻辑符号来表示控制逻辑,一些复杂的功能用指令框表示,适合于有数字电路基础的编程人员使用。
功能块图用类似于与门、或门的框图来表示逻辑运算关系,方框的左侧为逻辑运算的输入变量,右侧为输出变量,输入、输出端的小圆圈表示“非”运算,方框用“导线”连在一起,信号自左向右。
西门子PLC的几种编程语言简单介绍西门子PLC的几种编程语言不同的商家的PLC有不同的编程语言,但就某个商家而言,PLC的编程语言也就那么几种。
下面,以西门子PLC的编程语言为例,说明一下,各种编程语言的异同。
1、顺序功能图(SFC-Seauential Fuction Chart)这是位于其它编程语言之上的图形语言,用来编程顺序控制的程序(如:机械手控制程序)。
编写时,工艺过程被划分为若干个顺序出现的步,每步中包括控制输出的动作,从一步到另一步的转换由转换条件来控制,特别适合于生产制造过程。
西门子STEP7中的该编程语言是S7Graph。
2、梯形图(LAD-LAdder Diagram)这是使用使用最多的PLC编程语言。
因与继电器电路很相似,具有直观易懂的特点,很容易被熟悉继电器控制的电气人员所掌握,特别适合于数字量逻辑控制。
梯形图由触点、线圈和用方框表示的指令构成。
触点代表逻辑输入条件,线圈代表逻辑运算结果,常用来控制的指示灯,开关和内部的标志位等。
指令框用来表示定时器、计数器或数学运算等附加指令。
在程序中,最左边是主信号流,信号流总是从左向右流动的。
不适合于编写大型控制程序。
3、语句表(STL-ST atement List)是一种类似于微机汇编语言的一种文本编程语言,由多条语句组成一个程序段。
语言表适合于经验丰富的程序员使用,可以实现某些梯形图不能实现的功能。
4、功能块图(FBD-Function Block Diagram)功能块图使用类似于布尔代数的图形逻辑符号来表示控制逻辑,一些复杂的功能用指令框表示,适合于有数字电路基础的编程人员使用。
功能块图用类似于与门、或门的框图来表示逻辑运算关系,方框的左侧为逻辑运算的输入变量,右侧为输出变量,输入、输出端的小圆圈表示“非”运算,方框用“导线”连在一起,信号自左向右。
5、结构化文本(ST-Structured T ext)结构化文本(ST)是为IEC61131-3标准创建的一种专用的高级编程语言。
使用S7 Graph 编程的例子“图1-1”中的两条运输带顺序相连,为了避免运送的物料在1号运输带上堆积,起动时应先起动1号运输带,延时6 s 后自动起动2号运输带。
停机时为了避免物料的堆积,应尽量将皮带上的余料清理干净,使下一次可以轻载起动,停机的顺序应与起动的顺序相反,即按了停止按钮后,先停2号运输带,5 s 后再停1号运输带。
“图1-1”给出了输入输出信号的波形图和顺序功能图。
控制1号运输带的Q1.0在步M0.1~M0.3中都应为1。
为了简化顺序功能图和梯形图,在步M0.1将Q1.0置为1,在初始步将Q1.0复位为0。
Y0Y12号运输带1号运输带I1.0I1.16s 5s复位 1号 运输带2号 运输带运行置位 1号 运输带延时 5s图1-1 运输带控制系统示意图与顺序功能图1. 创建使用S7 Graph 语言的功能块FB(1) 打开SIMATIC 管理器中的“Blocks ”文件夹。
(2) 用右键点击屏幕右边的窗口,在弹出的菜单中执行命令“Insert New Object→Function Block ”。
(3) 在“Properties →Function Block ”对话框中选择编程语言为GRAPH ,功能块的编号为FB 1。
单击【OK 】按钮确认后,自动打开刚生成的FB 1,FB 1中有自动生成的第1步Step 1和第1个转换Trans1。
2. S7 Graph 的两种编辑模式(1) “Direct ”(直接)编辑模式执行菜单命令“Insert ”→“Direct ”将进入“Direct ”编辑模式。
如果希望在某一元件的后面插入新的元件,首先用鼠标选择该元件,点击工具条上希望插入的元件对应的按钮,或从“Insert ”菜单中选择要插入的元件。
为了在同一位置增加同类型的元件,可以连续点击工具条上同一个按钮或执行“Insert ”菜单中相同的命令。
(2) “Drag and Drop ”编辑模式执行菜单命令“Insert ”→“Drag-and-Drop ”,将进入“Drag and Drop ”(拖放)编辑模式。
任务七S7-GRAPH选择性分支的顺序控制——正反转自动、手动控制任务书:一、控制要求有一台电动机控制系统,有自动正反转及手动正反转控制功能。
当切换到自动控制时,按下自动控制启动按钮后,电机先正转5秒、然后反转5秒,如此循环进行,直到按下停止按钮才停止运行。
当切换到手动控制时,按下手动正转按钮电机正转,按下手动反转按钮电机反转,按下停止按钮电机停止运行,正反转可以任意转换。
二、任务要求要求用西门子S7-300PLC的S7-GRAPH顺控指令编程控制,还要用WINCC进行监控。
除了自动、手动切换功能外,其它的控制功能在WINCC中要能控制。
S7-300PLC与计算机通过以太网通讯。
任务目标:1、会组态硬件;2、掌握S7-300PLC的S7-GRAPH选择性分支编程;3、会设计相应的控制程序。
任务分析:(1)I/O点确定表7-1:(2表7-2任务准备:一、软件准备1、操作系统WINDOWS XP SP3;2、S7-300PLC编程软件STEP7 V5.5 SP3中文版(安装S7-GRAPH编程插件);3、组态监控软件WINCC V7.0 SP3中文版;二、硬件准备1、计算机一台,安装以上软件。
2、PLC硬件:电源模块:PS 307 2ACPU模块:6ES7 315-2EH14-0AB0数字量输入模块:6ES7 321-1BH02-0AA0数字量输出模块:6ES7 322-1BH01-0AA0模拟量输入模块:6ES7 331-7KF02-0AB0模拟量输出模块:6ES7 332-5HD01-0AB03、其它网络配件交换机H3C S1016超五类网线PROFIBUS-DP现场总线电缆6XV1 830-0EH10PROFIBUS-DP总线接头6ES7 972-0BA50-0XA0任务实施:一、实施步骤1、安装PLC线路。
2、设置计算机与西门子PLC的通讯接口。
3、组态西门子S7-300PLC的硬件。
4、设计S7-GRAPH控制程序。
S7-1200 PLC(可编程逻辑控制器)是西门子(Siemens)公司生产的一种常用的工业控制器。
S7-1200 PLC支持多种编程语言,包括以下几种常见的编程语言:
Ladder Diagram(梯形图):梯形图是最常用的PLC编程语言之一,它通过连接各种逻辑元件(如继电器、计数器、计时器等)来实现控制逻辑。
梯形图类似于电路图,易于理解和编写。
Function Block Diagram(功能块图):功能块图是一种基于图形化块表示的编程语言。
通过将不同的功能块组合在一起,可以实现复杂的控制逻辑。
功能块图适用于模块化的程序设计。
Structured Text(结构化文本):结构化文本是一种类似于高级编程语言的文本编程语言,使用类似于C或Pascal的语法。
它允许程序员使用结构化的控制语句和函数来编写程序。
Sequential Function Chart(顺序功能图):顺序功能图是一种用于描述并行和顺序操作的图形化编程语言。
它将程序分解为多个并行运行的步骤,并通过状态迁移来控制程序的执行顺序。
Instruction List(指令表):指令表是一种类似于汇编语言的编程语言,使用简单的指令来编写程序。
它适合于对底层操作进行精确控制的应用。
在S7-1200 PLC编程中,可以根据具体的应用需求选择适合的编程语言。
不同的编程语言有不同的特点和适用场景,程序员可以根据自己的经验和项目要求选择合适的编程语言。
科技与创新┃Science and Technology&Innovation ·172·2021年第14期文章编号:2095-6835(2021)14-0172-02顺序功能图(SFC)在西门子S7-200SMART上的编程实现方法及比较*刘海洋,王峰(江苏省宿迁学院机电工程学院,江苏宿迁223800)摘要:采用顺序功能图法可以实现复杂顺序控制PLC程序的编制,具有简单、直观、高效等优点。
对于S7-200SMARTPLC,还要使用其编程指令对顺序功能图进行转换。
转换有三种方法,分别是基于起保停的转换方法、基于置位复位指令的转换方法、基于SCR指令的转换方法。
以一个实例,介绍这三种转换方法,并对这三种方法进行比较。
关键词:顺序功能图;S7-200SMART;编程;实现方法中图分类号:TH39;TM571.61文献标志码:A DOI:10.15913/ki.kjycx.2021.14.070顺序功能图是PLC中一种解决复杂顺序控制的语言,它的出现使顺序控制类编程变得简单明了。
国际电工委员会(IEC)于1988年公布了“控制系统功能图准备”标准(IEC848),中国在1986年颁布了功能图的国家标准(GB6988-6-86)。
目前国际电工委员会正在实施并发展这种语言的编程标准,1994-05公布的IEC可编程序控制器标准(IEC1131)中,顺序功能图被确定为PLC位居首位的编程语言。
S7-200SMARTPLC是西门子近年来主推的小型PLC,是S7-200的升级换代产品。
对于S7-200SMART,顺序功能图还要使用其编程指令进行转换,转换有三种方法,分别是基于起保停的转换方法、基于置位复位指令的转换方法、基于SCR指令的转换方法。
下面通过一个实例介绍这三种转换方法,并对三种方法进行比较。
1顺序功能图顺序功能图是一种图形化编程语言,它是用流程图来表达一个顺序控制过程,由步、转换条件及有向连线组成。
5.6 顺序功能图语言S7 Graph 的应用5.6.1 S7 Graph 语言概述S7 Graph 语言是S7-300/400的顺序功能图语言,遵从IEC 61131-3标准的规定。
1.顺序控制程序的结构一个顺序控制项目至少需要一个调用S7 Graph FB 的块,一个S7 Graph FB 和它的背景数据块。
CALL FB1, DB1SQ_INIT :=OB/FB/FCFB1DB1永久性指令永久性指令S7 Graph 功能块FB1的背景数据块图5-45 顺序控制系统中的块图5-46 S7 Graph 编辑器步与转换跳步分支中止选择序列的分支选择序列的合并并行序列的分支并行序列的合并选择对象预选/直接插入监视时间T 插入监视时间U 插入永久条件插入动作插入永久性FB ,FC 调用插入顺序控制器“Drag and Drop ”模式时与鼠标一起移动的图形图5-49 顺序控制器工具条与移动的图形3.S7 Graph 的显示模式在View 菜单中选择显示顺序控制器(Sequencer )、单步和永久性指令。
(1)在顺序控制器显示方式,执行菜单命令“View>Display with ”,可以选择:Symbols :显示符号表中的符号地址; Comments :显示块和步的注释;Conditions and Actions:显示转换条件和动作;Symbol List:在输入地址时显示下拉式符号地址表。
(2)单步显示模式只显示一个步和转换的组合,还可以显示Supervision:监控被显示的步的条件;Interlock:对被显示的步互锁的条件;执行命令“View>Display with> comments”显示和编辑步的注释。
用“↑”键或“↓”键可以显示上一个或下一个步与转换的组合。
(3)在“permanent instructions”(永久性指令)显示方式,可以对顺序控制器之前或之后的永久性指令编程。
顺序控制顺序控制•顺序控制,就是按照生产工艺预先预定的程序,在各个输入信号的作用下,根据内部状态和时间的顺序,在生产过程中各个执行机构自动有序地进行操作。
•顺序控制设计法最基本的思路是将系统的一个工作周期划分为若干个顺序相连的阶段,这些阶段称为步,当系统处于某一步所在的阶段,称该步为活动步,步活动时所做的操作称为步的动作。
转换将相邻步之间隔开,使系统由当前步进入下一步的信号称为转换条件。
顺序控制•顺序控制设计方法最基本的思路是将系统的一个工作周期划分为若干个顺序相连的阶段,这些阶段称为步。
与系统的初始状态对应的步称为初始步,每个顺序功能图至少应该有一个初始步。
当系统处于某一步所在的状态,该步为“活动步”。
•使系统由当前步进入下一步的信号称为转换条件。
置复位指令的顺序控制程序•一、画出顺序控制功能图,为每个步分别分配对应的存储器位(M )。
•二、在顺控功能运行前设计初始化操作。
将初始步对应的存储器位置1,将其他步对应的存储器位置0。
一、当FC1运行时,每个扫描周期将M1.0取反。
二、当FC1未调用时,将T2置0。
三、FC1被调用时,进行初始化操作。
•Tips:上图初始化方法主要适用于块嵌套深度较大的情况。
初始化操作的方式还有OB100,或者利用调用块的上升沿等方式,要根据具体情况使用。
置复位指令的顺序控制程序•三、编写步与步之间的转换条件。
•四、编写对应步的输出动作。
GRAPH•目前还有很多PLC (例如S7-200和S7-1200)未配备顺序功能图语言,适合利用置复位指令的顺控编程方法。
•S7 GRAPH 语言是S7-300/400用于顺序控制编程的顺序功能图语言。
•GRAPH 编程界面初始步转换条件步对应动作跳转视图工具栏步与转换工具栏GRAPH•Options-Block settings •新建GRAPH功能块。
•在功能块内将VIEW下拉菜单选择LAD梯形图。
只保留初始化接口。
•Tips:Minimum:FB只包括INIT_SQ启动参数,如果程序仅仅会运行在自动模式,并且不需要其他的控制及监控功能,可以选择此模式。
5.6 顺序功能图语言S7 Graph 的应用5.6.1 S7 Graph 语言概述S7 Graph 语言是S7-300/400的顺序功能图语言,遵从IEC 61131-3标准的规定。
1.顺序控制程序的结构一个顺序控制项目至少需要一个调用S7 Graph FB 的块,一个S7 Graph FB 和它的背景数据块。
CALL FB1, DB1SQ_INIT :=OB/FB/FCFB1DB1永久性指令永久性指令S7 Graph 功能块FB1的背景数据块图5-45 顺序控制系统中的块图5-46 S7 Graph 编辑器步与转换跳步分支中止选择序列的分支选择序列的合并并行序列的分支并行序列的合并选择对象预选/直接插入监视时间T 插入监视时间U 插入永久条件插入动作插入永久性FB ,FC 调用插入顺序控制器“Drag and Drop ”模式时与鼠标一起移动的图形图5-49 顺序控制器工具条与移动的图形3.S7 Graph 的显示模式在View 菜单中选择显示顺序控制器(Sequencer )、单步和永久性指令。
(1)在顺序控制器显示方式,执行菜单命令“View>Display with ”,可以选择:Symbols :显示符号表中的符号地址; Comments :显示块和步的注释;Conditions and Actions:显示转换条件和动作;Symbol List:在输入地址时显示下拉式符号地址表。
(2)单步显示模式只显示一个步和转换的组合,还可以显示Supervision:监控被显示的步的条件;Interlock:对被显示的步互锁的条件;执行命令“View>Display with> comments”显示和编辑步的注释。
用“↑”键或“↓”键可以显示上一个或下一个步与转换的组合。
(3)在“permanent instructions”(永久性指令)显示方式,可以对顺序控制器之前或之后的永久性指令编程。
每个扫描循环执行一次永久性指令,可以调用块。
Y0Y12号运输带1号运输带I1.0I1.1Q1.0Q1.11号运输带2号运输带图5-50 运输带控制系统示意图与顺序功能图1.创建使用S7 Graph语言的功能块FB执行菜单命令“Insert → Direct”将进入“Direct”编辑模式。
执行菜单命令“Insert → Drag-and-Drop”,进入“Drag and Drop (拖放)”编辑模式。
执行菜单命令“View→Display with→Conditions and Actions”,显示或关闭各步的动作和转换条件。
图5-51 运输带控制系统的顺序功能图(1)命令S;当步为活动步时,使输出置位为1状态并保持。
(2)命令R:当步为活动步时,使输出复位为0状态并保持。
(3)命令N:当步为活动步时,输出被置为1;该步变为不活动步时,输出被复位为0。
(4)命令L:用来产生宽度受限的脉冲,相当于脉冲定时器。
(5)命令CALL:用来调用块,当该步为活动步时,调用命令中指定的块。
(6)命令D:使某一动作的执行延时,延时时间在该命令右下方的方框中设置。
在“直接”模式用鼠标右键点击动作框,在弹出的菜单中选择插入动作行。
6.对监控功能编程双击步S3后,切换到单步视图,选中Supervision(监控)线圈左边的水平线的缺口处,插入比较器图标,设置的监视时间为2小时。
8.在主程序中调用S7 Graph FB9.用S7-PLCSIM仿真软件调试S7 Graph程序图5-52 单步显示模式中的监控与互锁条件5.6.3 顺序控制器的运行模式与监控操作执行菜单命令“Debug→Control Sequencer”,对顺序控制器进行各种监控操作。
图5-54 顺序控制器监控对话框1.自动模式“Acknowledge”按钮确认被挂起的错误信息。
点击“初始化(Initialize)”按钮,将重新起动顺序控制器,使之返回初始步。
点击“禁止(Disable)”按钮,使顺序控制器中所有的步变为不活动步。
2.手动模式选择“Manual”模式后,用“Disable”按钮关闭当前的活动步。
在“Step Number”输入框中输入希望控制的步的编号,用激活(Activate)按钮或去活(Unactivate)按钮来使该步变为活动步或不活动步。
同时只能有1步是活动步。
3.单步(Inching)模式在单步模式转换条件满足时,需要点击“Continue”按钮,才能使转换到下一步。
4.Automatic or switch to next模式转换条件未满足,用“Continue”按钮也能转换到后续步。
转换条件满足将自动转换。
5.错误显示有互锁(Interlock)错误或监控(Supervision)错误时,相应的检查框为红色。
5.6.4 顺序控制器中的动作1.标准动作中的命令:S, R, N, L, D, CALL标准动作可以设置互锁(在命令的后面加“C”),仅在步处于活动状态和互锁条件满足时,有互锁的动作才被执行。
没有互锁的动作在步处于活动状态时就会被执行。
2.与事件有关的动作A1=1步监控信号互锁信号信息确认信号A1:R1: 记录信号被置位图5-55 控制动作的事件表5-2 控制动作的事件ON命令或OFF命令分别使命令所在的步之外的其他步变为活动步或不活动步。
如果命令OFF的地址标识符为S _ALL,将除了命令“S1(V1, L1) OFF”所在的步之外其他的步变为不活动步。
图5-56 步与动作一旦S3变为活动步和互锁条件满足,指令“S1 RC”使输出Q2.1复位为0并保持为0。
一旦监控错误发生(出现V1事件),除了动作中的命令“V1 OFF”所在的步S3,其他的活动步变为不活动步。
S3变为不活动步时(出现事件S0),将步S7变为活动步。
只要互锁条件满足(出现L0事件),就调用指定的功能块FB 2。
4.动作中的计数器有互锁功能的计数器在互锁条件满足和指定的事件出现时,动作中的计数器才会计数。
事件发生时,计数器指令CS将初值装入计数器。
CS指令下面一行是要装入的初值。
事件发生时,CU,CD,CR指令使计数值分别加1、减1或将计数值复位为0。
5.动作中的定时器事件出现时定时器被执行。
互锁功能也可以用于定时器。
TL为扩展的脉冲定时器命令,一旦事件发生,定时器被起动。
TD命令用来实现定时器位有闭锁功能的延迟。
一旦事件发生,定时器被起动。
互锁条件C仅仅在定时器被起动的那一时刻起作用。
图5-57 步与动作(4)TR是复位定时器命令,一旦事件发生,定时器位与定时值被复位为0。
当图5-57中的步S4变为活动步,事件S1使计数器C4的值加1。
C4可以用来计步S4变为活动步的次数。
只要步S4变为活动步,事件S1使A的值加1。
S4变为活动步后,T3开始定时,4s后T3的定时器位变为1状态。
5.动作中的算术运算在动作中可以使用:A:=B;A:=函数(B) ;A:=B<运算符号>C。
A:=函数(B);5.6.5 顺序控制器中的条件1.转换条件2.互锁条件:如果互锁条件的逻辑满足,执行受互锁控制的动作。
3.监控条件:如果监控条件的逻辑运算满足,表示有干扰事件V1发生。
顺序控制器不会转换到下一步,保持当前步为活动步。
如果监控条件的逻辑运算不满足,表示没有干扰,如果转换条件满足,转换到下一步。
只有活动步被监控。
4.S7 Graph地址在条件中的应用可以在转换、监控、互锁、动作和永久性的指令中,以地址的方式使用关于步的系统信息)。
表5-3 S7 Graph地址表5-4 FB的参数集名称任务Minimum 最小参数集,只用于自动模式,不需要其他控制和监视功能Standard 标准参数集,有多种操作方式,需要反馈信息,可选择确认报文Definable/ Maximum(V5) 可定义最大参数集,需要更多的操作员控制和用于服务和调试的监视功能,它们由V5的块提供5.6.7 用S7 Graph 编写具有多种工作方式的控制程序1.初始化程序、手动程序与自动回原点程序OB100中的初始化程序与5.5节中的图5-37完全相同。
手动程序FC 2与5.5节中的图5-39完全相同。
自动返回原点的梯形图程序FC 3与5.5节图5-42(b)中的相同。
图5-61 主程序OB1S7 Graph FB的参数有好几十个,图5-61中的FB1使用的是标准参数级,下面介绍图中使用的参数:连续、单周期或单步时“自动方式”M0.3为1,调用FB1。
参数INIT_SQ(“自动允许”M0.0)为1:原点条件满足,激活初始步,复位顺序控制器。
参数OFF_SQ为1(“自动允许”M0.0=0):复位顺序控制器,所有的步变为不活动步。
参数ACK_EF(“确认故障”I1.3)为1:确认错误和故障,强制切换到下一步。
参数SW_AUTO(“单周连续”M0.2)为1:切换到自动模式。
参数SW_TAP(“单步”I2.2)为1:切换到Inching(单步)模式。
参数T_PUSH(“起动按钮”I2.6):条件满足并且在T_PUSH的上升沿时,转换实现。
参数ERR_FLT(“错误报警”Q4.5)为1:组故障。
夹紧延时M1.2图5-62 公用程序连续标志M0.7的控制电路放在FB1的顺序控制器之前的永久性指令中。
图5-63 顺序控制器之前的永久性指令2.初始化程序、手动程序与自动回原点程序OB100中的初始化程序与5.5节中的图5-37完全相同。
手动程序FC 2与5.5节中的图5-39完全相同。
自动返回原点的梯形图程序FC 3与5.5节图5-42(b)中的相同。
FB1是自动程序(单步、单周期、连续)。
单步I2.2=SW_TAP=1时有单步功能。
单周连续M0.2=SW_AUTO=1时顺序控制器正常运行。
在顺序控制器中,用永久性指令中的M0.7(连续标志)区分单周期和连续模式。