Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
 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");
 }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
 /// <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());
     }
 }
Exemplo n.º 5
0
        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;
                }
            }
        }
Exemplo n.º 6
0
 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");
 }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 9
0
        /// <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);
        }
Exemplo n.º 10
0
 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);
 }
Exemplo n.º 11
0
 /// <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());
 }
Exemplo n.º 12
0
 /// <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) });
 }
Exemplo n.º 13
0
        /// <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);
        }
Exemplo n.º 14
0
        /// <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);
        }
Exemplo n.º 15
0
        /// <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());
        }