注意点:读写字典完成后读取读写字典结果等待的状态不同,读字典等待的状态是SDO_UPLOAD_IN_PROGRESS,而写字典的状态是SDO_DOWNLOAD_IN_PROGRESS。
如下 读字典:
Bool my_read_obj(void *readData,u16 index,u8 subIndex, u8 dataType,u8 readId)
{
u32 objAbortCode; //字典读写结果
u8 objResult; //字典读写结果
u8 objReadData[10]; //字典读取数据
UNS32 objReadSize; //字典读取字节数
u8 i;
readNetworkDict(&master_objdict_Data,readId,index,subIndex,dataType,0);
objResult=SDO_UPLOAD_IN_PROGRESS;
objReadSize=sizeof(objReadData);
memset(objReadData,0x00,sizeof(objReadData));
i=0;
while(objResult==SDO_UPLOAD_IN_PROGRESS&&i<20)
{
rt_thread_mdelay(5);
objResult=getReadResultNetworkDict(&master_objdict_Data,\
readId,\
objReadData,\
&objReadSize,\
&objAbortCode);
i++;
}
for(i=0;i<objReadSize;i++)
{
((u8 *)readData)[i]=objReadData[i];
}
if(objResult!= SDO_FINISHED) //出错了
{
return false;
}
return true;
}
写字典:
//从机写字典
Bool my_write_obj(SlaveId *errorSlaveId,u16 index,u8 subIndex, u32 count, u8 dataType, void *data)
{
u8 configRowCnt=0,configColCnt=0;
u32 objAbortCode; //字典读写结果
u8 objResult; //字典读写结果
u8 i=0;
writeNetworkDict(&master_objdict_Data,\
epromSavePara.parkDataTypDef.parkSlaveIdArrayStatic[configRowCnt][configColCnt],\
index,\
subIndex,\
count,\
dataType,data,0);
objResult=SDO_DOWNLOAD_IN_PROGRESS;
i=0;
while(objResult==SDO_DOWNLOAD_IN_PROGRESS&&i<20)
{
rt_thread_mdelay(5);
objResult=getWriteResultNetworkDict(&master_objdict_Data,\
epromSavePara.parkDataTypDef.parkSlaveIdArrayStatic[configRowCnt][configColCnt],\
&objAbortCode);
i++;
}
if(objResult!= SDO_FINISHED) //出错了
{
*errorSlaveId=epromSavePara.parkDataTypDef.parkSlaveIdArrayStatic[configRowCnt][configColCnt];
return false;
}
}
return true;
}