Galil控制卡DMC2143和安川电机控制问题 点击:1887 | 回复:10



李喆

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2015年7月25日
发表于:2015-08-12 15:34:44
楼主

安川伺服电机,驱动器都设置好了,接Galil控制卡(DMC2143配套ICM-20105ID)的X轴上MFC软件能有效控制,当接到Y轴上时MFC软件控制不了,若在galil软件上先输入JG1000<ENTRR>   FIB<ENTER>  BGB<ENTER>后上电,然后在MFC软件上Y轴输入5mm点Y轴按钮后电机开始转(一直转),只有在galil软件用ST,或者AB命令才能停止转,或者在MFC界面按断电按钮才停。我想实现的功能是MFC界面上输入几毫米电机就转几毫米,点复位时电机回零点。其中X轴实现功能了,现在调试Y轴出现这种问题。我想问问这是不是我MFC软件问题?还是哪儿的问题。






刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8240回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2015-08-13 14:44:44
1楼

安川伺服电机,驱动器都设置好了

真的设置好了?怎么设置的?

 

当接到Y轴上时MFC软件控制不了,

什么叫控制不了?后面描述的情况么?电机能转能停,那很可能是错误控制。

 

若在galil软件上先输入JG1000<ENTRR>   FIB<ENTER>  BGB<ENTER>后上电,

后上电?后给谁上电?给驱动器上电么?您先发运动指令后给电机上电的,这个思路很诡异啊。另外,您要控制y轴,指令应该是JG,1000,或者JGB=1000。

 

然后在MFC软件上Y轴输入5mm点Y轴按钮后电机开始转(一直转),只有在galil软件用ST,或者AB命令才能停止转,或者在MFC界面按断电按钮才停。

我觉得,起作用的是您在驱动器上电前给的指令。至于定长运动的指令,可能根本没有执行。顺便问一下,您的软件在发送指令的时候,不检查函数反馈是不是0(指令是不是被执行了)?

 

我想问问这是不是我MFC软件问题?还是哪儿的问题。

不知道是哪的问题,只能猜测几个可能的方向:

MFC软件有问题,没有检查控制卡的工作状态,也不检查指令的执行状态,只是盲目的发指令。很多与运动有关的指令,本身也是受运动状态限制的,只能在运动结束之后才能执行。如果在运动结束前发送,控制器会忽略这个指令,函数中也会有错误提示。

驱动器的设置和接线可能有问题,把Y轴电机驱动器接到X轴上试试看。

控制器的设置可能有问题,把X轴的电机驱动器接到Y轴上试试看。

 

李喆

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2015年7月25日
发表于:2015-08-13 15:04:01
2楼


回复内容:

对: 刘岩利 安川伺服电机,驱动器都设置好了真的设置好了?怎么设置的... 内容的回复!

Pn000为0010;Pn00b为0101;Pn20E为160000;Pn210为1250;Pn50A为8100;Pn50b为6548;编码器为20位的,我一共两套,旧的那一套是20位的,新的是24位的,问的厂家说参数设置除了Pn20E改为2560000其他都一样;软件在X轴上好用,X轴是调试好了的,Y轴的软件是我在原来的软件上修改的,我调试y轴用的还是原来在x轴上好用的那套旧的设备,新的我试过在x轴上也好用,所以我想只要Y轴调好了,就没问题了。2143板卡由于电机是位置控制的伺服,所以SMX,SMY那加跳线帽了,然后Y轴MT按厂家改成2,也就是在SDMC Smart Terminal 输入MT,2再保存,

李喆

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2015年7月25日
发表于:2015-08-13 15:16:39
3楼


回复内容:

对: 刘岩利 安川伺服电机,驱动器都设置好了真的设置好了?怎么设置的... 内容的回复!

如果说厂家告诉我的设置都没问题,那就估计是我修改的软件不对,目前在Y轴上,我上电再点Y的按钮电机就一直转,只能在DMC Smart Terminal上输入AB,或者ST或者给电机断电才能停,软件上的复位键好用;还有今天早上出了新问题了,2143板卡红灯亮,不能和PC通信了,我不知道哪有问题,这块板子我用了十多天都没事,今天早上9点多接的线和设备,当时接在x轴,设备好用,红灯也没亮,我断电后看了会软件问题,等我在10点多再通电红灯亮着了,请问这是什么原因。如果方便的话可不可以加我qq1005287501我把软件发给你,帮我看看,MFC软件是否有问题

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8240回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2015-08-14 09:23:59
4楼

目前在Y轴上,我上电再点Y的按钮电机就一直转

您那个按钮对应的是什么命令?

 

2143板卡红灯亮,不能和PC通信了,

如果您用的不是dmc-2143-dc24的话,如果最好的情况是供电的5v电源的电压偏低,把电源电压首位调高一点就好。按照原厂的说法。5v只要低2%以上,就不能保证卡正常工作了。

如果不是这个原因,就比较可怕了,多半是控制卡故障。

 

自从传说中的3q大战之后,这两家的产品我就都绝对不往电脑上装了,确实不方便加您的qq。

李喆

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2015年7月25日
发表于:2015-08-14 15:41:54
5楼


回复内容:

对: 刘岩利 目前在Y轴上,我上电再点Y的按钮电机就一直转您那个按钮... 内容的回复!

关于红灯的问题,我还有一点现象漏说了,就是亮红灯时,2143板卡有一块芯片(IS61C25616AL-10KLI)比较烫,是否可以说是这块芯片坏了呢?

Y按钮的代码如下:

void CLaserscanView::OnMovelong() 

{

// TODO: Add your control notification handler code here

GetDlgItem(IDC_MOVELONG)->EnableWindow(FALSE);


GetDlgItem(IDC_MOVEWIDTH)->EnableWindow(FALSE);

GetDlgItem(IDC_MOTIONRESET)->EnableWindow(FALSE);

GetDlgItem(IDC_MOTION3EN)->EnableWindow(FALSE);

GetDlgItem(IDC_MOTION3NOTEN)->EnableWindow(FALSE);

GetDlgItem(IDC_EXIT)->EnableWindow(FALSE);



UpdateData(1);

double lon;

lon=atof(m_ymove)*1638.4;

CString lon1,plu;

plu="PRB";

lon1.Format("%f",lon);

plu+=lon1+ ";BGB;EN;";

char szResponse[4096];

m_DMCWin.Command((char*)((const char*)plu), szResponse, sizeof(szResponse));

if(szResponse[0]!=':')

{

    AfxMessageBox("请确认是否已上电");

GetDlgItem(IDC_MOVELONG)->EnableWindow(TRUE);

return;

}

GetDlgItem(IDC_MOVELONG)->EnableWindow(TRUE);


GetDlgItem(IDC_MOVEWIDTH)->EnableWindow(TRUE);

GetDlgItem(IDC_MOTIONRESET)->EnableWindow(TRUE);

GetDlgItem(IDC_MOTION3EN)->EnableWindow(TRUE);

GetDlgItem(IDC_MOTION3NOTEN)->EnableWindow(TRUE);

GetDlgItem(IDC_EXIT)->EnableWindow(TRUE);

}


李喆

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2015年7月25日
发表于:2015-08-14 15:44:14
6楼


回复内容:

对: 刘岩利 目前在Y轴上,我上电再点Y的按钮电机就一直转您那个按钮... 内容的回复!

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8240回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2015-08-14 17:46:30
7楼

plu="PRB";

lon1.Format("%f",lon);

plu+=lon1+ ";BGB;EN;";

对于这三行,最终得到的plu应该是类似“PRB1000;BGB;EN”

但是,正确的指令应该是“PRB=1000;BGB”或者“PR,1000;BGB”多个EN是无所谓的,但前面的PR不对是会带来问题的。

李喆

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2015年7月25日
发表于:2015-08-14 19:50:28
8楼


回复内容:

对: 刘岩利 plu="PRB";lon1.Format("%f",... 内容的回复!

我X轴的程序好用啊。如下:

GetDlgItem(IDC_MOVEWIDTH)->EnableWindow(FALSE);


GetDlgItem(IDC_MOVELONG)->EnableWindow(FALSE);

GetDlgItem(IDC_MOTIONRESET)->EnableWindow(FALSE);

GetDlgItem(IDC_MOTION3EN)->EnableWindow(FALSE);

GetDlgItem(IDC_MOTION3NOTEN)->EnableWindow(FALSE);

GetDlgItem(IDC_EXIT)->EnableWindow(FALSE);



UpdateData(1);

double wid;

wid=atof(m_xmove)*1638.4;

CString wid1,plu;

plu="PRA";

wid1.Format("%f",wid);

plu+=wid1+ ";BGX;EN;";

char szResponse[4096];

m_DMCWin.Command((char*)((const char*)plu), szResponse, sizeof(szResponse));

if(szResponse[0]!=':')

{

    AfxMessageBox("请确认是否已上电");

GetDlgItem(IDC_MOVEWIDTH)->EnableWindow(TRUE);

return;

}

GetDlgItem(IDC_MOVEWIDTH)->EnableWindow(TRUE);


GetDlgItem(IDC_MOVELONG)->EnableWindow(TRUE);

GetDlgItem(IDC_MOTIONRESET)->EnableWindow(TRUE);

GetDlgItem(IDC_MOTION3EN)->EnableWindow(TRUE);

GetDlgItem(IDC_MOTION3NOTEN)->EnableWindow(TRUE);

GetDlgItem(IDC_EXIT)->EnableWindow(TRUE);


李喆

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2015年7月25日
发表于:2015-08-15 10:34:53
9楼


回复内容:

对: 刘岩利 plu="PRB";lon1.Format("%f",... 内容的回复!

你好,如果要使定位台用雷尼绍光栅尺rh100对x轴进行反馈控制,用2143控制卡接收光栅读数头的信号,MFC通过对2143反馈回来的信号再进行处理,修正x轴的位置,请问这个编程的思路是什么?如果有可以给我借鉴的就更好了,我对编程还属于白痴级别的

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8240回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2015-08-17 09:38:01
10楼

我这里只是告诉您,字符串应该处理成什么样。对于c语言的编程,该如何进行字符串处理的内容,你还是通过其它渠道学习吧。

 

要通过光栅尺的反馈对定位的位置进行修正,流程是这样的

1、计算目标位置的运动距离

2、开始运动

3、确认运动结束

4、延时几毫秒到几百毫秒

5、读取光栅反馈

6、根据反馈数值计算偏差

7、若偏差小于允许值则结束

8、若修正次数大于允许值则结束

9、计算修正移动距离

10、从1开始重复

 


热门招聘
相关主题

官方公众号

智造工程师