线程评级:
OPC UA setJointsStr不工作
你好,


我们正在试验RoboDK opcua服务器。我们能够在UAExpert和RoboDK之间传递StationParameters和StationValues,也可以通过调用getJointsStr方法检索机器人的当前位置。但是当调用setJointsStr方法时,我们得到“成功”,但机器人实际上没有移动,可能是什么问题?


字符串是:-26.26万,-100.000000,27.47万,114.000000,-54.280000,0.000000






Tero
嗨Tero,

使用setJointsStr应该将机器人放置在给定的关节位置,而不模拟运动。此外,如果您提供的关节超出了机器人的限制,则值可能会饱和以显示机器人的限制(发那科对关节2和3有虚拟耦合)。

艾伯特
你好,

我一直试图使用从机器人与getJointsStr接收的值。所以应该在机器人的范围内。我也尝试过使用不同的机器人库卡KR6,但也没有运气。

Tero


引用:嗨Tero,

使用setJointsStr应该将机器人放置在给定的关节位置,而不模拟运动。此外,如果您提供的关节超出了机器人的限制,则值可能会饱和以显示机器人的限制(发那科对关节2和3有虚拟耦合)。

艾伯特
你好,

你确定这不是窃听器吗?我对OPC-UA服务器代码做了以下mod,现在它工作了,但在我点击“查看->适合所有人”之前,机器人的位置仍然没有更新。








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

使用setJointsStr应该将机器人放置在给定的关节位置,而不模拟运动。此外,如果您提供的关节超出了机器人的限制,则值可能会饱和以显示机器人的限制(发那科对关节2和3有虚拟耦合)。

艾伯特
问题是双重值string_2_doubles与setjoint一起使用,需要使用tjoint代替。这里有一个让它起作用的快速技巧:

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


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

如果(!Var_2_Str输入+1str_joints)) {
返回 UA_STATUSCODE_BADARGUMENTSMISSING;


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

插件->RDK->getItemstr_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_doublesstr_joints关节, &元素个数);
如果元素个数< =0){
ShowMessage插件QObject::tr“setJointsStr: 无效的 关节 字符串"));
返回 UA_STATUSCODE_BADARGUMENTSMISSING;

ShowMessage插件QObject::tr“联合 1 是: 3”));
tJoints joints2->关节();

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


保龄球 can_move->MoveJjoints2);
如果(!can_move){
ShowMessage插件QObject::tr 机器人 不能 移动 位置”));

其他的

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

返回 UA_STATUSCODE_GOOD;



浏览此线程的用户:
1客人(年代)