用c语言能让让A2-F电机伺服启动,但是不能转动,这是为什么。程序如下: 点击:822 | 回复:3



shenglan7

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 9回
  • 年度积分:0
  • 历史总积分:9
  • 注册:2015年12月26日
发表于:2016-04-01 13:53:18
楼主


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);

}





shenglan7

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 9回
  • 年度积分:0
  • 历史总积分:9
  • 注册:2015年12月26日
发表于:2016-04-01 13:57:47
1楼

用的是台达PCI-DMC-F01的运动控制卡

研讨会宣传员_3259

  • [版主]
  • 精华:3帖
  • 求助:110帖
  • 帖子:1927帖 | 14403回
  • 年度积分:102
  • 历史总积分:64749
  • 注册:2020年3月27日
发表于:2016-04-01 21:55:59
2楼

你应该把这个ratio设置成=0才有效吧。

shenglan7

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 9回
  • 年度积分:0
  • 历史总积分:9
  • 注册:2015年12月26日
发表于:2016-04-04 12:24:27
3楼

试了你的方法,仍不会转。如果ratio为0,那扭力值不是就为0了,那不是转不了了?

回复内容:

对: 研讨会宣传员_3259 你应该把这个ratio设置成=0才有效吧。 内容的回复!



热门招聘
相关主题

官方公众号

智造工程师