Exemple #1
0
        private static bool DrawCircle(ILaser laser, IRtc rtc)
        {
            bool success = true;
            var  rtcExt  = rtc as IRtcExtension;

            //리스트 시작
            success &= rtc.ListBegin(laser);
            //아나로그1 에 5V 출력
            success &= rtc.ListWriteData <float>(ExtensionChannel.ExtAO2, 0.5f);
            //1 초 동안 대기
            success &= rtc.ListWait(1000);
            //아나로그1 에 0V 출력
            success &= rtc.ListWriteData <float>(ExtensionChannel.ExtAO2, 0);
            //점프
            success &= rtc.ListJump(new Vector2(10, 0));
            //레이저 출력 15핀에 있는 출력 2접점중 첫번째 비트 켜기
            success &= rtc.ListWriteData <int>(ExtensionChannel.ExtDO2, 0x01);
            //레이저 출력 시작
            success &= rtc.ListLaserOn();
            //0.5 초 동안 대기
            success &= rtc.ListWait(500);
            //레이저 출력 중지
            success &= rtc.ListLaserOff();
            //레이저 출력 15핀에 있는 출력 2접점중 첫번째 비트 끄기
            success &= rtc.ListWriteData <int>(ExtensionChannel.ExtDO2, 0x00);
            //점프
            success &= rtc.ListJump(new Vector2(-10, 0));
            //매 100us 마다 X 방향으로 0.1 mm 이동하면서 아나로그 1번 출력으로 픽셀 출력(Raster Operation)을 준비 (100개)
            success &= rtcExt.ListPixelLine(100, new Vector2(0.1F, 0), 100, ExtensionChannel.ExtAO2);
            for (int i = 0; i < 100; i++)
            {
                success &= rtcExt.ListPixel(10, 0.5f); //10us 펄스 생성및 아나로그2 에 5V 출력
            }
            if (success)
            {
                //리스트 종료
                success &= rtc.ListEnd();
                //나머지 데이타 가공 완료 대기
                success &= rtc.ListExecute(true);
            }
            return(success);
        }
Exemple #2
0
        /// <summary>
        /// laser processing
        /// </summary>
        /// <param name="rtc"></param>
        /// <returns></returns>
        public override bool Mark(IRtc rtc)
        {
            bool success = true;

            rtc.Matrix.Push(this.X, this.Y);
            ///jump to start pos
            success &= rtc.ListJump(new Vector2(0, 0));
            ///dwell during assgined time
            success &= rtc.ListWait(this.Time);
            rtc.Matrix.Pop();
            return(success);
        }
Exemple #3
0
        /// <summary>
        /// 스캐너가 0,0 을 지속적으로 포인팅 한다 (스테이지나 컨베이어를 손으로 밀어보면서 테스트)
        /// </summary>
        /// <param name="laser"></param>
        /// <param name="rtc"></param>
        /// <param name="externalStart"></param>
        private static bool MotfWithFollowOnly(ILaser laser, IRtc rtc, bool externalStart)
        {
            var  rtcMotf      = rtc as IRtcMOTF;
            var  rtcExtension = rtc as IRtcExtension;
            bool success      = true;

            //리스트 시작
            success &= rtc.ListBegin(laser, ListType.Single);
            // ListMOTFBegin 부터 ListMOTFEnd 사이의 모든 list 명령어는 엔코더증감값이 적용됩니다
            success &= rtcMotf.ListMOTFBegin(true);
            // 0,0 으로 점프
            success &= rtc.ListJump(new Vector2(0, 0));
            //10 초동안 대기
            success &= rtc.ListWait(1000 * 60);
            // MOTF 중시
            success &= rtcMotf.ListMOTFEnd(Vector2.Zero);
            success &= rtc.ListEnd();
            if (externalStart)
            {
                // RTC 15핀 커넥터에 있는 /START 을 리스트 시작 트리거로 사용합니다.
                var extCtrl = new Rtc5ExternalControlMode();
                extCtrl.Add(Rtc5ExternalControlMode.Bit.ExternalStart);
                extCtrl.Add(Rtc5ExternalControlMode.Bit.ExternalStartAgain);
                rtcExtension.CtlExternalControl(extCtrl);
            }
            else
            {
                //외부 트리거(/START)가 아닌 직접 execute 호출하여 실행
                rtcExtension.CtlExternalControl(Rtc5ExternalControlMode.Empty);
                if (success)
                {
                    success &= rtc.ListExecute();
                }
            }
            return(success);
        }