public IList <OpcItem> Get()
        {
            var result = new List <OpcItem>();
            var device = DeviceData.GetDeviveData();

            try
            {
                device.Start();
                var timeDelayer = new TimeDelayer(5000);
                timeDelayer.Start();
                while (true)
                {
                    //当设备状态为连接状态时
                    if (device.Status == 1)
                    {
                        //循环读取每个tag的值
                        foreach (var tag in device.Groups[0].Tags)
                        {
                            //结果集中已经存在当前tag时,循环下一个
                            if (result.Any(r => r.ItemId.Equals(tag.Address)))
                            {
                                continue;
                            }
                            //根据tag的地址读取数据
                            var value = device.Read(tag.Address);
                            //获取到数据后,将数据加入到结果集中
                            if (value != null)
                            {
                                var opcItem = new OpcItem
                                {
                                    ItemId = tag.Address,
                                    Value  = value
                                };
                                result.Add(opcItem);
                            }
                        }
                        //结果集的总数大于等于tag集总数时,退出while循环
                        if (result.Count >= device.Groups[0].Tags.Count)
                        {
                            break;
                        }
                    }
                    if (timeDelayer.IsTimeout())
                    {
                        throw new Exception("读取数据超时");
                    }
                    Thread.Sleep(100);
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                device.Abort();
            }
            return(result);
        }
Beispiel #2
0
 public void ResetZone()
 {
     if (hoverDelayer != null)
     {
         hoverDelayer.Kill();
         hoverDelayer = null;
     }
     base.OnEndHover();
     baseCard.ResetPreview();
     dropPoint.gameObject.SetActive(false);
 }
Beispiel #3
0
 public void CloseZone()
 {
     open = false;
     if (hoverDelayer != null)
     {
         hoverDelayer.Kill();
         hoverDelayer = null;
     }
     building.ResetPreview();
     dropPoint.gameObject.SetActive(false);
 }
Beispiel #4
0
 public override void OnHover()
 {
     if (baseCard.card == null)
     {
         return;
     }
     if (CardBody.dragged == null)
     {
         return;
     }
     hoverDelayer = ActionDelayer.DelayAction(SetZone, hoverDelay);
 }
Beispiel #5
0
 public void Shot()
 {
     aiming    = true;
     shotReady = false;
     Aim();
     InstancedAction.DelayAction(() => shotReady = true, 1 / gun.gun.fireRate);
     if (holsterTime != null)
     {
         holsterTime.Kill();
     }
     gunAnim.SetTrigger("Shot");
     Instantiate(gun.gun.bullet, gunPoint.position, gunPoint.rotation);
     holsterTime = InstancedAction.DelayAction(() => { aiming = false; AimOff(); }, aimingTime);
 }
Beispiel #6
0
 public void OnPointerEnter(PointerEventData eventData)
 {
     if (CardBody.dragged == null)
     {
         return;
     }
     if (open)
     {
         OpenZone();
     }
     else
     {
         hoverDelayer = ActionDelayer.DelayAction(OpenZone, hoverDelay);
     }
 }
Beispiel #7
0
 public void ChangeColor()
 {
     currentColorIndex = nextColorIndex;
     foreach (var p in driftParticles.particles)
     {
         var j = p.main;
         j.startColor = particleColor[nextColorIndex];
     }
     nextColorIndex++;
     if (nextColorIndex <= 2)
     {
         delayer = InstancedAction.DelayAction(ChangeColor, 1f);
     }
     else
     {
         nextColorIndex = 0;
     }
 }
Beispiel #8
0
 public void Play()
 {
     if (!playing)
     {
         action.Invoke();
         if (fixedDuration)
         {
             timer = InstancedAction.DelayAction(() => { completed = true; }, duration);
         }
     }
     else
     {
         if (paused)
         {
             timer.Resume();
             paused = false;
         }
     }
 }
Beispiel #9
0
 public void Dash()
 {
     dashing   = true;
     isDashing = true;
     particles.Play();
     if (CheckGround())
     {
         body.AddForce(transform.right * dashForce, ForceMode2D.Force);
     }
     else
     {
         body.velocity = new Vector2(0, 0);
         //var x = (anim.GetBool("Moving") == true) ? transform.right.x : 0;
         ////var y = Input.GetAxisRaw("Vertical");
         //if (y == 0) y = 1;
         //body.AddForce(new Vector2(x, y) * dashForce, ForceMode2D.Force);
         var dir = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
         dir   = dir.normalized * 2f;
         dir.z = 0;
         body.AddForce(dir * dashForce, ForceMode2D.Force);
     }
     dashTimer = InstancedAction.DelayAction(() => { isDashing = false; body.velocity = Vector2.zero; freeFall = true; }, dashTime);
 }
Beispiel #10
0
    public static TimeDelayer DelayAction(UnityAction act, float time)
    {
        TimeDelayer delayer = new TimeDelayer(time, act);

        return(delayer);
    }