[ C# Cognex ] 씨샾 코그넥스 - VisionPro (R) QuickBuild 파일 vpp 저장 및 불러오기

[ C# Cognex ] 씨샾 코그넥스 - VisionPro (R) QuickBuild 파일 vpp 저장 및 불러오기



1. VisionPro (R) QuickBuild 개념 이해

    - CogJobManager : 프로젝트 라고 생각 하자
    - Cogjob : 레시피 또는 카메라
    - Queue 로 이루어진 공유 또는 개별 메모리 존재



2. VisionPro (R) QuickBuild 실행




3. image Source 더블 클릭




4. 이미지 추가

    - 파일 선택 또는 폴더 선택
    - 이미지 확인 후 닫기




5. QuickBuild Manager 활성화

    - Cogjob1 닫기
    - QuickBuild Manager 선택



6. QuickBuild 응용 프로그램 저장





7. Visual Studio 실행

    - Windows Forms 앱 (.NET Framework) 생성



8. cogRecordDisplay1 생성

    - Name : cogRecordDisplay1



9. button1 생성

    - Name : buttonRun
    - Click Event : buttonRun_Click




10. button2 생성

    - Name : buttonLoad
    - Click Event : buttonLoad_Click




11. button3 생성

    - Name : buttonSave
    - Click Event : buttonSave_Click




12. Fom1 이벤트 생성

    - Name : Form1
    - Click Event : Form1_FormClosing



13. 프로젝트 참조 추가

    - Cognex.VisionPro.QuickBuild.Core.dll 추가
    - 나머지는 cogRecordDisplay 생성 시점에 자동 추가




14. Form1 코드 보기

    - 사용 using 추가



15. 전역 변수 추가




16. QuickBuild 파일 vpp 불러오기

    - buttonLoad_Click



17. QuickBuild 파일 실행 테스트

    - buttonRun_Click



18. QuickBuild 파일 vpp 저장

    - buttonSave_Click



19. 프로그램 종료시 메모리 해제

    - Form1_FormClosing



20. 전체 소스

####################
using System;
using System.Windows.Forms;

// Cognex VisionPro 사용 추가
using Cognex.VisionPro;
using Cognex.VisionPro.QuickBuild;

namespace CogQuickBuildSaveLoad
{
    public partial class Form1 : Form
    {
        // 관리자 & 직업 & 독립적인 추가
        CogJobManager _myJobManager;
        CogJob _myJob;
        CogJobIndependent _myIndependentJob;

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonRun_Click(object sender, EventArgs e)
        {
            ICogRecord icogRecord = null;
            ICogRecord icogRecordDisplay = null;

            _myJobManager.Run();

            // 검사 시간 기다림
            while(icogRecord == null)
                icogRecord = _myJobManager.UserResult();

            // 출력 이미지 찾기
            icogRecordDisplay = icogRecord.SubRecords["ShowLastRunRecordForUserQueue"];
            icogRecordDisplay = icogRecordDisplay.SubRecords["LastRun"];
            icogRecordDisplay = icogRecordDisplay.SubRecords["Image Source.OutputImage"];

            // 이미지 출력
            cogRecordDisplay1.Record = icogRecordDisplay;
            cogRecordDisplay1.Fit(true);
        }

        private void buttonLoad_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                // 레시피 세팅
                _myJobManager = (CogJobManager)CogSerializer.LoadObjectFromFile(openFileDialog.FileName);
                _myJob = _myJobManager.Job(0);
                _myIndependentJob = _myJob.OwnedIndependent;

                // 기존 메모리 청소
                _myJobManager.UserQueueFlush();
                _myJobManager.FailureQueueFlush();
                _myJob.ImageQueueFlush();
                _myIndependentJob.RealTimeQueueFlush();
            }
        }

        private void buttonSave_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.DefaultExt = "vpp";
            saveFileDialog.Filter = "vpp files(*.vpp)|*.VPP";

            // 레시피 저장
            if (_myJobManager != null)
            {
                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    CogSerializer.SaveObjectToFile(_myJobManager, saveFileDialog.FileName.ToString());
                }
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            cogRecordDisplay1.Dispose();
            // Cog JobManager를 반드시 종료하세요!!
            _myJobManager.Shutdown();
        }
    }
}
####################


21. 실행





댓글