void main()
{
int i;
I16 gDMCExistCards;//获取系统中挂载之该适配卡数量
U16 CardNo;
U16 gpDMCCardNoList[3],gpDeviceInfo[3];
U32 gpSlaveTable[1][3];
I16 rt=_DMC_01_open(&gDMCExistCards);//当应用程序启用时初始化系统资源,并且获取一开始即挂载在系统中适配卡的数量。
for(i=0; i<gDMCExistCards; i++)
{
/* 取得PC上第i张适配卡号,卡号即Switch指拨开关对应的数值*/
_DMC_01_get_CardNo_seq(i, &CardNo);
gpDMCCardNoList[i] = CardNo;
//printf("%d",i);
/*进行适配卡初始化*/
_DMC_01_pci_initial(gpDMCCardNoList[i]);// 初始化适配卡
_DMC_01_initial_bus(gpDMCCardNoList[i]);// 通讯协议初始化
}
_DMC_01_start_ring(CardNo, 0); // 开始进行通讯
_DMC_01_get_device_table(CardNo, &gpDeviceInfo[CardNo]);//取得使用PDO协议的Slot ID。
_DMC_01_get_node_table(CardNo, &gpSlaveTable[0][CardNo]);//取得使用SDO定的Node ID。
//////您可以使用下列的算法来找出SDO的站号(Node ID)////////
I16 lMask = 0x1,gNodeNum=0;
U16 gpNodeID[3];///////////////////////NODE ID
for(i=0; i<32; i++)
{
/* 第i个bit值为1时,条件式成立.*/
if((gpSlaveTable[0][CardNo]>>i) & lMask)
{
/* 取得的i值+1即为站号(Node ID),对应驱动器参数「P3-00」*/
gpNodeID[gNodeNum] = (unsigned short)(i+1);
gNodeNum++;
}
}
/////////////////////伺服启动////////////////////
U16 ON_OFF=0;
_DMC_01_ipo_set_svon(CardNo, gpNodeID[0], gpDeviceInfo[CardNo] , ON_OFF);
_DMC_01_ipo_set_svon(CardNo, gpNodeID[1], gpDeviceInfo[CardNo] , ON_OFF);
/////////////////////////转矩控制///////////////////////////////
U16 slope=100,radio=100,stop=0;//slope:Slop项目:由0至100%额定扭力所需时间。(单位:毫秒) ratio:Ratio项目:额定扭力值千分比。举例来说,若此值为100时表示10% 额定扭力。
_DMC_01_set_torque_mode(CardNo, gpNodeID[0], gpDeviceInfo[CardNo] , slope);
_DMC_01_set_torque_mode(CardNo, gpNodeID[1], gpDeviceInfo[CardNo] , slope);////* 配置转矩参数(slope值) */
/* 启动转矩运动*/
_DMC_01_set_torque(CardNo,gpNodeID[0], gpDeviceInfo[CardNo] , radio);//// 若ratio值大于0,表示马达将正转运动;值小于0则是反转运动。
rt = _DMC_01_set_torque_stop(CardNo, gpNodeID[0], gpDeviceInfo[CardNo] , stop);///* 马达转矩运动停止与否,当stop值为1时,表示转矩运动停止。*/
/////////////////开始进行一段相对性的运动位移。//////////////
I32 Distance =100000;//脉波数
_DMC_01_start_sdo_driver_r_move (CardNo, gpNodeID[0], gpDeviceInfo[CardNo], Distance);
_DMC_01_start_sdo_driver_r_move (CardNo, gpNodeID[1], gpDeviceInfo[CardNo], Distance);
}