[ C# Cognex ] 씨샾 코그넥스 - GigE 카메라 연결 및 프레임 출력
1. 이더넷 설정
- 이더넷 IP 설정
- GigE 카메라 IP 설정
- 169.254.231.xxx (앞 3 자리 동일)
2. Windows Forms 앱
- 새 프로젝트 생성
- 프로젝트 [우클릭]
- 속성 [클릭]
4. 프로젝트 속성
- 빌드 [클릭]
- 플랫폼 대상 [선택]
- x64 [선택]
- Release 사용 유저는 Release 도 x64 로 변경
5. 도구 상자 CogDisplay
- CogDisplay [선택]
- Form1 [추가]
9. Form1.cs
- 코드 보기
==========
using System;
using System.Windows.Forms;
// 1 - [ Cognex.VisionPro ] Using 추가
using Cognex.VisionPro;
namespace CogGigEConnection
{
public partial class Form1 : Form
{
// 2 - ICogAcqFifo 생성
private ICogAcqFifo _icogAcqFifo = null;
// 3 - 메모리 관리를 위한 인덱스 변수 생성
private int _nMemoryManagement = 0;
public static void ConfigureExposure(ICogAcqFifo acqFifo, double exposure)
{
// Aca Fifo의 Exposure Params 인터페이스에 대한 참조를 가져옵니다.
ICogAcqExposure exposureParams = acqFifo.OwnedExposureParams;
// 항상 "소유" 속성이 지원되는지 확인합니다. (사용 전)
// 노출 지원을 확인
if (exposureParams != null)
{
// 노출 시간 설정
exposureParams.Exposure = exposure;
// 카메라에 속성 적용
acqFifo.Prepare();
}
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 4 - 프레임 그래버 생성
ICogFrameGrabber iCogFrameGrabber = null;
try
{
// 5 - 연결된 프레임 그래버들 검색
CogFrameGrabbers mFrameGrabbers = new CogFrameGrabbers();
if (mFrameGrabbers.Count < 1)
MessageBox.Show("No frame grabbers found");
// 6 - 프레임 그래버가 두 개 이상 있더라도 첫 번째 프레임 그래버를 선택
iCogFrameGrabber = mFrameGrabbers[0];
// 7 - 선택한 비디오 형식으로 acq fifo를 만듬
_icogAcqFifo = iCogFrameGrabber.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);
// 8 - 노출 시간 설정 함수 만들기
ConfigureExposure(_icogAcqFifo, 50);
// 9 - 프레임 그래버의 GigEAccess 인터페이스에 대한 참조를 가져옵니다.
ICogGigEAccess gigEAccess = iCogFrameGrabber.OwnedGigEAccess;
// 10 - GigE 액세스 지원을 확인합니다.
if (gigEAccess == null)
return; // GigE 지원 없으면 종료
}
catch (Exception ex)
{
MessageBox.Show("No camera is connected " + ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
// 11 - 획득 이미지 창에 올리기
cogDisplay1.Image = _icogAcqFifo.Acquire(out int nTriggerNumber);
// 12 - 메모리 과부하를 막기 위해 가비지 컬렉션 수행
_nMemoryManagement++;
if (_nMemoryManagement > 4)
{
GC.Collect();
_nMemoryManagement = 0;
}
}
}
}
댓글
댓글 쓰기