[ 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 닫기
    - Windows Forms 앱 (.NET Framework) 생성
8. cogRecordDisplay1 생성
    - Name : cogRecordDisplay1
    - 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
    - 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();
        }
    }
}
####################


























댓글
댓글 쓰기