Exemple #1
0
        /// <summary>
        /// 找到包头标志后,对数据进行处理
        /// </summary>
        /// <param name="nAlreadyRecCount">接收的数据长度</param>
        /// <param name="nDataPointer">第几个字节开始为包头位置</param>
        private void FindPackHead(int nAlreadyRecCount, int nDataPointer)
        {
            // 找到一个数据报头信息
            // 网络包长度小于包头时不是一个完整的包
            if (nAlreadyRecCount - nDataPointer < PacketHeadSize)
            {
                return;
            }

            PackHead m_PackHead = new PackHead();

            SetPackHead(nDataPointer, ref m_PackHead);

            // 判断获得的数据除去表头 是否大于数据长度
            if (nAlreadyRecCount - nDataPointer - PacketHeadSize < m_PackHead.DataLength)
            {
                return;
            }

            //完整的包数据
            byte[] m_ComData = new byte[PacketHeadSize + m_PackHead.DataLength];
            Array.Copy(m_TmpData, nDataPointer, m_ComData, 0, PacketHeadSize + m_PackHead.DataLength);

            PackData pd = new PackData();

            pd.m_Index    = m_lstPackData.Count;
            pd.m_Head     = m_PackHead;
            pd.m_ByteData = m_ComData.ToList();

            lock (m_lock)
            {
                nNetPos += PacketHeadSize + pd.m_Head.DataLength;
                m_lstPackData.Add(pd);
            }
        }
Exemple #2
0
        /// <summary>
        /// 处理完整包数据
        /// </summary>
        public void DealComData()
        {
            string        txtres = "";
            string        res    = "";
            List <String> value  = new List <string>();

            for (int i = 0; i < m_lstPackData.Count; i++)
            {
                PackData pd = m_lstPackData[i];
                switch (m_lstPackData[i].m_Head.DataCommand)
                {
                case 128:
                    res = DealCmd.DealGetSignal(pd);
                    if (res != string.Empty)
                    {
                        channelNum = GetChannel(res);
                    }
                    //txtSignalInfo += "Commond 128  信号类型:" + pd.m_SignalType + ";内容:" + res + Environment.NewLine;
                    break;

                case 123:
                    res     = DealCmd.DealTransferDataSignal(pd);
                    txtres += "Commond 123  信号类型:" + pd.m_SignalType + ";信号名称:" + res + Environment.NewLine;
                    break;

                case 124:
                    res = DealCmd.DealSerialData(pd);
                    string[] sArray = res.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

                    int j = 0;
                    foreach (var p in channelNum)
                    {
                        ChannelData channeldata = new ChannelData()
                        {
                            channel = p,
                            data    = sArray[j]
                        };
                        channelList.Add(channeldata);
                        j++;
                    }
                    break;

                case 125:
                    res     = DealCmd.DealStatData(pd);
                    txtres += "Commond 125Stat  信号数:" + pd.m_SignalCount + ";数据:" + res + Environment.NewLine;
                    break;

                case 126:
                    res     = DealCmd.DealBlockData(pd);
                    txtres += "Commond 126Block  信号字符串长度:" + pd.m_SignalNameLength + ";信号名:" + pd.m_SignalName
                              + ";一个数据中包含几个float:" + pd.m_YCount + ";数据量:" + pd.m_DataCount + ";数据:" + res + Environment.NewLine;
                    break;
                }
            }
            m_lstPackData.Clear();
            if (channelList != null)
            {
                HandleGetData(channelList);
            }
        }
Exemple #3
0
        /// <summary>
        /// 处理 Cmd 123   启动采样前,发送数据的信号信息
        /// </summary>
        /// <param name="pd"></param>
        /// <returns></returns>
        public static string DealTransferDataSignal(PackData pd)
        {
            List <byte> lstByte = pd.m_ByteData;

            byte[] tmpByte = new byte[4];
            byte[] tmpdata;
            tmpByte[0]      = lstByte[12];
            tmpByte[1]      = lstByte[13];
            tmpByte[2]      = lstByte[14];
            tmpByte[3]      = lstByte[15];
            pd.m_SignalType = BitConverter.ToInt32(tmpByte, 0);

            tmpdata = new byte[lstByte.Count - 16];
            for (int m = 0; m < lstByte.Count - 16; m++)
            {
                tmpdata[m] = lstByte[m + 16];
            }
            string res = System.Text.Encoding.Default.GetString(tmpdata);

            return(res);
        }
Exemple #4
0
        /// <summary>
        /// 处理 Cmd 126 // 块数据
        /// </summary>
        /// <param name="pd"></param>
        /// <returns></returns>
        public static string DealBlockData(PackData pd)
        {
            //信号字符串长度 + 信号名 + 一个数据中包含几个float(1个Y或2个Y) + 数据量 + X数据 + Y
            List <byte> lstByte = pd.m_ByteData;

            byte[] tmpByte = new byte[4];
            byte[] tmpdata;

            //信号字符串长度
            tmpByte               = new byte[4];
            tmpByte[0]            = lstByte[12];
            tmpByte[1]            = lstByte[13];
            tmpByte[2]            = lstByte[14];
            tmpByte[3]            = lstByte[15];
            pd.m_SignalNameLength = BitConverter.ToInt32(tmpByte, 0);

            //信号名
            tmpByte = new byte[pd.m_SignalNameLength];
            for (int i = 0; i < pd.m_SignalNameLength; i++)
            {
                tmpByte[i] = lstByte[16 + i];
            }
            pd.m_SignalName = System.Text.Encoding.Default.GetString(tmpByte);

            //一个数据中包含几个float
            tmpByte     = new byte[4];
            tmpByte[0]  = lstByte[16 + pd.m_SignalNameLength];
            tmpByte[1]  = lstByte[17 + pd.m_SignalNameLength];
            tmpByte[2]  = lstByte[18 + pd.m_SignalNameLength];
            tmpByte[3]  = lstByte[19 + pd.m_SignalNameLength];
            pd.m_YCount = BitConverter.ToInt32(tmpByte, 0);

            //数据量
            tmpByte        = new byte[4];
            tmpByte[0]     = lstByte[20 + pd.m_SignalNameLength];
            tmpByte[1]     = lstByte[21 + pd.m_SignalNameLength];
            tmpByte[2]     = lstByte[22 + pd.m_SignalNameLength];
            tmpByte[3]     = lstByte[23 + pd.m_SignalNameLength];
            pd.m_DataCount = BitConverter.ToInt32(tmpByte, 0);

            tmpdata = new byte[lstByte.Count - 24 - pd.m_SignalNameLength];
            for (int m = 0; m < lstByte.Count - 24 - pd.m_SignalNameLength; m++)
            {
                tmpdata[m] = lstByte[m + 24 + pd.m_SignalNameLength];
            }

            tmpByte = new byte[4];
            BlockData bd = new BlockData();;

            for (int m = 0; m < tmpdata.Length; m++)
            {
                tmpByte[m % 4] = tmpdata[m];
                if (m % 4 == 3)
                {
                    if (pd.m_YCount == 2)
                    {
                        if (m % 8 == 3)
                        {
                            bd        = new BlockData();
                            bd.m_Time = BitConverter.ToSingle(tmpByte, 0);
                        }
                        else if (m % 8 == 7)
                        {
                            bd.m_Data1 = BitConverter.ToSingle(tmpByte, 0);
                            pd.m_lstBlockSignalData.Add(bd);
                        }
                    }
                    else if (pd.m_YCount == 3)
                    {
                        if (m % 12 == 3)
                        {
                            bd        = new BlockData();
                            bd.m_Time = BitConverter.ToSingle(tmpByte, 0);
                        }
                        else if (m % 12 == 7)
                        {
                            bd.m_Data1 = BitConverter.ToSingle(tmpByte, 0);
                        }
                        else if (m % 12 == 11)
                        {
                            bd.m_Data2 = BitConverter.ToSingle(tmpByte, 0);
                            pd.m_lstBlockSignalData.Add(bd);
                        }
                    }
                }
            }
            string txtSignalData = "";

            for (int i = 0; i < pd.m_lstBlockSignalData.Count; i++)
            {
                txtSignalData += pd.m_lstBlockSignalData[i].m_Time + "," + pd.m_lstBlockSignalData[i].m_Data1;
                if (pd.m_YCount == 3)
                {
                    txtSignalData += "," + pd.m_lstBlockSignalData[i].m_Data2;
                }
            }
            return(txtSignalData);
        }
Exemple #5
0
        /// <summary>
        /// 处理 Cmd 125 // 统计数据
        /// </summary>
        /// <param name="pd"></param>
        /// <returns></returns>
        public static string DealStatData(PackData pd)
        {
            //ChnCount + float * 2 * ChnCount
            List <byte> lstByte = pd.m_ByteData;

            byte[] tmpByte = new byte[4];
            byte[] tmpdata;

            //通道数
            tmpByte          = new byte[4];
            tmpByte[0]       = lstByte[12];
            tmpByte[1]       = lstByte[13];
            tmpByte[2]       = lstByte[14];
            tmpByte[3]       = lstByte[15];
            pd.m_SignalCount = BitConverter.ToInt32(tmpByte, 0);

            int m_SignalInfoLength = lstByte.Count - 16 - pd.m_SignalCount * 2 * sizeof(float);

            tmpdata = new byte[lstByte.Count - 16 - m_SignalInfoLength];
            for (int m = 0; m < lstByte.Count - 16 - m_SignalInfoLength; m++)
            {
                tmpdata[m] = lstByte[m + 16];
            }
            tmpByte = new byte[4];
            StatData sd = new StatData();;

            for (int m = 0; m < tmpdata.Length; m++)
            {
                tmpByte[m % 4] = tmpdata[m];
                if (m % 4 == 3)
                {
                    if (m % 8 == 3)
                    {
                        sd        = new StatData();
                        sd.m_Time = BitConverter.ToSingle(tmpByte, 0);
                    }
                    else if (m % 8 == 7)
                    {
                        sd.m_Data = BitConverter.ToSingle(tmpByte, 0);
                        pd.m_lstStatSignalData.Add(sd);
                    }
                }
            }

            //信号信息
            if (m_SignalInfoLength > 0)
            {
                //信号信息长度
                tmpByte               = new byte[4];
                tmpByte[0]            = lstByte[16 + pd.m_SignalCount * 2 * sizeof(int)];
                tmpByte[1]            = lstByte[17 + pd.m_SignalCount * 2 * sizeof(int)];
                tmpByte[2]            = lstByte[18 + pd.m_SignalCount * 2 * sizeof(int)];
                tmpByte[3]            = lstByte[19 + pd.m_SignalCount * 2 * sizeof(int)];
                pd.m_SignalInfoLength = BitConverter.ToInt32(tmpByte, 0);

                tmpByte = new byte[pd.m_SignalInfoLength];
                for (int m = 0; m < pd.m_SignalInfoLength; m++)
                {
                    tmpByte[m] = lstByte[m + 16 + pd.m_SignalCount * 2 * sizeof(float) + 4];
                }
                pd.m_SignalInfo = System.Text.Encoding.Default.GetString(tmpByte);
            }

            string txtSignalData = pd.m_SignalInfo;

            for (int i = 0; i < pd.m_lstStatSignalData.Count; i++)
            {
                txtSignalData += Environment.NewLine;
                txtSignalData += pd.m_lstStatSignalData[i].m_Time + "," + pd.m_lstStatSignalData[i].m_Data + ";";
            }
            txtSignalData += Environment.NewLine;
            return(txtSignalData);
        }
Exemple #6
0
        /// <summary>
        /// 处理 Cmd 124 //时间序列数据
        /// </summary>
        /// <param name="pd"></param>
        /// <returns></returns>
        public static string DealSerialData(PackData pd)
        {
            List <byte> lstByte = pd.m_ByteData;

            byte[] tmpByte = new byte[4];
            byte[] tmpdata;
            //LONGLONG位置
            tmpByte       = new byte[8];
            tmpByte[0]    = lstByte[12];
            tmpByte[1]    = lstByte[13];
            tmpByte[2]    = lstByte[14];
            tmpByte[3]    = lstByte[15];
            tmpByte[4]    = lstByte[16];
            tmpByte[5]    = lstByte[17];
            tmpByte[6]    = lstByte[18];
            tmpByte[7]    = lstByte[19];
            pd.m_Position = BitConverter.ToInt32(tmpByte, 0);

            //数据量
            tmpByte        = new byte[4];
            tmpByte[0]     = lstByte[20];
            tmpByte[1]     = lstByte[21];
            tmpByte[2]     = lstByte[22];
            tmpByte[3]     = lstByte[23];
            pd.m_DataCount = BitConverter.ToInt32(tmpByte, 0);

            //通道数
            tmpByte          = new byte[4];
            tmpByte[0]       = lstByte[24];
            tmpByte[1]       = lstByte[25];
            tmpByte[2]       = lstByte[26];
            tmpByte[3]       = lstByte[27];
            pd.m_SignalCount = BitConverter.ToInt32(tmpByte, 0);

            // 所有byte长度去除 (LONGLONG位置+数据量+通道数的数据) 再去除数据长度 剩下即为信号信息长度
            int m_SignalInfoLength = lstByte.Count - 28 - pd.m_DataCount * pd.m_SignalCount * 4;

            tmpdata = new byte[lstByte.Count - 28 - m_SignalInfoLength];
            for (int m = 0; m < lstByte.Count - 28 - m_SignalInfoLength; m++)
            {
                tmpdata[m] = lstByte[m + 28];
            }
            tmpByte = new byte[4];
            for (int m = 0; m < tmpdata.Length; m++)
            {
                tmpByte[m % 4] = tmpdata[m];
                if (m % 4 == 3)
                {
                    float data = BitConverter.ToSingle(tmpByte, 0);
                    pd.m_lstSerialSignalData.Add(data);
                }
            }

            //信号信息
            if (m_SignalInfoLength > 0)
            {
                //信号信息长度
                tmpByte               = new byte[4];
                tmpByte[0]            = lstByte[28 + pd.m_DataCount * pd.m_SignalCount * sizeof(int)];
                tmpByte[1]            = lstByte[29 + pd.m_DataCount * pd.m_SignalCount * sizeof(int)];
                tmpByte[2]            = lstByte[30 + pd.m_DataCount * pd.m_SignalCount * sizeof(int)];
                tmpByte[3]            = lstByte[31 + pd.m_DataCount * pd.m_SignalCount * sizeof(int)];
                pd.m_SignalInfoLength = BitConverter.ToInt32(tmpByte, 0);

                tmpByte = new byte[pd.m_SignalInfoLength];
                for (int m = 0; m < pd.m_SignalInfoLength; m++)
                {
                    tmpByte[m] = lstByte[m + 28 + pd.m_DataCount * pd.m_SignalCount * sizeof(float) + 4];
                }
                pd.m_SignalInfo = System.Text.Encoding.Default.GetString(tmpByte);
            }

            //现在 pd.m_lstSignalData中的数据按照(通道1,通道2……通道n|通道1,通道2……通道n|...)如此排列
            //现修改为 (通道1数据,通道2数据……通道n数据)
            string txtSignalData = pd.m_SignalInfo;

            for (int n = 0; n < pd.m_SignalCount; n++)
            {
                txtSignalData += Environment.NewLine;
                for (int m = 0; m < pd.m_DataCount; m++)
                {
                    txtSignalData += pd.m_lstSerialSignalData[m * pd.m_SignalCount + n] + " ";
                }
            }
            txtSignalData += Environment.NewLine;
            return(txtSignalData);
        }