分享

ABB机器人传入参数时的四种方式

 钺YUE 2022-08-16 发布于天津

前两天在测试一个程序时遇到了如下问题,提示传入参数的读写方式不正确。

图片

FUNC string Rob_currentpos(tooldata tool_vis,wobjdata wobj_vis) VAR robtarget Position; var string CurrentPosition; Position:=CRobT(\Tool:=tool_vis \WObj:=wobj_vis); CurrentPosition:=numtostr(position.trans.x,3)+','+numtostr(position.trans.y,3)+','+numtostr(position.trans.z,3)+','+NumToStr(position.rot.q1,6)+','+NumToStr(position.rot.q2,6)+','+NumToStr(position.rot.q3,6)+','+NumToStr(position.rot.q4,6); RETURN currentposition; ENDFUNC

在排查之后基本确定了第四行有问题,但实际上语法是没问题的。而且将这个函数单独放入main中也是没有报错。最初是以为传入参数的变量不允许是复合类型,后来使用示教器之后排除了这一点,因为示教器同样也可以传入各种数据类型。但是在示教器上发现了一个传入参数模式的概念。

图片


在查阅资料之后,找到了这几个参数之间的区别。以前没注意过这个细节,在此做个记录:

参数包括四种(按访问模式区分):

· 正常情况下默认为此模式,参数仅用作输入,同时被视作程序变量。改变此变量,不会改变

对应参数;

· INOUT参数规定,对应参数必须为变量(整体、元素或部分)或对应参数必须

为可为程序所改变的完整的永久数据对象;

· VAR参数规定,对应参数必须为可为程序所改变的变量(整体、元素或部分);

· PERS参数规定,对应参数必须为可为程序所改变的完整的永久数据对象。

更新INOUTVARPERS参数事实上就等同于更新了参数本身,借此可用参数将多个

数值返回到调用程序。


综上,出现这个问题的原因为:不是一个持续的变量。那么将传入的变量模式改为PERS

或者INOUT,即在此函数中变量为持续的状态,就可以解决这个问题。

 FUNC string Rob_currentpos(PERS tooldata tool_vis,PERS wobjdata wobj_vis)

「 回顾 」

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多