/// <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); }
protected CMotionWorkBase(CMotionBase cMotionBase, short nCardNo) { m_oMotionBase = cMotionBase; m_sCardNo = nCardNo; }
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; } }