/// <summary> /// 테스트로 한번의 트리거를 출력. /// </summary> /// <param name="_bOnLevel">출력 레벨</param> /// <param name="_iTime">시간us</param> public void OneShotTrg(bool _bOnLevel, int _iTime) { //CMP 출력은 One-shot pulse 로 출력되는데, 출력되는 펄스의 폭을 조절할 //수 있습니다. 설정 및 반환되는 PropVal 은 다음과 같습니다. //• 0 : 트리거 시점의 Command 펄스의 펄스폭과 동일한 펄스폭을 가짐 //• 양수의 값 : 이 값에 1.5us 가 곱해진 값이 펄스폭이 됩니다. 즉, 이 값을 //1 로 하면 1.5us, 2 로 하면 3us…와 같이 됩니다. int iTrgTime = (int)(_iTime / 1.5); int iRet = Cmmsdk.cmmCfgSetMioProperty(Para.iPhysicalNo, (int)MotnDefines._TCmMioPropId.cmCMP_PWIDTH, iTrgTime); int iCmpSrc = (int)MotnDefines._TCmCntr.cmCNT_COMM; // Command Position 0 //CmpMethod 1번으로 사용하는건 잘 모르겟음 일단 기본 베이스 맞춰서 1,2사용으로 함 //0 (cmDISABLE) Disable comparator //1 (cmEQ_BIDIR) CmpData = CmpSrc_Value (regardless of counting direction) 카운팅 방향에 상관 없이 //2 (cmEQ_PDIR) CmpData = CmpSrc_Value (while counting up) //3 (cmEQ_NDIR) CmpData = CmpSrc_Value (while counting down) //4 (cmLESS) CmpData > CmpSrc_Value //5 (cmGREATER) CmpData < CmpSrc_Value //(+)방향쪽으로 이동시에만 트리거펄스가 출력되고 (-)방향으로 이동할 때는 출력하지 //않도록(cmEQ_PDIR) 합니다. 엣지 개념이 아닌듯해서 1번으로 사용 int iCmpMethod = (int)MotnDefines._TCmCmpMethod.cmEQ_BIDIR; //if(_bActual) iCmpMethod = (int)MotnDefines._TCmCmpMethod.cmEQ_PDIR; // CmpData = CmpSrc_Value (while counting up) //else iCmpMethod = (int)MotnDefines._TCmCmpMethod.cmEQ_NDIR; // CmpData = CmpSrc_Value (while counting down) //위치 비교기 조건 설정 및 확인 Cmmsdk.cmmCmpTrgSetConfig(Para.iPhysicalNo, iCmpSrc, iCmpMethod); Cmmsdk.cmmCmpTrgSetOneData(Para.iPhysicalNo, MotionInfo.iCmdPos); }