ClampJawBean.cs 6.8 KB
using Neotel;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    public class ClampJawBean
    {
        public string Name = "";
        public ConfigClampJaw config = null;
        public Rmaxis rmaxis = null;
        public ClampJawBean(ConfigClampJaw config)
        {
            this.config = config;
            Name = config.DisplayStr + "(" + config.PortName + "_" + config.AxisNo + ")";
            OpenPort();
        }
        public bool OpenPort()
        {
            if (config == null)
            {
                return false;
            }
            if (rmaxis == null)
            {
                rmaxis = new Rmaxis("Rmaxis");
            }
            if (!rmaxis.IsPortOpen)
            {
                bool result = rmaxis.OpenPort(config.PortName, config.AxisNo);
                if (!result)
                {
                    LogUtil.error(Name + " OpenPort 失败");
                }
            }
            return rmaxis.IsPortOpen;
        }

        public void ClosePort()
        {
            if (rmaxis != null)
            {
                rmaxis.ClosePort();
            }
        }
        //public void Push(DeviceMoveInfo moveInfo  , bool checkHasReel  , string[] code  )
        //{
        //    ClampPush(moveInfo, checkHasReel, code);
        //}
        public void Push(DeviceMoveInfo moveInfo = null, bool checkHasReel = true, params string[] code )
        {
            ClampPush(moveInfo, checkHasReel, code);
        }
        private  void ClampPush(DeviceMoveInfo moveInfo, bool checkHasReel, params string[] code)
        {
            bool iscrisp = StoreManager.IsCrispReel(code);
            float distance = config.Distance;
            if (rmaxis != null && rmaxis.IsPortOpen)
            {
                if (iscrisp)
                {
                    distance = config.CrispDistance;
                    rmaxis.Push(config.CrispForce, config.CrispDistance, config.CrispPushVelocity);
                }
                else
                {
                    distance = config.Distance;
                    rmaxis.Push(config.Force, config.Distance, config.PushVelocity);
                }
            }
            if (moveInfo != null)
            {
                moveInfo.WaitList.Add(WaitResultInfo.WaitClampReached((int)distance));
                if (checkHasReel )
                //if (checkHasReel && LineManager.NeedWaitHassReel(code))
                    {
                    moveInfo.WaitList.Add(WaitResultInfo.WaitClampHasReel());
                    //有一个到位就算到位
                    moveInfo.OneWaitCanEndStep = true;
                }
                moveInfo.TimeOutSeconds = 15;
            }
        }

        public bool IsReached()
        {
            try
            {
                if (rmaxis != null && rmaxis.IsPortOpen)
                {
                    return rmaxis.IsReached;
                }
            }
            catch (Exception ex)
            {
                LogUtil.error(Name + " IsReached  error :" + ex.ToString());
            }
            return false;
        }
        public bool IsMoving()
        {
            try
            {
                if (rmaxis != null && rmaxis.IsPortOpen)
                {
                    return rmaxis.IsMoving;
                }
            }
            catch (Exception ex)
            {
                LogUtil.error(Name + " IsMoving  error :" + ex.ToString());
            }
            return false;
        }
        public bool HasReel()
        {
            try
            {
                if (rmaxis != null && rmaxis.IsPortOpen)
                {
                    return !rmaxis.IsPushEmpty;
                }
            }
            catch (Exception ex)
            {
                LogUtil.error(Name + " IsReached  error :" + ex.ToString());
            }
            return false;
        }

        public void Relax(DeviceMoveInfo moveInfo = null, params string[] code)
        {
            bool iscrisp = StoreManager.IsCrispReel(code);
            int p = 0;
            if (rmaxis != null && rmaxis.IsPortOpen)
            {
                if (iscrisp)
                { 
                    rmaxis.MoveAbsolute(p, config.CrispVelocity, config.CrispAddSpeed, config.CrispDelSpeed);
                }
                else
                {
                    rmaxis.MoveAbsolute(p, config.Velocity, config.AddSpeed, config.DelSpeed);
                }
            }
            if (moveInfo != null)
            {
                moveInfo.WaitList.Add(WaitResultInfo.WaitClampReached(p));
            }
        }
        public void GoHome(DeviceMoveInfo moveInfo = null)
        {
            if (rmaxis != null && rmaxis.IsPortOpen)
            {
                rmaxis.GoHome();
            }
            if (moveInfo != null)
            {
                moveInfo.WaitList.Add(WaitResultInfo.WaitClampReached(0));
            }
        }
        public float GetForceSensor()
        {
            try
            {
                return rmaxis.GetForceSensor();
            }
            catch (Exception ex)
            {
                LogUtil.error(Name + " GetForceSensor  error :" + ex.ToString());
            }
            return -1;
        }
        public float GetVelocity()
        {
            try
            {
                return rmaxis.GetVelocity();
            }
            catch (Exception ex)
            {
                LogUtil.error(Name + " GetVelocity  error :" + ex.ToString());
            }
            return -1;
        }
        public float GetPosition()
        {
            try
            {
                return rmaxis.GetPosition();
            }
            catch (Exception ex)
            {
                LogUtil.error(Name + " IsReached  error :" + ex.ToString());
            }
            return -1;
        }
        public float GetTorque()
        {
            try
            {
                return rmaxis.GetTorque();
            }
            catch (Exception ex)
            {
                LogUtil.error(Name + " IsReached  error :" + ex.ToString());
            }
            return -1;
        }
        public void PushTest(float force, float distance)
        {
            if (rmaxis != null && rmaxis.IsPortOpen)
            {
                rmaxis.Push(force, distance, config.CrispVelocity);
            }
        }

        public void Reset()
        {
            if (rmaxis != null && rmaxis.IsPortOpen)
            {
                rmaxis.ResetError();
                rmaxis.StopAxis();
            }
        }
        public int GetErrorCode()
        {
            if (rmaxis != null && rmaxis.IsPortOpen)
            {
                return rmaxis.ErrorCode;
            }
            return 0;
        }
    }
}