Ejemplo n.º 1
0
        private void DealWithSERFun()
        {
            while (RecvTag)
            {
                bool Tag1 = false;
                bool Tag2 = false;
                bool Tag3 = false;
                bool Tag4 = false;

                lock (Data.SERList01)
                {
                    if (Data.SERList01.Count >= 11)
                    {
                        byte[] ret = Data.SERList01.Skip(5).Take(4).ToArray();

                        int weight = ret[0] * 256 + ret[1];
                        if (Data.SERList01[0] == 0x04 && Data.SERList01[1] == 0x00 && Data.SERList01[2] == 0x01)
                        {
                            Data.SER1_speed_value = weight;
                        }
                        else
                        {
                            MyLog.Error("SERList01 串口数据偏移了!");
                        }
                        Data.SERList01.RemoveRange(0, 11);
                        Tag1 = true;
                    }
                    else
                    {
                        Tag1 = false;
                    }
                }

                lock (Data.SERList02)
                {
                    if (Data.SERList02.Count >= 9)
                    {
                        byte[] ret  = Data.SERList02.Skip(3).Take(4).ToArray();
                        float  temp = BitConverter.ToSingle(ret, 0);

                        if (Data.SERList02[1] == 0x31)
                        {
                            Data.SER2_speed_value = temp;
                        }
                        else if (Data.SERList02[1] == 0x30)
                        {
                            Data.SER2_niuju_value = temp;
                        }
                        else
                        {
                            MyLog.Error("SERList02 串口数据偏移了!");
                        }


                        Data.SERList02.RemoveRange(0, 9);
                        Tag2 = true;
                    }
                    else
                    {
                        Tag2 = false;
                    }
                }

                lock (Data.SERList03)
                {
                    if (Data.SERList03.Count >= 9)
                    {
                        byte[] ret  = Data.SERList03.Skip(3).Take(4).ToArray();
                        float  temp = BitConverter.ToSingle(ret, 0);

                        if (Data.SERList03[1] == 0x31)
                        {
                            Data.SER3_speed_value = temp;
                        }
                        else if (Data.SERList03[1] == 0x30)
                        {
                            Data.SER3_niuju_value = temp;
                        }
                        else
                        {
                            MyLog.Error("SERList03 串口数据偏移了!");
                        }

                        Data.SERList03.RemoveRange(0, 9);
                        Tag3 = true;
                    }
                    else
                    {
                        Tag3 = false;
                    }
                }

                lock (Data.SERList04)
                {
                    if (Data.SERList04.Count >= 100)
                    {
                        byte ret = Data.SERList04[0];

                        Data.SERList04.RemoveRange(0, 100);
                        Tag4 = true;
                    }
                    else
                    {
                        Tag4 = false;
                    }
                }

                if (Tag1 == false && Tag2 == false && Tag3 == false && Tag4 == false)
                {
                    Thread.Sleep(100);
                }
            }
        }
Ejemplo n.º 2
0
        private void RecvAllUSB()
        {
            CyUSBDevice MyDevice01 = USB.MyDeviceList[Data.OnlyId];

            startDT = DateTime.Now;
            DateTime midDT = startDT;

            RecvdMB         = 0;
            TempStoreBufTag = 0;
            while (RecvTag)
            {
                if (MyDevice01.BulkInEndPt != null)
                {
                    byte[] buf    = new byte[4096];
                    int    buflen = 4096;

                    lock (MyDevice01)
                        MyDevice01.BulkInEndPt.XferData(ref buf, ref buflen);

                    if (buflen > 0)
                    {
                        Trace.WriteLine("收到数据包长度为:" + buflen.ToString());
                        //    lock (TempStoreBuf)
                        Array.Copy(buf, 0, TempStoreBuf, TempStoreBufTag, buflen);
                        TempStoreBufTag += buflen;

                        byte[] Svbuf = new byte[buflen];
                        Array.Copy(buf, Svbuf, buflen);

                        SaveFile.Lock_1.EnterWriteLock();
                        SaveFile.DataQueue_SC1.Enqueue(Svbuf);
                        SaveFile.Lock_1.ExitWriteLock();

                        while (TempStoreBufTag >= 4096)
                        {
                            if (TempStoreBuf[0] == 0xff && (0x0 <= TempStoreBuf[1]) && (TempStoreBuf[1] < 0x11))
                            {
                                DealWithLongFrame(ref TempStoreBuf, ref TempStoreBufTag);
                            }
                            else
                            {
                                MyLog.Error("收到异常帧!");
                                Trace.WriteLine("收到异常帧" + TempStoreBufTag.ToString());
                                //       lock(TempStoreBuf)
                                Array.Clear(TempStoreBuf, 0, TempStoreBufTag);
                                TempStoreBufTag = 0;
                            }
                        }
                    }
                    else if (buflen == 0)
                    {
                        //   Trace.WriteLine("数传422机箱 收到0包-----0000000000");
                    }
                    else
                    {
                        Trace.WriteLine("收到buflen <0");
                    }

                    endDT = DateTime.Now;
                    double tempTime = endDT.Subtract(midDT).TotalSeconds;
                    if (tempTime > 2)
                    {
                        midDT = endDT;
                        double tempMB = Recv4KCounts / 256;
                        Recv4KCounts = 0;
                        //myMonitor.textBox_speed.BeginInvoke(new Action(() =>
                        //{
                        //    double speed = tempMB / tempTime;
                        //    myMonitor.textBox_speed.Text = speed.ToString();
                        //    myMonitor.progressBar1.Value = (int)speed;
                        //}));
                    }
                }
            }
            endDT = DateTime.Now;

            //myMonitor.textBox_time.BeginInvoke(
            //    new Action(() =>
            //    {
            //        double costTime = endDT.Subtract(startDT).TotalSeconds;
            //        double RecvdM = RecvdMB / 1024;
            //        myMonitor.textBox_time.Text = costTime.ToString();
            //        myMonitor.textBox_recvsize.Text = RecvdM.ToString();
            //        myMonitor.textBox_avspeed.Text = (RecvdM / costTime).ToString();
            //    }));
        }
Ejemplo n.º 3
0
        void DealWithLongFrame(ref byte[] TempBuf, ref int TempTag)
        {
            ThisCount = TempStoreBuf[2] * 256 + TempStoreBuf[3];
            if (LastCount != 0 && ThisCount != 0 && (ThisCount - LastCount != 1))
            {
                MyLog.Error("出现漏帧情况!!");
                Trace.WriteLine("出现漏帧情况:" + LastCount.ToString("x4") + "--" + ThisCount.ToString("x4"));
            }
            LastCount = ThisCount;

            byte[] buf_LongFrame = new byte[4096];
            Array.Copy(TempStoreBuf, 0, buf_LongFrame, 0, 4096);

            Array.Copy(TempStoreBuf, 4096, TempStoreBuf, 0, TempStoreBufTag - 4096);
            TempStoreBufTag -= 4096;

            RecvdMB      += 4;
            Recv4KCounts += 1;

            if (buf_LongFrame[0] == 0xff && buf_LongFrame[1] == 0x08)
            {
                //FF08为短帧通道
                byte[] bufsav = new byte[4092];
                Array.Copy(buf_LongFrame, 4, bufsav, 0, 4092);

                //SaveFile.Lock_2.EnterWriteLock();
                //SaveFile.DataQueue_SC2.Enqueue(bufsav);
                //SaveFile.Lock_2.ExitWriteLock();

                for (int i = 0; i < 6; i++)
                {
                    if (bufsav[i * 682 + 0] == 0x1D && bufsav[i * 682 + 1] == 0x00)       //保留
                    {
                        int    num     = bufsav[i * 682 + 2] * 256 + bufsav[i * 682 + 3]; //有效位
                        byte[] buf1D0x = new byte[num];
                        Array.Copy(bufsav, i * 682 + 4, buf1D0x, 0, num);

                        //SaveFile.Lock_3.EnterWriteLock();
                        //SaveFile.DataQueue_SC3.Enqueue(buf1D0x);
                        //SaveFile.Lock_3.ExitWriteLock();

                        //    string temp = null;
                        //    for (int j = 0; j < num; j++) temp += buf1D0x[j].ToString("x2");
                    }
                    else if (bufsav[i * 682 + 0] == 0x1D && bufsav[i * 682 + 1] == 0x01)  //对应第1个圆盘
                    {
                        int    num     = bufsav[i * 682 + 2] * 256 + bufsav[i * 682 + 3]; //有效位
                        byte[] buf1D0x = new byte[num];
                        Array.Copy(bufsav, i * 682 + 4, buf1D0x, 0, num);

                        //SaveFile.Lock_4.EnterWriteLock();
                        //SaveFile.DataQueue_SC4.Enqueue(buf1D0x);
                        //SaveFile.Lock_4.ExitWriteLock();

                        lock (Data.SERList01)
                        {
                            Data.SERList01.AddRange(buf1D0x);
                        }
                    }
                    else if (bufsav[i * 682 + 0] == 0x1D && bufsav[i * 682 + 1] == 0x02)  //对应第2个圆盘
                    {
                        int    num     = bufsav[i * 682 + 2] * 256 + bufsav[i * 682 + 3]; //有效位
                        byte[] buf1D0x = new byte[num];
                        Array.Copy(bufsav, i * 682 + 4, buf1D0x, 0, num);

                        //SaveFile.Lock_5.EnterWriteLock();
                        //SaveFile.DataQueue_SC5.Enqueue(buf1D0x);
                        //SaveFile.Lock_5.ExitWriteLock();

                        lock (Data.SERList02)
                        {
                            Data.SERList02.AddRange(buf1D0x);
                        }
                    }
                    else if (bufsav[i * 682 + 0] == 0x1D && bufsav[i * 682 + 1] == 0x03)  //对应第3个圆盘
                    {
                        int    num     = bufsav[i * 682 + 2] * 256 + bufsav[i * 682 + 3]; //有效位
                        byte[] buf1D0x = new byte[num];
                        Array.Copy(bufsav, i * 682 + 4, buf1D0x, 0, num);

                        //SaveFile.Lock_6.EnterWriteLock();
                        //SaveFile.DataQueue_SC6.Enqueue(buf1D0x);
                        //SaveFile.Lock_6.ExitWriteLock();

                        lock (Data.SERList03)
                        {
                            Data.SERList03.AddRange(buf1D0x);
                        }
                    }
                    else if (bufsav[i * 682 + 0] == 0x1D && bufsav[i * 682 + 1] == 0x0C)  //报警参数
                    {
                        int    num     = bufsav[i * 682 + 2] * 256 + bufsav[i * 682 + 3]; //有效位
                        byte[] buf1D0x = new byte[num];
                        Array.Copy(bufsav, i * 682 + 4, buf1D0x, 0, num);

                        //SaveFile.Lock_6.EnterWriteLock();
                        //SaveFile.DataQueue_SC6.Enqueue(buf1D0x);
                        //SaveFile.Lock_6.ExitWriteLock();


                        lock (Data.SERList04)
                        {
                            Data.SERList04.AddRange(buf1D0x);
                        }


                        //myMonitor.textBox_speed.BeginInvoke(new Action(() =>
                        //{
                        //    double speed = tempMB / tempTime;
                        //    myMonitor.textBox_speed.Text = speed.ToString();
                        //    myMonitor.progressBar1.Value = (int)speed;
                        //}));
                    }
                    else if (bufsav[i * 682 + 0] == 0x1D && bufsav[i * 682 + 1] == 0x0D)
                    {
                        int    num     = bufsav[i * 682 + 2] * 256 + bufsav[i * 682 + 3];//有效位
                        byte[] buf1D0x = new byte[num];
                        Array.Copy(bufsav, i * 682 + 4, buf1D0x, 0, num);

                        //SaveFile.Lock_7.EnterWriteLock();
                        //SaveFile.DataQueue_SC7.Enqueue(buf1D0x);
                        //SaveFile.Lock_7.ExitWriteLock();

                        lock (Data.ADList01)
                        {
                            Data.ADList01.AddRange(buf1D0x);
                            //for (int j = 0; j < num; j++)
                            //    Data.ADList01.Add(buf1D0x[j]);
                        }
                    }
                    else if (bufsav[i * 682 + 0] == 0x1D && bufsav[i * 682 + 1] == 0x0E)
                    {
                        int    num     = bufsav[i * 682 + 2] * 256 + bufsav[i * 682 + 3];//有效位
                        byte[] buf1D0x = new byte[num];
                        Array.Copy(bufsav, i * 682 + 4, buf1D0x, 0, num);

                        //SaveFile.Lock_8.EnterWriteLock();
                        //SaveFile.DataQueue_SC8.Enqueue(buf1D0x);
                        //SaveFile.Lock_8.ExitWriteLock();

                        lock (Data.ADList02)
                        {
                            Data.ADList02.AddRange(buf1D0x);
                            //for (int j = 0; j < num; j++)
                            //    Data.ADList02.Add(buf1D0x[j]);
                        }
                    }
                    else if (bufsav[i * 682 + 0] == 0x1D && bufsav[i * 682 + 1] == 0x0f)
                    {
                        //空闲帧
                    }
                    else
                    {
                        Trace.WriteLine("FF08通道出错!");
                    }
                }
            }
        }
Ejemplo n.º 4
0
        private void WriteToFileSC(int key, object file, ref Queue <byte[]> myQueue, ref ReaderWriterLockSlim myLock)
        {
            Trace.WriteLine("Start WriteToFileSC Thread:" + key.ToString());
            FileStream   myfile = (FileStream)file;
            BinaryWriter bw     = new BinaryWriter(myfile);

            //     FileInfo fileInfo;

            while (SaveOn)
            {
                if (myQueue.Count() > 0)
                {
                    try
                    {
                        myLock.EnterReadLock();
                        bw.Write(myQueue.Dequeue());
                        bw.Flush();
                        myLock.ExitReadLock();

                        #region 分割文件,防止文件过大
                        long FileSizeMB = myfile.Length / (1024 * 1024 * 1024);
                        if (FileSizeMB > 1)
                        {
                            myFileList_dat[key].Flush();

                            string Path2 = myFileList_dat[key].Name;
                            int    count = Path2.LastIndexOf("\\");
                            Path2 = Path2.Substring(0, count + 1);

                            myFileList_dat[key].Close();

                            FileStream newFile;
                            string     timestr  = string.Format("{0}-{1:D2}-{2:D2} {3:D2}:{4:D2}:{5:D2}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
                            string     filename = Path2 + timestr + ".dat";
                            newFile = new FileStream(filename, FileMode.Create);

                            myFileList_dat.Remove(myFileList_dat[key]);
                            myFileList_dat.Insert(key, newFile);

                            break;
                            //break跳出循环会执行新线程
                        }
                        #endregion
                    }
                    catch (Exception e)
                    {
                        bw.Close();
                        Trace.WriteLine(myQueue.Count());
                        MyLog.Error(e.Message);
                        break;
                    }
                }
                else
                {
                    Thread.Sleep(200);
                    //                  Trace.WriteLine("Queue0 is empty!!");
                }
            }
            bw.Close();
            Trace.WriteLine("Leaving WriteToFileSC:" + key.ToString());

            if (SaveOn)
            {
                WriteToFileSC(key, myFileList_dat[key], ref myQueue, ref myLock);
            }
        }