Пример #1
0
        //同步更改isWaitting信号量,key表示要更改的键值,isRemove=true表示删除,remOrAdd=false表示添加或更改
        //当isRemove=true时value无效,否则value表示值
        //private void syncIswaitingChange(string key,int value,bool isRemove) {
        //    lock (isWaittingLock) {
        //        if (isRemove)
        //        {
        //            if (isWaitting.ContainsKey(key))
        //            {
        //                isWaitting.Remove(key);
        //            }
        //        }
        //        else {
        //        if()
        //        }
        //    }
        //}

        //收到多帧,进行处理
        private void dealMultiFrame(CANSDK.VCI_CAN_OBJ obj)
        {
            byte[] data = obj.Data;

            Object[] results = new Object[3];

            results[0] = FunCode.SHOWUDSLOG + "";
            results[1] = "receUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2");
            if (isWaitting.ContainsKey(DataConverter.hex2String((byte)(data[2] - 0x40))) && isWaitting[DataConverter.hex2String((byte)(data[2] - 0x40))] == 0x01)
            {
                //收到正确响应
                results[2] = POSITIVERESPONSE;
            }
            else
            {
                results[2] = RECEIVECOLOR;
            }
            // results[2] = RECEIVECOLOR;
            if (isDoBootLoader)
            {
                Console.WriteLine("receUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
            }
            else
            {
                flushVM(results);
            }


            ff_dl = data[0] & 0x0F << 8 | data[1];
            if (ff_dl >= 6)
            {
                ff_dl -= 6;
            }
            if (ff_dl > 0)
            {
                results    = new Object[1];
                results[0] = FunCode.SENDFC + "";
                flushVM(results);//发送流控帧

                if (!isWaitting.ContainsKey("waitCF"))
                {
                    //isWaitting.Add("waitCF", 0x21);

                    isWaitting.Add("waitCF", data[2] - 0x40);
                    if (isWaitting.ContainsKey(DataConverter.hex2String((byte)(data[2] - 0x40))) && isWaitting[DataConverter.hex2String((byte)(data[2] - 0x40))] == 0x01)
                    {
                        isWaitting[DataConverter.hex2String((byte)(data[2] - 0x40))] = 0x21;
                    }
                }
                else
                {
                    // isWaitting["waitCF"] = 0x21;
                    isWaitting["waitCF"] = data[2] - 0x40;
                    if (isWaitting.ContainsKey(DataConverter.hex2String((byte)(data[2] - 0x40))) && isWaitting[DataConverter.hex2String((byte)(data[2] - 0x40))] == 0x01)
                    {
                        isWaitting[DataConverter.hex2String((byte)(data[2] - 0x40))] = 0x21;
                    }
                }
            }
        }
Пример #2
0
        //读取追溯码
        public void getTraceCode(Object id)
        {
            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag = 1; //远程帧
            obj.ExternFlag = 1; //扩展帧
            obj.SendType   = 0; //正常发送
            string slaveId = Convert.ToString(id);

            while (true)
            {
                for (int i = 2; i < 6; i++)
                {
                    if (i == 4)
                    {
                        continue;
                    }
                    obj.ID = uint.Parse("0C2" + i.ToString("X") + "7F" + slaveId, System.Globalization.NumberStyles.HexNumber);
                    // Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 2 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
                    CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
                    Thread.Sleep(20);
                }
                Thread.Sleep(200);
            }
        }
        //拼发送包
        public CANSDK.VCI_CAN_OBJ getSlavePEPackage(int heartbeat)
        {
            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag = 0; //远程帧
            obj.ExternFlag = 1; //扩展帧
            obj.SendType   = 0; //正常发送
            obj.DataLen    = 8;
            obj.ID         = uint.Parse("1C110141", System.Globalization.NumberStyles.HexNumber);
            byte[] data = new byte[8];
            data[0] = (byte)heartbeat;

            //byte[0]
            for (int i = 0; i < 4; i++)
            {
                data[0] = (byte)(data[0] | (SlavePECheck[i] == false ? 0 : 1) << (4 + i));
            }
            //byte[1]-byte[7]
            for (int i = 4; i < 60; i++)
            {
                data[(i + 4) / 8] = (byte)(data[(i + 4) / 8] | (SlavePECheck[i] == false ? 0 : 1) << (4 + i) % 8);
            }

            obj.DataLen = 8;
            obj.Data    = data;

            return(new CANSDK.VCI_CAN_OBJ());
        }
Пример #4
0
        //获取从机ID
        public void getSalveId()
        {
            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag           = 1; //远程帧
            obj.ExternFlag           = 1; //扩展帧
            obj.SendType             = 0; //正常发送
            isWaitting["getSlaveId"] = 1;
            //isWaitting["getSlaveId"] == 1为了防止还在发送循环中已经收到了回复,此时不需要继续发送
            for (int i = 0; i < 64 && isWaitting["getSlaveId"] == 1; i++)
            {
                obj.ID = uint.Parse("0C0041" + i.ToString("X2"), System.Globalization.NumberStyles.HexNumber);
                // Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 2 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
                uint frameCount = CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
            }
            long starttime = DateTime.Now.Ticks;

            //等待回复
            while ((DateTime.Now.Ticks - starttime) / 10000 < 2000 && isWaitting["getSlaveId"] == 1)
            {
                if (isWaitting["getSlaveId"] == 0)
                {
                    break;
                }
            }
            if (isWaitting["getSlaveId"] == 1)
            {
                isWaitting["getSlaveId"] = 0;
                flushVM(new Object[] { FunCode.SHOWINFO, "getSlaveFailed" });
            }
        }
Пример #5
0
        //发送config1
        public void sendConfig1Pack(Object o)
        {
            ArrayList       al      = (ArrayList)o;
            string          slaveId = Convert.ToString(al[0]);
            Gen2SlaveConfig g       = (Gen2SlaveConfig)al[1];
            Gen2SlaveInfo   gsi     = (Gen2SlaveInfo)al[2];

            if ((g.Sid == null || g.Sid.Equals("")) && (gsi.Sid != null && !gsi.Sid.Equals("")))
            {
                g.Sid = DataConverter.string2Hex(gsi.Sid).ToString();
            }
            if ((g.Covth == null || g.Covth.Equals("")) && (gsi.Covth != null && !gsi.Covth.Equals("")))
            {
                g.Covth = gsi.Covth.Replace("mV", String.Empty);
            }
            if ((g.Cuvth == null || g.Cuvth.Equals("")) && (gsi.Cuvth != null && !gsi.Cuvth.Equals("")))
            {
                g.Cuvth = gsi.Cuvth.Replace("mV", String.Empty);
            }
            if ((g.Foth == null || g.Foth.Equals("")) && (gsi.Foth != null && !gsi.Foth.Equals("")))
            {
                g.Foth = gsi.Foth.Replace("℃", String.Empty);
            }
            if ((g.Fcth == null || g.Fcth.Equals("")) && (gsi.Fcth != null && !gsi.Fcth.Equals("")))
            {
                g.Fcth = gsi.Fcth.Replace("℃", String.Empty);
            }
            if (!(DataConverter.canStirng2int(g.Sid) && DataConverter.canStirng2int(g.Covth) && DataConverter.canStirng2int(g.Cuvth) &&
                  DataConverter.canStirng2int(g.Foth) && DataConverter.canStirng2int(g.Fcth)))
            {
                flushVM(new Object[] { FunCode.SHOWINFO, "wrongdata" });
                return;
            }
            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag = 0; //数据帧
            obj.ExternFlag = 1; //扩展帧
            obj.SendType   = 0; //正常发送
            obj.ID         = uint.Parse("0C21" + slaveId + "7F", System.Globalization.NumberStyles.HexNumber);
            byte[] b = new byte[8];
            b[1] = (byte)Convert.ToInt32(g.Sid);
            short d = (short)Convert.ToInt32(g.Covth);

            byte[] t = System.BitConverter.GetBytes(d);
            b[2]        = t[0];
            b[3]        = t[1];
            d           = (short)Convert.ToInt32(g.Cuvth);
            t           = System.BitConverter.GetBytes(d);
            b[4]        = t[0];
            b[5]        = t[1];
            b[6]        = (byte)(Convert.ToInt32(g.Foth) + 40);
            b[7]        = (byte)(Convert.ToInt32(g.Fcth) + 40);
            obj.Data    = b;
            obj.DataLen = 8;
            // Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 2 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
            CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
            flushVM(new Object[] { FunCode.SHOWINFO, "sendSuc" });
        }
Пример #6
0
 public void sendData(Object o)
 {
     tvm.IsNext = false;
     byte[]             data = (byte[])o;
     CANSDK.VCI_CAN_OBJ obj  = new CANSDK.VCI_CAN_OBJ();
     obj.Init();
     obj.RemoteFlag = 0; //数据帧
     obj.ExternFlag = 1; //扩展帧
     obj.SendType   = 0; //正常发送
     obj.DataLen    = 8;
     obj.ID         = uint.Parse(tvm.SendId, System.Globalization.NumberStyles.HexNumber);
     obj.Data       = data;
     CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
     Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data) + ",ID:" + obj.ID.ToString("X2"));
     waitForResponse();
 }
Пример #7
0
        //发送均衡控制指令
        public void sendBalancePack(Object o)
        {
            ArrayList       al      = (ArrayList)o;
            string          slaveId = Convert.ToString(al[0]);
            Gen2SlaveConfig g       = (Gen2SlaveConfig)al[1];

            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag = 0; //数据帧
            obj.ExternFlag = 1; //扩展帧
            obj.SendType   = 0; //正常发送
            obj.ID         = uint.Parse("1815" + "41" + slaveId, System.Globalization.NumberStyles.HexNumber);
            obj.Data       = g.getBalanceData();
            obj.DataLen    = 8;
            // Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 2 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
            CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
            flushVM(new Object[] { FunCode.SHOWINFO, "sendSuc" });
        }
Пример #8
0
        //接收线程
        private void ReceiveDataThread()
        {
            while (isReceive)
            {
                IntPtr pt             = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(CANSDK.VCI_CAN_OBJ)) * (Int32)RECEIVELEN);
                uint   receiveRealLen = CANSDK.VCI_Receive(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, pt, RECEIVELEN, 500);
                Thread.Sleep(10);
                if (receiveRealLen <= 0)
                {
                    continue;
                }
                for (int i = 0; i < receiveRealLen; i++)
                {
                    CANSDK.VCI_CAN_OBJ obj = (CANSDK.VCI_CAN_OBJ)Marshal.PtrToStructure((IntPtr)((UInt32)pt + i * Marshal.SizeOf(typeof(CANSDK.VCI_CAN_OBJ))), typeof(CANSDK.VCI_CAN_OBJ));
                    ThreadPool.QueueUserWorkItem(new WaitCallback(gen2Service.parseDataThread), obj);
                }

                Marshal.FreeHGlobal(pt);
            }
        }
Пример #9
0
        public void send(byte[] data)
        {
            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag = 0; //数据帧
            obj.ExternFlag = 0; //标准帧
            obj.SendType   = 0; //正常发送
            obj.DataLen    = 8;
            string s = SendID;

            //if (IsECUFun) {
            //    s = "7DF";
            //}
            obj.ID   = uint.Parse(s, System.Globalization.NumberStyles.HexNumber);
            obj.Data = data;

            CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
            Object[] results = new Object[3];
            results[0] = FunCode.SHOWUDSLOG + "";
            results[1] = "sendUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2");
            results[2] = SENDCOLOR;
            //if (data[1] != 0x3E)
            //{
            //    flushVM(results);
            //}
            //每次发送数据更新心跳发送基础时间
            if (isDoBootLoader)
            {
                Console.WriteLine("sendUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
            }
            else
            {
                flushVM(results);
            }

            results    = new Object[1];
            results[0] = FunCode.CHANGEHEARTTIME + "";
            flushVM(results);
        }
Пример #10
0
        public void sendRelay2Pack(Object o)
        {
            ArrayList       al      = (ArrayList)o;
            string          slaveId = Convert.ToString(al[0]);
            Gen2SlaveConfig g       = (Gen2SlaveConfig)al[1];

            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag = 0; //数据帧
            obj.ExternFlag = 1; //扩展帧
            obj.SendType   = 0; //正常发送
            obj.ID         = uint.Parse("181E" + slaveId + "41", System.Globalization.NumberStyles.HexNumber);
            //obj.Data = DataConverter.str2ASCII(g.TraceCode.Substring(0, 8));
            obj.DataLen = 8;

            byte[] b = new byte[8];
            //b[1] =(byte)( g.Realy2 == true ? 1 : 0);
            b[0] = (byte)((g.Realy2 == true ? 1 : 0) << 1 | 0x00);

            System.DateTime currentTime = new System.DateTime();
            currentTime = System.DateTime.Now;
            int year   = currentTime.Year;
            int month  = currentTime.Month;
            int day    = currentTime.Day;
            int hour   = currentTime.Hour;
            int minute = currentTime.Minute;
            int second = currentTime.Second;

            b[1]     = DataConverter.strToHexByte((year - 2000).ToString())[0];
            b[2]     = DataConverter.strToHexByte(month.ToString())[0];
            b[3]     = DataConverter.strToHexByte(day.ToString())[0];
            b[4]     = DataConverter.strToHexByte(hour.ToString())[0];
            b[5]     = DataConverter.strToHexByte(minute.ToString())[0];
            b[6]     = DataConverter.strToHexByte(second.ToString())[0];
            b[7]     = (byte)Convert.ToInt32(g.CanLife);
            obj.Data = b;
            // Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 2 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
            CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
        }
Пример #11
0
        //发送追溯码
        public void sendTraceCodePack(Object o)
        {
            ArrayList       al      = (ArrayList)o;
            string          slaveId = Convert.ToString(al[0]);
            Gen2SlaveConfig g       = (Gen2SlaveConfig)al[1];

            if (g.TraceCode == null || g.TraceCode.Length != 24)
            {
                flushVM(new Object[] { FunCode.SHOWINFO, "wrongdata" });
                return;
            }
            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag = 0; //数据帧
            obj.ExternFlag = 1; //扩展帧
            obj.SendType   = 0; //正常发送
            obj.ID         = uint.Parse("0C22" + slaveId + "7F", System.Globalization.NumberStyles.HexNumber);
            obj.Data       = DataConverter.str2ASCII(g.TraceCode.Substring(0, 8));
            obj.DataLen    = 8;
            // Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 2 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
            CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
            Thread.Sleep(200);

            obj.ID      = uint.Parse("0C23" + slaveId + "7F", System.Globalization.NumberStyles.HexNumber);
            obj.Data    = DataConverter.str2ASCII(g.TraceCode.Substring(8, 8));
            obj.DataLen = 8;
            // Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 2 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
            CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
            Thread.Sleep(200);

            obj.ID      = uint.Parse("0C25" + slaveId + "7F", System.Globalization.NumberStyles.HexNumber);
            obj.Data    = DataConverter.str2ASCII(g.TraceCode.Substring(16, 8));
            obj.DataLen = 8;
            // Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 2 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
            CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
        }
Пример #12
0
        public CANSDK.VCI_CAN_OBJ getBalanceCANSDK2(int bmuNum)
        {
            byte[] data = new byte[8];
            data[0] = 0x4D;
            data[1] = (byte)bmuNum;

            for (int i = 40; i < 60; i++)
            {
                data[i / 8 - 3] = (byte)(data[i / 8 - 3] | (IsBalance[i] == true?1:0) << (i % 8));
            }
            data[7] = DataConverter.getAllBytesSum(data);

            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag = 0; //数据帧
            obj.ExternFlag = 1; //扩展帧
            obj.SendType   = 0; //正常发送
            obj.DataLen    = 8;
            obj.ID         = uint.Parse("18F203F0", System.Globalization.NumberStyles.HexNumber);
            obj.DataLen    = 8;
            obj.Data       = data;

            return(obj);
        }
Пример #13
0
        private int WAITTIME = 4000;//等待数据回复的等待时间
        public void parseDataThread(Object o)
        {
            CANSDK.VCI_CAN_OBJ obj  = (CANSDK.VCI_CAN_OBJ)o;
            byte[]             data = obj.Data;
            uint canid = obj.ID;

            byte[] intBuff = BitConverter.GetBytes(canid);
            string id      = DataConverter.byteToHexStrForId(intBuff);

            //if (new Regex(tvm.ReceId).IsMatch(id))
            if (new Regex(tvm.ReceId).IsMatch(id) && (data[0] == tvm.ReceFrame || tvm.ReceFrame == 0) && !tvm.IsNext)
            {
                ToolingStepsAttr tsa = tvm.NowToolingStepAttr;
                switch (tsa.Type)
                {
                case 0:
                    //设置读取工装软件版本号及设置工装参数配置
                    if (tvm.ReceCount > 1 && data[0] <= tvm.ReceCount)
                    {
                        tvm.CalDates[tvm.Indexs[data[0] - 1]] = data;
                        saveDataCount++;
                        if (saveDataCount == tvm.ReceCount)
                        {
                            saveDataCount = 0;
                            tvm.IsNext    = true;
                        }
                    }
                    break;

                case 1:
                case 9:
                    //布尔
                    if (Convert.ToByte(tsa.Frame, 16) == data[0])
                    {
                        Console.WriteLine("接收:" + DataConverter.byteToHexStrForData(obj.Data) + ",ID:" + obj.ID.ToString("X2"));
                        tvm.Result = "OK";
                        tvm.IsNext = true;
                    }

                    break;

                case 2:
                    //2+2
                    resultData1 = (data[2] << 8 | data[1]) * tsa.Resolution + tsa.Offset;
                    resultData2 = (data[4] << 8 | data[3]) * tsa.Resolution + tsa.Offset;
                    tvm.Result  = resultData1 + "," + resultData2;

                    if (resultData1 >= tsa.LowerLimit && resultData1 <= tsa.UpperLimit && resultData2 >= tsa.LowerLimit && resultData2 <= tsa.UpperLimit)
                    {
                        resultData1 = resultData2 = null;
                        tvm.IsNext  = true;
                    }
                    break;

                case 3:
                    //2+2+2+1
                    resultData1 = (data[2] << 8 | data[1]) * tsa.Resolution + tsa.Offset;
                    resultData2 = (data[4] << 8 | data[3]) * tsa.Resolution + tsa.Offset;
                    resultData3 = (data[6] << 8 | data[5]) * tsa.Resolution + tsa.Offset;
                    tempData    = data[7];
                    tvm.Result  = resultData1 + "," + resultData2 + "," + resultData3;
                    if (resultData1 >= tsa.LowerLimit && resultData1 <= tsa.UpperLimit && resultData2 >= tsa.LowerLimit && resultData2 <= tsa.UpperLimit && resultData3 >= tsa.LowerLimit && resultData3 <= tsa.UpperLimit)
                    {
                        resultData1 = resultData2 = resultData3 = null;
                        tvm.IsNext  = true;
                    }
                    break;

                case 4:
                    //1+2+2+2
                    resultData1 = (data[1] << 8 | tempData) * tsa.Resolution + tsa.Offset;
                    resultData2 = (data[3] << 8 | data[2]) * tsa.Resolution + tsa.Offset;
                    resultData3 = (data[5] << 8 | data[4]) * tsa.Resolution + tsa.Offset;
                    resultData4 = (data[7] << 8 | data[6]) * tsa.Resolution + tsa.Offset;
                    tvm.Result  = resultData1 + "," + resultData2 + "," + resultData3 + "," + resultData4;
                    if (resultData1 >= tsa.LowerLimit && resultData1 <= tsa.UpperLimit && resultData2 >= tsa.LowerLimit && resultData2 <= tsa.UpperLimit &&
                        resultData3 >= tsa.LowerLimit && resultData3 <= tsa.UpperLimit && resultData4 >= tsa.LowerLimit && resultData4 <= tsa.UpperLimit)
                    {
                        resultData1 = resultData2 = resultData3 = resultData4 = null;
                        tvm.IsNext  = true;
                    }
                    break;

                case 5:
                    //2
                    resultData1 = (data[2] << 8 | data[1]) * tsa.Resolution + tsa.Offset;
                    tvm.Result  = resultData1 + "";
                    if (resultData1 >= tsa.LowerLimit && resultData1 <= tsa.UpperLimit)
                    {
                        resultData1 = null;
                        tvm.IsNext  = true;
                    }
                    break;

                case 6:
                    //4
                    resultData1 = (data[4] << 32 | data[3] << 16 | data[2] << 8 | data[1]) * tsa.Resolution + tsa.Offset;
                    tvm.Result  = resultData1 + "";
                    if (resultData1 >= tsa.LowerLimit && resultData1 <= tsa.UpperLimit)
                    {
                        resultData1 = null;
                        tvm.IsNext  = true;
                    }
                    break;

                case 7:
                    //2+2+2
                    resultData1 = (data[2] << 8 | data[1]) * tsa.Resolution + tsa.Offset;
                    resultData2 = (data[4] << 8 | data[3]) * tsa.Resolution + tsa.Offset;
                    resultData3 = (data[6] << 8 | data[5]) * tsa.Resolution + tsa.Offset;
                    tvm.Result  = resultData1 + "," + resultData2 + "," + resultData3;
                    if (resultData1 >= tsa.LowerLimit && resultData1 <= tsa.UpperLimit && resultData2 >= tsa.LowerLimit && resultData2 <= tsa.UpperLimit &&
                        resultData3 >= tsa.LowerLimit && resultData3 <= tsa.UpperLimit)
                    {
                        resultData1 = resultData2 = resultData3 = null;
                        tvm.IsNext  = true;
                    }
                    break;

                case 10:
                    //两帧。第一帧1(0x01)+2.第二帧1(0x02)+2+2+2
                    if (data[1] == 0x01)
                    {
                        resultData1 = (data[3] << 8 | data[2]) * tsa.Resolution + tsa.Offset;
                    }
                    else if (data[1] == 0x02)
                    {
                        resultData2 = (data[3] << 8 | data[2]) * tsa.Resolution + tsa.Offset;
                        resultData3 = (data[5] << 8 | data[4]) * tsa.Resolution + tsa.Offset;
                        resultData4 = (data[7] << 8 | data[6]) * tsa.Resolution + tsa.Offset;
                    }
                    if (resultData1 != null && resultData2 != null & resultData3 != null & resultData4 != null)
                    {
                        tvm.Result = resultData1 + "," + resultData2 + "," + resultData3 + "," + resultData4;
                        if (resultData1 >= tsa.LowerLimit && resultData1 <= tsa.UpperLimit && resultData2 >= tsa.LowerLimit && resultData2 <= tsa.UpperLimit &&
                            resultData3 >= tsa.LowerLimit && resultData3 <= tsa.UpperLimit && resultData4 >= tsa.LowerLimit && resultData4 <= tsa.UpperLimit)
                        {
                            resultData1 = resultData2 = resultData3 = resultData4 = null;
                            tvm.IsNext  = true;
                        }
                    }
                    break;

                //case 31:
                //    //计算帧
                //    tvm.CalDates[tvm.Indexs[0]]=data;
                //    tvm.IsNext = true;
                //    break;
                //case 32:
                //case 33:
                //    //计算帧
                //    tvm.CalDates[tvm.Indexs[data[1] - 1]] = data;
                //    saveDataCount++;
                //    if (saveDataCount == tvm.ReceCount) {
                //        saveDataCount = 0;
                //        tvm.IsNext = true;
                //    }
                //    break;
                //case 33:
                //    //计算帧
                //    tvm.CalDates[tvm.Indexs[data[1] - 1]] = data;
                //    saveDataCount++;
                //    if (saveDataCount == tvm.ReceCount)
                //    {
                //        saveDataCount = 0;
                //        tvm.IsNext = true;
                //    }
                //    break;
                case 31:
                case 32:
                case 33:
                case 34:
                    //计算帧,不做数据处理,仅保存数据,等待统一处理

                    if (tvm.ReceCount > 1 && data[1] <= tvm.ReceCount)
                    {
                        tvm.CalDates[tvm.Indexs[data[1] - 1]] = data;
                        saveDataCount++;
                        if (saveDataCount == tvm.ReceCount)
                        {
                            saveDataCount = 0;
                            tvm.IsNext    = true;
                        }
                    }
                    else
                    {
                        tvm.CalDates[tvm.Indexs[0]] = data;
                        tvm.IsNext = true;
                    }

                    ////if (tvm.ReceCount > 1)
                    //if (tvm.StepNum==1||tvm.StepNum == 2)
                    //{
                    //    tvm.CalDates[tvm.Indexs[0]] = data;
                    //    //saveDataCount++;
                    //    //if (saveDataCount == tvm.ReceCount)
                    //    //{
                    //    //    saveDataCount = 0;
                    //    //    tvm.IsNext = true;
                    //    //}
                    //    tvm.IsNext = true;
                    //}
                    //else if (tvm.StepNum == 3) {
                    ////else if(tvm.ReceCount==1){
                    //    tvm.CalDates[tvm.Indexs[0]] = data;
                    //    tvm.IsNext = true;
                    //}
                    break;

                case 35:
                    Console.WriteLine("接收:" + DataConverter.byteToHexStrForData(obj.Data) + ",ID:" + obj.ID.ToString("X2"));
                    if (tvm.StepNum == 1 || tvm.StepNum == 2 || tvm.StepNum == 7 || tvm.StepNum == 8 || tvm.StepNum == 16)
                    {
                        //布尔判断
                        //测试,先全部返回true,正式运行时此行需要删除
                        tvm.IsNext = true;
                        if (data[1] == 0x01)
                        {
                            tvm.IsNext = true;
                        }
                        //Console.WriteLine("1");
                    }
                    else if (tvm.StepNum == 3 || tvm.StepNum == 9)
                    {
                        if (tvm.ReceCount > 1 && data[1] <= tvm.ReceCount)
                        {
                            tvm.CalDates[tvm.Indexs[data[1] - 1]] = data;
                            saveDataCount++;
                            if (saveDataCount == tvm.ReceCount)
                            {
                                saveDataCount = 0;
                                tvm.IsNext    = true;
                            }
                        }
                        // Console.WriteLine("3,9");
                    }
                    else if (tvm.StepNum == 4 || tvm.StepNum == 5 || tvm.StepNum == 10 || tvm.StepNum == 11 || tvm.StepNum == 14 || tvm.StepNum == 15)
                    {
                        tvm.CalDates[tvm.Indexs[0]] = data;
                        tvm.IsNext = true;
                        Console.WriteLine("4,5,10,11,14,15");
                    }
                    //else if (tvm.StepNum == 5) {
                    //    tvm.CalDates[tvm.Indexs[0]] = data;
                    //    tvm.IsNext = true;
                    //}
                    break;
                }
            }
            else if ((new Regex(BOOTLOADER).IsMatch(id)))
            {
                //Console.WriteLine("bootloader发送的报文");
                string hexdata = DataConverter.byteToHexStrForDataWithoutSpace(obj.Data);
                string h       = hexdata.Substring(0, 2);//取出第一个字节
                if (new Regex(BOOTLOADERF3).IsMatch(h))
                {
                    Console.WriteLine("F3");
                    if (tvm.IsWaitting.ContainsKey("bootHS") && tvm.IsWaitting["bootHS"] == 1)
                    {
                        tvm.IsWaitting["bootHS"] = 0;
                        tvm.RetryTimes           = 0;
                        tvm.DataCacheIndex       = 0;
                        tvm.IsGetReceived        = 1;//已经收到了回送,不需要再发送了
                        // Console.WriteLine("握手成功!");
                        tvm.CanBootNext = 1;
                    }
                    else if (tvm.IsWaitting.ContainsKey("bmasterHS") && tvm.IsWaitting["bmasterHS"] == 1)
                    {
                        tvm.IsWaitting["bmasterHS"] = 0;
                        tvm.RetryTimes     = 0;
                        tvm.DataCacheIndex = 0;
                        tvm.IsGetReceived  = 1;//已经收到了回送,不需要再发送了
                        // Console.WriteLine("握手成功!");
                        tvm.CanBootNext = 1;
                    }
                    else if (tvm.IsWaitting.ContainsKey("bootloaderFE") && (tvm.IsWaitting["bootloaderFE"] == 1 || tvm.IsWaitting["bootloaderFE"] == 2))
                    {
                        tvm.IsWaitting["bootloaderFE"] = 0;
                        tvm.RetryTimes     = 0;
                        tvm.DataCacheIndex = 0;
                        tvm.IsGetReceived  = 1;//已经收到了回送,不需要再发送了
                        // Console.WriteLine("握手成功!");
                        tvm.CanBootNext = 1;
                        tvm.DataCache   = new CANSDK.VCI_CAN_OBJ[17];
                    }
                }
                else if (new Regex(BOOTLOADERF2).IsMatch(h))
                {
                    Console.WriteLine("F2");
                }
                else if (new Regex(BOOTLOADERF1).IsMatch(h))
                {
                    Console.WriteLine("F1");
                    if (tvm.IsWaitting.ContainsKey("bootloaderFE") && tvm.IsWaitting["bootloaderFE"] == 1)
                    {
                        tvm.IsWaitting["bootloaderFE"] = 2;//2表示需要重传数据
                    }
                }
                else if (new Regex(BOOTLOADERF0).IsMatch(h))
                {
                    Console.WriteLine("F0");
                    if (tvm.IsWaitting.ContainsKey("over") && tvm.IsWaitting["over"] == 1)
                    {
                        tvm.IsWaitting["over"] = 0;
                        tvm.RetryTimes         = 0;

                        tvm.DataCacheIndex = 0;
                        tvm.IsGetReceived  = 1; //已经收到了回送,不需要再发送了
                        // Console.WriteLine("握手成功!");
                        tvm.CanBootNext = 0;    //bootloader刷写完成不用继续进行
                        tvm.IsNext      = true;
                    }
                }
            }
        }
Пример #14
0
        public void parseDataThread(Object o)
        {
            CANSDK.VCI_CAN_OBJ obj = (CANSDK.VCI_CAN_OBJ)o;
            uint canid             = obj.ID;

            byte[] intBuff = BitConverter.GetBytes(canid);
            string id      = DataConverter.byteToHexStrForId(intBuff);

            byte[] data = obj.Data;
            if (new Regex(UDSDONTRECEIVE).IsMatch(id))
            {
                return;
            }
            if ((SendID != "" && ReceiveID != "" && SendID != null && ReceiveID != null) && (new Regex(SendID).IsMatch(id) || new Regex(ReceiveID).IsMatch(id)))
            //if (new Regex(UDSSEND).IsMatch(id) || new Regex(UDSRECEIVE).IsMatch(id) || new Regex("07E1").IsMatch(id) || new Regex("07E9").IsMatch(id))
            {
                //更改发送心跳基础时间
                Object[] results = new Object[1];
                results[0] = FunCode.CHANGEHEARTTIME + "";
                flushVM(results);
                results = new Object[3];
                switch (data[0] >> 4 & 0x0F)
                {
                case 0:
                    //单帧SF
                    if ((data[1] == 0x67 && data[2] == 0x01) || (data[1] == 0x67 && data[2] == 0x03) || (data[1] == 0x67 && data[2] == 0x11))
                    {
                        //接收到2701
                        if (isWaitting.ContainsKey("27") && isWaitting["27"] == 0x01)
                        {
                            seed = data.Skip(3).Take(4).ToArray();    //从索引3开始截取4个
                                                                      //seed[0] = 0x01;
                                                                      //seed[1] = 0x02;
                                                                      //seed[2] = 0x03;
                                                                      //seed[3] = 0x04;
                                                                      //isWaitting["27"] = 0x00;
                                                                      // Console.WriteLine("接收到2701,"+isWaitting["27"]);
                        }
                    }

                    results[0] = FunCode.SHOWUDSLOG + "";
                    results[1] = "receUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2");
                    if (data[1] == 0x7F && data[3] != 0x78)
                    {
                        //错误响应
                        results[2] = ERRORCOLOR;
                        if (isWaitting.ContainsKey(DataConverter.hex2String(data[2])) && isWaitting[DataConverter.hex2String(data[2])] == 0x01)
                        {
                            //收到了错误响应
                            isWaitting[DataConverter.hex2String(data[2])] = 0x02;
                        }
                    }
                    else
                    {
                        if (data[1] != 0x7E && isWaitting.ContainsKey(DataConverter.hex2String((byte)(data[1] - 0x40))) && isWaitting[DataConverter.hex2String((byte)(data[1] - 0x40))] == 0x01)
                        {
                            //收到正确响应
                            isWaitting[DataConverter.hex2String((byte)(data[1] - 0x40))] = 0x00;

                            results[2] = POSITIVERESPONSE;
                            if (data[1] == 0x74)
                            {
                                //收到34的正确响应,保存每块block的数据量参数
                                int sizeL = data[2] >> 4;
                                blockSize = 0;
                                for (int i = 3; i < 3 + sizeL; i++)
                                {
                                    blockSize = (blockSize << 8) | data[i];
                                }
                                // Console.WriteLine("blocksize;"+blockSize);
                            }
                        }
                        else
                        {
                            results[2] = RECEIVECOLOR;
                        }
                    }

                    //屏蔽心跳帧显示
                    //if (data[1] != 0x7E)
                    //{
                    //    flushVM(results);
                    //}
                    if (isDoBootLoader)
                    {
                        Console.WriteLine("receUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
                    }
                    else
                    {
                        flushVM(results);
                    }

                    break;

                case 1:
                    //首帧FF
                    dealMultiFrame(obj);
                    break;

                case 2:
                    //CF帧
                    if (isWaitting.ContainsKey("waitCF") && isWaitting.ContainsKey(DataConverter.hex2String((byte)isWaitting["waitCF"])))
                    //if (isWaitting.ContainsKey("waitCF") && isWaitting["waitCF"] == data[0])
                    {
                        for (int i = 1; i < 8; i++)
                        {
                            if (data[i] != 0xAA)
                            {
                                ff_dl -= 1;
                            }
                        }
                        if (ff_dl < 0)
                        {
                            //收到的数据过长,超过了请求的长度,报错
                            results    = new Object[2];
                            results[0] = FunCode.ERROR + "";
                            results[1] = "receiveDataTooLong";
                            flushVM(results);
                            isWaitting.Remove("waitCF");

                            isWaitting[DataConverter.hex2String((byte)isWaitting["waitCF"])] = 0x01;

                            return;
                        }

                        //接收到需要的CF帧,计算还有多少数据没有发
                        if (isDoBootLoader)
                        {
                            Console.WriteLine("receUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
                        }
                        else
                        {
                            results    = new Object[3];
                            results[0] = FunCode.SHOWUDSLOG + "";
                            results[1] = "receUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2");
                            results[2] = RECEIVECOLOR;
                            flushVM(results);
                        }

                        //ff_dl -= 7;
                        if (ff_dl > 0)
                        {
                            isWaitting[DataConverter.hex2String((byte)isWaitting["waitCF"])] = isWaitting[DataConverter.hex2String((byte)isWaitting["waitCF"])] + 1 > 0x2F ? 0x20 : (isWaitting[DataConverter.hex2String((byte)isWaitting["waitCF"])] + 1);
                            // isWaitting["waitCF"] = isWaitting["waitCF"] + 1 > 0x2F ? 0x20 : (isWaitting["waitCF"] + 1);
                        }
                        else if (ff_dl == 0)
                        {
                            //数据接收完毕,将isWaitting["waitCF"]置为0x00
                            isWaitting[DataConverter.hex2String((byte)isWaitting["waitCF"])] = 0x00;
                            isWaitting["waitCF"] = 0x00;
                        }
                    }
                    else if (isWaitting.ContainsKey("waitCF") && isWaitting["waitCF"] != data[0])
                    {
                        //接收数据出现问题,终止接收
                        isWaitting[DataConverter.hex2String((byte)isWaitting["waitCF"])] = 0x01;
                        isWaitting["waitCF"] = 0xFE;
                    }
                    break;

                case 3:
                    //流控帧FC
                    switch (data[0] & 0x0F)
                    {
                    //FS
                    case 0:
                        if (isDoBootLoader)
                        {
                            Console.WriteLine("receUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
                        }
                        else
                        {
                            results    = new Object[3];
                            results[0] = FunCode.SHOWUDSLOG + "";
                            results[1] = "receUDSData   :" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " " + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 3 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2");
                            results[2] = RECEIVECOLOR;
                            flushVM(results);
                        }

                        //Continue to send
                        if (isWaitting.ContainsKey("BS"))
                        {
                            isWaitting.Remove("BS");
                        }
                        isWaitting.Add("BS", data[1]);
                        if (isWaitting.ContainsKey("stmin"))
                        {
                            isWaitting.Remove("stmin");
                        }
                        isWaitting.Add("stmin", data[2]);
                        if (isWaitting.ContainsKey("FC"))
                        {
                            isWaitting.Remove("FC");
                        }
                        isWaitting.Add("FC", 0x01);
                        break;

                    case 1:
                        //wait
                        break;

                    case 2:
                        //overflow
                        break;
                    }
                    break;
                }
            }
        }
Пример #15
0
        public void parseDataThread(Object o)
        {
            //Console.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString() + "start");
            CANSDK.VCI_CAN_OBJ obj = (CANSDK.VCI_CAN_OBJ)o;
            uint canid             = obj.ID;

            byte[] intBuff = BitConverter.GetBytes(canid);
            string id      = DataConverter.byteToHexStrForId(intBuff);

            if (new Regex(SUMINFO).IsMatch(id))
            {
                //总信息
                if (isWaitting.ContainsKey("getSlaveId") && isWaitting["getSlaveId"] == 1)
                {
                    //该帧用于获取从机编号
                    isWaitting["getSlaveId"] = 0;
                    flushVM(new Object[] { FunCode.SLAVEID, id.Substring(6) });
                }
                else
                {
                    //该帧为实时信息
                    byte[]   data    = obj.Data;
                    Object[] results = new Object[11];
                    results[0] = FunCode.REALINFO + "";
                    results[1] = data[0] + "";
                    results[2] = data[1] * 0.4 + "%";
                    results[3] = (data[3] << 8 | data[2]) * 10 + "mV";
                    results[4] = ((data[5] & 0x1F) << 8 | data[4]) + "mV";
                    //results[5] = (data[5] >> 5 & 0x03)+"";
                    //data[5] = 32;
                    results[5]  = (data[5] >> 5 & 0x03) > 1?((data[5] >> 5 & 0x03) == 2?"0":"1"):((data[5] >> 5 & 0x03) == 0?"2":"3");
                    results[6]  = (data[5] >> 7) == 0 ? "0" : "1";
                    results[7]  = ((data[7] & 0x1F) << 8 | data[6]) + "mV";
                    results[8]  = (data[7] >> 5 & 0x01) == 0?"0":"1";
                    results[9]  = (data[7] >> 6 & 0x01) == 0 ? "0" : "1";
                    results[10] = (data[7] >> 7 & 0x01) == 0?"1":"0";
                    flushVM(results);
                }
            }
            else if (new Regex(CELLVOL).IsMatch(id))
            {
                //单体电压
                byte[]   data    = obj.Data;
                Object[] results = new Object[6];
                results[0] = FunCode.VOLINFO + "";
                results[1] = 4 * (Convert.ToInt32(id.Substring(2, 2), 16) - 1) + 1;//电池起始编号
                results[2] = (data[1] << 8 | data[0]) + "mV";
                results[3] = (data[3] << 8 | data[2]) + "mV";
                results[4] = (data[5] << 8 | data[4]) + "mV";
                results[5] = (data[7] << 8 | data[6]) + "mV";
                flushVM(results);
            }
            else if (new Regex(TEMINFO).IsMatch(id))
            {
                //电池模块温度
                byte[]   data    = obj.Data;
                Object[] results = new Object[9];
                results[0] = FunCode.TEMPINFO + "";
                results[1] = (data[0] - 40) + "℃";
                results[2] = (data[1] - 40) + "℃";
                results[3] = (data[2] - 40) + "℃";
                results[4] = (data[3] - 40) + "℃";
                results[5] = (data[4] - 40) + "℃";
                results[6] = (data[5] - 40) + "℃";
                results[7] = (data[6] - 40) + "℃";
                results[8] = data[7] + "";
                flushVM(results);
            }
            else if (new Regex(SINGNALINFO).IsMatch(id))
            {
                //信号采集线状态
                byte[]   data    = obj.Data;
                Object[] results = new Object[62];
                results[0] = FunCode.SIGNALINFO + "";
                for (int i = 0; i < 61; i++)
                {
                    results[i + 1] = (data[i / 8] >> i % 8 & 0x01) == 0?"0":"1";
                }
                flushVM(results);
            }
            //else if (new Regex(BALANCESTATUS).IsMatch(id))
            //{
            //    //电池均衡状态
            //    byte[] data = obj.Data;
            //    Object[] results = new Object[61];
            //    results[0] = FunCode.BALANCESTATUS + "";
            //    for (int i = 0; i < 56; i++)
            //    {
            //        results[i + 1] = (data[i / 8+1] >> i % 8 & 0x01) == 0 ? "关闭" : "开启";
            //    }
            //    results[57] = (data[0] & 0x01 )== 0 ? "关闭" : "开启";
            //    results[58] = (data[0] >> 1 & 0x01) == 0 ? "关闭" : "开启";
            //    results[59] = (data[0] >> 2 & 0x01) == 0 ? "关闭" : "开启";
            //    results[60] = (data[0] >> 3 & 0x01) == 0 ? "关闭" : "开启";
            //    flushVM(results);
            //}
            else if (new Regex(SUMINFO2).IsMatch(id))
            {
                //总信息2
                byte[]   data    = obj.Data;
                Object[] results = new Object[6];
                results[0] = FunCode.REALINFO2 + "";
                results[1] = data[0] - 40 + "℃";
                results[2] = data[1] - 40 + "℃";
                results[3] = DataConverter.bytetoAscString(new byte[] { data[2] });
                results[4] = DataConverter.bytetoAscString(new byte[] { data[3] });
                results[5] = DataConverter.bytetoAscString(new byte[] { data[4] });
                flushVM(results);
            }
            else if (new Regex(SUMINFO3).IsMatch(id))
            {
                //总信息3
                byte[]   data    = obj.Data;
                Object[] results = new Object[9];
                results[0] = FunCode.REALINFO3 + "";
                for (int i = 0; i < 8; i++)
                {
                    results[i + 1] = DataConverter.bytetoAscString(new byte[] { data[i] });
                }
                flushVM(results);
            }
            else if (new Regex(TEMINFO2).IsMatch(id))
            {
                //电池模块温度2
                byte[]   data    = obj.Data;
                Object[] results = new Object[5];
                results[0] = FunCode.TEMPINFO2 + "";
                results[1] = data[0] - 40 + "℃";
                results[2] = data[1] - 40 + "℃";
                results[3] = data[2] - 40 + "℃";
                results[4] = data[3] - 40 + "℃";
                flushVM(results);
            }
            else if (new Regex(CONFIG1).IsMatch(id))
            {
                //收到配置信息1
                byte[]   data    = obj.Data;
                Object[] results = new Object[7];
                results[0] = FunCode.CONFIG1 + "";
                results[1] = data[0] + "";
                results[2] = data[1].ToString("X2");
                results[3] = (data[3] << 8 | data[2]) + "mV";
                results[4] = (data[5] << 8 | data[4]) + "mV";
                results[5] = data[6] - 40 + "℃";
                results[6] = data[7] - 40 + "℃";
                flushVM(results);
            }
            else if (new Regex(CONFIG2).IsMatch(id))
            {
                //收到配置信息2
                byte[]   data    = obj.Data;
                Object[] results = new Object[8];
                results[0] = FunCode.CONFIG2 + "";
                for (int i = 0; i < 6; i++)
                {
                    results[i + 1] = data[i] + "";
                }
                results[7] = (data[7] << 8 | data[6]) * 0.1 + "A";
                flushVM(results);
            }
            else if (new Regex(TRACECODE1).IsMatch(id))
            {
                //收到追溯码1
                byte[]   data    = obj.Data;
                Object[] results = new Object[9];
                results[0] = FunCode.TRACECODE1 + "";
                for (int i = 0; i < 8; i++)
                {
                    results[i + 1] = DataConverter.bytetoAscString(new byte[] { data[i] });
                }
                flushVM(results);
            }
            else if (new Regex(TRACECODE2).IsMatch(id))
            {
                //收到追溯码2
                byte[]   data    = obj.Data;
                Object[] results = new Object[9];
                results[0] = FunCode.TRACECODE2 + "";
                for (int i = 0; i < 8; i++)
                {
                    results[i + 1] = DataConverter.bytetoAscString(new byte[] { data[i] });
                }
                flushVM(results);
            }
            else if (new Regex(TRACECODE3).IsMatch(id))
            {
                //收到追溯码3
                byte[]   data    = obj.Data;
                Object[] results = new Object[9];
                results[0] = FunCode.TRACECODE3 + "";
                for (int i = 0; i < 8; i++)
                {
                    results[i + 1] = DataConverter.bytetoAscString(new byte[] { data[i] });
                }
                flushVM(results);
            }
            //Console.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString() + "end");
        }
Пример #16
0
        //发送config2
        public void sendConfig2Pack(Object o)
        {
            ArrayList       al      = (ArrayList)o;
            string          slaveId = Convert.ToString(al[0]);
            Gen2SlaveConfig g       = (Gen2SlaveConfig)al[1];
            Gen2SlaveInfo   gsi     = (Gen2SlaveInfo)al[2];

            if ((g.Bcnt_a == null || g.Bcnt_a.Equals("")) && (gsi.Bcnt_A != null && !gsi.Bcnt_A.Equals("")))
            {
                g.Bcnt_a = gsi.Bcnt_A;
            }
            if ((g.Bcnt_b == null || g.Bcnt_b.Equals("")) && (gsi.Bcnt_B != null && !gsi.Bcnt_B.Equals("")))
            {
                g.Bcnt_b = gsi.Bcnt_B;
            }
            if ((g.Bcnt_c == null || g.Bcnt_c.Equals("")) && (gsi.Bcnt_C != null && !gsi.Bcnt_C.Equals("")))
            {
                g.Bcnt_c = gsi.Bcnt_C;
            }
            if ((g.Bcnt_d == null || g.Bcnt_d.Equals("")) && (gsi.Bcnt_D != null && !gsi.Bcnt_D.Equals("")))
            {
                g.Bcnt_d = gsi.Bcnt_D;
            }
            if ((g.Bcnt_e == null || g.Bcnt_e.Equals("")) && (gsi.Bcnt_E != null && !gsi.Bcnt_E.Equals("")))
            {
                g.Bcnt_e = gsi.Bcnt_E;
            }
            if ((g.Bcnt_f == null || g.Bcnt_f.Equals("")) && (gsi.Bcnt_F != null && !gsi.Bcnt_F.Equals("")))
            {
                g.Bcnt_f = gsi.Bcnt_F;
            }
            if ((g.MaxCharge == null || g.MaxCharge.Equals("")) && (gsi.MaxChargeCur != null && !gsi.MaxChargeCur.Equals("")))
            {
                g.MaxCharge = gsi.MaxChargeCur.Replace("A", String.Empty);
            }
            if (!(DataConverter.canStirng2int(g.Bcnt_a) && DataConverter.canStirng2int(g.Bcnt_b) && DataConverter.canStirng2int(g.Bcnt_c) &&
                  DataConverter.canStirng2int(g.Bcnt_d) && DataConverter.canStirng2int(g.Bcnt_e) && DataConverter.canStirng2int(g.Bcnt_f) && DataConverter.canStirng2double(g.MaxCharge)))
            {
                flushVM(new Object[] { FunCode.SHOWINFO, "wrongdata" });
                return;
            }
            CANSDK.VCI_CAN_OBJ obj = new CANSDK.VCI_CAN_OBJ();
            obj.Init();
            obj.RemoteFlag = 0; //数据帧
            obj.ExternFlag = 1; //扩展帧
            obj.SendType   = 0; //正常发送
            obj.ID         = uint.Parse("0C24" + slaveId + "7F", System.Globalization.NumberStyles.HexNumber);
            byte[] b = new byte[8];
            b[0] = (byte)Convert.ToInt32(g.Bcnt_a);
            b[1] = (byte)Convert.ToInt32(g.Bcnt_b);
            b[2] = (byte)Convert.ToInt32(g.Bcnt_c);
            b[3] = (byte)Convert.ToInt32(g.Bcnt_d);
            b[4] = (byte)Convert.ToInt32(g.Bcnt_e);
            b[5] = (byte)Convert.ToInt32(g.Bcnt_f);
            short d = (short)(Convert.ToInt32(g.MaxCharge) * 10);

            byte[] t = System.BitConverter.GetBytes(d);
            b[6]        = t[0];
            b[7]        = t[1];
            obj.Data    = b;
            obj.DataLen = 8;
            // Console.WriteLine("发送:" + DataConverter.byteToHexStrForData(obj.Data).Substring(0, 2 * obj.DataLen) + ",ID:" + obj.ID.ToString("X2"));
            CANSDK.VCI_Transmit(CANSDK.m_devtype, CANSDK.m_devind, CANSDK.m_canind, ref obj, 1);
            flushVM(new Object[] { FunCode.SHOWINFO, "sendSuc" });
        }
Пример #17
0
        void parent_ReadCfgEvent(object sender, ReadCfgArgs e)
        {
            CANSDK.VCI_CAN_OBJ obj = e.Args;
            byte id = obj.Data[0];

            switch (id)
            {
            case 0x41:
                double cell1 = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.cellVolHighAlarmFirst_rr;
                CellVolHighAlarmFirst = cell1.ToString();
                double cell2 = (double)(((obj.Data[4] & 0x00FF) << 8) | obj.Data[3]) * ResolutionRatioModel.cellVolHighAlarmSecond_rr;
                CellVolHighAlarmSecond = cell2.ToString();
                double cell3 = (double)(((obj.Data[6] & 0x00FF) << 8) | obj.Data[5]) * ResolutionRatioModel.cellVolHighAlarmThird_rr;
                CellVolHighAlarmThird = cell3.ToString();
                break;

            case 0x42:
                double cellremove1 = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.cellVolHighAlarmRemoveFirst_rr;
                CellVolHighAlarmRemoveFirst = cellremove1.ToString();
                double cellremove12 = (double)(((obj.Data[4] & 0x00FF) << 8) | obj.Data[3]) * ResolutionRatioModel.cellVolHighAlarmRemoveSecond_rr;
                CellVolHighAlarmRemoveSecond = cellremove12.ToString();
                double cellremove13 = (double)(((obj.Data[6] & 0x00FF) << 8) | obj.Data[5]) * ResolutionRatioModel.cellVolHighAlarmRemoveThird_rr;
                CellVolHighAlarmRemoveThird = cellremove13.ToString();
                break;

            case 0x43:
                double cellalarm1 = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.cellVolLowAlarmFirst_rr;
                CellVolLowAlarmFirst = cellalarm1.ToString();
                double cellalarm2 = (double)(((obj.Data[4] & 0x00FF) << 8) | obj.Data[3]) * ResolutionRatioModel.cellVolLowAlarmSecond_rr;
                CellVolLowAlarmSecond = cellalarm2.ToString();
                double cellalarm3 = (double)(((obj.Data[6] & 0x00FF) << 8) | obj.Data[5]) * ResolutionRatioModel.cellVolLowAlarmThird_rr;
                CellVolLowAlarmThird = cellalarm3.ToString();
                break;

            case 0x44:
                double c1 = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.cellVolLowAlarmRemoveFirst_rr;
                CellVolLowAlarmRemoveFirst = c1.ToString();
                double c2 = (double)(((obj.Data[4] & 0x00FF) << 8) | obj.Data[3]) * ResolutionRatioModel.cellVolLowAlarmRemoveFirst_rr;
                CellVolLowAlarmRemoveSecond = c2.ToString();
                double c3 = (double)(((obj.Data[6] & 0x00FF) << 8) | obj.Data[5]) * ResolutionRatioModel.cellVolLowAlarmRemoveThird_rr;
                CellVolLowAlarmRemoveThird = c3.ToString();
                break;

            case 0x45:
                int t1 = (int)(obj.Data[1] + ResolutionRatioModel.cellTemperatureHighAlarmFirst_offset);
                CellTemperatureHighAlarmFirst = t1.ToString();
                int t2 = (int)(obj.Data[2] + ResolutionRatioModel.cellTemperatureHighAlarmSecond_offset);
                CellTemperatureHighAlarmSecond = t2.ToString();
                int t3 = (int)(obj.Data[3] + ResolutionRatioModel.cellTemperatureHighAlarmThird_offset);
                CellTemperatureHighAlarmThird = t3.ToString();

                int tr1 = (int)(obj.Data[4] + ResolutionRatioModel.cellTemperatureHighAlarmRemoveFirst_offset);
                CellTemperatureHighAlarmRemoveFirst = tr1.ToString();
                int tr2 = (int)(obj.Data[5] + ResolutionRatioModel.cellTemperatureHighAlarmRemoveSecond_offset);
                CellTemperatureHighAlarmRemoveSecond = tr2.ToString();
                int tr3 = (int)(obj.Data[6] + ResolutionRatioModel.cellTemperatureHighAlarmRemoveThird_offset);
                CellTemperatureHighAlarmRemoveThird = tr3.ToString();
                break;

            case 0x46:
                int tl1 = (int)(obj.Data[1] + ResolutionRatioModel.cellTemperatureLowAlarmFirst_offset);
                CellTemperatureLowAlarmFirst = tl1.ToString();
                int tl2 = (int)(obj.Data[2] + ResolutionRatioModel.cellTemperatureLowAlarmSecond_offset);
                CellTemperatureLowAlarmSecond = tl2.ToString();
                int tl3 = (int)(obj.Data[3] + ResolutionRatioModel.cellTemperatureLowAlarmThird_offset);
                CellTemperatureLowAlarmThird = tl3.ToString();

                int tlr1 = (int)(obj.Data[4] + ResolutionRatioModel.cellTemperatureLowAlarmRemoveFirst_offset);
                CellTemperatureLowAlarmRemoveFirst = tlr1.ToString();
                int tlr2 = (int)(obj.Data[5] + ResolutionRatioModel.cellTemperatureLowAlarmRemoveSecond_offset);
                CellTemperatureLowAlarmRemoveSecond = tlr2.ToString();
                int tlr3 = (int)(obj.Data[6] + ResolutionRatioModel.cellTemperatureLowAlarmRemoveThird_offset);
                CellTemperatureLowAlarmRemoveThird = tlr3.ToString();
                break;

            case 0x47:
                double ba1 = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.balanCurrentHighAlarmFirst_rr;
                BalanCurrentHighAlarmFirst = ba1.ToString();
                double ba2 = (double)(((obj.Data[4] & 0x00FF) << 8) | obj.Data[3]) * ResolutionRatioModel.balanCurrentHighAlarmSecond_rr;
                BalanCurrentHighAlarmSecond = ba2.ToString();
                double ba3 = (double)(((obj.Data[6] & 0x00FF) << 8) | obj.Data[5]) * ResolutionRatioModel.balanCurrentHighAlarmThird_rr;
                BalanCurrentHighAlarmThird = ba3.ToString();
                break;

            case 0x48:
                double bra1 = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.balanCurrentHighAlarmRemoveFirst_rr;
                BalanCurrentHighAlarmRemoveFirst = bra1.ToString();
                double bra2 = (double)(((obj.Data[4] & 0x00FF) << 8) | obj.Data[3]) * ResolutionRatioModel.balanCurrentHighAlarmRemoveSecond_rr;
                BalanCurrentHighAlarmRemoveSecond = bra2.ToString();
                double bra3 = (double)(((obj.Data[6] & 0x00FF) << 8) | obj.Data[5]) * ResolutionRatioModel.balanCurrentHighAlarmRemoveThird_rr;
                BalanCurrentHighAlarmRemoveThird = bra3.ToString();
                break;

            case 0x49:
                double bla1 = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.balanCurrentLowAlarmFirst_rr;
                BalanCurrentLowAlarmFirst = bla1.ToString();
                double bla2 = (double)(((obj.Data[4] & 0x00FF) << 8) | obj.Data[3]) * ResolutionRatioModel.balanCurrentLowAlarmSecond_rr;
                BalanCurrentLowAlarmSecond = bla2.ToString();
                double bla3 = (double)(((obj.Data[6] & 0x00FF) << 8) | obj.Data[5]) * ResolutionRatioModel.balanCurrentLowAlarmThird_rr;
                BalanCurrentLowAlarmThird = bla3.ToString();
                break;

            case 0x4A:
                double bb1 = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.balanCurrentLowAlarmRemoveFirst_rr;
                BalanCurrentLowAlarmRemoveFirst = bb1.ToString();
                double bb2 = (double)(((obj.Data[4] & 0x00FF) << 8) | obj.Data[3]) * ResolutionRatioModel.balanCurrentLowAlarmRemoveSecond_rr;
                BalanCurrentLowAlarmRemoveSecond = bb2.ToString();
                double bb3 = (double)(((obj.Data[6] & 0x00FF) << 8) | obj.Data[5]) * ResolutionRatioModel.balanCurrentLowAlarmRemoveThird_rr;
                BalanCurrentLowAlarmRemoveThird = bb3.ToString();
                break;

            case 0x4B:
                double cc1 = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.balanCurrentSetValueFirst_rr;
                BalanCurrentSetValueFirst = cc1.ToString();
                double cc2 = (double)(((obj.Data[4] & 0x00FF) << 8) | obj.Data[3]) * ResolutionRatioModel.balanCurrentSetValueSecond_rr;
                BalanCurrentSetValueSecond = cc2.ToString();
                double cc3 = (double)(((obj.Data[6] & 0x00FF) << 8) | obj.Data[5]) * ResolutionRatioModel.balanCurrentSetValueThird_rr;
                BalanCurrentSetValueThird = cc3.ToString();
                break;

            case 0x4C:
                double bvv = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.balanVolOpenValue_rr;
                BalanVolOpenValue = bvv.ToString();
                break;

            case 0x4D:
                double bcv = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.balanVolCloseValue_rr;
                BalanVolCloseValue = bcv.ToString();
                break;

            case 0x4E:
                double bdov = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.balanVolDifOpenValue_rr;
                BalanVolDifOpenValue = bdov.ToString();
                break;

            case 0x4F:
                double bvdcv = (double)(((obj.Data[2] & 0x00FF) << 8) | obj.Data[1]) * ResolutionRatioModel.balanVolDifCloseValue_rr;
                BalanVolDifCloseValue = bvdcv.ToString();
                break;

            case 0x50:
                int cbto = (int)(obj.Data[1] + ResolutionRatioModel.cellBalanTemperatureOpenValue_offset);
                CellBalanTemperatureOpenValue = cbto.ToString();
                int ctcv = (int)(obj.Data[2] + ResolutionRatioModel.cellBalanTemperatureCloseValue_offset);
                CellBalanTemperatureCloseValue = ctcv.ToString();
                break;

            case 0x51:
                int sn = (int)(obj.Data[1] + ResolutionRatioModel.slaveNum_offset);
                SlaveNum = sn.ToString();
                int mode = (int)(obj.Data[2] + ResolutionRatioModel.cellBalanMode_offset);
                switch (mode)
                {
                case 'N':
                    CellBalanMode = "不均衡";
                    break;

                case 'A':
                    CellBalanMode = "主动均衡";
                    break;

                case 'P':
                    CellBalanMode = "被动均衡";
                    break;

                default:
                    CellBalanMode = "获取错误";
                    break;
                }
                int cmmcn = (int)(obj.Data[3] + ResolutionRatioModel.childModuleMonCellNumber_offset);
                ChildModuleMonCellNumber = cmmcn.ToString();
                int cmmtn = (int)(obj.Data[4] + ResolutionRatioModel.childMonModuleTemperatureNumber_offset);
                ChildMonModuleTemperatureNumber = cmmtn.ToString();
                int mamcn = (int)(obj.Data[5] + ResolutionRatioModel.moduleAMonCellNum_offset);
                ModuleAMonCellNum = mamcn.ToString();
                int matn = (int)(obj.Data[6] + ResolutionRatioModel.moduleAMonTemperatureNum_offset);
                ModuleAMonTemperatureNum = matn.ToString();
                break;

            case 0x52:
                int mbcn = (int)(obj.Data[1] + ResolutionRatioModel.moduleBMonCellNum_offset);
                ModuleBMonCellNum = mbcn.ToString();
                int mbtn = (int)(obj.Data[2] + ResolutionRatioModel.moduleBMonTemperatureNum_offset);
                ModuleBMonTemperatureNum = mbtn.ToString();
                int mccn = (int)(obj.Data[3] + ResolutionRatioModel.moduleCMonCellNum_offset);
                ModuleCMonCellNum = mccn.ToString();
                int mctn = (int)(obj.Data[4] + ResolutionRatioModel.moduleCMonTemperatureNum_offset);
                ModuleCMonTemperatureNum = mctn.ToString();
                int mdcn = (int)(obj.Data[5] + ResolutionRatioModel.moduleDMonCellNum_offset);
                ModuleDMonCellNum = mdcn.ToString();
                int mdtn = (int)(obj.Data[6] + ResolutionRatioModel.moduleDMonTemperatureNum_offset);
                ModuleDMonTemperatureNum = mdtn.ToString();

                break;

            case 0x53:
                int mecn = (int)(obj.Data[1] + ResolutionRatioModel.moduleEMonCellNum_offset);
                ModuleEMonCellNum = mecn.ToString();
                int metn = (int)(obj.Data[2] + ResolutionRatioModel.moduleEMonTemperatureNum_offset);
                ModuleEMonTemperatureNum = metn.ToString();
                int ppy = (int)((((obj.Data[3] & 0x00FF) << 8) | obj.Data[4]) + ResolutionRatioModel.packProYear_offset);
                PackProYear = ppy.ToString();
                int ppm = (int)(obj.Data[5] + ResolutionRatioModel.packProMonth_offset);
                PackProMonth = ppm.ToString();
                int ppd = (int)(obj.Data[6] + ResolutionRatioModel.packProDay_offset);
                PackProDay = ppd.ToString();

                break;

            case 0x54:
                int p1 = obj.Data[1];
                PackBatchNumberData1 = p1.ToString();
                double p2 = obj.Data[2];
                PackBatchNumberData2 = p2.ToString();
                int p3 = obj.Data[3];
                PackBatchNumberData3 = p3.ToString();
                double p4 = obj.Data[4];
                PackBatchNumberData4 = p4.ToString();
                int p5 = obj.Data[5];
                PackBatchNumberData5 = p5.ToString();
                double p6 = obj.Data[6];
                PackBatchNumberData6 = p6.ToString();

                break;
            }
        }
Пример #18
0
        private void parent_DiagnoseEvent(object sender, ReadCfgArgs e)
        {
            Random rd = new Random();

            CANSDK.VCI_CAN_OBJ obj = e.Args;
            string             tag = obj.ID.ToString("X2").Substring(3, 1);

            switch (tag)
            {
            case "1":
                diagnose.MON_PWM_SWP     = (int)(obj.Data[0] * ResolutionRatioModel.mON_PWM_SWP_rr + ResolutionRatioModel.mON_PWM_SWP_offset);
                diagnose.MON_PWM_SWP_Fre = (double)(obj.Data[1] * ResolutionRatioModel.mON_PWM_SWP_Fre_rr + ResolutionRatioModel.mON_PWM_SWP_Fre_offset);
                //低字节在前,高字节在后
                diagnose.MON_VB_24V =
                    (double)((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_VB_24V_rr + ResolutionRatioModel.mON_VB_24V_offset;
                //显示小数点后3位
                diagnose.MON_VB_24V = double.Parse(string.Format("{0:f3}", diagnose.MON_VB_24V));

                diagnose.MON_VS_24V = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_VS_24V_rr + ResolutionRatioModel.mON_VS_24V_offset;
                diagnose.MON_VS_24V = double.Parse(string.Format("{0:f3}", diagnose.MON_VS_24V));

                diagnose.MON_EN_VB_24V = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_EN_VB_24V_rr + ResolutionRatioModel.mON_EN_VB_24V_offset;
                diagnose.MON_EN_VB_24V = double.Parse(string.Format("{0:f3}", diagnose.MON_EN_VB_24V));

                break;

            case "2":
                diagnose.MON_EN_POWER = (double)((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_EN_POWER_rr + ResolutionRatioModel.mON_EN_POWER_offset;
                diagnose.MON_EN_POWER = double.Parse(string.Format("{0:f3}", diagnose.MON_EN_POWER));

                diagnose.MON_12VL = ((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_12VL_rr + ResolutionRatioModel.mON_12VL_offset;
                diagnose.MON_12VL = double.Parse(string.Format("{0:f3}", diagnose.MON_12VL));


                diagnose.MON_Vref_25VL = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_Vref_25VL_rr + ResolutionRatioModel.mON_Vref_25VL_offset;
                diagnose.MON_Vref_25VL = double.Parse(string.Format("{0:f3}", diagnose.MON_Vref_25VL));

                diagnose.MON_Vref_147VL = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_Vref_147VL_rr + ResolutionRatioModel.mON_Vref_147VL_offset;
                diagnose.MON_Vref_147VL = double.Parse(string.Format("{0:f3}", diagnose.MON_Vref_147VL));

                break;

            case "3":
                diagnose.MON_Vref_353VL = (double)((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_Vref_353VL_rr + ResolutionRatioModel.mON_Vref_353VL_offset;
                diagnose.MON_Vref_353VL = double.Parse(string.Format("{0:f3}", diagnose.MON_Vref_353VL));

                diagnose.MON_T_AMB = (int)(((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_T_AMB_rr + ResolutionRatioModel.mON_T_AMB_offset);
                diagnose.MON_T_AMB = double.Parse(string.Format("{0:f3}", diagnose.MON_T_AMB));

                diagnose.MON_ABC_PRI_0 = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_ABC_PRI_0_rr + ResolutionRatioModel.mON_ABC_PRI_0_offset * ResolutionRatioModel.mON_ABC_PRI_0_rr;
                diagnose.MON_ABC_PRI_0 = double.Parse(string.Format("{0:f3}", diagnose.MON_ABC_PRI_0));

                diagnose.MON_T_PRI_0 = (int)(((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_T_PRI_0_rr + ResolutionRatioModel.mON_T_PRI_0_offset * ResolutionRatioModel.mON_T_PRI_0_rr);
                diagnose.MON_T_PRI_0 = double.Parse(string.Format("{0:f3}", diagnose.MON_T_PRI_0));

                break;

            case "4":
                diagnose.MON_5VH_1428 = (double)((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_5VH_1428_rr + ResolutionRatioModel.mON_5VH_1428_offset;
                diagnose.MON_5VH_1428 = double.Parse(string.Format("{0:f3}", diagnose.MON_5VH_1428));

                diagnose.MON_12VH = (double)((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_12VH_rr + ResolutionRatioModel.mON_12VH_offset;
                diagnose.MON_12VH = double.Parse(string.Format("{0:f3}", diagnose.MON_12VH));

                diagnose.MON_Vref_03VH = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_Vref_03VH_rr + ResolutionRatioModel.mON_Vref_03VH_offset;
                diagnose.MON_Vref_03VH = double.Parse(string.Format("{0:f3}", diagnose.MON_Vref_03VH));

                diagnose.MON_Vref_47VH = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_Vref_47VH_rr + ResolutionRatioModel.mON_Vref_47VH_offset;
                diagnose.MON_Vref_47VH = double.Parse(string.Format("{0:f3}", diagnose.MON_Vref_47VH));

                break;

            case "5":
                diagnose.MON_ABC_SEC = (double)((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_ABC_SEC_rr + ResolutionRatioModel.mON_ABC_SEC_offset * ResolutionRatioModel.mON_ABC_SEC_rr;
                diagnose.MON_ABC_SEC = double.Parse(string.Format("{0:f3}", diagnose.MON_ABC_SEC));

                diagnose.MON_ABV = (double)((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_ABV_rr + ResolutionRatioModel.mON_ABV_offset;
                diagnose.MON_ABV = double.Parse(string.Format("{0:f3}", diagnose.MON_ABV));

                diagnose.MON_VREF2 = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_VREF2_rr + ResolutionRatioModel.mON_VREF2_offset;
                diagnose.MON_VREF2 = double.Parse(string.Format("{0:f3}", diagnose.MON_VREF2));

                diagnose.MON_VSET = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_VSET_rr + ResolutionRatioModel.mON_VSET_offset;
                diagnose.MON_VSET = double.Parse(string.Format("{0:f3}", diagnose.MON_VSET));

                break;

            case "6":
                diagnose.MON_T_SEC = (int)(((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_T_SEC_rr + ResolutionRatioModel.mON_T_SEC_offset);
                diagnose.MON_T_SEC = double.Parse(string.Format("{0:f3}", diagnose.MON_T_SEC));

                diagnose.MON_TV_Cell = (double)((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_TV_Cell_rr + ResolutionRatioModel.mON_TV_Cell_offset;
                diagnose.MON_TV_Cell = double.Parse(string.Format("{0:f3}", diagnose.MON_TV_Cell));

                diagnose.MON_FAULT_INT_1428 = (int)(((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_FAULT_INT_1428_rr + ResolutionRatioModel.mON_FAULT_INT_1428_offset);
                diagnose.MON_FAULT_INT_1428 = double.Parse(string.Format("{0:f3}", diagnose.MON_FAULT_INT_1428));

                diagnose.MON_GATE_LS_0 = (int)(obj.Data[6] * ResolutionRatioModel.mON_GATE_LS_0_rr + ResolutionRatioModel.mON_GATE_LS_0_offset);
                diagnose.MON_GATE_LS_0 = double.Parse(string.Format("{0:f3}", diagnose.MON_GATE_LS_0));

                diagnose.MON_GATE_LS_0_Fre = (double)(obj.Data[7] * ResolutionRatioModel.mON_GATE_LS_0_Fre_rr + ResolutionRatioModel.mON_GATE_LS_0_Fre_offset);
                diagnose.MON_GATE_LS_0_Fre = double.Parse(string.Format("{0:f3}", diagnose.MON_GATE_LS_0_Fre));
                break;

            case "7":
                diagnose.MON_ABC_PRI_1 = (double)((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_ABC_PRI_1_rr + ResolutionRatioModel.mON_ABC_PRI_1_offset * ResolutionRatioModel.mON_ABC_PRI_1_rr;
                diagnose.MON_ABC_PRI_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_ABC_PRI_1));

                diagnose.MON_T_PRI_1 = (int)(((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_T_PRI_1_rr + ResolutionRatioModel.mON_T_PRI_1_offset);
                diagnose.MON_T_PRI_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_T_PRI_1));

                diagnose.MON_5VH_1428_1 = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_5VH_1428_1_rr + ResolutionRatioModel.mON_5VH_1428_1_offset;
                diagnose.MON_5VH_1428_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_5VH_1428_1));

                diagnose.MON_12VH1 = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_12VH1_rr + ResolutionRatioModel.mON_12VH1_offset;
                diagnose.MON_12VH1 = double.Parse(string.Format("{0:f3}", diagnose.MON_12VH1));
                break;

            case "8":
                diagnose.MON_Vref_03VH1 = (double)((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_Vref_03VH1_rr + ResolutionRatioModel.mON_Vref_03VH1_offset;
                diagnose.MON_Vref_03VH1 = double.Parse(string.Format("{0:f3}", diagnose.MON_Vref_03VH1));

                diagnose.MON_Vref_47VH1 = (double)((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_Vref_47VH1_rr + ResolutionRatioModel.mON_Vref_47VH1_offset;
                diagnose.MON_Vref_47VH1 = double.Parse(string.Format("{0:f3}", diagnose.MON_Vref_47VH1));

                diagnose.MON_ABC_SEC_1 = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_ABC_SEC_1_rr + ResolutionRatioModel.mON_ABC_SEC_1_offset * ResolutionRatioModel.mON_ABC_SEC_1_rr;
                diagnose.MON_ABC_SEC_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_ABC_SEC_1));

                diagnose.MON_ABV_1 = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_ABV_1_rr + ResolutionRatioModel.mON_ABV_1_offset;
                diagnose.MON_ABV_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_ABV_1));

                break;

            case "9":
                diagnose.MON_VREF2_1 = (double)((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_VREF2_1_rr + ResolutionRatioModel.mON_VREF2_1_offset;
                diagnose.MON_VREF2_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_VREF2_1));

                diagnose.MON_VSET_1 = (double)((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_VSET_1_rr + ResolutionRatioModel.mON_VSET_1_offset;
                diagnose.MON_VSET_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_VSET_1));

                diagnose.MON_T_SEC_1 = (int)(((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_T_SEC_1_rr + ResolutionRatioModel.mON_T_SEC_1_offset);
                diagnose.MON_T_SEC_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_T_SEC_1));

                diagnose.MON_TV_Cell_1 = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_TV_Cell_1_rr + ResolutionRatioModel.mON_TV_Cell_1_offset;
                diagnose.MON_TV_Cell_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_TV_Cell_1));

                break;

            case "A":
                diagnose.MON_FAULT_INT_1428_1 = (int)(((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_FAULT_INT_1428_1_rr + ResolutionRatioModel.mON_FAULT_INT_1428_1_offset);
                diagnose.MON_FAULT_INT_1428_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_FAULT_INT_1428_1));

                diagnose.MON_GATE_LS_1 = (int)(obj.Data[2] * ResolutionRatioModel.mON_GATE_LS_1_rr + ResolutionRatioModel.mON_GATE_LS_1_offset);
                diagnose.MON_GATE_LS_1 = double.Parse(string.Format("{0:f3}", diagnose.MON_GATE_LS_1));

                diagnose.MON_GATE_LS_1_Fre = (double)(obj.Data[3] * ResolutionRatioModel.mON_GATE_LS_1_Fre_rr + ResolutionRatioModel.mON_GATE_LS_1_Fre_offset);
                diagnose.MON_GATE_LS_1_Fre = double.Parse(string.Format("{0:f3}", diagnose.MON_GATE_LS_1_Fre));

                diagnose.MON_ABC_PRI_2 = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_ABC_PRI_2_rr + ResolutionRatioModel.mON_ABC_PRI_2_offset * ResolutionRatioModel.mON_ABC_PRI_2_rr;
                diagnose.MON_ABC_PRI_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_ABC_PRI_2));

                diagnose.MON_T_PRI_2 = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_T_PRI_2_rr + ResolutionRatioModel.mON_T_PRI_2_offset;
                diagnose.MON_T_PRI_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_T_PRI_2));

                break;

            case "B":
                diagnose.MON_5VH_1428_2 = (double)((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_5VH_1428_2_rr + ResolutionRatioModel.mON_5VH_1428_2_offset;
                diagnose.MON_5VH_1428_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_5VH_1428_2));

                diagnose.MON_12VH2 = (double)((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_12VH2_rr + ResolutionRatioModel.mON_12VH2_offset;
                diagnose.MON_12VH2 = double.Parse(string.Format("{0:f3}", diagnose.MON_12VH2));

                diagnose.MON_Vref_03VH2 = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_Vref_03VH2_rr + ResolutionRatioModel.mON_Vref_03VH2_offset;
                diagnose.MON_Vref_03VH2 = double.Parse(string.Format("{0:f3}", diagnose.MON_Vref_03VH2));

                diagnose.MON_Vref_47VH2 = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_Vref_47VH2_rr + ResolutionRatioModel.mON_Vref_47VH2_offset;
                diagnose.MON_Vref_47VH2 = double.Parse(string.Format("{0:f3}", diagnose.MON_Vref_47VH2));
                break;

            case "C":
                diagnose.MON_ABC_SEC_2 = (double)((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_ABC_SEC_2_rr + ResolutionRatioModel.mON_ABC_SEC_2_offset * ResolutionRatioModel.mON_ABC_SEC_2_rr;
                diagnose.MON_ABC_SEC_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_ABC_SEC_2));

                diagnose.MON_ABV_2 = (double)((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_ABV_2_rr + ResolutionRatioModel.mON_ABV_2_offset;
                diagnose.MON_ABV_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_ABV_2));

                diagnose.MON_VREF2_2 = (double)((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_VREF2_2_rr + ResolutionRatioModel.mON_VREF2_2_offset;
                diagnose.MON_VREF2_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_VREF2_2));

                diagnose.MON_VSET_2 = (double)((obj.Data[7] & 0x00FF) << 8 | obj.Data[6]) * ResolutionRatioModel.mON_VSET_2_rr + ResolutionRatioModel.mON_VSET_2_offset;
                diagnose.MON_VSET_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_VSET_2));
                break;

            case "D":
                diagnose.MON_T_SEC_2 = (int)(((obj.Data[1] & 0x00FF) << 8 | obj.Data[0]) * ResolutionRatioModel.mON_T_SEC_2_rr + ResolutionRatioModel.mON_T_SEC_2_offset);
                diagnose.MON_T_SEC_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_T_SEC_2));

                diagnose.MON_TV_Cell_2 = (double)((obj.Data[3] & 0x00FF) << 8 | obj.Data[2]) * ResolutionRatioModel.mON_TV_Cell_2_rr + ResolutionRatioModel.mON_TV_Cell_2_offset;
                diagnose.MON_TV_Cell_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_TV_Cell_2));

                diagnose.MON_FAULT_INT_1428_2 = (int)(((obj.Data[5] & 0x00FF) << 8 | obj.Data[4]) * ResolutionRatioModel.mON_FAULT_INT_1428_2_rr + ResolutionRatioModel.mON_FAULT_INT_1428_2_offset);
                diagnose.MON_FAULT_INT_1428_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_FAULT_INT_1428_2));

                diagnose.MON_GATE_LS_2 = (int)(obj.Data[6] * ResolutionRatioModel.mON_GATE_LS_2_rr + ResolutionRatioModel.mON_GATE_LS_2_offset);
                diagnose.MON_GATE_LS_2 = double.Parse(string.Format("{0:f3}", diagnose.MON_GATE_LS_2));

                diagnose.MON_GATE_LS_2_Fre = (double)(obj.Data[7] * ResolutionRatioModel.mON_GATE_LS_2_Fre_rr + ResolutionRatioModel.mON_GATE_LS_2_Fre_offset);
                diagnose.MON_GATE_LS_2_Fre = double.Parse(string.Format("{0:f3}", diagnose.MON_GATE_LS_2_Fre));
                break;

            case "F":
                byte[] b           = obj.Data;
                int[]  resultArray = new int[56];
                for (int i = 0; i < 56; i++)
                {
                    resultArray[i] = obj.Data[i / 8] >> (i % 8) & 0x01;
                }
                int[] q = resultArray;
                Application.Current.Dispatcher.Invoke((Action) delegate
                {
                    int j = -1;
                    foreach (UIElement element in dfGlobal.parent.Children)
                    {
                        if (element is StackPanel)
                        {
                            StackPanel elm = element as StackPanel;
                            foreach (var item in elm.Children)
                            {
                                Button btn = item as Button;
                                if (btn != null)
                                {
                                    j++;
                                    Console.Write(j + ",");
                                    if (resultArray[j] == 0)
                                    {
                                        btn.SetValue(Button.StyleProperty, Application.Current.Resources["SignalEnableButton"]);
                                    }
                                }
                            }
                        }
                    }
                });


                break;
            }
        }