安川伺服电机,驱动器都设置好了,接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软件问题?还是哪儿的问题。
安川伺服电机,驱动器都设置好了
真的设置好了?怎么设置的?
当接到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轴上试试看。
回复内容:
对: 刘岩利 安川伺服电机,驱动器都设置好了真的设置好了?怎么设置的... 内容的回复!
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再保存,
回复内容:
对: 刘岩利 安川伺服电机,驱动器都设置好了真的设置好了?怎么设置的... 内容的回复!
如果说厂家告诉我的设置都没问题,那就估计是我修改的软件不对,目前在Y轴上,我上电再点Y的按钮电机就一直转,只能在DMC Smart Terminal上输入AB,或者ST或者给电机断电才能停,软件上的复位键好用;还有今天早上出了新问题了,2143板卡红灯亮,不能和PC通信了,我不知道哪有问题,这块板子我用了十多天都没事,今天早上9点多接的线和设备,当时接在x轴,设备好用,红灯也没亮,我断电后看了会软件问题,等我在10点多再通电红灯亮着了,请问这是什么原因。如果方便的话可不可以加我qq1005287501我把软件发给你,帮我看看,MFC软件是否有问题
回复内容:
对: 刘岩利 目前在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);
}
回复内容:
对: 刘岩利 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);