/// <summary> /// 根据Robot_Steps构造一个Comand /// </summary> /// <param name="step"></param> /// <returns></returns> public byte[] GetCommand(Robot_Steps step) { MemoryStream ms = new MemoryStream(); byte[] result = new byte[0]; try { //固定头部 ms.WriteByte(0x01); ms.WriteByte(0x06); //电机序号 byte[] indexBytes = BitConverter.GetBytes(((short)step.MotorIndex)); Array.Reverse(indexBytes); ms.Write(indexBytes, 0, indexBytes.Length); //值 ushort value = 0; switch (step.MotorType) { case 0: if (step.Value >= 0) { value = (ushort)(60 + step.Value); } else if (step.Value < 0) { value = (ushort)(60 + step.Value); } break; case 1: value = (ushort)step.Value; break; case 2: value = (ushort)step.Value; break; } byte[] vBytes = BitConverter.GetBytes(value); Array.Reverse(vBytes); ms.Write(vBytes, 0, vBytes.Length); //生成CRC byte[] crcs = CRC.CRC16(ms.ToArray()); Array.Reverse(crcs); ms.Write(crcs, 0, crcs.Length); //返回byte[] result = ms.ToArray(); } finally { ms.Dispose(); } return(result); }
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(); }