Esempio n. 1
0
        /// <summary>
        /// 读取数据
        /// </summary>
        /// <param name="e"></param>
        void dataCommunication_DataRecieved(DataRecievedArgs e)
        {
            var buffer = e.Buffer.GetBytes(0xFA, 9);

            while (buffer != null)
            {
                ResponsePackage responsePackage = null;
                //判断数据类型
                int dataType = buffer[1];
                switch (dataType)
                {
                    case ResponseCodes.BendStretchData:
                        responsePackage = GetBendStretchData(buffer, 2);
                        break;
                    case ResponseCodes.RotationData:
                        responsePackage = GetRotationData(buffer, 2);
                        break;
                    case ResponseCodes.OtherData:
                        responsePackage = GetOtherData(buffer, 2);
                        break;
                    case ResponseCodes.Alarm:
                        responsePackage = GetAlarm(buffer, 2);
                        break;
                    case ResponseCodes.Version:
                        responsePackage = GetVersion(buffer, 2);
                        break;
                }

                if (responsePackage != null)
                {
                    if (DataPackRecieved != null)
                    {
                        DataPackReceivedEventArgs args = new DataPackReceivedEventArgs();
                        args.ResponsePackageData = responsePackage;

                        myThreadPool.QueueUserWorkItem((x) => { DataPackRecieved(args); }, null);

                    }
                }

                buffer = e.Buffer.GetBytes(0xFA, 9);
            }
        }
        /// <summary>
        /// 接收数据
        /// </summary>
        private void Recieve()
        {
            uint len = 0;
            VCI_ERR_INFO errinfo = new VCI_ERR_INFO();
            VCI_CAN_OBJ[] frameinfos = new VCI_CAN_OBJ[1];
            while (isOpen)
            {
                try
                {
                    do
                    {
                        len = VCI_Receive(DEVICETYPE, DeviceInd, CNDInd, ref frameinfos[0], 1, 0);
                        if (len <= 0)
                        {
                            VCI_ReadErrInfo(DEVICETYPE, DeviceInd, CNDInd, ref errinfo);
                        }
                        else
                        {
                            foreach (var frameinfo in frameinfos)
                            {
                                if (frameinfo.DataLen > 0 && frameinfo.Data != null)
                                {
                                    if (frameinfo.Data.Length < frameinfo.DataLen)
                                    {
                                        WriteLog("数据格式不正确!");
                                    }

                                    buffer.Add(0xFA);//加数据包头
                                    //buffer.Add(0xe1);
                                    //buffer.Add(0x08);
                                    //buffer.Add(0);
                                    //buffer.Add(0);

                                    for (int i = 1; i < frameinfo.DataLen + 1; i++)
                                    {
                                        buffer.Add(frameinfo.Data[i - 1]);
                                    }
                                    DataRecievedArgs args = new DataRecievedArgs();

                                    args.Buffer = buffer;

                                    //System.Diagnostics.Debug.WriteLine(frameinfo.Data[7]);
                                    //args.Buffer1 = new byte[frameinfo.DataLen];
                                    ////args.Buffer[0] = 0xe1;
                                    ////args.Buffer[1] = 0x08;
                                    ////args.Buffer[2] = 0;
                                    ////args.Buffer[3] = 0;
                                    //for (int i = 0; i < frameinfo.DataLen; i++)
                                    //{
                                    //    args.Buffer1[i] = frameinfo.Data[i];
                                    //}

                                    if (DataReceived != null) DataReceived(args);
                                }
                            }
                        }
                    }
                    while (len <= 0);
                }
                catch { }
                //System.Diagnostics.Debug.WriteLine("end:" + DateTime.Now.Millisecond);
                //VCI_ClearBuffer(VCI_USBCAN1, DeviceInd, CNDInd);
                Thread.Sleep(1);
            }
        }