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);
            }
        }
示例#2
0
        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);
            }
        }