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(); }
/// <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()); } } }
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(); }
/// <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); } }
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(); }