Example #1
0
        /// <summary>
        ///     单例初始化
        /// </summary>
        /// <param name="cardType">运动控制板卡类型</param>
        /// <param name="nMaxAxisNum">最大轴数,最大8</param>
        /// <param name="nCardNum">卡号</param>
        /// <returns></returns>
        public static CMotionWorkChristmas GetInstance(short cardType, short nMaxAxisNum, short nCardNum)
        {
            CMotionWorkChristmas cMotionWorkChristmas = null;
            //判断形参是否正确
            var nRtn = CheckFormatPara(cardType, nCardNum);

            //返回为负,说明形参错误
            if (nRtn < 0)
            {
                return(null);
            }
            //返回为零,说明现有链表有需要卡号对象
            if (nRtn == 0)
            {
                switch (cardType)
                {
                case 0:     //固高
                    cMotionWorkChristmas = s_listMotionWorkingGts[nCardNum];
                    break;

                case 1:     //灵猴
                    cMotionWorkChristmas = s_listMotionWorkingLh[nCardNum];
                    break;
                }
            }
            //返回为正,说明现有链表没有需要卡号对象,需要先实例化
            if (nRtn > 0)
            {
                lock (s_lock)
                {
                    switch (cardType)
                    {
                    case 0:     //固高
                        s_motionBase = new CGtMotion(nMaxAxisNum, m_c_DI_NUM, m_c_DO_NUM);
                        s_listMotionWorkingGts.Add(new CMotionWorkChristmas(s_motionBase, nCardNum));
                        cMotionWorkChristmas = s_listMotionWorkingGts[nCardNum];
                        break;

                    case 1:     //灵猴
                        break;
                    }
                }
            }

            return(cMotionWorkChristmas);
        }
Example #2
0
 protected CMotionWorkBase(CMotionBase cMotionBase, short nCardNo)
 {
     m_oMotionBase = cMotionBase;
     m_sCardNo     = nCardNo;
 }
Example #3
0
        private CMotionWorkChristmas(CMotionBase obj, short nCardNo)
            : base(obj, nCardNo)
        {
            m_maxAxisNum = obj.m_maxAxisNum;
            m_diNum      = obj.m_diNum;
            m_doNum      = obj.m_doNum;

            m_oLockOfScanDiBit = new object();

            m_oLockOfSetDoBit = new object();


            m_dsAxisResolution = new double[m_maxAxisNum];

            m_bFlagOfScanEnd = false;

            m_bsUniversalIn  = new bool[m_c_DI_NUM];
            m_bsUniversalOut = new bool[m_c_DI_NUM];
            //m_bInit = false;

            m_nsDiStatus   = new[] { 0, 0, 0, 0, 0 };
            m_bsAxisPosLmt = new bool[m_maxAxisNum];
            m_bsAxisNegLmt = new bool[m_maxAxisNum];
            m_bsAxisAlarm  = new bool[m_maxAxisNum];
            m_bsAxisHome   = new bool[m_maxAxisNum];


            m_dsAxisStatus  = new int[m_maxAxisNum];
            m_bsServoAlarm  = new bool[m_maxAxisNum];
            m_bsMotionError = new bool[m_maxAxisNum];
            m_bsPosLimit    = new bool[m_maxAxisNum];
            m_bsNegLimit    = new bool[m_maxAxisNum];
            m_bsAxisStop    = new bool[m_maxAxisNum];
            m_bsSmoothStop  = new bool[m_maxAxisNum];
            m_bsMotionSts   = new bool[m_maxAxisNum];
            m_bsServoOn     = new bool[m_maxAxisNum];

            m_dsAxisPos = new double[m_maxAxisNum];

            for (var i = 0; i < m_diNum; i++)
            {
                m_bsUniversalIn[i] = true;
            }

            for (var i = 0; i < m_doNum; i++)
            {
                m_bsUniversalOut[i] = true;
            }

            for (var i = 0; i < m_maxAxisNum; i++)
            {
                m_dsAxisResolution[i] = 0;


                m_bsAxisPosLmt[i] = true;
                m_bsAxisNegLmt[i] = true;
                m_bsAxisAlarm[i]  = true;
                m_bsAxisHome[i]   = true;

                m_dsAxisStatus[i]  = 0;
                m_bsServoAlarm[i]  = true;
                m_bsMotionError[i] = true;
                m_bsPosLimit[i]    = true;
                m_bsNegLimit[i]    = true;
                m_bsAxisStop[i]    = true;
                m_bsSmoothStop[i]  = true;
                m_bsMotionSts[i]   = true;
                m_bsServoOn[i]     = true;

                m_dsAxisPos[i] = 0.0;
            }
        }