Esempio n. 1
0
        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));
                        }
                    }
                }
            }));
        }
Esempio n. 2
0
        /// <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)
            {
            }
        }