我是靠谱客的博主 清新外套,最近开发中收集的这篇文章主要介绍在Qt中使用EtherCAT-SOEM的初始化中,状态机卡在PreOp->Save-Op过程中,出现State=0x12, Error=0x001e错误的解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.在调试EtherCAT软件过程中,一直出现配置从站进不了Save_op状态,通过下函数检查从站状态:


//使用的从站编号为1 只有1个从站
ec_slave[1].state = EC_STATE_SAFE_OP;
ec_writestate(1);
//设置到安全模式
ec_statecheck(1, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4);
printf("Slave %d State=0x%2.2x StatusCode=0x%4.4x : %sn", 1, ec_slave[1].state, ec_slave[1].ALstatuscode, ec_ALstatuscode2string(ec_slave[1].ALstatuscode));

若正常时,state应该是0x04; 而出现错误状态 0x12;通过官网可报错原因如下:

Device has not entered requested state or change state as result of a local action;

通过调试发现,报错是在从pre-op态完成后,进行PDOs-map出错的;

ec_config_map(&IOmap);在这个函数前应该加上PDOs映射,通过自己的对象字典的xml来查看映射关系。

本人通过TwCAT中的 Mbox 的inputs 和outPuts 查看对应的地址为:

1C12  -->16020001;

1C13  -->1A020001;

所以在  ec_config_map(&IOmap);前添加了对应的映射关系如下:

...
//前面为已经进入到pre-op态
int32 ob2; int os;
os = sizeof(ob2); ob2 = 0x16020001;
ec_SDOwrite(1, 0x1c12, 0, true, os, &ob2, EC_TIMEOUTRXM);
os = sizeof(ob2); ob2 = 0x1a020001;
ec_SDOwrite(1, 0x1c13, 0, true, os, &ob2, EC_TIMEOUTRXM);
// 完成iomap
ec_config_map(&IOmap);
//转换为save-op
ec_slave[1].state = EC_STATE_SAFE_OP;
ec_writestate(1);
ec_statecheck(1, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4);
//
...

即可解决问题。注意pdo映射关系需要与自己的xml对应。

最后

以上就是清新外套为你收集整理的在Qt中使用EtherCAT-SOEM的初始化中,状态机卡在PreOp->Save-Op过程中,出现State=0x12, Error=0x001e错误的解决办法的全部内容,希望文章能够帮你解决在Qt中使用EtherCAT-SOEM的初始化中,状态机卡在PreOp->Save-Op过程中,出现State=0x12, Error=0x001e错误的解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部