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); }
/// <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); }
/// <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); }