Exemplo n.º 1
0
        /// <summary>
        /// 发送命令给电控
        /// 00备用,01转速,02转矩,03放电
        /// </summary>
        /// <param name="scmSendData"></param>
        /// <returns></returns>
        public override List <ScmCanSendMsg> TransformEcuSendData(uint canIndex, Ecm_WorkMode cmdType, short data, uint motorIndex = 0)
        {
            List <ScmCanSendMsg> canSendDatas = new List <ScmCanSendMsg>();

            Scm_TCU1 scmTcu1 = new Scm_TCU1();

            ScmCanSendMsg canSendData = new ScmCanSendMsg();

            canSendData.FeedBkMtclMode = cmdType;

            string strCmdDetail = string.Empty; //命令解析字符串信息



            //电机转速模式设定
            scmTcu1.eop_ctrl_ena_dmd_sd = 0x00; //mcu使能
            scmTcu1.eop_clear_fault     = 0x00; //不清故障

            switch (cmdType)
            {
            case Ecm_WorkMode.None:                 //备用
                scmTcu1.eop_ctrl_mod_dmd_sd = 0x00; //控制模式
                strCmdDetail += "备用" + "\r\n";
                break;

            case Ecm_WorkMode.SpeedMode:     //转速模式
            {
                canSendData.FeedBkMotorSpeed = scmTcu1.eop_spd_dmd_sd = Convert.ToInt16(data);
                scmTcu1.eop_ctrl_ena_dmd_sd  = 0x02;        //mcu使能
                scmTcu1.eop_ctrl_mod_dmd_sd  = 0x01;        //控制模式
                strCmdDetail += "转速命令:" + data.ToString() + "\r\n";
                break;
            }

            case Ecm_WorkMode.TorqueMode:     //转矩模式
            {
                canSendData.FeedBkMotorTorque = scmTcu1.eop_tq_dmd_sd = (byte)data;
                scmTcu1.eop_ctrl_ena_dmd_sd   = 0x02;       //mcu使能
                scmTcu1.eop_ctrl_mod_dmd_sd   = 0x02;       //控制模式
                strCmdDetail += "扭矩命令:" + data.ToString() + "\r\n";
                break;
            }

            default: scmTcu1.eop_ctrl_mod_dmd_sd = 0x00; break;
            }
            CanStandardData canData = ScmEvcu1ToBytes(scmTcu1);

            canSendData.canId    = canData.canId;
            canSendData.baudrate = canData.baudrate;
            canSendData.datas    = canData.datas;

            canSendData.canIndex = canIndex;

            canSendData.cmdDetail = strCmdDetail;

            canSendDatas.Add(canSendData);

            return(canSendDatas);
        }
        public override ScmCanSendMsg EcuClearMcuFault()
        {
            ScmCanSendMsg scmSendMsg = new ScmCanSendMsg();

            ElecOilPump_Scm_EVCU1 scmEvcu1 = new ElecOilPump_Scm_EVCU1();

            scmEvcu1.control_mode   = 0x01; //清故障
            scmEvcu1.request_speed  = 0;
            scmEvcu1.request_torque = 0x00;
            scmEvcu1.running_enable = 0;

            CanStandardData canData = ElecOilPump_ScmEvcu1ToBytes(scmEvcu1);

            scmSendMsg.canId    = canData.canId;
            scmSendMsg.baudrate = canData.baudrate;
            scmSendMsg.datas    = canData.datas;

            return(scmSendMsg);
        }
        public override AbstractMotorControl.ScmCanSendMsg EcuClearMcuFault()
        {
            ScmCanSendMsg scmSendMsg = new ScmCanSendMsg();

            Scm_EVCU1 scmEvcu1 = new Scm_EVCU1();

            scmEvcu1.isg_ctrl_ena_dmd_sd = 0x02; //清故障
            scmEvcu1.isg_ctrl_mod_dmd_sd = 0x00;
            scmEvcu1.isg_run_dir_dmd_sd  = 0x00;
            scmEvcu1.isg_spd_dmd_sd      = 0;
            scmEvcu1.isg_tq_dmd_sd       = 0;

            CanStandardData canData = ScmEvcu1ToBytes(scmEvcu1);

            scmSendMsg.canId    = canData.canId;
            scmSendMsg.baudrate = canData.baudrate;
            scmSendMsg.datas    = canData.datas;

            return(scmSendMsg);
        }
Exemplo n.º 4
0
        public override ScmCanSendMsg EcuClearMcuFault()
        {
            ScmCanSendMsg scmSendMsg = new ScmCanSendMsg();

            Scm_TCU1 scmEvcu1 = new Scm_TCU1();

            scmEvcu1.eop_ctrl_ena_dmd_sd = 0x01; //清故障
            scmEvcu1.eop_clear_fault     = 1;    //清故障
            scmEvcu1.eop_ctrl_mod_dmd_sd = 0x00;
            scmEvcu1.eop_spd_dmd_sd      = 0;
            scmEvcu1.eop_tq_dmd_sd       = 0;

            CanStandardData canData = ScmEvcu1ToBytes(scmEvcu1);

            scmSendMsg.canId    = canData.canId;
            scmSendMsg.baudrate = canData.baudrate;
            scmSendMsg.datas    = canData.datas;

            return(scmSendMsg);
        }
        /// <summary>
        /// 发送命令给电控
        /// 00备用,01转速,02转矩,03放电
        /// </summary>
        /// <param name="scmSendData"></param>
        /// <returns></returns>
        public override List <ScmCanSendMsg> TransformEcuSendData(uint canIndex, Ecm_WorkMode cmdType, short data, uint motorIndex = 0)
        {
            List <ScmCanSendMsg> canSendDatas = new List <ScmCanSendMsg>();

            Scm_EVCU1 scmEvcu1 = new Scm_EVCU1();

            ScmCanSendMsg canSendData = new ScmCanSendMsg();

            canSendData.FeedBkMtclMode = cmdType;

            string strCmdDetail = string.Empty; //命令解析字符串信息

            AbstractMotorControl.Ecm_Gear gear; //0空挡,1前进,2后退
            if (data > 0)
            {
                gear = AbstractMotorControl.Ecm_Gear.DriveGear;
            }
            else if (data < 0)
            {
                gear = AbstractMotorControl.Ecm_Gear.ReverseGear;
            }
            else
            {
                gear = AbstractMotorControl.Ecm_Gear.NeutralGear;
            }

            switch (gear)
            {
            case Ecm_Gear.NeutralGear:
                scmEvcu1.isg_run_dir_dmd_sd = 0x00;
                strCmdDetail = "空挡" + "\r\n";
                break;

            case Ecm_Gear.DriveGear:
                scmEvcu1.isg_run_dir_dmd_sd = 0x01;
                strCmdDetail = "D档" + "\r\n";
                break;

            case Ecm_Gear.ReverseGear:
                scmEvcu1.isg_run_dir_dmd_sd = 0x02;
                strCmdDetail = "倒档" + "\r\n";
                break;

            case Ecm_Gear.ErrorGear:
                scmEvcu1.isg_run_dir_dmd_sd = 0x03;
                strCmdDetail = "错误" + "\r\n";
                break;

            default: scmEvcu1.isg_run_dir_dmd_sd = 0x00; break;
            }

            //电机转速模式设定
            scmEvcu1.isg_ctrl_ena_dmd_sd = 0x00; //mcu使能


            switch (cmdType)
            {
            case Ecm_WorkMode.None:                  //备用
                scmEvcu1.isg_ctrl_mod_dmd_sd = 0x00; //控制模式
                strCmdDetail += "备用" + "\r\n";
                break;

            case Ecm_WorkMode.SpeedMode:             //转速模式
            {
                scmEvcu1.isg_spd_dmd_sd      = data; //偏移12000,0表示-12000
                canSendData.FeedBkMotorSpeed = data;
                scmEvcu1.isg_ctrl_ena_dmd_sd = 0x01; //mcu使能
                scmEvcu1.isg_ctrl_mod_dmd_sd = 0x01; //控制模式
                strCmdDetail += "转速命令:" + data.ToString() + "\r\n";
                break;
            }

            case Ecm_WorkMode.TorqueMode:             //转矩模式
            {
                scmEvcu1.isg_tq_dmd_sd        = data; //偏移2000,0表示-2000
                canSendData.FeedBkMotorTorque = data;
                scmEvcu1.isg_ctrl_ena_dmd_sd  = 0x01; //mcu使能
                scmEvcu1.isg_ctrl_mod_dmd_sd  = 0x02; //控制模式
                strCmdDetail += "扭矩命令:" + data.ToString() + "\r\n";
                break;
            }

            case Ecm_WorkMode.DisCharging:           //放电模式
                scmEvcu1.isg_ctrl_ena_dmd_sd = 0x01; //mcu使能
                scmEvcu1.isg_ctrl_mod_dmd_sd = 0x03; //控制模式
                strCmdDetail += "放电" + "\r\n";
                break;

            default: scmEvcu1.isg_ctrl_mod_dmd_sd = 0x00; break;
            }
            CanStandardData canData = ScmEvcu1ToBytes(scmEvcu1);

            canSendData.canId    = canData.canId;
            canSendData.baudrate = canData.baudrate;
            canSendData.datas    = canData.datas;

            canSendData.canIndex = canIndex;

            canSendData.cmdDetail = strCmdDetail;

            canSendDatas.Add(canSendData);

            return(canSendDatas);
        }