/// <summary> /// 发送并读取报文 /// </summary> /// <param name="agent">通信代理</param> /// <param name="cmd">命令</param> /// <param name="data">正文</param> /// <returns>响应的报文</returns> internal static byte[] SendAndRead(this SerialPortsUtils.Agents.Agent agent, byte cmd, byte[] data = null) { var packet = PacketUtils.BuildSend(cmd, data); var reader = new ReadFilter(cmd); return(agent.SendAndRead(packet, reader)); }
public void SaveChanges(SerialPortsUtils.Agents.Agent io) { System.Diagnostics.Debug.WriteLine("Begin apply modify on InjectorCorrection"); if (ChangedFlag == true) { byte[] data = new byte[25]; for (int i = 0; i < 16; i++) { data[i] = (byte)this.CorrectionValues[i]; } var temp1 = ValueConvert.TwoBitTimeByusValue(this.MinOpenTime); data[16] = temp1[0]; data[17] = temp1[1]; var temp2 = ValueConvert.TwoBitTimeByusValue(this.CorrectionTime); data[18] = temp2[0]; data[19] = temp2[1]; var temp3 = ValueConvert.TwoBitTimeByusValue(this.OpenKeepTime); data[20] = temp3[0]; data[21] = temp3[1]; data[22] = Convert.ToByte(this._InjectEmptyScale); var temp4 = ValueConvert.TwoBitTimeByusValue(this.MaxOpenTime); data[23] = temp4[0]; data[24] = temp4[1]; io.SendAndRead(InstructionSet.SetInjectorCorrectionSetting, data); } System.Diagnostics.Debug.WriteLine("End apply modify on InjectorCorrection"); }
public void SaveChanges(SerialPortsUtils.Agents.Agent io) { foreach (var item in ChangedCollection) { switch (item.Key) { case "Red.Temps": foreach (var index in item.Value) { io.SendAndRead(InstructionSet.SetRedTempCorrectionPart1, InstructionSet.SetRedTempCorrectionPart2_Temp[index] , new byte[] { ValueConvert.SingleTempValue(this.Red.Temps[index]) }); } break; case "Red.Corrections": foreach (var index in item.Value) { io.SendAndRead(InstructionSet.SetRedTempCorrectionPart1, InstructionSet.SetRedTempCorrectionPart2_Correction[index] , new byte[] { ValueConvert.TempCorrectionValue(this.Red.Corrections[index]) }); } break; case "Gas.Temps": foreach (var index in item.Value) { io.SendAndRead(InstructionSet.SetGasTempCorrectionPart1, InstructionSet.SetGasTempCorrectionPart2_Temp[index] , new byte[] { ValueConvert.SingleTempValue(this.Gas.Temps[index]) }); } break; case "Gas.Corrections": foreach (var index in item.Value) { io.SendAndRead(InstructionSet.SetGasTempCorrectionPart1, InstructionSet.SetGasTempCorrectionPart2_Correction[index] , new byte[] { ValueConvert.TempCorrectionValue(this.Gas.Corrections[index]) }); } break; case "GasPress.Items": foreach (var index in item.Value) { io.SendAndRead(InstructionSet.SetGasPressPart1, InstructionSet.SetGasPressPart2_Items[index] , ValueConvert.PressValue(this.GasPress.Items[index])); } break; case "GasPress.Corrections": foreach (var index in item.Value) { io.SendAndRead(InstructionSet.SetGasPressPart1, InstructionSet.SetGasPressPart2_Correction[index] , ValueConvert.PressCorrectionValue(this.GasPress.Corrections[index])); } break; } item.Value.Clear(); } }
/// <summary> /// 设置ECU修正比例的比例 /// </summary> /// <param name="value"></param> public static void SetECUCorrectionParams_CalibrationScale(this SerialPortsUtils.Agents.Agent io, int[] value) { for (int i = 0; i < InstructionSet.SetECUCorrectionParamsPart2_Correction.Length; i++) { io.SendAndRead(InstructionSet.SetECUCorrectionParamsPart1 , InstructionSet.SetECUCorrectionParamsPart2_Correction[i] , value.Skip(i * 32).Take(32).Select(m => (byte)m).ToArray()); } }
public void SaveChanges(SerialPortsUtils.Agents.Agent io) { if (ChangedFlag_RPMs == true) { ChangedFlag_RPMs = false; //io.SendAndRead(PLC.InstructionSet.SetMAPCalibrationParamsPart1, PLC.InstructionSet.SetMAPCalibrationParamsPart2_12RPMs // , this.RPMs.Select(m => PLC.ValueConvert.MapTableRPMValue(m)).ToArray()); io.SendAndRead(PLC.InstructionSet.SetMAPCalibrationParamsPart1, PLC.InstructionSet.SetMAPCalibrationParamsPart2_12RPMs , PLC.ValueConvert.MapTableRPMValue(this.RPMs.ToArray())); } if (ChangedFlag_Injection == true) { ChangedFlag_Injection = false; io.SendAndRead(PLC.InstructionSet.SetMAPCalibrationParamsPart1, PLC.InstructionSet.SetMAPCalibrationParamsPart2_12Tinj , PLC.ValueConvert.MapTableInjectionValue(this.Injection.ToArray())); } foreach (var item in ChangedCollection) { switch (item.Key) { case "DataLockStatus": //foreach (var index in item.Value) //{ // io.SendAndRead(PLC.InstructionSet.SetMAPCalibrationParamsPart1, PLC.InstructionSet.SetMAPCalibrationParamsPart2_DataLockStatus[index] // , PLC.ValueConvert.DataLockStatusValue(this.DataLockStatus[index].ToArray())); //} break; case "GasCurve": //TODO 暂时不用写 break; case "MAPValues": foreach (var index in item.Value) { io.SendAndRead(PLC.InstructionSet.SetMAPCalibrationParamsPart1, PLC.InstructionSet.SetMAPCalibrationParamsPart2_MAPValue[index] , this.MAPValues[index].Select(m => (byte)m).ToArray()); // System.Threading.Thread.Sleep(150); } item.Value.Clear(); break; case "PetrolCurve": //TODO 暂时不用写 break; } } }
public void SaveChanges(SerialPortsUtils.Agents.Agent io) { System.Diagnostics.Debug.WriteLine("Begin Apply Changes On ECUCorrectionParams"); if (CalibrationScaleChanged == true) { CalibrationScaleChanged = false; io.SetECUCorrectionParams_CalibrationScale(this.CalibrationScale.ToArray()); } if (LocationXChanged == true) { LocationXChanged = false; io.SetECUCorrectionParams_LocationX(this.LocationX.ToArray()); } System.Diagnostics.Debug.WriteLine("End Apply Changes On ECUCorrectionParams"); }
/// <summary> /// 从下位机获取ECU设定 /// </summary> /// <param name="io"></param> /// <returns></returns> internal static Models.Settings.ECUSetting GetSettingFormPLC(this SerialPortsUtils.Agents.Agent io) { var r1 = io.SendAndRead(InstructionSet.GetECUSetting); var r2 = io.SendAndRead(InstructionSet.GetECUSettingExtra); var r3 = io.SendAndRead(InstructionSet.GetO2Setting);//LDC增加 byte[] r4 = null; if (SSer.Device.DeviceInfo.HardInof.OBDEn) { r4 = io.SendAndRead(InstructionSet.GetOBDSetting); //LDC增加 OBD增加 } var r5 = io.SendAndRead(InstructionSet.GetAnticipateInjSetting); //LDC增加 var model = DTOUitils.TOECUSetting(r1, r2, r3, r4, r5); return(model); }
/// <summary> /// 从下位机获取MAP标定参数 /// </summary> /// <param name="io"></param> /// <returns></returns> internal static Models.Settings.MAPCalibrationParams GetMAPCalibrationParams(this SerialPortsUtils.Agents.Agent io) { var data = io.SendAndRead(InstructionSet.MAPCalibrationParamsPart1, InstructionSet.MAPCalibrationParamsPart2_12RPMs).PacketData(2); var data2 = io.SendAndRead(InstructionSet.MAPCalibrationParamsPart1, InstructionSet.MAPCalibrationParamsPart2_12Tinj).PacketData(2); var mapValues = InstructionSet.MAPCalibrationParamsPart2_MAPValue .Select(m => io.SendAndRead(InstructionSet.MAPCalibrationParamsPart1, m).PacketData(2) .Select(m2 => { unchecked { //return (sbyte)m2;//LDC MAP修改 return((int)m2); ////LDC MAP修改<Sbyte>改为<byte> } }).ToArray()).ToArray(); //var petrolCurve = InstructionSet.MAPCalibrationParamsPart2_PetrolCurve.Select(m =>//LDC删除 // io.SendAndRead(InstructionSet.MAPCalibrationParamsPart1, m).PacketData(2) // .Select(m2 => ValueConvert.MapTableInjectionFrom(m2)).ToArray()).ToArray(); //var gasCurve = InstructionSet.MAPCalibrationParamsPart2_GasCurve.Select(m => // io.SendAndRead(InstructionSet.MAPCalibrationParamsPart1, m).PacketData(2) // .Select(m2 => ValueConvert.MapTableInjectionFrom(m2)).ToArray()).ToArray(); //var packet3 = io.SendAndRead(InstructionSet.MAPCalibrationParamsPart1, InstructionSet.MAPCalibrationParamsPart2_DataLockStatus).PacketData(2).ToArray(); var model = new Models.Settings.MAPCalibrationParams(); byte[] temp = data.ToArray(); //model.RPMs = data.Select(m => ValueConvert.MapTableRPMFrom(m)).ToArray(); model.RPMs = ValueConvert.MapTableRPMFrom(temp); temp = data2.ToArray(); model.Injection = ValueConvert.MapTableInjectionFrom(temp); //model.Injection = data2.Select(m => ValueConvert.MapTableInjectionFrom(m)).ToArray();//LDC删除 model.MAPValues = mapValues; //model.PetrolCurve = petrolCurve; //model.GasCurve = gasCurve; //model.DataLockStatus = new bool[InstructionSet.MAPCalibrationParamsPart2_MAPValue.Length][]; //for (int i = 0; i < model.DataLockStatus.Length; i++) //{ // model.DataLockStatus[i] = ValueConvert.DataLockStatusFrom(packet3[i * 3], packet3[i * 3 + 1], packet3[i * 3 + 2]); //} //var tt = io.SendAndRead(InstructionSet.MAPCalibrationParamsPart1, InstructionSet.MAPCalibrationParamsPart2_2DGasCurve); //model.GasCurve2D = tt.PacketData(2) // .Select(m => m * 0.1f).ToArray(); //model.PetrolCurve2D = io.SendAndRead(InstructionSet.MAPCalibrationParamsPart1, InstructionSet.MAPCalibrationParamsPart2_2DPetrolCurve).PacketData(2) // .Select(m => m * 0.1f).ToArray(); return(model); }
/// <summary> /// 从下位机获取ECU修正比例 /// </summary> /// <param name="io"></param> /// <returns></returns> internal static Models.Settings.ECUCorrectionParams GetECUCorrectionParams(this SerialPortsUtils.Agents.Agent io) { var data1 = InstructionSet.ECUCorrectionSettingPart2_CorrectionValue .Select(m => io.SendAndRead(InstructionSet.ECUCorrectionSettingPart1, m).PacketData(2).ToArray()).ToArray(); var packet2 = io.SendAndRead(InstructionSet.ECUCorrectionSettingPart1, InstructionSet.ECUCorrectionSettingPart2_Ponits); var model = new Models.Settings.ECUCorrectionParams(); model.CalibrationScale = new int[data1.Sum(m => m.Length)]; int index = 0; for (int i = 0; i < data1.Length; i++) { for (int j = 0; j < data1[i].Length; j++) { model.CalibrationScale[index] = data1[i][j]; index++; } } model.LocationX = packet2.PacketData(2).Select(m => Convert.ToSingle(m / 10)).ToArray(); return(model); }
public void SaveChanges(SerialPortsUtils.Agents.Agent io) { if (Changes[0] || Changes[1]) { byte[] data = new byte[2]; data[0] = (byte)(this.EmergencyStartAllowed ? 0x01 : 0x00); data[1] = Convert.ToByte(this.EmergencyStatsPerformed); io.SendAndRead(PLC.InstructionSet.SetEmergencyStats, data); } if (Changes[2] || Changes[3]) { Console.WriteLine(Changes.Data); Console.WriteLine(Changes[2]); Console.WriteLine(Changes[3]); byte[] data = new byte[3]; data[0] = PLC.ValueConvert.MaintainRemindTypesValue(this.MaintainRemind); var temp = PLC.ValueConvert.MaintainTimeValue(this.MaintainTime); data[1] = temp[0]; data[2] = temp[1]; io.SendAndRead(PLC.InstructionSet.SetMaintainRemind, data); } Changes.SetAll(false); }
/// <summary> /// 设置ECU修正比例的坐标点 /// </summary> /// <param name="value"></param> public static void SetECUCorrectionParams_LocationX(this SerialPortsUtils.Agents.Agent io, float[] value) { io.SendAndRead(InstructionSet.SetECUCorrectionParamsPart1, InstructionSet.SetECUCorrectionParamsPart2_Points , value.Select(m => Convert.ToByte(m * 10)).ToArray()); }
/// <summary> /// 设定下位机燃气温度修正百分比 /// </summary> /// <param name="io"></param> /// <param name="index"></param> /// <param name="value"></param> public static void SetGasTempCorrection_Correction(this SerialPortsUtils.Agents.Agent io, int index, int value) { io.SendAndRead(InstructionSet.SetGasTempCorrectionPart1, InstructionSet.SetGasTempCorrectionPart2_Correction[index] , new byte[] { ValueConvert.TempCorrectionValue(value) }); }
/// <summary> /// 从下位机获取燃气压力修正 /// </summary> /// <param name="io"></param> /// <returns></returns> internal static Models.Settings.PressCorrectionSet GetGasPressCorrectionSettings(this SerialPortsUtils.Agents.Agent io) { var data1 = io.SendAndRead(InstructionSet.GasPressCorrectionSettings, InstructionSet.GasPressCorrectionValue).PacketData(2).ToArray(); var data2 = io.SendAndRead(InstructionSet.GasPressCorrectionSettings, InstructionSet.GasPressCorrectionPer).PacketData(2).ToArray(); Models.Settings.PressCorrectionSet model = new Models.Settings.PressCorrectionSet(); model.Items = new float[15]; model.Corrections = new float[15]; int a = 0, b = 1; for (int i = 0; i < 15; i++) { model.Items[i] = ValueConvert.CorrectionPressFrom(data1[a], data1[b]); model.Corrections[i] = ValueConvert.PressCorrectionFrom(data2[a], data2[b]); a = a + 2; b = b + 2; } return(model); }
/// <summary> /// 从下位机获取减压器温度修正 /// </summary> /// <param name="io"></param> /// <returns></returns> internal static Models.Settings.TempCorrectionSet GetRedTempCorrectionSettings(this SerialPortsUtils.Agents.Agent io) { var data = io.SendAndRead(InstructionSet.RedTempCorrectionSettings).PacketData(1).ToArray(); Models.Settings.TempCorrectionSet model = new Models.Settings.TempCorrectionSet(); model.Items = new sbyte[8]; model.Corrections = new int[9]; for (int i = 0; i < 8; i++) { model.Items[i] = ValueConvert.SingleTempFrom(data[i]); model.Corrections[i] = ValueConvert.TempCorrectionFrom(data[i + 8]) - 100; } model.Corrections[8] = data[16] - 100; return(model); }
/// <summary> /// 从下位机获取喷轨修正参数 /// </summary> /// <param name="io"></param> /// <returns></returns> internal static Models.Settings.InjectorCorrectionSetting GetInjectorCorrectionSetting(this SerialPortsUtils.Agents.Agent io) { var packet = io.SendAndRead(InstructionSet.InjectorCorrectionSetting); return(packet.ToInjectorCorrectionSetting()); }