예제 #1
0
        /// <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);
        }
예제 #2
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();
        }