//同步更改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; } } } }
//读取追溯码 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()); }
//获取从机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" }); } }
//发送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" }); }
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(); }
//发送均衡控制指令 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" }); }
//接收线程 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); } }
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); }
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); }
//发送追溯码 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); }
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); }
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; } } } }
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; } } }
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"); }
//发送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" }); }
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; } }
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; } }