canOpen学习十三之读字典和写字典注意事项

注意点:读写字典完成后读取读写字典结果等待的状态不同,读字典等待的状态是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;
}

猜你喜欢

转载自blog.csdn.net/qq_15181569/article/details/110480203