高级会员

- 积分
- 660
- 金钱
- 660
- 注册时间
- 2013-11-22
- 在线时间
- 131 小时
|
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的吗,你们是怎么读写其它节点的数据字典的呢?
|
|