/// <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); }
/// <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); }
/// <summary> /// 转换发送给电控的命令 /// 00备用,01转速,02转矩,03放电 /// motorIndex表示第几个电机,默认都是只有一个的 /// </summary> public abstract List <ScmCanSendMsg> TransformEcuSendData(uint canIndex, Ecm_WorkMode workMode, short data, uint motorIndex = 0);