OMR API 안내  ★  OMR API 를 이용하면 OMR 장비를 100% 활용할 수 있습니다
◇ 특징
32비트 윈도우즈용 DLL (Dynamic Link Library : Windows 95/98/NT)
뛰어난 호환성 : 제조회사, 모델명, 판독기 사양에 관계없이 동일한 함수 사용
손쉬운 사용법 : 복잡한 명령, 오류코드, Serial 통신에 따른 불편함을 모두 해소
모든 SHEET 규격 지원 : 단면 또는 양면 동시 판독, 12행, 24행, 32행, 40행, 48행
◇ 장점
현재 사용중인 개발툴에서 OMR 장비를 직접 제어하여 오류 검사 및 서버 DBMS 연동 가능
한 번의 프로그램 작성으로 동일(48행) 규격의 모든 OMR 장비 사용 가능 (제조 회사, 모델명 상관 없음)
가로방향, 세로방향 자료 분석, 한글 조합 기능으로 주소 입력 등 어떤 업무에도 쉽게 적용
◇ 지원 가능 개발툴
PowerBuilder, Delphi, C++ Builder, Visual Basic, Visual C++
SQL Windows, Oracle Developer, 기타 Win32 API 사용 가능한 개발툴
◇ 지원 가능 판독기

SPC 전 기종 : MR-180, MR-180H, MR-118, MR-230, MR-240, MR-245, MR-300
SEKONIC 전 기종 : SR-305S, SR-410, SR-430, SR-500, SR-510, SR-360, SR-700K, SR-730
                           SR-900, SR-9100, SR-9700, SR-1800, SR-2300, SR-3500, SR-5500, SR-6500
SEKONIC 호환 기종 : SL-450, SP-100, SP-200, SP-500, SP-600, NICE2000, BR-3000
                           SUPER-1000, SUPER-1000+ (plus), SUPER-165, SUPER-6000
SCANTRON 전 기종 : ScanMark 2000, ES-2010, SM-2250, ES-2260, SM-2500, ES-2800, SM-5500, 995
NCS OpScan 전 기종 : OpScan 2, OpScan 3, OpScan 4, OpScan 5, OpScan 6, OpScan 7, OpScan 8
                                 OpScan 4U, OpScan 4ES, iNSIGHT 4

◇ OMR API 활용 예제  ★  아래 답안지를 기준으로 C++ 언어에서 활용하는 예제




모든 CARD / SHEET 규격에 상관없이 칼럼, 라인 번호를 부여할 때는
검정색 타이밍 마크를 아래쪽으로 해 놓은 상태에서 칼럼, 라인번호를 부여합니다.
뒷면도 타이밍 마크를 아래쪽으로 해 놓은 상태에서 위 그림과 같이 칼럼, 라인번호를 부여합니다.

#include "omrapi.h"

void main(void)

{

    int ret, err, i, j, c ;

    char err_msg[300] ;

     

    ret = OmrOpen(0, 0, 1, 0, 0) ; // COM1, 9600, E, 7, 1

    if (ret < 0) {

      printf("통신포트(COM1)를 열 수 없습니다") ;

      return ;

    }

    while (1) {

      ret = OmrRead(29, 0, err_msg) ; // SHEET 읽기 (앞면=29칼럼, 뒷면=없음)

      if (ret < 0) { // 읽기 오류발생

        printf("오류내용 : %s", err_msg) ;

        break ;

      }

      err = 0 ;

      printf("\n수험번호 : ") ;

      for (i=1; i<=5; i++) { // 5자리 반복

        c = OmrPosLin(1, i, 10, 10, -1) ; // 앞면, 칼럼=1, 라인=10, 마크갯수=10, 이동라인=-1

        printf("%c", (c==-2) ? '*' : (c==-1) ? 'B' : c+'0') ; // 중복표기='*' , 공백='B'

        if (c < 0) err = 1 ; // 하나라도 공백, 중복표기시 에러스태커로 보냄

      }

      for (j=0; j<6; j++) {  // 객관식 6개 블록 (1번 ~ 60번)

        for (i=1; i<=10; i++) { // 10문항 반복

          // 앞면, 시작칼럼=6, 시작라인=10, 마크갯수=4, 이동칼럼=1

          c = OmrSumCol(1, 6+j*4, 11-i, 4, 1) ;

          printf("\n객관식 %d번 = %d", j*10 + i, c) ;

        }

      }
      //
      //
      원하는 위치에서 서버 DB 와 연동하여 select / insert / update
      //

      if (err) OmrReject(2) ; // SHEET를 에러스태커로 보냄

      else OmrReject(1) ; // SHEET를 정상스태커로 보냄

    }

    OmrClose() ;

}