KUKA机器人将参数传递到子程序或函数中V1.28版

描述

从一个主程序中可以将参数传递到局部或全局子程序和函数中。

怎样传递参数有 2 种方式:

作为 IN 参数

变量值在主程序中保持不变。

这种传递方式也称为 “ 值传递 (Call by Value)”。

作为 OUT 参数

子程序读取并更改该值,然后将新值写回到主程序中。

这种传递方式也称为 “Call by Reference”。

建议:始终将一个参数传递到相同数据类型的变量中。可以将参数传递到另一个数据类型中,但是有特定的限制。

将参数传递给局部子程序:

两类参数列表:

传值调用:  IN

引用调用:  OUT

机器人

例: 

1  DEF MY_PROG( )

2  DECL REAL r,s

3  ...

4  CALC_1(r)  调用子程序 CALC_1 并传递参数 “r”。

5  ...

6  CALC_2(s) 调用子程序 CALC_2 并传递参数 “s”。

7  ...

8  END

_______________________________________

9  DEF CALC_1(num1:IN)

num1:要将值 “r” 传递到其上的变量名称。IN 表示:只为读取传递 “r”。

10  DECL REAL num1 必须声明要将数值传递到其上的变量。

11  ...

12  END

_______________________________________

13  DEF CALC_2(num2:OUT)

num2:要将值 “s” 传递到其上的变量名称。

OUT  表示:传递、更改 “s” 并将其写回到主程序中。

14  DECL REAL num2 必须声明要将数值传递到其上的变量。

15  ...

16  END

将参数传递给全局函数:

主程序 MY_PROG( ):

1  DEF MY_PROG( )

2  DECL REAL result, value

3  value = 2.0  给 “value” 赋值 “2.0”。

4  result = CALC(value)  调用函数 CALC,并传递 “value” 的值。给变量 “result” 分配函数的返还值。

5  ...

...

END

在将该值作为 IN 参数传递时发生了什么?

带 IN 的函数 CALC():

1  DEFFCT REAL CALC(num:IN)

将 “value” 的值作为 IN 参数传递给 “num”。该值还为 2.0。

2  DECL REAL return_value, num

3  num = num + 8.0 更改 “num” 的值。该值现在为 10.0。

4  return_value = num * 100.0

5  RETURN(return_value)

计算 “return_value” 的值并将该值发回到主程序的变量“result” 中。该值为 1000.0。

6  ENDFCT

函数已结束,从行 5 起继续执行主程序。

提示:主程序中 “value” 的值未更改,为 2.0

在将该值作为 OUT 参数传递时发生了什么?

带 OUT 的函数 CALC():

1  DEFFCT REAL CALC(num:OUT)

将 “value” 的值作为 OUT 参数传递给 “num”。该值还为 2.0。

2  DECL REAL return_value, num

3  num = num + 8.0

更改 “num” 的值。该值现在为 10.0。

4  return_value = num * 100.0

5  RETURN(return_value)

计算 “return_value” 的值并将该值发回到主程序的变量“result” 中。该值为 1000.0。

6  ENDFCT

函数已结束,从行 5 起继续执行主程序。

提示:主程序中 “value” 的值现在为 10.0。

传递多个参数:

将哪个参数传递给什么自动通过顺序确定:第一个参数被传递到子程序中的第一个参数上,第二个参数被传递到子程序中的第二个参数上,以此类推。

1  DEF MY_PROG( )

2  DECL REAL w

3  DECL INT a, b

4  ...

5  CALC(w, b, a)

将 “w” 作为 OUT 参数传递给 “ww”。

将 “b” 作为 IN 参数传递给 “bb”。

将 “a” 作为 OUT 参数传递给 “oo”。

6  ...

7  CALC(w, 30, a)

将 “w” 作为 OUT 参数传递给 “ww”。

将 “30” 作为 IN 参数传递给 “bb”。

将 “a” 作为 OUT 参数传递给 “oo”。

8  ...

9  END

_______________________________________

10  DEF CALC(ww:OUT, bb:IN, oo:OUT)

11  DECL REAL ww

12  DECL INT oo, bb

13  ...

14  END

也可以不将任何值传递给子程序中的 “ 接收器 ” 变量,前提是在子程序中不需要该值。这将简化根据变化的过程调整程序。示例:CALC (w, ,a)

始终可以将数值传递至相同的数据类型。传递至另一个数据类型时,有:

 

主程序中的类型 子程序中的类型 作用
BOOL INT、REAL、CHAR 无法传递;错误信息
INT、REAL、CHAR BOOL
INT REAL INT 值被用作 REAL 值
INT CHAR 使用 ASCII 表中的字符
CHAR INT 使用 ASCII 表中的 INT 值
CHAR REAL 使用 ASCII 表中的 REAL 值
REAL INT REAL 值被四舍五入
REAL CHAR REAL 值被四舍五入,使用 ASCII 表中的字符

 

审核编辑 :李倩

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分