RAPID程序基本指令
- 格式:pptx
- 大小:2.63 MB
- 文档页数:1
RAPID程序常用特殊指令及功能RAPID(Robot Application Programming Interface Description)是ABB机器人系统中使用的一种编程语言,用于编写机器人的控制程序。
RAPID具有丰富的指令和功能,下面是一些常用的特殊指令及功能的概述。
1.数据类型和变量:RAPID支持多种数据类型,包括整数(int)、浮点数(num)、布尔值(bool)、字符串(string)等。
同时,可以使用变量来存储和处理数据。
在RAPID中可以通过VAR声明变量,并且可以使用LET给变量赋值。
2.运算符:3.条件语句:条件语句允许根据特定的条件来执行不同的操作。
RAPID中的条件语句包括IF语句和CASE语句。
IF语句用于判断一些条件是否成立,并根据条件的结果执行相应的代码块。
CASE语句用于对变量的多个可能值进行判断,并根据值的不同执行相应的代码块。
4.循环:循环语句允许重复执行相同的代码块。
RAPID中的循环语句包括FOR语句和WHILE语句。
FOR语句用于指定一个变量的初始值、终止条件和变化规律,并在每次循环中对变量进行更新。
WHILE语句用于在满足特定条件的情况下循环执行代码块。
5. 过程(Procedure)和模块(Module):过程是RAPID程序的基本执行单元,它是一段有序的代码块,可以通过PROC指令定义和调用。
模块是由一个或多个过程组成的代码块,它可以通过MODULE指令定义,并可以在其他程序中进行调用。
6.信号和事件处理:7.运动指令:RAPID提供了一系列用于控制机器人运动的指令,包括MOVJ、MOVL、MOVES等。
MOVJ指令用于指定关节坐标系下的直线或圆弧运动。
MOVL指令用于指定工具坐标系下的直线或圆弧运动。
MOVES指令用于指定机器人末端执行器坐标系下的直线或圆弧运动。
8.用户定义的功能模块:9.异常处理:RAPID提供了一些异常处理的指令,如TRY、CATCH和FINALLY。
ABB机器人RAPID常用指令详解-中文(4)在RAPID 程序中,静态的WorldZone 不能被解除并再次激活,或者进行擦除。
在RAPID 程序中,临时的WorldZone 可以被解除(WZDisable),再次激活(WZEnable)或者擦除(WZFree)。
语法:WZDOSet[[‘\’Temp] | [‘\’Stat]’,’][WorldZone’:=’][‘\’Inside] | [‘\’Before] ‘,’[Shape’:=’]’,’[Signal’:=’]’,’[SetV alue’:=’]’;’相关信息:1.231.WZEnable—激活临时WorldZone 监视用途:WZEnable(WorldZone 使能)用来重新激活对临时WorldZone 的监视,该WorldZone 之前定义用来停止运动或者设定输出。
基本范例:该指令的基本范例说明如下:例1 V AR wztemporary wzone;…PROC …WZLimSup \Temp, wzone, volume;MoveL p_pick, v500, z40, tool1;WZDisable wzone;MoveL p_place, v200, z30, tool1;WZEnable wzone;MoveL p_home, v200, z30, tool1;ENDPROC当往p_pick 移动的时候,检测到机器人TCP 的位置,这样它就不能进入特定的空间wzone。
当进入p_place 的时候没有进行这个监视,但是在移动到p_home 的时候重新激活。
项目:WZEnable WorldZoneWorldZone:数据类型:wztemporarywztemporary 类型的变量或者恒量,包含要激活的WorldZone 的标识符。
程序执行:临时WorldZone 被再次激活。
注意,当创建WorldZone 的时候,它是自动激活的。
ABB机器人标准指令详解一、 RAPID程序控制指令1、1程序开始/结束控制指令1) PROGRAM START/END1、指令格式: PROGRAM <程序名> <属性> ;2、描述:此指令标识一个机器人程序的开始或结束。
在这里,<程序名>是你给程序取的名字,<属性>是可选的,表示程序的属性(如:INTERLOCK, NO_INTERLOCK, NOPROGRAM等)。
2) JOB START/END1、指令格式: JOB <作业名> <属性> ;2、描述:此指令标识一个作业的开始或结束。
在这里,<作业名>是你给作业取的名字,<属性>是可选的,表示作业的属性(如:INTERLOCK, NO_INTERLOCK, NOPROGRAM等)。
1、2程序转移指令1) GOTO1、指令格式: GOTO <行号>;2、描述:此指令将程序执行转移到指定的行号。
2) GOSUB1、指令格式: GOSUB <行号>;2、描述:此指令将程序执行转移到指定的行号,并在返回时继续执行当前行。
3) RETURN1、指令格式: RETURN;2、描述:此指令将程序执行从 GOSUB转移到父程序,并从 GOTO转移到原程序行。
1、3条件判断指令1) IF/THEN/ELSE/ENDIF;1、指令格式: IF <条件> THEN <表达式> ELSE <表达式> ENDIF;2、描述:如果满足条件<条件>,则执行 THEN后面的表达式;否则执行 ELSE后面的表达式。
2) CASE/ESAC/ENDCASE;1、指令格式: CASE <变量> IN <表达式1> / <表达式2> /... / ENDCASE;2、描述:此指令根据变量<变量>的值选择要执行的表达式。
Grip3的TCP沿直线运动到停止点p5。
当停止点fine的50%的位置条件和50%的速度条件满足的时候,机器人认为它到达了目标点。
它等条件满足最多等两秒,参看stoppointdata数据类型的预定义数据inpos50。
例3 MoveL \Conc, *, v2000, z40, grip3;Grip3的TCP直线运动到存储在指令中的位置。
当机器人移动的时候,后续的逻辑指令开始执行。
例4 MoveL start, v2000, z40, grip3 \WObj:=fixture;Grip3的TCP直线运动到位置start,位置在fixture的对象坐标系统中指定。
语法:MoveL _[ ’\’ Conc ’,’ ]_[ ToPoint ’:=’ ] < robtarget类型的表达式(IN) > ’,’[ ’\’ ID ’:=’ < identno类型的表达式(IN) >]’,’_[ Speed ’:=’ ] < speeddata类型的表达式(IN) >_[ ’\’ V ’:=’ < num类型的表达式(IN) > ] _| [ ’\’ T ’:=’ < num类型的表达式(IN) > ] ’,’_[Zone ’:=’ ] < zonedata类型的表达式(IN) >_[ ’\’ Z ’:=’ < num类型的表达式(IN) > ]_[ ’\’ Inpos ’:=’ < stoppointdata类型的表达式(IN) > ] ‘,’_[ Tool ’:=’ ] < tooldata类型的恒量(PERS) > _[ ’\’ WObj ’:=’ < wobjdata 类型的恒量(PERS)> ] _[ ’\’ Corr ]’;’相关信息:1.97.MoveLDO-直线移动机器人并且在转角处设置数字输出用途:MoveLDO(直线运动数字输出)用来直线移动TCP到指定的目标点。
5.6 RAPID程序指令与功能简述5.6.1 程序执行的控制1. 程序的调用指令说明ProcCall 调用例行程序CallByVar 通过带变量的例行程序名称调用例行程序RETURN 返回原例行程序2. 例行程序内的逻辑控制指令说明Compact IF 如果条件满足,就执行下一条指令IF 当满足不同的条件时,执行对应的程序FOR 根据指定的次数,重复执行对应的程序WHILE 如果条件满足,重复执行对应的程序TEST 对一个变量进行判断,从而执行不同的程序GOTO 跳转到例行程序内标签的位置Lable 跳转标签3. 停止程序执行指令说明Stop 停止程序执行EXIT 停止程序执行并禁止在停止处再开始Break 临时停止程序的执行,用于手动调试SystemStopAction 停止程序执行与机器人运动ExitCycle 中止当前程序的运行并将程序指针PP复位到主程序的第一条指令。
如果选择了程序连续运行模式,程序将从主程序的第一句重新执行。
5.6.2 变量指令1. 赋值指令指令说明:= 对程序数据进行赋值2. 等待指令指令说明WaitTime 等待一个指定的时间,程序再往下执行WaitUntil 等待一个条件满足后,程序继续往下执行WaitDI 等待一个输入信号状态为设定值WaitDO 等待一个输出信号状态为设定值3. 程序注释指令说明Comment 对程序进行注释4. 程序模块加载指令说明Load 从机器人硬盘加载一个程序模块到运行内存UnLoad 从运行内存中卸载一个程序模块Start Load 在程序执行的过程中,加载一个程序模块到运行内存中Wait Load 当Start Load使用后,使用此指令将程序模块连接到任务中使用CancelLoad 取消加载程序模块CheckProgRef 检查程序引用Save 保存程序模块EraseModule 从运行内存删除程序模块5. 变量功能指令说明TryInt 判断数据是否是有效的整数功能说明OpMode 读取当前机器人的操作模式RunMode 读取当前机器人程序的运行模式NonMotionMode 读取程序任务当前是否无运动的执行模式Dim 获取一个数组的维数Present 读取带参数例行程序的可选参数值IsPers 判断一个参数是不是可变量IsVar 判断一个参数是不是变量6. 转换功能指令说明StrToByte 将字符串转换为指定格式的字节数据ByteToStr 将字节数据转换为字符串5.6.3 运动设定1. 速度设定功能说明MaxRobSpeed 获取当前型号机器人可实现的最大TCP速度VelSet 设定最大的速度与倍率SpeedRefresh 更新当前运动的速度倍率AccSet 定义机器人的加速度WorldAccLim 设定大地坐标中工具与载荷的加速度PathAccLim 设定运动路径中TCP的加速度2. 轴配置管理指令说明ConfJ 关节运动的轴配置控制ConfL 线性运动的轴配置控制3. 奇异点的管理指令说明SingArea 设定机器人运动时,在奇异点的插补方式4. 位置偏置功能指令说明PDispOn 激活位置偏置PDispSet 激活指定数值的位置偏置PDispOff 关闭位置偏置EOffsOn 激活外轴偏置EOffsSet 激活指定数值的外轴偏置EOffsOff 关闭外轴位置偏置功能说明DefDFrame 通过三个位置数据计算出位置的偏置DefFrame 通过六个位置数据计算出位置的偏置ORobT 从一个位置数据删除位置偏置DefAccFrame 从原始位置和替换位置定义一个框架5. 软伺服功能指令说明SoftAct 激活一个或多个轴的软伺服功能SoftDeact 关闭软伺服功能6. 机器人参数调整功能指令说明TuneServo 伺服调整TuneReset 伺服调整复位PathResol 几何路径精度调整CirPathMode 在圆弧插补运动时,工具姿态的变换方式7. 空间监控管理指令说明WZBoxDef 定义一个方形的监控空间WZCylDef 定义一个圆柱形的监控空间WZSphDef 定义一个球形的监控空间WZHomeJointDef 定义一个关节轴坐标的监控空间WZLimJointDef 定义一个限定为不可进入的关节轴坐标监控空间WZLimSup 激活一个监控空间并限定为不可进入WZDOSet 激活一个监控空间并与一个输出信号关联WZEnable 激活一个临时的监控空间WZFree 关闭一个临时的监控空间注:这些功能需要选项“World zones”配合。
5.3 常用RAPID程序指令说明ABB机器人的RAPID编程提供了丰富的指令来完成各种简单与复杂的应用。
接着下来,我们就从最常用的指令开始学习RAPID编程,领略RAPID丰富的指令集为我们提供的编程便利性。
下面我们先来看看在示教器进行指令编辑的基本操作:打开ABB菜单,选择“程序编辑器”。
选中要插入指令的程序位置,高显为蓝色。
点击“添加指令”打开指令列表。
点击此按钮可切换到其它分类的指令列表。
5.3.1 赋值指令“:= ”赋值指令是用于对程序数据进行赋值,赋值可以是一个常量或数学表达式。
我们就以添加一个常量赋值与数学表达式赋值进行说明此指令的使用:常量赋值:reg1 := 5;数学表达式赋值:reg2 := reg1+4;在指令列表中选择“:=”点击“更改数据类型….”,选择num数字型数据。
在列表中找到“num”并选中,然后点击“确定”。
选中“reg1”。
选中“<EXP>”并蓝色高亮显示。
打开“编辑”菜单,选择“仅限选定内容”。
通过软键盘输入数字“5”,然后点击“确定”。
点击“确定”。
在这里就能看到所增加的指令。
下面我们来看看添加带数学表达式的赋值指令的操作:在指令列表中选择“:=”。
选中“reg2”。
选中“<EXP>”,显示为蓝色高亮。
选中“reg1”。
点击“+”选中“<EXP>”,显示为蓝色高亮。
打开“编辑”菜单,选择“仅限选定内容”。
通过软键盘输入数字“4”,然后点击“确定”。
点击“确定”。
点击“下方”。
添加指令成功。
点击“添加指令”将指令列表收起来。
编程画面操作技巧放大/缩小画面向上/向下翻页向上/向下移动5.3.2 机器人运动指令机器人在空间中进行运动主要是四种方式,关节运动(MOVEJ),线性运动(MOVEL),圆弧运动(MOVEC)和绝对位置运动(MOVEABSJ)。
下面我们就来看看如何使用与设定这些运动指令。
➢绝对位置运动指令选择“手动操纵”。
RAPID參考手冊指令張建輝韓鵬1.指令1.1.AccSet—降低加速度用途:當處理較大負載時使用AccSet指令。
它允許減慢加速度和減速度,使機器人有一個更平滑的運動。
該指令只能在主任務T_ROB1中使用,或者如果處於多運動系統,在Motion任務中。
基本範例:AccSet的基本範例說明如下。
例1AccSet 50,100;加速度備限制到正常值的50%。
例2AccSet 100,50;加速度斜線限制到正常值的50%。
項目:AccSet Acc RampAcc:資料類型:num(數值)加速度和減速度作為正常值的百分比。
100%對應最大加速度。
最大值:100%。
輸入值<20%則給出最大加速度的20%。
Ramp資料類型:num(數值)加速度和減速度的增加作為正常值的百分比的比例(如圖)。
通過減小這個數值可以限制震動。
100%對應最大比例。
最大值:100%,輸入值<10%則給出最大比例的10%。
下圖說明減小加速度可以平滑運動。
加速度加速度加速度時間時間時間AccSet 100,100 正常加速度AccSet 30,100 AccSet 100,30程式執行:該加速度值應用到機器人和外部軸,直到一個新的AccSet指令執行。
缺省值(100%)在以下情況是自動設置:●冷開機●載入了新的程式●從頭開始執行程式時語法:AccSet [AccSet ‚:=‛]<數值運算式(IN)>‚,‛[Ramp ‚:=‛]<數值運算式(IN)>‚;‛相關資訊:1.2.ActUnit—啟動一個機械單元用途:ActUnit用來啟動一個機械單元。
例如當使用普通驅動單元的時候,它可以用來決定哪一個單元被啟動。
該指令只能在主任務T_ROB1中使用,或者如果處於多運動系統,在Motion任務中。
基本範例:ActUnit的基本範例說明如下:例1 ActUnit orbit_a;orbit_a機械單元的啟動。
ABB 机器人RAPID 常用指令详解-中文1.88.MoveAbsJ—把机器人移动到绝对轴位置用途:MoveAbsJ(绝对关节移动)用来把机器人或者外部轴移动到一个绝对位置,该位置在轴定位中定义。
使用实例:终点是一个单一点对于IR6400C 中的不明确的位置,例如携带超过机器人范围的工具运动。
MoveAbsJ 指令中机器人的最终位置,既不受工具或者工作对象的影响,也不受激活程序更换的影响。
但是机器人要用到这些数据来计算负载、TCP 速度和转角点。
相同的工具可以被用在相邻的运动指令中。
机器人和外部轴沿着一个非直线的路径移动到目标位置。
所有轴在同一时间运动到目标位置。
该指令只能被用在主任务T_ROB1 中,或者在多运动系统中的运动任务中。
基本范例:该指令的基本范例说明如下。
也可参看第207 页更多范例。
例1 MoveAbsJ p50, v1000, z50, tool2;机器人将携带工具tool2 沿着一个非线性路径到绝对轴位置p50,以速度数据v1000 和zone 数据z50。
例2 MoveAbsJ *, v1000\T:=5, fine, grip3;机器人将携带工具grip3 沿着一个非线性路径到一个停止点,该停止点在指令中作为一个绝对轴位置存储(用*标示)。
整个运动需要5 秒钟。
项目:MoveAbsJ [\Conc] ToJointPos [\ID] [\NoEOffs] Speed [\V] | [\T] Zone [\Z] [\Inpos] Tool [\Wobj][\Conc]:并发事件数据类型:switch当机器人正在移动的时候执行的后续指令。
该项目通常不使用,但是当和外部设备通讯、不需要同步的时候可以用来缩短循环周期。
当使用项目\Conc 的时候,连续运动指令的数量限制为5。
在包含StorePath-RestoPath 的程序段中不允许包含项目\Conc 的运动指令。
如果该项目忽略并且ToJointPos 不是一个停止点,在机器人到达程序zone 之前一段时间后续指令就开始执行了。
ABB ROBOT 常用RAPID指令一目录1.简介1.1 系统概述1.2 RAPID指令概述2.基本指令2.1 声明变量2.2 赋值操作2.3 条件判断2.4 循环控制3.运动指令3.1 位置控制3.2 关节控制3.3 力控制4.IO指令4.1 读取输入4.2 设置输出5.系统指令5.1 系统控制5.2 资源管理1.简介1.1 系统概述在ABB系统中,RAPID(Robot Application Programming Interface Description)是一种高级编程语言,用于控制和管理的动作和功能。
RAPID指令是控制系统中的基本操作单元。
1.2 RAPID指令概述RAPID指令提供了广泛的功能,包括变量声明和操作、条件判断、循环控制、运动控制、IO操作等。
本文档将详细介绍常用的RAPID指令。
2.基本指令2.1 声明变量在RAPID中,可以通过VAR关键字声明变量。
变量可以是整数、实数、字符串等不同的数据类型,并且可以具有不同的作用域。
2.2 赋值操作使用:=操作符可以将一个值赋给一个变量。
例如:变量A := 10。
2.3 条件判断通过IF-THEN-ELSE语句可以实现条件判断。
IF后面跟上条件表达式,如果表达式为真,则执行THEN中的语句,否则执行ELSE 中的语句。
2.4 循环控制通过FOR和WHILE语句可以实现循环控制。
FOR语句用于指定循环次数,而WHILE语句用于指定循环条件。
3.运动指令3.1 位置控制位置控制指令用于控制的末端执行器的位置。
其中包括MOVE和HOLD指令。
3.2 关节控制关节控制指令用于控制各关节的角度。
其中包括MOVEJ和MOVEC指令。
3.3 力控制力控制指令用于控制末端执行器的力。
其中包括SETTOOL和FORCE指令。
4.IO指令4.1 读取输入通过读取输入指令,可以获取外部传感器的输入信号。
例如,IN指令用于读取数字输入信号。
4.2 设置输出通过设置输出指令,可以将控制信号发送给外部设备。
ABB 机器人RAPID 常用指令详解-中文1.88.MoveAbsJ—把机器人移动到绝对轴位置用途:MoveAbsJ(绝对关节移动)用来把机器人或者外部轴移动到一个绝对位置,该位置在轴定位中定义。
使用实例:终点是一个单一点对于IR6400C 中的不明确的位置,例如携带超过机器人范围的工具运动。
MoveAbsJ 指令中机器人的最终位置,既不受工具或者工作对象的影响,也不受激活程序更换的影响。
但是机器人要用到这些数据来计算负载、TCP 速度和转角点。
相同的工具可以被用在相邻的运动指令中。
机器人和外部轴沿着一个非直线的路径移动到目标位置。
所有轴在同一时间运动到目标位置。
该指令只能被用在主任务T_ROB1 中,或者在多运动系统中的运动任务中。
基本范例:该指令的基本范例说明如下。
也可参看第207 页更多范例。
例1 MoveAbsJ p50, v1000, z50, tool2;机器人将携带工具tool2 沿着一个非线性路径到绝对轴位置p50,以速度数据v1000 和zone 数据z50。
例2 MoveAbsJ *, v1000\T:=5, fine, grip3;机器人将携带工具grip3 沿着一个非线性路径到一个停止点,该停止点在指令中作为一个绝对轴位置存储(用*标示)。
整个运动需要5 秒钟。
项目:MoveAbsJ [\Conc] ToJointPos [\ID] [\NoEOffs] Speed [\V] | [\T] Zone [\Z] [\Inpos] Tool [\Wobj][\Conc]:并发事件数据类型:switch当机器人正在移动的时候执行的后续指令。
该项目通常不使用,但是当和外部设备通讯、不需要同步的时候可以用来缩短循环周期。
当使用项目\Conc 的时候,连续运动指令的数量限制为5。
在包含StorePath-RestoPath 的程序段中不允许包含项目\Conc 的运动指令。
如果该项目忽略并且ToJointPos 不是一个停止点,在机器人到达程序zone 之前一段时间后续指令就开始执行了。
ABB ROBOT 常用RAPID指令一在工业自动化领域,ABB 机器人凭借其出色的性能和灵活性得到了广泛的应用。
而对于操作和编程 ABB 机器人来说,熟悉常用的 RAPID 指令是至关重要的。
接下来,就让我们一起深入了解一些 ABB 机器人常用的 RAPID 指令。
首先要介绍的是“MoveAbsJ”指令。
这个指令用于将机器人以绝对关节位置的方式移动到指定的目标点。
它的优点在于可以快速地将机器人移动到一个完全确定的位置,而无需考虑机器人当前的姿态。
使用“MoveAbsJ”指令时,需要指定每个关节的角度值。
例如,如果我们想要将机器人的关节 1 移动到 30 度,关节 2 移动到 60 度,关节 3 移动到 90 度,关节 4 移动到 120 度,关节 5 移动到150 度,关节 6 移动到 180 度,可以这样编写指令:MoveAbsJ 30, 60, 90, 120, 150, 180, v1000, z50, tool0;其中,“v1000”表示速度,“z50”表示转弯半径,“tool0”表示工具坐标系。
接下来是“MoveJ”指令。
与“MoveAbsJ”指令不同,“MoveJ”指令是以关节运动的方式将机器人移动到目标点,但目标点是以相对于当前位置的增量方式来指定的。
这使得在一些需要连续关节运动的操作中更加方便。
比如,我们想要让机器人的关节 1 相对于当前位置增加 10 度,关节 2 增加 20 度,关节 3 增加 30 度,关节 4 增加 40 度,关节 5 增加 50 度,关节 6 增加 60 度,可以这样写:MoveJ 10, 20, 30, 40, 50, 60, v800, z30, tool1;“MoveL”指令也是常用的指令之一。
它用于直线运动,机器人会沿着一条直线从当前位置移动到指定的目标位置。
在实际应用中,当需要机器人精确地沿着直线轨迹进行操作时,“MoveL”指令就派上了用场。
RAPID程序指令与功能RAPID是ABB机器人控制器的编程语言之一,它用于编写ABB机器人的控制程序。
RAPID程序指令是一组用于控制机器人运动、执行逻辑判断、与外部设备通信等功能的指令集合。
以下是RAPID程序指令的一些常见功能:1.运动指令:RAPID中的运动指令可以控制机器人的运动,例如直线运动、圆弧运动和旋转运动等。
运动指令可以设置运动的目标位置、速度和加速度等参数,使机器人能够准确地执行所需的运动任务。
2.逻辑控制指令:RAPID中包含了一系列的逻辑控制指令,用于实现条件判断、循环控制等逻辑控制功能。
例如,IF-THEN-ELSE语句可以根据条件的成立与否执行不同的操作;FOR和WHILE循环可以重复执行一系列指令。
3.数学计算指令:RAPID提供了一些数学计算指令,用于进行数值计算和数据处理。
例如,可以使用加法、减法、乘法和除法等基本运算指令;还可以进行三角函数计算、矩阵计算和向量计算等。
4.数组和结构体指令:RAPID支持数组和结构体数据类型,可以定义和操作数组和结构体变量。
可以使用数组来存储和处理一组相关的数据,例如位置数据数组;结构体可以组织不同类型的数据,使其易于管理和访问。
5.任务和过程指令:RAPID允许将一系列指令封装为任务或过程,以便在程序中多次调用。
任务可以用于定义一组相关的操作,例如机器人的自动操作流程,而过程可以用于将一组指令封装为一个单一的可执行单元。
6.文件操作指令:RAPID提供了一些用于文件操作的指令,包括文件读写、复制、删除和重命名等。
这些指令可以用于与外部设备进行数据交换,例如从文件中读取参数或将结果写入文件。
7. 通信指令:RAPID提供了一些用于与外部设备进行通信的指令,可以实现与其他设备或系统的数据交换。
例如,可以使用TCP/IP通信指令与其他计算机进行通信,或使用Modbus通信指令与PLC进行数据交换。
8.异常处理指令:RAPID提供了一些异常处理指令,用于处理运行时出现的异常情况。