public bool Recv4Vision(double[] a) { if (!mdv.pmacCard.m_isConnected)//若没有连上,则不做处理 { return(false); } float T = (float)a[12] * 1000; //调节时间单位到mm SetNotes(T.ToString()); if (mdv.QueryIsMoving() == true) { return(false); } else { mdv.SetX((float)a[1]);//设置打球参数 mdv.SetY((float)a[2]); // mdv.SetT(T); mdv.pmacCard.SendCMD("P4 = 1"); //发送打球命令 return(true); } }
public double t_last_RC = 0; //上次接收到信息的时间戳。 只有当时间戳间距大于阈值时,才会启动新轨迹。 public bool Recv4Vision(double[] padPar) { if (!mdv.pmacCard.m_isConnected)//若没有连上,则不做处理 { return(false); } // float T = (float)padPar[7] * 1000; //调节时间单位到ms // SetNotes( T.ToString() ); bool flag_alreadySend = (padPar[0] == 1) ? true : false; //判断是否是这条轨迹中第一次收到数据 flag_alreadySend = false; SetNotes("New Trace"); if (padPar[8] - t_last_RC < 100) { flag_alreadySend = true; SetNotes("Old Trace"); } t_last_RC = padPar[8]; flag_isMoving = mdv.QueryIsMoving(); if (!flag_isMoving) //击球过程结束时,把当前值设为0 以防止死区导致下次运动失效 { mdv.X_Now = 0; mdv.Y_Now = 0; mdv.Z_Now = 0; } if (!flag_isMoving && !flag_alreadySend) //只在当前机构没有运动过,且对当前来球轨迹没有响应过时,才启动y轴 // if (!flag_isMoving ) //只在当前机构没有运动过,且对当前来球轨迹没有响应过时,才启动y轴 { mdv.pmacCard.SendCMD("DEL GAT"); //清除历史数据 mdv.pmacCard.SendCMD("DEF GAT"); mdv.pmacCard.SendCMD("GAT"); //开始数据采集 // mdv.SetY((float)padPar[2]); mdv.SetT((float)(padPar[7] * 1000 + delay + 10)); //调整时间 string cmd = "p108 = 1," + "p4 = 1," + mdv.GetCmdXZ((float)padPar[1], (float)padPar[3]); mdv.pmacCard.SendCMD(cmd); //发送打球命令 //mdv.SetXZ((float)padPar[1], (float)padPar[3]); isHitting = true; // ZSPCt.SetZSP( (int)padPar[5] , (int)padPar[6]); hitcnt = 1; return(true); } else { hitcnt++; mdv.SetT((float)(padPar[7] * 1000 + delay + 10)); //调整时间 mdv.SetXZ((float)padPar[1], (float)(padPar[3])); // ZSPCt.SetZSP((int)padPar[5], (int)padPar[6]); //若连续发,由于串口的延时,会造成整个系统的延时。 SetNotes("hitcnt = " + hitcnt.ToString()); return(false); } }