539 lines
34 KiB
C#
539 lines
34 KiB
C#
/****************************************************************************
|
|
*****************************************************************************
|
|
**
|
|
** File Name
|
|
** ----------
|
|
**
|
|
** AXA.CS
|
|
**
|
|
** COPYRIGHT (c) AJINEXTEK Co., LTD
|
|
**
|
|
*****************************************************************************
|
|
*****************************************************************************
|
|
**
|
|
** Description
|
|
** -----------
|
|
** Ajinextek Analog Library Header File
|
|
**
|
|
**
|
|
*****************************************************************************
|
|
*****************************************************************************
|
|
**
|
|
** Source Change Indices
|
|
** ---------------------
|
|
**
|
|
** (None)
|
|
**
|
|
*****************************************************************************
|
|
*****************************************************************************
|
|
**
|
|
** Website
|
|
** ---------------------
|
|
**
|
|
** http://www.ajinextek.com
|
|
**
|
|
*****************************************************************************
|
|
*****************************************************************************
|
|
*/
|
|
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
public class CAXA
|
|
{
|
|
//========== 보드 및 모듈 정보 확인 함수 =============================================================
|
|
//AIO 모듈이 있는지 확인한다
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoIsAIOModule(ref uint upStatus);
|
|
|
|
//모듈 No를 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoGetModuleNo(int lBoardNo, int lModulePos, ref int lpModuleNo);
|
|
|
|
//AIO 모듈의 개수를 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoGetModuleCount(ref int lpModuleCount);
|
|
|
|
//지정한 모듈의 입력 채널 수를 확인한다
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoGetInputCount(int lModuleNo, ref int lpCount);
|
|
|
|
//지정한 모듈의 출력 채널 수를 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoGetOutputCount(int lModuleNo, ref int lpCount);
|
|
|
|
//지정한 모듈의 첫 번째 채널 번호를 확인한다.(입력 전용,출력 전용 모듈용)
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoGetChannelNoOfModuleNo(int lModuleNo, ref int lpChannelNo);
|
|
|
|
//지정한 모듈의 첫 번째 입력 채널 번호를 확인한다.(입력 모듈, 입력/출력 통합 모듈용)
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoGetChannelNoAdcOfModuleNo(int lModuleNo, ref int lpChannelNo);
|
|
|
|
//지정한 모듈의 첫 번째 출력 채널 번호를 확인한다.(출력 모듈, 입력/출력 통합 모듈용)
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoGetChannelNoDacOfModuleNo(int lModuleNo, ref int lpChannelNo);
|
|
|
|
//지정한 모듈 번호로 베이스 보드 번호, 모듈 위치, 모듈 ID를 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoGetModule(int lModuleNo, ref int lpBoardNo, ref int lpModulePos, ref uint upModuleID);
|
|
|
|
// 해당 모듈이 제어가 가능한 상태인지 반환한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaInfoGetModuleStatus(int lModuleNo);
|
|
|
|
//========== 입력 모듈 정보 검색 함수 ================================================================
|
|
//지정한 입력 채널 번호로 모듈 번호를 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiInfoGetModuleNoOfChannelNo(int lChannelNo, ref int lpModuleNo);
|
|
|
|
//아날로그 입력 모듈의 전체 채널 개수를 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiInfoGetChannelCount(ref int lpChannelCount);
|
|
|
|
//========== 입력 모듈 인터럽트/채널 이벤트 설정 및 확인 함수 ====================================
|
|
//지정한 채널에 이벤트 메시지를 받아오기 위하여 윈도우 메시지, 콜백 함수 또는 이벤트 방식을 사용한다. H/W 타이머(Timer Trigger Mode, External Trigger Mode)를 이용, 연속적 데이터 수집 동작시(AxaStartMultiChannelAdc 참조)에 사용한다.
|
|
// 지정한 모듈에 인터럽트 메시지를 받아오기 위하여 윈도우 메시지, 콜백 함수 또는 이벤트 방식을 사용
|
|
//========= 인터럽트 관련 함수 ======================================================================================
|
|
// 콜백 함수 방식은 이벤트 발생 시점에 즉시 콜백 함수가 호출 됨으로 가장 빠르게 이벤트를 통지받을 수 있는 장점이 있으나
|
|
// 콜백 함수가 완전히 종료 될 때까지 메인 프로세스가 정체되어 있게 된다.
|
|
// 즉, 콜백 함수 내에 부하가 걸리는 작업이 있을 경우에는 사용에 주의를 요한다.
|
|
// 이벤트 방식은 쓰레드등을 이용하여 인터럽트 발생여부를 지속적으로 감시하고 있다가 인터럽트가 발생하면
|
|
// 처리해주는 방법으로, 쓰레드 등으로 인해 시스템 자원을 점유하고 있는 단점이 있지만
|
|
// 가장 빠르게 인터럽트를 검출하고 처리해줄 수 있는 장점이 있다.
|
|
// 일반적으로는 많이 쓰이지 않지만, 인터럽트의 빠른처리가 주요 관심사인 경우에 사용된다.
|
|
// 이벤트 방식은 이벤트의 발생 여부를 감시하는 특정 쓰레드를 사용하여 메인 프로세스와 별개로 동작되므로
|
|
// MultiProcessor 시스템등에서 자원을 가장 효율적으로 사용할 수 있게 되어 특히 권장하는 방식이다.
|
|
// 인터럽트 메시지를 받아오기 위하여 윈도우 메시지 또는 콜백 함수를 사용한다.
|
|
// (메시지 핸들, 메시지 ID, 콜백함수, 인터럽트 이벤트)
|
|
// hWnd : 윈도우 핸들, 윈도우 메세지를 받을때 사용. 사용하지 않으면 NULL을 입력.
|
|
// uMessage : 윈도우 핸들의 메세지, 사용하지 않거나 디폴트값을 사용하려면 0을 입력.
|
|
// proc : 인터럽트 발생시 호출될 함수의 포인터, 사용하지 않으면 NULL을 입력.
|
|
// pEvent : 이벤트 방법사용시 이벤트 핸들
|
|
[DllImport("AXL.dll")] public static extern uint AxaiEventSetChannel(int lModuleNo, IntPtr hWnd, uint uMessage, CAXHS.AXT_INTERRUPT_PROC pProc, ref uint pEvent);
|
|
|
|
//지정한 입력 채널에 이벤트 사용 유무를 설정한다.
|
|
//======================================================
|
|
// uUse : DISABLE(0) // 이벤트 해제
|
|
// : ENABLE(1) // 이벤트 설정
|
|
//======================================================
|
|
[DllImport("AXL.dll")] public static extern uint AxaiEventSetChannelEnable(int lChannelNo, uint uUse);
|
|
|
|
//지정한 입력 채널의 이벤트 사용 유무를 확인한다.
|
|
//======================================================
|
|
// *upUse : DISABLE(0) // 이벤트 해제
|
|
// : ENABLE(1) // 이벤트 설정
|
|
//======================================================
|
|
[DllImport("AXL.dll")] public static extern uint AxaiEventGetChannelEnable(int lChannelNo, ref uint upUse);
|
|
|
|
//지정한 여러 입력 채널에 이벤트 사용 유무를 설정한다.
|
|
//======================================================
|
|
// lSize : 사용 할 입력 채널의 갯수
|
|
// lpChannelNo : 사용할 채널 번호의 배열
|
|
// uUse : DISABLE(0) // 이벤트 해제
|
|
// : ENABLE(1) // 이벤트 설정
|
|
//======================================================
|
|
[DllImport("AXL.dll")] public static extern uint AxaiEventSetMultiChannelEnable(int lSize, int[] lpChannelNo, uint uUse);
|
|
|
|
//지정한 입력 채널에 이벤트 종류를 설정한다.
|
|
//======================================================
|
|
// uMask : DATA_EMPTY(1) --> 버퍼에 데이터가 없을 때
|
|
// : DATA_MANY(2) --> 버퍼에 데이터가 상한 설정 값보다 많아질 때
|
|
// : DATA_SMALL(3) --> 버퍼에 데이터가 하한 설정 값보다 적어질 때
|
|
// : DATA_FULL(4) --> 버퍼에 데이터가 꽉 찼을 때
|
|
//======================================================
|
|
[DllImport("AXL.dll")] public static extern uint AxaiEventSetChannelMask(int lChannelNo, uint uMask);
|
|
|
|
//지정한 입력 채널에 이벤트 종류를 확인한다.
|
|
//======================================================
|
|
// *upMask : DATA_EMPTY(1) --> 버퍼에 데이터가 없을 때
|
|
// : DATA_MANY(2) --> 버퍼에 데이터가 상한 설정 값보다 많아질 때
|
|
// : DATA_SMALL(3) --> 버퍼에 데이터가 하한 설정 값보다 적어질 때
|
|
// : DATA_FULL(4) --> 버퍼에 데이터가 꽉 찼을 때
|
|
//======================================================
|
|
[DllImport("AXL.dll")] public static extern uint AxaiEventGetChannelMask(int lChannelNo, ref uint upMask);
|
|
|
|
//지정한 여러 입력 채널에 이벤트 종류를 설정한다.
|
|
//======================================================
|
|
// lSize : 사용 할 입력 채널의 갯수
|
|
// lpChannelNo : 사용할 채널 번호의 배열
|
|
// uMask : DATA_EMPTY(1) --> 버퍼에 데이터가 없을 때
|
|
// : DATA_MANY(2) --> 버퍼에 데이터가 상한 설정 값보다 많아질 때
|
|
// : DATA_SMALL(3) --> 버퍼에 데이터가 하한 설정 값보다 적어질 때
|
|
// : DATA_FULL(4) --> 버퍼에 데이터가 꽉 찼을 때
|
|
//======================================================
|
|
[DllImport("AXL.dll")] public static extern uint AxaiEventSetMultiChannelMask(int lSize, int[] lpChannelNo, uint uMask);
|
|
|
|
//이벤트 발생 위치를 확인한다.
|
|
//======================================================
|
|
// *upMode : AIO_EVENT_DATA_UPPER(1) --> 버퍼에 데이터가 상한 설정 값보다 많아질 때
|
|
// : AIO_EVENT_DATA_LOWER(2) --> 버퍼에 데이터가 하한 설정 값보다 적어질 때
|
|
// : AIO_EVENT_DATA_FULL(3) --> 버퍼에 데이터가 꽉 찼을 때
|
|
// : AIO_EVENT_DATA_EMPTY(4) --> 버퍼에 데이터가 없을 때
|
|
//======================================================
|
|
[DllImport("AXL.dll")] public static extern uint AxaiEventRead(ref int lpChannelNo, ref uint upMode);
|
|
|
|
//지정한 모듈의 인터럽트 마스크를 설정한다. 이 함수는 연속적 신호감시를 할 경우에 하드웨어(모듈)의 FIFO 에서 사용자가
|
|
//지정한 크기의 버퍼로 내부 인터럽트를 통한 데이터 이동 시점을 지정하기 위해 사용된다. (SIO-AI4RB는 지원하지 않는다.)
|
|
//==================================================================================================//
|
|
// uMask : SCAN_END(1) --> 셋팅된 채널 모두 ADC 변환이 한번 이루어 질 때 마다 인터럽트가 발생
|
|
// : FIFO_HALF_FULL(2) --> 모듈내의 FIFO가 HALF이상 찼을 경우 내부 인터럽트 발생
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiInterruptSetModuleMask(int lModuleNo, uint uMask);
|
|
|
|
//지정한 모듈의 인터럽트 마스크를 확인한다.
|
|
//==================================================================================================//
|
|
// *upMask : SCAN_END(1) --> 셋팅된 채널 모두 ADC 변환이 한번 이루어 질 때 마다 인터럽트가 발생
|
|
// : FIFO_HALF_FULL(2) --> 모듈내의 FIFO가 HALF이상 찼을 경우 내부 인터럽트 발생
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiInterruptGetModuleMask(int lModuleNo, ref uint upMask);
|
|
|
|
//========== 입력 모듈 파라미터 설정 및 확인 함수 ========================================================================
|
|
//지정한 입력 채널에 입력 전압 범위를 설정한다.
|
|
//==================================================================================================//
|
|
// AI4RB
|
|
// dMinVolt : -10V/-5V로 설정 가능
|
|
// dMaxVolt : 10V/5V/로 설정 가능
|
|
//
|
|
// AI16Hx
|
|
// dMinVolt : -10V 고정
|
|
// dMaxVolt : 10V 고정
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiSetRange(int lChannelNo, double dMinVolt, double dMaxVolt);
|
|
|
|
//지정한 입력 채널의 입력 전압 범위를 확인한다.
|
|
//==================================================================================================//
|
|
// AI4RB
|
|
// *dpMinVolt : -10V/-5V로 설정 가능
|
|
// *dpMaxVolt : 10V/5V/로 설정 가능
|
|
//
|
|
// AI16Hx
|
|
// *dpMaxVolt : -10V 고정
|
|
// *dpMaxVolt : 10V 고정
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiGetRange(int lChannelNo, ref double dpMinVolt, ref double dpMaxVolt);
|
|
|
|
//지정한 여러 입력 모듈에 허용 입력 전압 범위를 설정한다.
|
|
//==================================================================================================//
|
|
// lModuleNo : 사용할 입력 모듈 번호
|
|
//
|
|
// RTEX AI16F
|
|
// Mode -5~+5 : dMinVolt = -5, dMaxVolt = +5
|
|
// Mode -10~+10: dMinVolt = -10, dMaxVolt = +10
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiSetRangeModule(int lModuleNo, double dMinVolt, double dMaxVolt);
|
|
|
|
//지정한 여러 입력 모듈에 허용 입력 전압 범위를 확인한다.
|
|
//==================================================================================================//
|
|
// lModuleNo : 사용할 입력 모듈 번호
|
|
//
|
|
// RTEX AI16F
|
|
// *dMinVolt : -5V, -10V
|
|
// *dMaxVolt : +5V, +10V
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiGetRangeModule(int lModuleNo, ref double dMinVolt, ref double dMaxVolt);
|
|
|
|
//지정한 여러 입력 채널에 허용 입력 전압 범위를 설정한다.
|
|
//==================================================================================================//
|
|
// lSize : 사용할 입력 채널의 개수
|
|
// *lpChannelNo : 사용할 채널 번호의 배열
|
|
//
|
|
// AI4RB
|
|
// dMinVolt : -10V/-5V로 설정 가능
|
|
// dMaxVolt : 10V/5V/로 설정 가능
|
|
//
|
|
// AI16Hx
|
|
// dMinVolt : -10V
|
|
// dMaxVolt : 10V
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiSetMultiRange(int lSize, int[] lpChannelNo, double dMinVolt, double dMaxVolt);
|
|
|
|
//지정한 입력 모듈에 트리거 모드를 설정한다.
|
|
//==================================================================================================//
|
|
// uTriggerMode : NORMAL_MODE(1) --> 사용자가 원하는 시점에 A/D변환하는 Software Trigger 방식
|
|
// : TIMER_MODE(2) --> H/W의 내부 클럭을 이용해서 A/D변환하는 Trigger 방식
|
|
// : EXTERNAL_MODE(3) --> 외부 입력단자의 클럭을 이용해서 A/D변환하는 Trigger 방식
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiSetTriggerMode(int lModuleNo, uint uTriggerMode);
|
|
|
|
//지정한 모듈에 트리거 모드를 확인한다.
|
|
//==================================================================================================//
|
|
// *upTriggerMode : NORMAL_MODE(1) --> 사용자가 원하는 시점에 A/D변환하는 Software Trigger 방식
|
|
// : TIMER_MODE(2) --> H/W의 내부 클럭을 이용해서 A/D변환하는 Trigger 방식
|
|
// : EXTERNAL_MODE(3) --> 외부 입력단자의 클럭을 이용해서 A/D변환하는 Trigger 방식
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiGetTriggerMode(int lModuleNo, ref uint upTriggerMode);
|
|
|
|
//지정한 입력모듈의 Offset을 mVolt 단위(mV)로 설정한다. 최대 -100~100mVolt
|
|
//==================================================================================================//
|
|
// dMiliVolt : -100 ~ 100
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiSetModuleOffsetValue(int lModuleNo, double dMiliVolt);
|
|
|
|
//지정한 입력모듈의 Offset 값을 확인한다. mVolt 단위(mV)
|
|
//==================================================================================================//
|
|
// *dpMiliVolt : -100 ~ 100
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiGetModuleOffsetValue(int lModuleNo, ref double dpMiliVolt);
|
|
|
|
//========== 입력 모듈 A/D 변환 함수
|
|
//==Software Trigger Mode 함수
|
|
//사용자가 지정한 입력 채널에 아날로그 입력 값을 A/D변환한 후 전압 값으로 반환한다.이 함수를 사용하기 전에 AxaSetTriggerModeAdc 함수를 사용하여 Normal Trigger Mode로 설정되어 있어야 한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiSwReadVoltage(int lChannelNo, ref double dpVolt);
|
|
|
|
//지정한 입력 채널에 아날로그 입력 값을 Digit 값으로 반환한다. Normal Trigger Mode로 설정되어 있어야 한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiSwReadDigit(int lChannelNo, ref uint upDigit);
|
|
|
|
//지정한 여러 입력 채널에 아날로그 입력 값을 전압 값으로 반환한다. Normal Trigger Mode로 설정되어 있어야 한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiSwReadMultiVoltage(int lSize, int[] lpChannelNo, double[] dpVolt);
|
|
|
|
//지정한 여러 입력 채널에 아날로그 입력 값을 Digit 값으로 반환한다. Normal Trigger Mode로 설정되어 있어야 한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiSwReadMultiDigit(int lSize, int[] lpChannelNo, uint[] upDigit);
|
|
|
|
//지정한 여러 입력 채널에 Immediate모드를 사용하기 위해 설정 값을 설정한다. 이 함수를 사용하기 전에 AxaSetTriggerModeAdc 함수를 사용하여 Timer Trigger Mode로 설정되어 있어야 한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwSetMultiAccess(int lSize, int[] lpChannelNo, int[] lpWordSize);
|
|
|
|
//지정한 개수만큼 A/D변환 후 전압 값을 반환한다. 이 함수를 사용하기 전에 AxaiHwSetMultiAccess함수를 이용 설정값을 지정해야 하며 , AxaSetTriggerModeAdc 함수를 사용하여 Timer Trigger Mode로 설정되어 있어야 한다.
|
|
// [DllImport("AXL.dll")] public static extern uint AxaiHwStartMultiAccess(ref double[] dpBuffer);
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwStartMultiAccess(double[,] dpBuffer);
|
|
|
|
//지정한 모듈에 샘플링 간격을 주파수 단위로 설정한다.
|
|
//==================================================================================================//
|
|
// dSampleFreq : 10 ~ 100000
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwSetSampleFreq(int lModuleNo, double dSampleFreq);
|
|
|
|
//지정한 모듈에 샘플링 간격을 주파수 단위로 설정된 값을 확인한다.
|
|
//==================================================================================================//
|
|
// *dpSampleFreq : 10 ~ 100000
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwGetSampleFreq(int lModuleNo, ref double dpSampleFreq);
|
|
|
|
//지정한 모듈에 샘플링 간격을 시간 단위(uSec)로 설정한다.
|
|
//==================================================================================================//
|
|
// dSamplePeriod : 100000 ~ 1000000000
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwSetSamplePeriod(int lModuleNo, double dSamplePeriod);
|
|
|
|
//지정한 모듈에 샘플링 간격을 시간 단위(uSec)로 설정된 값을 확인한다.
|
|
//==================================================================================================//
|
|
// *dpSamplePeriod: 100000 ~ 1000000000
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwGetSamplePeriod(int lModuleNo, ref double dpSamplePeriod);
|
|
|
|
//지정한 입력 채널에 버퍼가 Full로 찼을 때 관리 방식을 설정한다.
|
|
//==================================================================================================//
|
|
// uFullMode : NEW_DATA_KEEP(0) --> 새로운 데이터 유지
|
|
// : CURR_DATA_KEEP(1) --> 이전 데이터 유지
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwSetBufferOverflowMode(int lChannelNo, uint uFullMode);
|
|
|
|
//지정한 입력 채널이 버퍼가 Full로 찼을 때 관리 방식을 확인한다.
|
|
//==================================================================================================//
|
|
// *upFullMode : NEW_DATA_KEEP(0) --> 새로운 데이터 유지
|
|
// : CURR_DATA_KEEP(1) --> 이전 데이터 유지
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwGetBufferOverflowMode(int lChannelNo, ref uint upFullMode);
|
|
|
|
//지정한 여러 입력 채널에 버퍼가 Full로 찼을 때 관리 방식을 설정한다.
|
|
//==================================================================================================//
|
|
// uFullMode : NEW_DATA_KEEP(0) --> 새로운 데이터 유지
|
|
// : CURR_DATA_KEEP(1) --> 이전 데이터 유지
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwSetMultiBufferOverflowMode(int lSize, int[] lpChannelNo, uint uFullMode);
|
|
|
|
//지정한 입력 채널에 버퍼의 상한 값과 하한 값을 설정한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwSetLimit(int lChannelNo, int lLowLimit, int lUpLimit);
|
|
|
|
//지정한 입력 채널에 버퍼의 상한 값과 하한 값을 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwGetLimit(int lChannelNo, ref int lpLowLimit, ref int lpUpLimit);
|
|
|
|
//지정한 여러 입력 채널에 버퍼의 상한 값과 하한 값을 설정한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwSetMultiLimit(int lSize, int[] lpChannelNo, int lLowLimit, int lUpLimit);
|
|
|
|
//지정한 여러 입력 채널에 H/W타이머를 이용한 A/D변환을 시작한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwStartMultiChannel(int lSize, int[] lpChannelNo, int lBuffSize);
|
|
|
|
//지정한 여러 입력 채널에 A/D변환을 시작 후 지정한 개수만큼 필터 처리해서 전압으로 반환한다.
|
|
//==================================================================================================//
|
|
// lSize : 사용할 입력 채널의 개수
|
|
// *lpChannelNo : 사용할 채널 번호의 배열
|
|
// lFilterCount : Filtering할 데이터의 개수
|
|
// lBuffSize : 각 채널에 할당되는 버퍼의 개수
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwStartMultiFilter(int lSize, int[] lpChannelNo, int lFilterCount, int lBuffSize);
|
|
|
|
//H/W타이머를 이용한 연속 신호 A/D변환을 중지한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwStopMultiChannel(int lModuleNo);
|
|
|
|
//지정한 입력 채널의 메모리 버퍼에 데이터가 몇 개인지 검사한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwReadDataLength(int lChannelNo, ref int lpDataLength);
|
|
|
|
//지정한 입력 채널에 H/W타이머를 이용하여 A/D변환된 값을 전압 값으로 읽는다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwReadSampleVoltage(int lChannelNo, ref int lpSize, ref double dpVolt);
|
|
|
|
//지정한 입력 채널에 H/W타이머를 이용하여 A/D변환된 값을 Digit 값으로 읽는다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwReadSampleDigit(int lChannelNo, ref int lpSize, ref uint upDigit);
|
|
|
|
//========== 입력 모듈 버퍼 상태 체크 함수 ===============================================================================
|
|
//지정한 입력 채널의 메모리 버퍼에 데이터가 없는 지 검사한다.
|
|
//==================================================================================================//
|
|
// *upEmpty : FALSE(0) --> 메모리 버퍼에 데이터가 있을 경우
|
|
// : TRUE(1) --> 메모리 버퍼에 데이터가 없을 경우
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwIsBufferEmpty(int lChannelNo, ref uint upEmpty);
|
|
|
|
//지정한 입력 채널의 메모리 버퍼에 설정되어 있는 상한 값보다 데이터가 많은 지 검사한다
|
|
//==================================================================================================//
|
|
// *upUpper : FALSE(0) --> 메모리 버퍼에 데이터가 상한 값보다 적을 경우
|
|
// : TRUE(1) --> 메모리 버퍼에 데이터가 상한 값보다 많을 경우
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwIsBufferUpper(int lChannelNo, ref uint upUpper);
|
|
|
|
//지정한 입력 채널의 메모리 버퍼에 설정되어 있는 하한 값보다 데이터가 적은 지 검사한다.
|
|
//==================================================================================================//
|
|
// *upLower : FALSE(0) --> 메모리 버퍼에 데이터가 하한 값보다 많을 경우
|
|
// : TRUE(1) --> 메모리 버퍼에 데이터가 하한 값보다 적을 경우
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiHwIsBufferLower(int lChannelNo, ref uint upLower);
|
|
|
|
//==External Trigger Mode 함수
|
|
//지정한 입력모듈의 선택된 채널들의 외부 트리거 모드를 시작한다.
|
|
//==================================================================================================//
|
|
// lSize : 지정한 입력 모듈에서 외부트리거를 사용 할 채널갯수
|
|
// *lpChannelPos : 지정한 입력 모듈에서 외부트리거를 사용 할 채널의 Index
|
|
[DllImport("AXL.dll")] public static extern uint AxaiExternalStartADC(int lModuleNo, int lSize, ref int lpChannelPos);
|
|
|
|
//지정한 입력모듈의 외부트리거 모드를 정지한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiExternalStopADC(int lModuleNo);
|
|
|
|
//지정한 입력모듈의 Fifo상태를 반환한다.
|
|
//==================================================================================================//
|
|
// *dwpStatus : FIFO_DATA_EXIST(0)
|
|
// : FIFO_DATA_EMPTY(1)
|
|
// : FIFO_DATA_HALF(2)
|
|
// : FIFO_DATA_FULL(6)
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaiExternalReadFifoStatus(int lModuleNo, ref uint upStatus);
|
|
|
|
//지정한 입력모듈의 외부신호에 의해 변환된 A/D값을 읽어옴.
|
|
// lSize : 지정한 입력 모듈에서 변환된 A/D값을 읽어올 채널의 갯수(AxaiExternalStartADC에 사용한 채널갯수와 동일 해야됨)
|
|
// *lpChannelPos : 지정한 입력 모듈에서 변환된 A/D값을 읽어올 채널의 Index(AxaiExternalStartADC에 사용한 채널의 Index와 동일 해야됨)
|
|
// lDataSize : 외부트리거에 의해 A/D변환된 값을 한번에 읽어 올 최대 데이타의 갯수
|
|
// lBuffSize : 외부에서(사용자 Program) 할당한 Data Buffer의 Size
|
|
// lStartDataPos : 외부에서(사용자 Program) 할당한 Data Buffer에 저장 시작 할 위치
|
|
// *dpVolt[] : A/D변환된 값을 할당 받을 2차원 배열 포인트(dpVlot[Channel][Count])
|
|
// *lpRetDataSize : A/D변환된 값이 Data Buffer에 실제 할당된 갯수
|
|
// *dwpStatus : A/D변환된 값을 Fifo(H/W Buffer)로 부터 읽을 때 Fifo상태를 반환함.
|
|
[DllImport("AXL.dll")] public static extern uint AxaiExternalReadVoltage(int lModuleNo, int lSize, ref int lpChannelPos, int lDataSize, int lBuffSize, int lStartDataPos, double[,] dpVolt, ref int lpRetDataSize, ref uint upStatus);
|
|
|
|
//========== 출력 모듈 정보 검색 함수 ====================================================================================
|
|
//지정한 출력 채널 번호로 모듈 번호를 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoInfoGetModuleNoOfChannelNo(int lChannelNo, ref int lpModuleNo);
|
|
|
|
//아날로그 출력 모듈의 전체 채널 개수를 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoInfoGetChannelCount(ref int lpChannelCount);
|
|
|
|
//========== 출력 모듈 설정 및 확인 함수 =================================================================================
|
|
//지정한 출력 채널에 출력 전압 범위를 설정한다
|
|
//==================================================================================================//
|
|
// AXT_SIO_RAO4RB
|
|
// dMinVolt : -10V
|
|
// dMaxVolt : 10V
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaoSetRange(int lChannelNo, double dMinVolt, double dMaxVolt);
|
|
|
|
//지정한 출력 채널의 출력 전압 범위를 확인한다.
|
|
//==================================================================================================//
|
|
// AXT_SIO_RAO4RB
|
|
// *dpMinVolt : -10V
|
|
// *dpMaxVolt : 10V
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaoGetRange(int lChannelNo, ref double dpMinVolt, ref double dpMaxVolt);
|
|
|
|
//지정한 여러 출력 채널에 출력 전압 범위를 설정한다.
|
|
//==================================================================================================//
|
|
// AO4R, AO2Hx
|
|
// dMinVolt : -10V
|
|
// dMaxVolt : 10V
|
|
//==================================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaoSetMultiRange(int lSize, int[] lpChannelNo, double dMinVolt, double dMaxVolt);
|
|
|
|
//지정한 출력 채널에 입력된 전압이 출력 된다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoWriteVoltage(int lChannelNo, double dVolt);
|
|
|
|
//지정한 출력 채널에 입력된 전압이 출력 된다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoWriteDigit(int lChannelNo, uint uDigit);
|
|
|
|
|
|
//지정한 여러 출력 채널에 입력된 전압이 출력 된다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoWriteMultiVoltage(int lSize, int[] lpChannelNo, double[] dpVolt);
|
|
|
|
//지정한 여러 출력 채널에 입력된 전압이 출력 된다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoWriteMultiDigit(int lSize, int[] lpChannelNo, uint[] upDigit);
|
|
|
|
//지정한 출력 채널에 출력되는 전압 값을 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoReadVoltage(int lChannelNo, ref double dpVolt);
|
|
|
|
//지정한 출력 채널에 출력되는 전압 값을 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoReadDigit(int lChannelNo, ref uint upDigit);
|
|
|
|
//지정한 여러 출력 채널에 출력되는 전압 값을 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoReadMultiVoltage(int lSize, int[] lpChannelNo, double[] dpVolt);
|
|
|
|
//지정한 여러 출력 채널에 출력되는 전압 값을 확인한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoReadMultiDigit(int lSize, int[] lpChannelNo, uint[] upDigit);
|
|
|
|
|
|
//============================ AXA User Define Pattern Generator ============================
|
|
// Pattern Generator 관련 함수들은 PCI-R32IO_RTEX_LCM 에서만 지원
|
|
// Channel User Define Pattern Generator를 설정 하는 함수 이다.
|
|
// AxaoPgSetUserInterval에 설정딘 시간 마다 Pattern을 순차적으로 출력한다.
|
|
// lLoopCnt : '0'(입력된 패턴을 무한대로 반복), 'value' : 지정된 횟수 만큼 입력 패턴 출력 후 마지막 패턴 유지
|
|
// : (MAX : 60000)
|
|
// lPatternSize : 입력 패턴 갯수(MAX : 8192) , PCI-R
|
|
[DllImport("AXL.dll")] public static extern uint AxaoPgSetUserPatternGenerator(int lChannelNo, int lLoopCnt, int lPatternSize, double[] dpPattern);
|
|
//AxaoPgSetUserPatternGenerator와 동일 기능, Digit 값으로 표현
|
|
[DllImport("AXL.dll")] public static extern uint AxaoPgSetUserPatternGeneratorDigit(int lChannelNo, int lLoopCnt, int lPatternSize, uint[] pDigitPattern);
|
|
|
|
// User Define Pattern Generator를 확인 하는 함수 이다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoPgGetUserPatternGenerator(int lChannelNo, ref int lpLoopCnt, ref int lpPatternSize, double[] dpPattern);
|
|
// User Define Pattern Generator를 확인 하는 함수 이다. Digit값으로 확인
|
|
[DllImport("AXL.dll")] public static extern uint AxaoPgGetUserPatternGeneratorDigit(int lChannelNo, ref int lpLoopCnt, ref int lpPatternSize, uint[] pDigitPattern);
|
|
|
|
// 해당 Channel의 Pattern Generator Interval을 설정 하는 함수 이다.
|
|
// 단위는 us(기본 Resolution : 500uSec)
|
|
[DllImport("AXL.dll")] public static extern uint AxaoPgSetUserInterval(int lChannelNo, double dInterval);
|
|
|
|
// 해당 Channel의 Pattern Generator Interval을 확인 하는 함수 이다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoPgGetUserInterval(int lChannelNo, ref double dpInterval);
|
|
|
|
// 해당 Channel의 Pattern Index / Loop Cnt를 확인 하는 함수 이다.
|
|
// Status의 경우 아래의 Status를 확인 할 수 있다.
|
|
// lpIndexNum : 현재 User Pattern의 Index
|
|
// lpLoopCnt : 현재 구동중인 Loop 횟수
|
|
// dwpInBusy : Pattern Generator의 구동 유무
|
|
[DllImport("AXL.dll")] public static extern uint AxaoPgGetStatus(int lChannelNo, ref int lpIndexNum, ref int lpLoopCnt, ref uint dwpInBusy);
|
|
|
|
// 해당 Channel의 User Define Pattern Generator를 시작 하는 함수이다. (AO 출력 시작)
|
|
// Start Channel 번호를 배열로 입력
|
|
// 입력된 채널에 대하여 동시에 패턴 생성 기능을 시작한다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoPgSetUserStart(int[] lpChannelNo, int lSize);
|
|
|
|
// 해당 Channel의 User Define Pattern Generator를 정지 하는 함수이다. (AO 출력 정지)
|
|
// 출력 정지시 출력값은 0Volt로 전환된다.
|
|
[DllImport("AXL.dll")] public static extern uint AxaoPgSetUserStop(int[] lpChannelNo, int lSize);
|
|
|
|
// Pattern Data를 Clear 하는 함수. (0x00으로 모든 영역을 Reset)
|
|
[DllImport("AXL.dll")] public static extern uint AxaPgSetUserDataReset(int lChannelNo);
|
|
|
|
// 지정한 출력 모듈의 Network이 끊어 졌을 경우 출력 상태를 채널 별로 설정하는 함수이다.
|
|
//===============================================================================================//
|
|
// lChannelNo : 채널 번호(분산형 슬레이브 제품만 지원 함)
|
|
// dwSetValue : 설정 할 변수 값(Default는 Network 끊어 지기 전 상태 유지)
|
|
// : 0 --> Network 끊어 지기 전 상태 유지
|
|
// : 1 --> Analog Max
|
|
// : 2 --> Analog MIN
|
|
// : 3 --> User Vaule(Default user value는 0V로 설정됨, AxaoSetNetworkErrorUserValue() 함수로 변경가능)
|
|
// : 4 --> Analog 0 V
|
|
//===============================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaoSetNetworkErrorAct(int lChannelNo, uint dwSetValue);
|
|
|
|
// 지정한 출력 모듈의 Network이 끊어 졌을 경우 출력 상태를 출력 Byte 단위로 설정한다.
|
|
//===============================================================================================//
|
|
// lChannelNo : 채널 번호(분산형 슬레이브 제품만 지원 함)
|
|
// dVolt : 사용자 정의 아날로그 출력 전압 값
|
|
//===============================================================================================//
|
|
[DllImport("AXL.dll")] public static extern uint AxaoSetNetworkErrorUserValue(int lChannelNo, double dVolt);
|
|
|
|
}
|
|
|