Ejemplo n.º 1
0
        private void btnCloneAction_Click(object sender, EventArgs e)
        {
            if (dgActions.SelectedRows.Count > 0 && dgActions.SelectedRows[0].Tag != null)
            {
                if (MessageBox.Show("真的要克隆吗?", "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                {
                    Robot_Actions actionObj = (Robot_Actions)dgActions.SelectedRows[0].Tag;
                    Robot_Steps[] stepList  = DBInstance.DbHelper.table("Robot_Steps").where ("ActionId=?", new object[] { actionObj.Id }).select("*").getList <Robot_Steps>(new Robot_Steps()).ToArray();

                    if (stepList != null)
                    {
                        //添加Action
                        actionObj.Id = DBInstance.DbHelper.table("Robot_Actions").select("max(Id)").getValue <long>(0) + 1;
                        DBInstance.DbHelper.table("Robot_Actions").set("Id", actionObj.Id).set("Code", actionObj.Code).set("Name", actionObj.Name).set("Condition", actionObj.Condition).insert();

                        //添加StepList
                        foreach (Robot_Steps step in stepList)
                        {
                            step.Id       = DBInstance.DbHelper.table("Robot_Steps").select("max(Id)").getValue <long>(0) + 1;
                            step.ActionId = actionObj.Id;
                            DBInstance.DbHelper.table("Robot_Steps").set("Id", step.Id).set("ActionId", step.ActionId).set("MotorIndex", step.MotorIndex).set("MotorType", step.MotorType).set("Value", step.Value).set("BeforeSleep", step.BeforeSleep).set("AfterSleep", step.AfterSleep).insert();
                        }
                    }
                }
            }

            LoadActions();
            LoadQuestions();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 发送指令
        /// </summary>
        /// <param name="stepList"></param>
        public void RunAction(Robot_Actions action, List <Robot_Steps> stepList)
        {
            lock (TaskQueues)
            {
                if (action != null && stepList != null)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.Append("动作名称:").Append(action.Name).Append("\n");

                    foreach (Robot_Steps step in stepList)
                    {
                        //编译指令
                        byte[] cmdBytes = MainService.MotorControlService.GetCommand(step);

                        if (cmdBytes != null)
                        {
                            sb.Append("-------------\n");
                            sb.Append("电机序号:").Append(step.MotorIndex).Append(",类型:").Append(step.MotorType).Append(",值:").Append(step.Value).Append("\n");
                            sb.Append("=============\n");
                            sb.Append(CRC.PrintBytesString(cmdBytes) + "\n");

                            //发送前等待
                            sb.Append("+++++++++++++\n");
                            sb.Append("等待" + step.BeforeSleep + "毫秒");
                            try
                            {
                                Thread.Sleep((int)step.BeforeSleep);
                            }
                            catch (Exception ex) { }

                            //发送指令
                            MainService.MotorControlService.SendMessage(cmdBytes);

                            //发送后等待
                            sb.Append("+++++++++++++\n");
                            sb.Append("等待" + step.AfterSleep + "毫秒");
                            try
                            {
                                Thread.Sleep((int)step.AfterSleep);
                            }
                            catch (Exception ex) { }

                            //需要停留20ms(指令之间固定时间)
                            try
                            {
                                Thread.Sleep(200);
                            }
                            catch (Exception ex) { }
                        }
                    }

                    System.Console.WriteLine(sb.ToString());
                }
            }
        }
Ejemplo n.º 3
0
        private void btnDeleteAction_Click(object sender, EventArgs e)
        {
            if (dgActions.SelectedRows.Count > 0 && dgActions.SelectedRows[0].Tag != null)
            {
                Robot_Actions obj = (Robot_Actions)dgActions.SelectedRows[0].Tag;
                if (MessageBox.Show("真的要删除吗?", "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                {
                    DBInstance.DbHelper.table("Robot_Actions").where ("Id = ?", new object[] { obj.Id }).delete();
                    DBInstance.DbHelper.table("Robot_Steps").where ("ActionId = ?", new object[] { obj.Id }).delete();
                }
            }

            LoadActions();
            LoadQuestions();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 检查是否同意运行
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        public bool IsAcceptRun(TaskQueueObject queueObj, Robot_Actions action)
        {
            if (action != null && queueObj != null && queueObj.Value != null)
            {
                if (string.IsNullOrEmpty(action.Condition))
                {
                    return(false);
                }
                else
                {
                    bool result = false;

                    switch (queueObj.ActionType)
                    {
                    case TaskActionType.Voice:
                        if (action.Condition.StartsWith("语音="))
                        {
                            result = action.Condition.Replace("语音=", string.Empty).Equals(queueObj.Value.ToString());
                        }
                        break;

                    case TaskActionType.Angle:
                        if (action.Condition.StartsWith("角度="))
                        {
                            string   angleRangeStr = action.Condition.Replace("角度=", string.Empty);
                            string[] temps         = angleRangeStr.Split(',');
                            if (temps != null && temps.Length >= 2)
                            {
                                short min = 0;
                                short max = 0;
                                try
                                {
                                    min = short.Parse(temps[0]);
                                }
                                catch (Exception ex) { }
                                try
                                {
                                    max = short.Parse(temps[1]);
                                }
                                catch (Exception ex) { }

                                short angle = short.Parse(queueObj.Value.ToString());
                                result = angle >= min && angle <= max;
                            }
                        }
                        break;

                    case TaskActionType.Joy:
                        if (action.Condition.StartsWith("手柄="))
                        {
                            result = action.Condition.Replace("手柄=", string.Empty).Equals(queueObj.Value.ToString());
                        }
                        break;
                    }

                    return(result);
                }
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 5
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(tbCode.Text))
            {
                MessageBox.Show("请输入代码!");
                return;
            }
            if (string.IsNullOrEmpty(tbName.Text))
            {
                MessageBox.Show("请输入名称!");
                return;
            }

            if (IsNewRecord)
            {
                _object   = new Robot_Actions();
                Object.Id = DBInstance.DbHelper.table("Robot_Actions").select("max(Id)").getValue <long>(0) + 1;
            }

            //更新Code和Name
            Object.Code      = tbCode.Text;
            Object.Name      = tbName.Text;
            Object.Condition = aceConditionControl.GetConditionString();

            //清理Steps
            DBInstance.DbHelper.table("Robot_Steps").where ("ActionId=?", new object[] { Object.Id }).delete();

            //更新Action
            if (IsNewRecord)
            {
                //新境加
                DBInstance.DbHelper.table("Robot_Actions").set("Id", Object.Id).set("Code", Object.Code).set("Name", Object.Name).set("Condition", Object.Condition).insert();
            }
            else
            {
                //更新
                DBInstance.DbHelper.table("Robot_Actions").set("Code", Object.Code).set("Name", Object.Name).set("Condition", Object.Condition).where ("Id=?", Object.Id).update();
            }

            foreach (ITimelineTrack track in adcActionControl.DefaultParts.TrackElementList)
            {
                if (track is StartTrack)
                {
                    continue;
                }
                else
                {
                    MotorTrackBase mt = (MotorTrackBase)track;

                    Robot_Steps step = new Robot_Steps();
                    step.Id          = DBInstance.DbHelper.table("Robot_Steps").select("max(Id)").getValue <long>(0) + 1;
                    step.ActionId    = Object.Id;
                    step.MotorIndex  = mt.MotorIndex;
                    step.BeforeSleep = mt.BeforeSleep;
                    step.AfterSleep  = mt.AfterSleep;

                    switch (mt.MotorType)
                    {
                    case MotorTypes.C_旋转电机:
                        step.MotorType = 0;
                        step.Value     = ((RevolveTrack)mt).Angle;
                        break;

                    case MotorTypes.C_行进电机:
                        step.MotorType = 1;
                        step.Value     = ((TravelTrack)mt).TravelActionType == TravelActionTypes.C_停止 ? 0 : ((TravelTrack)mt).TravelActionType == TravelActionTypes.C_前进 ? 1 : 2;
                        break;

                    case MotorTypes.C_其它设备:
                        step.MotorType = 2;
                        step.Value     = ((LightTrack)mt).LightStateType == LightStateType.C_灭 ? 0 : (((LightTrack)mt).LightStateType == LightStateType.C_红灯 ? 1 : (((LightTrack)mt).LightStateType == LightStateType.C_绿灯 ? 2 : 3));
                        break;
                    }

                    //添加到数据库
                    DBInstance.DbHelper.table("Robot_Steps").set("Id", step.Id).set("ActionId", step.ActionId).set("MotorIndex", step.MotorIndex).set("MotorType", step.MotorType).set("Value", step.Value).set("BeforeSleep", step.BeforeSleep).set("AfterSleep", step.AfterSleep).insert();
                }
            }

            MessageBox.Show("操作完成!");
            Close();
        }