线程评级:
  • 0 (s) - 0平均投票
  • 1
  • 2
  • 3
  • 4
  • 5
OPC UA setJointsStr不工作
你好,


我们正在尝试RoboDK OPCUA-server。我们能够转移StationParameters和StationValues UAExpert和RoboDK之间我们也可以检索当前位置的机器人getJointsStr通过调用方法。但当调用方法setJointsStr得到机器人“成功”,但实际上并没有移动,可能会产生什么问题?


字符串:-26.260000,-100.000000,27.470000,114.000000,-54.280000,0.000000






Tero
嗨Tero,

使用setJointsStr应该机器人在给定的关节位置没有模拟运动。同样,如果您提供的关节机器人外限制可能将饱和值显示机器人的局限性(发那科有一个虚拟耦合关节2和3)。

艾伯特
你好,

我一直试图用值与getJointsStr收到机器人。所以应该是在一定范围内的机器人。我也试着使用不同的库卡机器人KR6但没有运气。

Tero


引用:嗨Tero,

使用setJointsStr应该机器人在给定的关节位置没有模拟运动。同样,如果您提供的关节机器人外限制可能将饱和值显示机器人的局限性(发那科有一个虚拟耦合关节2和3)。

艾伯特
你好,

你确定这不是一个错误吗?我做了以下插件OPC-UA服务器代码,现在它的工作原理,但仍然机器人位置之前不更新我点击“视图- >适合所有”。








(02-18-2021,28点)艾伯特写道:嗨Tero,

使用setJointsStr应该机器人在给定的关节位置没有模拟运动。同样,如果您提供的关节机器人外限制可能将饱和值显示机器人的局限性(发那科有一个虚拟耦合关节2和3)。

艾伯特
问题是,值的两倍string_2_doubles是使用setJoints tJoints需要使用。这是快速攻击,使它工作:

静态 UA_StatusCode setJointsStr(无效*h,常量 UA_NodeId objectId,size_t inputSize,常量 UA_Variant*输入,size_t outputSize,UA_Variant*输出){
PluginOPCUA*插件= (PluginOPCUA*)h;
如果(inputSize<2){
qDebug()< <“输入 大小: < <inputSize< < 输出 大小: < <outputSize;
返回 UA_STATUSCODE_BADARGUMENTSMISSING;
}

QString str_item;
QString str_joints;
如果(!Var_2_Str(输入+0,str_item)){
返回 UA_STATUSCODE_BADARGUMENTSMISSING;
}
如果(!Var_2_Str(输入+1,str_joints)){
返回 UA_STATUSCODE_BADARGUMENTSMISSING;
}

/ / ShowMessage(插件, QObject: tr(“项目 是: % 1”).arg (str_item));
ShowMessage(插件,QObject::tr(”位置 是: % 1”)。参数(str_joints));

=插件- >RDK- >getItem(str_item);
ShowMessage(插件,QObject::tr(“项 是: % 1”)。参数(- >的名字()));

如果(!插件- >RDK- >有效的()){/ /如果 (! ItemValid(机器人)){
ShowMessage(插件,QObject::tr(“setJointsStr: RoboDK 提供 有效的”));
返回 UA_STATUSCODE_BADARGUMENTSMISSING;
}
关节(nDOFs_MAX];
- >关节()。getvalue(关节);
int 元素个数=nDOFs_MAX;
ShowMessage(插件,QObject::tr(“Num 联合 是: % 1”)。参数(元素个数));
string_2_doubles(str_joints,关节,&元素个数);
如果(元素个数< =0){
ShowMessage(插件,QObject::tr(“setJointsStr: 无效的 关节 字符串"));
返回 UA_STATUSCODE_BADARGUMENTSMISSING;
}
ShowMessage(插件,QObject::tr(“联合 1 是: 3”));
tJoints joints2=- >关节();

(int o=0;o<nDOFs_MAX;o+ +){/ /双 数组 不能 使用 直接 我们 需要 使用 tJoints 而不是
joints2数据()(o]=关节(o];
ShowMessage(插件,QObject::tr(“联合% 1 是: % 2”)。参数(o)。参数(joints2数据()(o)));
}

bool can_move=- >MoveJ(joints2);
如果(!can_move){
ShowMessage(插件,QObject::tr( 机器人 不能 移动 位置”));
}
其他的{

- >setJoints(joints2);
/ /睡眠(200);
插件- >RDK- >渲染();}

返回 UA_STATUSCODE_GOOD;
}



用户浏览这个线程:
1客人(年代)