private void HandlerZLGRecvDataEvent(object sender, EventArgs e) { var canEvent = e as CANEvent; if (canEvent == null) { return; } if (canEvent.listData[0] == 0x46 && canEvent.listData[1] == 0x01 && canEvent.listData[4] == 0x12 && canEvent.listData[5] == 0x01) { DDProtocol.DdProtocol.DdInstance.m_bIsStopCommunication = true; BqProtocol.BqInstance.m_bIsStopCommunication = true; System.Threading.Thread.Sleep(200); DDProtocol.DdProtocol.DdInstance.DD_ReleyEvent(); DDProtocol.DdProtocol.DdInstance.m_bIsStopCommunication = false; BqProtocol.BqInstance.m_bIsStopCommunication = false; return; } System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(delegate() { if (isUpdateWndSendMsg && canEvent.listData[0] == functionCode) { OnRaiseCommunicationMessageEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); CSVFileHelper.WriteLogs("log", "接收", CSVFileHelper.ToHexStrFromByte(canEvent.listData.ToArray(), false), false);//记录所有接收到的消息 } else { if (SelectCANWnd.m_H5Protocol == H5Protocol.BO_QIANG) { CustomRecvDataEventArgs recvEvent = new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID); CSVFileHelper.WriteLogs("log", "博强接收", CSVFileHelper.ToHexStrFromByte(canEvent.listData.ToArray(), false), false);//记录所有接收到的消息 if (canEvent.listData[0] == 0xCC) { switch (canEvent.listData[1]) { case 0xA0: OnRaiseReadBqDeviceInfoEvent(recvEvent); break; case 0xA1: // bms OnRaiseReadUIDEvent(recvEvent); break; case 0xA2: if (m_statusBarInfo.IsOnline == false) //连接成功,更新页面信息 { if (isCompanyMatch == false) { ucBqBmsInfoWnd.IsCompanyMatch(true); return; } else { m_statusBarInfo.IsOnline = true; labTip.Content = "类型:" + ZLGInfo.DevType.ToString() + " 索引号: " + zlgFuc.zlgInfo.DevIndex.ToString() + " 通道号: " + zlgFuc.zlgInfo.DevChannel.ToString() + " 波特率: " + ZLGInfo.Baudrate.ToString(); OnRaiseEepromWndUpdateEvent(null); OnRaiseMcuWndUpdateEvent(null); OnRaiseAdjustWndUpdateEvent(null); OnRaiseDebugWndUpdateEvent(null); OnRaiseBootTestWndUpdateEvent(null); } } OnRaiseReadBqBmsInfoEvent(recvEvent); OnRaiseAdjustEvent(recvEvent); BqProtocol.BqInstance.nHandshakeFailure = 0; m_statusBarInfo.OnlineStatus = "在线"; statusBrush.Color = m_green; break; case 0xA3: OnRaiseReadBqRTCEvent(recvEvent); break; case 0xA4: OnRaiseReadDdRecordEvent(recvEvent); break; case 0xA8: OnRaiseReadMcuEvent(recvEvent); break; case 0xA9: OnRaiseReadVoltageProtectParamEvent(recvEvent); break; case 0xAA: OnRaiseReadCurrentProtectParamEvent(recvEvent); break; case 0xAB: OnRaiseReadTemperatureProtectParamEvent(recvEvent); break; case 0xAC: OnRaiseReadWarningParamEvent(recvEvent); break; case 0xAD: OnRaiseReadHumidityProtectParamEvent(recvEvent); break; case 0xAE: OnRaiseReadAdjustParamEvent(recvEvent); break; case 0xB0: OnRaiseRequireReadEepromEvent(recvEvent); break; case 0xB1: OnRaiseReadEepromEvent(recvEvent); break; case 0xB2: OnRaiseRequireReadOthersEvent(recvEvent); break; case 0xB3: OnRaiseReadOthersEvent(recvEvent); break; case 0xB9: OnRaiseReadBqBootInfoEvent(recvEvent); break; case 0xBA: OnRaiseReadFlashInfoEvent(recvEvent); break; } } else if (canEvent.listData[0] == 0xDD) { switch (canEvent.listData[1]) { case 0xA0: OnRaiseWriteVoltageProtectParamEvent(recvEvent); break; case 0xA1: OnRaiseWriteCurrentProtectParamEvent(recvEvent); break; case 0xA2: OnRaiseWriteTemperatureProtectParamEvent(recvEvent); break; case 0xA3: OnRaiseWriteWarningProtectParamEvent(recvEvent); break; case 0xA4: OnRaiseWriteHumidityProtectParamEvent(recvEvent); break; case 0xA5: OnRaiseWriteEepromEvent(recvEvent); break; case 0xA6: OnRaiseWriteMcuEvent(recvEvent); break; case 0xA7: OnRaiseAdjustRTCEvent(recvEvent); break; case 0xA8: OnRaiseAdjustZeroCurrenEvent(recvEvent); break; case 0xA9: OnRaiseAdjustRTCurrenEvent(recvEvent); break; case 0xAA: OnRaiseAdjustBatteryVoltageEvent(recvEvent); break; case 0xAB: OnRaiseAdjustLoadVoltageEvent(recvEvent); break; case 0xAC: OnRaiseAdjustInnerResistanceEvent(recvEvent); break; case 0xAD: OnRaiseAdjustOutResistanceEvent(recvEvent); break; case 0xB0: OnRaiseWriteBqBMSInfoEvent(recvEvent); break; case 0xB1: OnRaiseWriteBqPackInfoEvent(recvEvent); break; case 0xB8: case 0xB9: case 0xBA: case 0xBB: case 0xBC: case 0xBE: case 0xBF: case 0xC0: case 0xC1: case 0xC3: OnRaiseDebugEvent(recvEvent); break; case 0xBD: OnRaiseEraseRecordEvent(recvEvent); break; default: if (canEvent.listData[0] == 0x10) { if (canEvent.listData[1] == 0xA2) { OnRaisePowerOnOffEvent(null); } } break; } } else if (canEvent.listData[0] == 0x03) { if (canEvent.listData[1] == 0x56) { OnRequireRaiseReadDeviceInfoEvent(recvEvent); } else if (canEvent.listData[1] == 0xDA) { OnRaiseReadDdBmsInfoEvent(recvEvent); } } else if (canEvent.listData[0] == 0x10) { if (canEvent.listData[2] == 0x00 && canEvent.listData[1] == 0xA2)// 上下电 { OnRaisePowerOnOffEvent(null); } else if (canEvent.listData[2] == 0x48 && canEvent.listData[1] == 0xA2) { OnRaiseAdjustDdRTCEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID));// 校准滴滴RTC返回 } else if (canEvent.listData[1] == 0xA2 && canEvent.listData[2] == 0x64) { OnRaiseSettingBatteryStatus(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } } else if (canEvent.listData[0] == 0x45) { if (canEvent.listData[1] == 0x02) { OnRaiseRequestUpdateAppEvent(recvEvent); } else if (canEvent.listData[1] == 0x14) { OnRaiseSendUpdateAppInfoEvent(recvEvent); } else if (canEvent.listData[1] == 0x16) { OnRaiseSendUpdateAppDataEvent(recvEvent); } } } else { CSVFileHelper.WriteLogs("log", "滴滴接收", CSVFileHelper.ToHexStrFromByte(canEvent.listData.ToArray(), false), false);//记录所有接收到的消息 if (canEvent.listData[0] == 0x03) { if (canEvent.listData[1] == 0x02) { //if(DdProtocol.DdInstance.m_bIsStopCommunication) //{ // OnRaiseReadRegisterEvent(new CustomRecvDataEventArgs(canEvent.listData));//读寄存器 //} //else { CustomRecvDataEventArgs recvEvent = new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID); OnRaiseReadDdRecordCountEvent(recvEvent); } } else if (canEvent.listData[1] == 0xDA) { if (DdProtocol.DdInstance.m_bIsStopCommunication) { OnRaiseReadRegisterEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID));//读寄存器 } else { if (m_statusBarInfo.IsOnline == false) { if (isCompanyMatch == false) { ucBqBmsInfoWnd.IsCompanyMatch(false); return; } else { m_statusBarInfo.IsOnline = true; labTip.Content = "类型:" + ZLGInfo.DevType.ToString() + " 索引号: " + zlgFuc.zlgInfo.DevIndex.ToString() + " 通道号: " + zlgFuc.zlgInfo.DevChannel.ToString() + " 波特率: " + ZLGInfo.Baudrate.ToString(); OnRaiseEepromWndUpdateEvent(null); OnRaiseMcuWndUpdateEvent(null); OnRaiseAdjustWndUpdateEvent(null); OnRaiseDebugWndUpdateEvent(null); OnRaiseBootTestWndUpdateEvent(null); } } CustomRecvDataEventArgs recvEvent = new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID); OnRaiseReadDdBmsInfoEvent(recvEvent); OnRaiseAdjustEvent(recvEvent); DdProtocol.DdInstance.nReadSOHFailure = 0; m_statusBarInfo.OnlineStatus = "在线"; statusBrush.Color = m_green; } } else if (canEvent.listData[1] == 0x56)//读设备信息 { if (DdProtocol.DdInstance.m_bIsStopCommunication) { OnRaiseReadRegisterEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID));//读寄存器 } else { CustomRecvDataEventArgs recvEvent = new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID); OnRaiseReadDeviceInfoEvent(recvEvent); } } else if (canEvent.listData[1] == 0x04) // 读RTC数据 { if (DdProtocol.DdInstance.m_bIsStopCommunication) { OnRaiseReadRegisterEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID));//读寄存器 } else { CustomRecvDataEventArgs recvEvent = new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID); OnRaiseReadBqRTCEvent(recvEvent); } } else if (canEvent.listData[1] == 0x48) { CustomRecvDataEventArgs recvEvent = new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID); OnRaiseReadDdRecordEvent(recvEvent); } else if (canEvent.listData[1] == 0x06) { CustomRecvDataEventArgs recvEvent = new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID); OnRaiseReadDdFeedbackInfoEvent(recvEvent); } else// 读寄存器 { OnRaiseReadRegisterEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } } else if (canEvent.listData[0] == 0x10) { if (canEvent.listData[2] == 0x48 && canEvent.listData[1] == 0xA2) { OnRaiseAdjustDdRTCEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); // 校准滴滴RTC返回 } else if (canEvent.listData[2] == 0x00 && canEvent.listData[1] == 0xA2) // 上下电 { OnRaisePowerOnOffEvent(null); } else if (canEvent.listData[1] == 0xA2 && canEvent.listData[2] == 0x68) { OnRaiseSettingBrakeStatus(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else { OnRaiseWriteRegisterEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID));//写寄存器 } } else if (canEvent.listData[0] == 0xDD && canEvent.listData[1] == 0xBD) { CustomRecvDataEventArgs recvEvent = new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID); OnRaiseEraseDdRecordEvent(recvEvent); } else if (canEvent.listData[0] == 0xCC && canEvent.listData[1] == 0xA4) { OnRaiseReadDdRecordEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xD2 || canEvent.listData[0] == 0xD0 || canEvent.listData[0] == 0xD4 || canEvent.listData[0] == 0xD5 || canEvent.listData[0] == 0xDB) { OnRaiseDebugEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xD8) { OnRaiseRequireReadEepromEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xD9) { OnRaiseRequireReadOthersEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xA2) { OnRaiseReadMcuEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xB2) { OnRaiseWriteMcuEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xA3) { OnRaiseReadEepromEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xA4) { OnRaiseReadOthersEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xA8) { OnRaiseReadAdjustParamEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xDA) { OnRaiseReadBqBootInfoEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xCC && canEvent.listData[1] == 0xA1) { OnRaiseReadUIDEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } else if (canEvent.listData[0] == 0xCC && canEvent.listData[1] == 0xA0) { OnRaiseReadBqDeviceInfoEvent(new CustomRecvDataEventArgs(canEvent.listData, canEvent.ID)); } } } })); }
/// <summary> /// 发送单帧信息 /// </summary> /// <param name="ID"></param> /// <param name="canIndex"></param> /// <param name="data"></param> /// <param name="dataLength"></param> public void SingleTransmit(VCI_CAN_OBJ obj) { try { if (ZLGInfo.DevType == (uint)ZLGType.VCI_USBCANFD_100U) { ZLGCAN_API.ZCAN_Transmit_Data can_data = new ZLGCAN_API.ZCAN_Transmit_Data(); obj.ExternFlag = 1; can_data.frame.can_id = MakeCanId(obj.ID, obj.ExternFlag, 0, 0); can_data.frame.data = new byte[8]; Buffer.BlockCopy(obj.Data, 0, can_data.frame.data, 0, obj.DataLen); can_data.frame.can_dlc = (byte)obj.Data.Length; can_data.transmit_type = obj.SendType; IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(can_data)); Marshal.StructureToPtr(can_data, ptr, true); BoqiangH5Repository.CSVFileHelper.WriteLogs("log", "发送", CSVFileHelper.ToHexStrFromByte(can_data.frame.data, false), false); uint res = ZLGCAN_API.ZCAN_Transmit(channel_handle, ptr, 1); Marshal.FreeHGlobal(ptr); if (res == 0) { _dispatcher.BeginInvoke(new Action(delegate() { })); AbortThread(); return; } else { OnRaiseZLGCommunicateEvent(this, new CANEvent() { eventType = CANEventType.SendEvent, //ID = can_data.frame.can_id, DataLen = can_data.frame.data[2], listData = new List <byte>(can_data.frame.data) }); } } else if (ZLGInfo.DevType == (uint)ZLGType.PCAN) { bool isRemote = false; if (obj.RemoteFlag == 0x00) { isRemote = false; } else { isRemote = true; } BoqiangH5Repository.CSVFileHelper.WriteLogs("log", "发送", CSVFileHelper.ToHexStrFromByte(obj.Data, false), false); PCANInterface.PCANInstance.PCAN_WriteData(obj.ID, obj.DataLen, isRemote, obj.Data); } else { //在非托管内存中分配一个VCI_CAN_OBJ结构体大小的内存空间 IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VCI_CAN_OBJ)) * 1); VCI_CAN_OBJ pSend = (VCI_CAN_OBJ)Marshal.PtrToStructure((IntPtr)((UInt32)pt), typeof(VCI_CAN_OBJ)); //IsSendFrame = true; pSend.ID = obj.ID; pSend.SendType = obj.SendType; pSend.RemoteFlag = obj.RemoteFlag; pSend.ExternFlag = obj.ExternFlag; pSend.DataLen = obj.DataLen; string strSendDdata = String.Empty; byte[] temp = obj.Data; for (int j = 0; j < pSend.DataLen; j++) { strSendDdata += String.Format("{0:X2}", temp[j]) + " "; } for (int i = 0; i < obj.DataLen; i++) { pSend.Data[i] = obj.Data[i]; } if (pSend.Data[0] == 0x30 && pSend.Data[1] == 0xff && pSend.Data[3] == 0x00) { } BoqiangH5Repository.CSVFileHelper.WriteLogs("log", "发送", CSVFileHelper.ToHexStrFromByte(pSend.Data, false), false); //返回实际发送成功的帧数 UInt32 res = VCI_Transmit(ZLGInfo.DevType, zlgInfo.DevIndex, zlgInfo.DevChannel, ref pSend, 1); if (res == 0) { _dispatcher.BeginInvoke(new Action(delegate() { })); AbortThread(); return; } else { OnRaiseZLGCommunicateEvent(this, new CANEvent() { eventType = CANEventType.SendEvent, //ID = pSend.ID, DataLen = pSend.DataLen, listData = new List <byte>(pSend.Data) }); } Marshal.FreeHGlobal(pt); } } catch (Exception ex) { } }