KUKA Standard Interface Commands¶
The KUKA Standard Interface provides the following subprograms:
When writing your own program, pay attention to the following:
Multiple parameters should be separated by commas.
All parameters should be defined as runtime variables in the program file.
Parameters can be defined as IN or OUT parameters.
This Standard Interface is over the TCP/IP protocol.
Initialize Communication¶
MM_Init_Socket(XML_Name[]:IN,Alive_Flag:IN,Recv_Flag:IN,Time_Out:IN)
This subprogram sets the name of the XML file used for setting up the TCP/IP communication, flag for successful communication, flag for successful data reception, and wait time before the program stops trying to establish the communication.
Parameters¶
IN parameters
Name
Description
XML_Name[]
Name of the XML file, case-sensitive
Alive_Flag
ALIVE flag number in the XML file
When the flag is set to ON, the communication is successfully established
Recv_Flag
RECEIVE flag number in the XML file
When the flag is set to ON, the robot has successfully received data
Time_Out
Wait time in seconds before stopping connection attempt
Example¶
MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
This example sets the XML file for setting up communication as XML_Kuka_MMMIND, the flag for successful communication as 873, the flag for successful data reception as 871, and wait time as 60 seconds.
Start Mech-Vision Project¶
MM_Start_Vis(Job:IN,Pos_Num_Need:IN,SendPos_Type:IN,MM_J:IN)
This subprogram is for applications that use Mech-Vision but not Mech-Viz. It runs the corresponding Mech-Vision project to acquire and process data.
Parameters¶
IN parameters
Name
Description
Job
Mech-Vision Project ID, from 1 to 99
Pos_Num_Need
Number of vision points for Mech-Vision to send, from 0 to 20, where 0 means “send all”
SendPos_Type
Set the robot pose to send to Mech-Vision, from 0 to 3
See the following table for explanations of the 4 values
MM_J
E6AXIS variable for storing the joint positions of the start point when SendPose_Type = 3
SendPos_Type value
Pose sent to Mech-Vision
Applicable scenario
0
No robot pose sent to Mech-Vision
Project is in the eye-to-hand mode. If the “Path Planning” Step is used, the planned path starts at the Home point set in the path planning tool.
1
Current joint positions and flange pose of the robot as image-capturing pose
Project is in the eye-in-hand mode. Applicable to most robots (excluding truss robots).
2
Current flange pose of the robot as image-capturing pose
Project is in the eye-in-hand mode. The robot has no joint positions and only flange pose (such as truss robots).
3
Joint positions of a specific start point
Project is in the eye-to-hand mode and the Mech-Vision project contains the “Path Planning” Step, whose start point needs to be set from the robot side.
Example¶
MM_Start_Vis(1,1,1,MM_J)
This example runs Mech-Vision project No. 1, and asks the project to send over 1 vision point, and the robot sends its current joint positions and flange pose when this subprogram is called as the image-capturing pose.
Get Vision Target(s)¶
MM_Get_VisData(Job:IN,Last_Data:OUT,Pos_Num:OUT,MM_Status:OUT)
This subprogram is for applications that use Mech-Vision but not Mech-Viz. It obtains the vision result from the corresponding Mech-Vision project.
Note
If custom outputs are defined in the “Procedure Out” Step in the Mech-Vision project, use MM_Get_Dy_Data to obtain the vision result instead.
Parameters¶
IN parameter
Name
Description
Job
Mech-Vision Project ID, from 1 to 99
OUT parameters
Name
Description
Last_Data
Variable, indicating whether all vision points have been sent, 0 or 1
0: NOT all vision points have been sent (more on the way) 1: All vision points have been sent
Pos_Num
Variable for storing the number of received vision points
MM_Status
Variable for storing status code. Please see Status Codes and Troubleshooting
Example¶
MM_Get_VisData(1,Last,Pose_Num,Status)
This example obtains the vision result from Mech-Vision project No. 1. Whether all vision points have been sent is stored in Last, the number of vision points received is stored in Pose_Num, and the status code is stored in Status.
Start Mech-Viz Project¶
MM_Start_Viz(SendPos_Type:IN,MM_J:IN)
This subprogram is for applications that use both Mech-Vision and Mech-Viz. It runs the corresponding Mech-Viz project (which triggers the corresponding Mech-Vision project to run), and sets the initial joint positions of the simulated robot in Mech-Viz.
Parameter¶
IN parameters
Name
Description
SendPos_Type
Set the initial pose for the simulated robot in Mech-Viz, from 0 to 2
See the following table for explanations of the 3 values
MM_J
E6AXIS variable for storing the joint positions of the start point when SendPose_Type = 2
SendPos_Type value
Pose sent to Mech-Viz
Applicable scenario
0
No robot pose sent to Mech-Viz
Project is in the eye-to-hand mode. The simulated robot in Mech-Viz moves from joint positions = [0, 0, 0, 0, 0, 0] to the first waypoint.
1
Current joint positions and flange pose of the robot
This setting is recommended for projects in the eye-in-hand mode. The simulated robot in Mech-Viz moves from the input joint positions to the first waypoint.
2
Joint positions of a specific start point
This setting is recommended for projects in the eye-to-hand mode. The simulated robot in Mech-Viz moves from the input joint positions to the first waypoint.
Note
When the scene contains objects that obstruct the robot to move from [0,0,0,0,0,0] to the first waypoint, this parameter should not be set to 1.
Example¶
MM_Start_Viz(1,MM_J)
This example runs the corresponding Mech-Viz project, and sets the initial joint positions of the simulated robot to the current joint positions of the real robot.
Get Planned Path¶
MM_Get_VizData(Jps_Pos:IN,Last_Data:OUT,Pos_Num:OUT,VisPos_Num:OUT,MM_Status:OUT)
This subprogram obtains the planned path from Mech-Viz.
Note
Only the poses and their corresponding labels and velocities are obtained by this subprogram. If any other type of data are needed, such as custom outputs from Mech-Vision project or depalletizing planning data, use MM_Get_PlanData to obtain the planned path instead.
Parameters¶
IN parameter
Name
Description
Jps_Pos
Whether Mech-Viz should send waypoint poses as joint positions or TCPs, 1 or 2
1: Mech-Viz sends joint positions 2: Mech-Viz sends TCPs
OUT parameters
Name
Description
Last_Data
Variable, indicating whether all waypoints have been sent, 0 or 1
0: NOT all waypoints have been sent (more on the way) 1: All waypoints have been sent
Pos_Num
Variable for storing the number of received waypoints
VisPos_Num
Variable for storing the position of the first Vision Move waypoint in the path
Example path: Move_1, Move_2, Vision Move_3, Move_3, Vision Move_2 In this path, the position of the first Vision Move waypoint is 3. If the path does not contain Vision Move waypoint, the return value is 0.
MM_Status
Variable for storing status code. Please see Status Codes and Troubleshooting.
Example¶
MM_Get_VizData(2,Last,Pose_Num,VisPose_Num,Status)
This example obtains the planned path from Mech-Viz in the form of TCPs. Whether all waypoints have been sent is stored in Last, the number of waypoints received is stored in Pose_Num, the position of the Vision Move waypoint is stored in VisPose_Num, and the status code is stored in Status.
Obtain Pose¶
MM_Get_Pose(Serial:IN,MM_P:OUT,MM_Label:OUT,MM_Speed:OUT)
This subprogram stores a vision pose returned by Mech-Vision or a waypoint pose (as TCP) returned by Mech-Viz in the specified variable.
Parameters¶
IN parameter
Name
Description
Serial
Specify the index of the pose to be stored
OUT parameters
Name
Description
MM_P
Variable for storing the specified pose
MM_Label
Variable for storing the label corresponding to the specified pose
MM_Speed
Variable for storing the velocity corresponding to the specified pose
Example¶
MM_Get_Pose(1,XP1,Label,Pose_Speed)
This example stores the first received pose to XP1, the corresponding label to Label, and the corresponding velocity to Pose_Speed.
Obtain Joint Positions¶
MM_Get_Jps(Serial:IN,MM_J:OUT,MM_Label:OUT,MM_Speed:OUT)
This subprogram stores a set of joint positions returned by Mech-Viz in the specified variable.
Note
As Mech-Vision does not output joint position data, this subprogram can only be used with Mech-Viz.
Parameters¶
IN parameter
Name
Description
Serial
Specify the index of the set of joint positions to be stored
OUT parameters
Name
Description
MM_J
Variable for storing the specified set of joint positions
MM_Label
Variable for storing the label corresponding to the specified set of joint positions
MM_Speed
Variable for storing the velocity corresponding to the specified set of joint positions
Example¶
MM_Get_Jps(1,JP1,Label,Pose_Speed)
This example stores the first set of received joint positions to JP1, the corresponding label to Label, and the corresponding velocity to Pose_Speed.
Switch Mech-Vision Recipe¶
MM_Switch_Model(Job:IN,Model_Number:IN)
This subprogram specifies which parameter recipe of the Mech-Vision project to use. For more information on parameter recipe, please see Parameter Recipe.
Note
This subprogram must be called BEFORE MM_Start_Vis.
The corresponding Mech-Vision project must have parameter recipes already configured and saved.
Parameters¶
IN parameters
Name
Description
Job
Mech-Vision Project ID, from 1 to 99
Model_Number
The ID of a parameter recipe in the Mech-Vision project, from 1 to 99
Example¶
MM_Switch_Model(2,2)
This example switches the parameter recipe used to No. 2 in Mech-Vision project No. 2.
Select Mech-Viz Branch¶
MM_Set_Branch(Branch_Num:IN,Export_Num:IN)
This subprogram is used to select along which branch the Mech-Viz project should proceed. Such branching is achieved by adding Branch by Msg Step(s) to the project. This subprogram specifies which exit port such Step(s) should take.
Note
MM_Start_Viz must be called BEFORE this subprogram.
When the next Step to be executed in Mech-Viz is a Branch by Msg Step, Mech-Viz will wait for this subprogram to send the exit port number it should take.
Parameters¶
IN parameters
Name
Description
Branch_Num
Step ID of the “Branch by Msg” Step, can be viewed in Mech-Viz
Export_Num
The number of the exit port to take + 1, from 1 to 99
Example: To select exit port 0 in Mech-Viz, set the value of this parameter to 1.
Example¶
MM_Set_Branch(1,3)
This example tells Mech-Viz to take exit port 3 for the “Branch by Msg” Step whose Step ID is 1.
Set Move Index¶
MM_Set_Index(Skill_Num:IN,Index_Num:IN)
This subprogram sets the value for the Current Index parameter of Mech-Viz Steps. Steps that have this parameter include Move by List, Move by Grid, Custom Pallet Pattern, and Smart Pallet Pattern.
Note
MM_Start_Viz must be called BEFORE this subprogram.
Parameters¶
IN parameters
Name
Description
Skill_Num
Step ID of the Step, can be viewed in Mech-Viz
Index_Num
Value for the Current Index parameter when the Step is executed
Example¶
MM_Set_Index(2,10)
This example sets the Current Index value to 9 for the Step whose Step ID is 2. When the Step is executed, the Current Index value will be added 1 and become 10.
Get Software Status¶
MM_Get_Status(MM_Status:OUT)
This subprogram is currently capable of checking whether Mech-Vision is ready to run projects. In the future, this subprogram can be used for obtaining the execution status of Mech-Vision, Mech-Viz, and Mech-Center.
Parameter¶
OUT parameter
Name
Description
MM_Status
Variable for storing status code
Status code 1101 indicates that Mech-Vision is ready to run projects. For other status codes, please see Status Codes and Troubleshooting.
Input Object Dimensions to Mech-Vision¶
MM_Set_BoxSize(Job:IN,Lenght:IN,Width:IN,Height:IN)
This subprogram inputs object dimensions to the Mech-Vision project.
Note
This subprogram must be called BEFORE MM_Start_Vis.
The corresponding Mech-Vision project must contain the “Read Object Dimensions” Step, and the Read Sizes from Properties parameter of this step must be checked.
Parameters¶
IN parameters
Name
Description
Job
Mech-Vision Project ID, from 1 to 99
Lenght
Length of object in mm
Width
Width of object in mm
Height
Height of object in mm
Example¶
MM_Set_BoxSize(1,500,300,200)
This example sets the object dimensions in the Read Object Dimensions Step in the Mech-Vision project No. 1 to 500*300*200 mm.
Get DO Signal List¶
MM_Get_DoList()
MM_Set_DoList()
These two subprograms obtain the planned DO Signal list for controlling multiple sections of a sectioned vacuum gripper and set the DOs accordingly.
Note
MM_Get_VizData must be called BEFORE this subprogram.
Please deploy the Mech-Viz project based on the template project in xxx\Mech-Mind Software Suite-x.x.x\Mech-Center\tool\viz_project\suction_zone, and set the suction cup configuration file in the Mech-Viz project.
Parameters¶
No parameters.
Example¶
MM_Get_DoList()
MM_Set_DoList()
These two examples obtain the DO signal list planned by Mech-Viz, store it in Do_Port[i], and input the values to the corresponding digital outputs.
Input TCP to Mech-Viz¶
MM_Set_Pos(Out_Pos:IN)
This subprogram inputs TCP data to the External Move Step.
Note
This subprogram must be called BEFORE MM_Start_Viz.
Please deploy the Mech-Viz project based on the template project in xxx\Mech-Mind Software Suite-x.x.x\Mech-Center\tool\viz_project\outer_move, and put the External Move Step at a proper position in the workflow.
Parameter¶
IN parameter
Name
Description
Out_Pos
Variable for storing the TCP data to be sent to Mech-Viz
Example¶
MM_Set_Pos(XP50)
This example sends the TCP data stored in XP50 to the External Move Step in the Mech-Viz project.
Calibration¶
MM_CALIB(Move_Type:IN,PosJps:IN,WaitTime:IN,E1:IN)
This subprogram is used for hand-eye calibration (camera extrinsic parameter calibration). It automates the calibration process in conjunction with the Camera Calibration function in Mech-Vision. For detailed instructions, see KUKA Calibration Program.
Parameters¶
IN parameters
Name
Description
Move_Type
Motion type, 1 or 2
1: LIN 2: PTP
PosJps
Pose as flange pose or joint positions, 1 or 2
1: flange pose 2: Joint positions
WaitTime
The time the robot waits to avoid shaking after it moves to the calibration point; the default value is 2 (s)
E1
Data of the external 7th axis in mm
Example¶
MM_Calib(2,1,2,0)
This example moves the robot in PTP type, receives pose data in the form of flange pose, and sets the wait time to 2 seconds to avoid the robot from shaking after it moves to the calibration point. This robot does not have an external axis installed.
Get Vision Result from Mech-Vision¶
MM_Get_Dy_Data(Job:IN,Pos_Num:OUT,MM_Status:OUT)
This subprogram is used for obtaining the vision result that includes custom port outputs from the corresponding Mech-Vision project. “Custom port outputs” refers to data output by ports other than poses and labels of the “Procedure Out” Step in Mech-Vision. The output ports can be customized if the Port Type parameter of the Step is set to “Custom”.
Note
MM_Start_Vis must be called BEFORE this subprogram.
If only poses and labels are needed (no custom output ports defined), use MM_Get_VisData to obtain the vision result instead.
Parameters¶
IN parameter
Name
Description
Job
Mech-Vision Project ID, from 1 to 99
Can check and adjust in the Project List panel in Mech-Vision
OUT parameters
Name
Description
Pos_Num
Variable for storing the number of received vision points
MM_Status
Variable for storing status code. Please see Status Codes and Troubleshooting.
Example¶
MM_Get_Dy_Data(1,Pose_Num,Status)
This example obtains the vision result that includes custom port outputs from Mech-Vision project No. 1. The number of vision points received is stored in Pose_Num, and the status code is stored in Status.
Save Vision Point to Specified Variables¶
MM_Get_DyPose(Serial:IN,MM_P:OUT,MM_Label:OUT)
This subprogram stores the data in a vision point returned by Mech-Vision in the specified variables.
Note
This subprogram is called AFTER MM_Get_Dy_Data.
Parameters¶
IN parameter
Name
Description
Serial
Specify the index of the vision point to be stored
OUT parameters
Name
Description
MM_P
Variable for storing the pose in the specified vision point
MM_Label
Variable for storing the label in the specified vision point
MM_UserData
Predefined global variable for storing the custom port outputs in the specified vision point, max length is 50
Example¶
MM_Get_DyPose(1,XP1,Label)
This example stores the pose in the first received vision point to XP1, the corresponding label to Label, and the corresponding custom port outputs to MM_UserData.
Get Waypoint from Mech-Viz¶
MM_Get_PlanData(Jps_Pos:IN,Pos_Num:OUT,VisPos_Num:OUT,MM_Status:OUT)
This subprogram is used for obtaining the planned path from Mech-Viz. This subprogram can obtain all data output by Mech-Viz, including motion type, tool number, custom port outputs from Mech-Vision and depalletizing planning data.
“Custom port output” refers to data output by ports other than poses and labels of the “Procedure Out” Step in Mech-Vision. The output ports can be customized if the Port Type parameter of the Step is set to “Custom”.
“Depalletizing planning data” is explained below.
Note
MM_Start_Viz must be called BEFORE this subprogram.
If only poses, labels and velocities are needed, use MM_Get_VizData to obtain the planned path instead.
Parameters¶
IN parameters
Name
Description
Jps_Pos
Expected format of the returned data, see the following table for explanations
The relationship between the value of Jps_Pos and the format of the returned data is summarized below.
Jps_Pos value
Format of returned data (Explained below)
1
Pose (joint positions), motion type, tool number, velocity, number of custom ports, custom port output, custom port output, … custom port output
2
Pose (TCP), motion type, tool number, velocity, number of custom ports, custom port output, custom port output, … custom port output
3
Pose (joint positions), motion type, tool number, velocity, depalletizing planning data, number of custom ports, custom port output, custom port output, … custom port output
4
Pose (TCP), motion type, tool number, velocity, depalletizing planning data, number of custom ports, custom port output, custom port output, … custom port output
Pose
The pose of the waypoint, as joint positions (in degree) or TCP, which is composed of Cartesian coordinates (XYZ in mm) and Euler angles (ABC in degree).
Motion type
Value is 1: joint motion
Value is 2: linear motion
Tool number
The index number of the tool to be used at this waypoint. -1 means no tool is used.
Velocity
Velocity percentage of the waypoint, equals to the velocity setting in the corresponding move-type Step × the global velocity setting in Mech-Viz.
Depalletizing planning data:
Data used in planning multi-pick depalletizing tasks. These data are part of the waypoint of the “Vision Move” Step. The following data are included:
Label: composed of 10 integers, if fewer than 10 labels are obtained, the rest of the digits are filled with 0.
Number of picked workobjects
Number of workobjects to be picked this time
Edge-corner ID of vacuum gripper: can be checked by double-clicking the corresponding tool in Resources in Mech-Viz and then selecting Configure control logic.
TCP offset: The offset between the tool pose at the center of the to-pick workobjects and the actual tool pose.
Workobject orientation: whether the X-axis of the workobject reference frame is aligned with the X-axis of the tool reference frame (value: 0 or 1).
Dimensions of the workobjects combined
Number of custom ports
The number of output keys excluding poses and labels when the Port Type parameter of the “Procedure Out” Step in the Mech-Vision project is set to “Custom”.
Custom port outputs
The outputs excluding poses and labels when the Port Type parameter of the “Procedure Out” Step in the Mech-Vision project is set to “Custom”. These data are part of the waypoint of the “Vision Move” Step.
The custom port outputs are arranged in alphabetical order of the custom port names.
Waypoints in a planned path can be divided into two types: those of the “Vision Move” Step and those of other move-type Steps.
All waypoints contain the following data: pose, motion type, tool number and velocity.
The waypoints of the “Vision Move” Step also contain depalletizing planning data.
If custom ports are defined for the “Procedure Out” Step in Mech-Vision, then the waypoints of the “Vision Move” Step also contain custom port outputs.
To obtain the depalletizing planning data, set Jps_Pos to 3 or 4; if the depalletizing planning data are not needed, set Jps_Pos to 1 or 2.
OUT parameters
Name
Description
Pos_Num | Variable for storing the number of received waypoints
VisPos_Num
Variable for storing the position of the first Vision Move waypoint in the path
Example path: Move_1, Move_2, Vision Move_3, Move_3, Vision Move_2 In this path, the position of the first Vision Move waypoint is 3. If the path does not contain Vision Move waypoint, the return value is 0.
MM_Status
Variable for storing status code. Please see Status Codes and Troubleshooting.
Example¶
MM_Get_PlanData (2,Pose_Num,VisPose_Num,Status)
This example obtains the planned path that includes custom port outputs from Mech-Viz, and the poses obtained are in the form of TCPs. The number of waypoints received is stored in Pose_Num, the position of the Vision Move waypoint is stored in VisPose_Num, and the status code is stored in Status.
Save Waypoint to Specified Variables¶
When Jps_Pos in MM_Get_PlanData equals to 1 or 3:
MM_Get_PlanJps(Serial:IN,Jps_Pos:IN,MM_J:OUT,MM_MoveType:OUT,MM_ToolNum:OUT,MM_Speed:OUT)
When Jps_Pos in MM_Get_PlanData equals to 2 or 4:
MM_Get_PlanPose(Serial:IN,Jps_Pos:IN,MM_P:OUT,MM_MoveType:OUT,MM_ToolNum:OUT,MM_Speed:OUT)
These subprograms store the data in a waypoint returned by Mech-Viz in the specified variables.
Note
These subprograms are called AFTER MM_Get_PlanData.
IN parameters
Name
Description
Serial
Specify the index of the waypoint to be stored
Jps_Pos
Expected format of the returned data, must be the same value as in MM_Get_PlanData
OUT parameters
Name
Description
MM_J
Variable for storing the joint positions in the specified waypoint
MM_P
Variable for storing the TCP in the specified waypoint
MM_MoveType
Variable for storing the motion type in the specified waypoint
1: joint motion 2: linear motion
MM_ToolNum
Variable for storing the tool number in the specified waypoint, -1 means no tool is used
MM_Speed
Variable for storing the velocity in the specified waypoint
MM_UserData
Predefined global variable for storing the custom port outputs in the specified waypoint, max length is 50
MM_Plan_Results
Predefined global variable for storing the depalletizing planning data in the specified waypoint, max length is 20
Examples¶
MM_Get_PlanPose(1,4,XP1,MoveType,ToolNum,Pose_Speed)
This example stores the TCP in the first received waypoint to XP1, the corresponding motion type to MoveType, the corresponding tool number to ToolNum, the corresponding velocity to Pose_Speed, the corresponding custom port outputs to MM_UserData, and the corresponding depalletizing planning data to MM_Plan_Results.
MM_Get_PlanJps(1,3,JP1,MoveType,ToolNum,Pose_Speed)
This example stores the joint position in the first received waypoint to P1, the corresponding motion type to MoveType, the corresponding tool number to ToolNum, the corresponding velocity to Pose_Speed, the corresponding custom port outputs to MM_UserData, and the corresponding depalletizing planning data to MM_Plan_Results.
Get Result of Step “Path Planning” in Mech-Vision¶
MM_Get_VisPath(Job:IN,Jps_Pos:IN,Last_Data:OUT,Pos_Num:OUT,VisPos_Num:OUT,MM_Status:OUT)
This subprogram is for applications that use Mech-Vision but not Mech-Viz. It obtains the collision-free path planned by the “Path Planning” Step from the corresponding Mech-Vision project.
Note
MM_Start_Vis must be called BEFORE this subprogram.
The Port Type parameter of the “Procedure Out” Step in the Mech-Vision project must be set to “Predefined (robot path)”.
Input parameters
Name
Description
Job
Mech-Vision Project ID, from 1 to 99
Can check and adjust in the Project List panel in Mech-Vision
Jps_Pos
Whether Mech-Vision should send poses as joint positions or TCPs, 1 or 2
1: Mech-Vision sends joint positions 2: Mech-Vision sends TCPs
Output parameters
Name
Description
Last_Data
Variable, indicating whether all waypoints have been sent, 0 or 1
0: NOT all waypoints have been sent (more on the way) 1: All waypoints have been sent
Pos_Num
Variable for storing the number of received waypoints
VisPos_Num
Variable for storing the position of the first Vision Move waypoint in the path
Example path: Move_1, Move_2, Vision Move_3, Move_3, Vision Move_2 In this path, the position of the first Vision Move waypoint is 3. If the path does not contain Vision Move waypoint, the return value is 0.
MM_Status
Variable for storing status code. Please see Status Codes and Troubleshooting.
Example¶
MM_Get_VisPath(1,1,Last,Pose_Num,VisPos_Num,Status)
This example obtains the planned path from Mech-Vision project No. 1 in the form of joint positions. Whether all waypoints have been sent is stored in Last, the number of waypoints received is stored in Pose_Num, the position of the Vision Move waypoint is stored in VisPose_Num, and the status code is stored in Status.