|

楼主 |
发表于 2008-5-29 11:34:58
|
显示全部楼层
现把程序传上去,帮忙看看,谢谢~!
int CVICALLBACK Start (int panel, int control, int event,void *callbackData, int eventData1, int eventData2) //开始按钮回调函数
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_START, &start);
if(start)
{
/*获得扫查参数*/
GetCtrlVal (panelHandle, PANEL_LENGTH, &length);
GetCtrlVal (panelHandle, PANEL_WIDTH, &width);
GetCtrlVal (panelHandle, PANEL_DEPTH, &depth);
/*获取面板电机参数*/
GetCtrlVal (panelHandle, PANEL_DIRECTION,&p);
GetCtrlVal (panelHandle, PANEL_STEP,&step);
GetCtrlVal (panelHandle, PANEL_FREQUENCY,&f);
GetCtrlVal (panelHandle, PANEL_XFS,&xfs);
n= step/(0.0208/xfs);
Unitime=n/f;
SetCtrlAttribute (panelHandle, PANEL_TIMER,ATTR_INTERVAL,1*Unitime);
T=1000000/f;
loop=T/100;
trans[0]=0x0a;
if(p==0)
trans[1]=0xac; //扫查电机反转 前进
if(p==1)
trans[1]=0xad; //扫查电机正转 后退
if(p==2)
trans[1]=0xab; //主轴电机反转 向左
if(p==3)
trans[1]=0xaa; //主轴电机正转 向右
trans[2]=n;
trans[3]=loop;
OpenComConfig(channel,"",Baud,0,8,1,256,256); SetCtrlVal(panelHandle, PANEL_LED, 1);
SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_ENABLED,1);
}
}
else
{
SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_ENABLED,0);
SetCtrlVal(panelHandle, PANEL_LED, 0);
}
break;
}
return 0;
}
int CVICALLBACK Timer (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) //定时器回调函数
{
int strLen;
switch (event)
{
case EVENT_TIMER_TICK:
if(l<length)
{
if(start)
{ FlushOutQ(channel);
ComWrt(channel,trans,4);
do
{
strLen=GetInQLen(channel);
ComRd(channel,readBuf,strLen);
}while(readBuf[0]!=0x88);
if(readBuf[0]==0x88)
SetCtrlVal (panelHandle, PANEL_TEXTBOX, readBuf);
}
}
if(l==length)
{
SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_ENABLED,0);
if(GetOutQLen(Channel)) //若缓冲区数据已被取走,则关闭串口
{
if(GetOutQLen(Channel)==0)
CloseCom(Channel);
}
SetCtrlVal (panelHandle, PANEL_LED, 0); //运行指示灯灭
SetCtrlVal (panelHandle, PANEL_START, 0); //启动按钮弹出
}
l++;
break;
}
return 0;
} |
|