OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5066|回复: 4

CANopen怎样读写其它节点的数据字典?

[复制链接]

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
660
金钱
660
注册时间
2013-11-22
在线时间
131 小时
发表于 2016-12-13 17:32:20 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 zhp 于 2016-12-13 17:40 编辑

最近想做下 CANopen 开发,参考网上众多资料,把它移植到了 战舰板
上面跑,现在遇到问题就是,单独写网络数据字典没有问题,单独读取
就进入硬件错误,不知道怎么回事?
实验时,是用PC通过USBCAN给战舰板发数据的
“读网络数据字典”的时候是这样调用的,用PC模拟数据给它回,是正常的
readNetworkDictCallback (&EwtCanAnalysis_Data, 5, 0x2001, 0x01, 0, CheckReadSDO, 0);
[mw_shl_code=c,true]
void CheckReadSDO(CO_Data* d, UNS8 nodeid)
{
        UNS32 abortCode;
        UNS32 data=0;
        UNS32 size=64;

        if(getReadResultNetworkDict(&EwtCanAnalysis_Data, nodeid, &data, &size, &abortCode) != SDO_FINISHED)
    {
                printf("\r\nRead Result : Failed in getting information for slave %2.2x, AbortCode :%4.4x \r\n", nodeid, abortCode);
    }
        else
    {
                printf("\r\nRead Result : %x\r\n", data);
    }

        /* Finalize last SDO transfer with this node */
        closeSDOtransfer(&EwtCanAnalysis_Data, nodeid, SDO_CLIENT);
}[/mw_shl_code]

但是“写网络数据字典”是这样写的,用PC模拟回包,就跑到硬件错误,实际是不管PC发什么给单片机,都会进入硬件错误
unsigned long wdata = 0x12345678;
writeNetworkDictCallBack(&EwtCanAnalysis_Data, 5, 0x2001, 0x01, 4, 0, (void *)&wdata, CheckWriteSDO, 0); /* no block mode */  
[mw_shl_code=c,true]
void CheckWriteSDO(CO_Data* d, UNS8 nodeid)
{
        UNS32 abortCode;
     
        if(getWriteResultNetworkDict(&EwtCanAnalysis_Data, nodeid, &abortCode) != SDO_FINISHED)
    {
                printf("\r\nWrite Result : Failed in setting information for slave %2.2x, AbortCode :%4.4x \r\n", nodeid, abortCode);
    }
        else
    {
                printf("\r\nWrite Result : success!\r\n");
    }

        /* Finalize last SDO transfer with this node */
        closeSDOtransfer(&EwtCanAnalysis_Data, nodeid, SDO_CLIENT);
}[/mw_shl_code]

不知道有用过CANopen的吗,你们是怎么读写其它节点的数据字典的呢?


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-12-17 21:45:53 | 显示全部楼层
回复

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-7-9
在线时间
7 小时
发表于 2017-10-4 23:25:06 | 显示全部楼层
我也有同样的问题
回复

使用道具 举报

1

主题

21

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-12-18
在线时间
8 小时
发表于 2017-12-28 11:44:45 | 显示全部楼层
能否指导一下
回复

使用道具 举报

6

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
484
金钱
484
注册时间
2017-10-31
在线时间
90 小时
发表于 2020-7-28 16:41:18 | 显示全部楼层

LZ  我用从主节点去查询从节点1的字典  数据如下
601  40 00 20 00 00 00 00 00
581  4F 00 20 00 EE 00 00 00
这是我用串口监视知道   
从节点1的2000 00 里面的值是EE

但是我想知道这个 从节点1的2000 00 里面的值  怎末用程序知道这个值  求解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 15:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表