示例#1
0
        /// <summary>
        /// 添加待发送数据包
        /// </summary>
        /// <param name="Word">命令字</param>
        /// <param name="Reserve">保留位</param>
        /// <param name="Data">数据</param>
        /// <remarks>连续添加不应超过最多数据包个数(15)</remarks>
        public void AddBlock(byte Word, byte Reserve, byte[] Data)
        {
            if (Data == null || Data.Length != BlockLength - 3)
            {
                throw new Exception("Data Length!=12");
            }
            ZBlock p = new ZBlock();

            p.Word    = Word;
            p.Reserve = Reserve;
            p.Data    = Data;
            SendBlock.InsertObject(p);
        }
示例#2
0
 public void AddPoint(PointF point)
 {
     lock (DataList)
     {
         DataList.InsertObject(point);
     }
     this.Invalidate();
 }
示例#3
0
        //协议解析
        private void AnalyseProtocol()
        {
            //解析帧头
            ZFrame f;

            f.S1         = Buffer.FetchObject();
            f.S2         = Buffer.FetchObject();
            f.Source     = Buffer.FetchObject();
            f.Target     = Buffer.FetchObject();
            f.Reserve    = Buffer.FetchObject();
            f.PackageNum = Buffer.FetchObject();
            //插入帧头数据
            ReceiveFrame.InsertObject(f);
            _ReceiveFrameNum++;
            //引发事件
            if (OnReceviceFrame != null)
            {
                OnReceviceFrame();
            }

            //循环读取数据包
            for (int i = 0; i < f.PackageNum; i++)
            {
                //校验和
                byte sum = 0;
                for (int j = 0; j < BlockLength - 1; j++)
                {
                    sum += Buffer[j];
                }
                if (sum == Buffer[BlockLength - 1])
                {
                    ZBlock p;
                    p.Data    = new byte[12];
                    p.Word    = Buffer.FetchObject();
                    p.Reserve = Buffer.FetchObject();
                    for (int j = 0; j < BlockLength - 3; j++)
                    {
                        p.Data[j] = Buffer.FetchObject();
                    }
                    p.CheckSum = Buffer.FetchObject();
                    ReceiveBlock.InsertObject(p);
                    _ReceiveBlockNum++;
                }
                else
                {
                    for (int j = 0; j < BlockLength; j++)
                    {
                        Buffer.FetchObject();
                    }
                    _ErrorBlockNum++;
                }
            }
            //引发事件
            if (ReceiveBlock.Amount > 0 && OnReceviceBlock != null)
            {
                OnReceviceBlock();
            }
        }
示例#4
0
 //接收数据
 void SerialObject_OnReceviceByte()
 {
     while (SerialObject != null && SerialObject.BufferByteNum > 0)
     {
         Buffer.InsertObject(SerialObject.ReadByte());
         while (Buffer.Amount > 0)
         {
             if (Buffer[0] != S1)
             {
                 Buffer.FetchObject();
                 _LostByteNum++;
             }
             else
             {
                 break;
             }
         }
         if (CheckFrame())
         {
             AnalyseProtocol();
         }
     }
 }
        /// <summary>
        /// 向示波器控件添加数据
        /// </summary>
        /// <param name="data">待添加数据</param>
        public void AddData(float data)
        {
            //插入数据
            _Datas.InsertObject(data);
            //检测模式,校验数据,计算极值
            switch (_FillMode)
            {
            case FillModeEnum.All:
                high = ComputHigh(_Datas);
                low  = ComputLow(_Datas);
                break;

            case FillModeEnum.AboveZero:
                if (data < 0)
                {
                    throw new ArgumentException("Data must above zero in AboveZero mode");
                }
                high = ComputHigh(_Datas);
                break;

            case FillModeEnum.Limit:
                if ((data < _Low) || (data > _High))
                {
                    throw new ArgumentException("Data must in the limit zone in Limit mode");
                }
                break;
            }
            //递增网格绘制位置
            GridPosi += _Interval;
            //当达到临界值则返回0
            if (GridPosi >= _GridR)
            {
                GridPosi -= _GridR;
            }
            //重绘
            this.Invalidate();
        }