"LabWindows/CVI 개발자 모임" 네이버 카페에서 파격적으로 소스까지 공개한 RS-232 통신방법을 보여주는 MeasVCTP 프로그램에 대해 소개드리겠습니다.

 

LabWindows/CVI로 개발한 프로그램 공유를 위한 공유주제 계획은 다음 글을 참고하십시오.

cafe.naver.com/cvi/31

 

차례
서론
1. 준비 프로그램
2. PC의 RS-232 포트 상황
3. MeasVCTP 프로그램의 개요
4. Dash Board 화면
5. 실시간 그래프 화면
6. 데이터 그래프 화면
7. Result 테이블 화면
마무리

 

 

서론
이번 공유주제3(SS3)에서는 전압, 전류, 온도, 압력 데이터를 가상으로 생성하는 RS-232 Simulator 프로그램으로부터 RS-232 통신을 통해 데이터를 전달받아 모니터링, 측정, 계산하여 데이터과 결과를 저장하는 MeasVCTP 프로그램에 대해 설명 드리겠습니다.

 

1. 준비 프로그램
RS-232 통신하는 프로그램을 보여주려면 상대 장치가 필요한데, 이를 소프트웨어적으로 시뮬레이션하는 CisRS232Simulator 프로그램을 이용합니다.

CisRS232Simulator 프로그램의 OnlyRunFile 설치 파일은 다음 링크에서 다운로드 받으시면 됩니다.

cafe.naver.com/cvi/63

 

LabWindows/CVI 2017 이상의 Runtime Engine이 설치되어 있지 않다면, 다음 링크를 통해 Runtime Engine도 설치하십시오.

cafe.naver.com/cvi/61

 

CisRS232Simulator 프로그램의 실행화면은 그림 1.1에 나타내 보였습니다.

 

그림 1.1 CisRS232Simulator 프로그램의 실행화면

 

2. PC의 RS-232 포트 상황
제 노트북의 시리얼 포트 상황은 그림 2.1과 같습니다.

VSPD(Virtual Serial Port Driver) 프로그램으로 소프트웨어적으로 COM10, COM11을 만들어 Pair로 묶은 것입니다.

 

그림 2.1 장치관리자의 시리얼 포트 설정 상황

 

3. MeasVCTP 프로그램의 개요
MeasVCTP라는 프로그램 이름은 Measurement Voltage, Current, Temperature, and Pressure를 줄인 것입니다.

​MeasVCTP 프로그램을 처음 실행하면, Base 폴더를 지정하기 위한 대화상자가 그림 3.1과 같이 표시됩니다.
기본으로 지정된 D:\Work\MeasVCTP 폴더를 지정합니다.

 

그림 3.1 MeasVCTP 프로그램의 Base 폴더 선택 대화상자

 

그림 3.2에 MeasVCTP 프로그램의 실행화면을 보였습니다. 아마 처음 설치하시면 창의 배치가 다르게 보일 수 있습니다. 크기조절 가능한 창을 크기조절하고 옮겨놓으면 됩니다.

 

그림 3.2 MeasVCTP 프로그램의 실행화면 예

 

그림 3.3에는 MeasVCTP 프로그램의 처리 개요를 나타내었습니다.

 

그림 3.3 MeasVCTP 프로그램의 처리도해

 

MeasVCTP 프로그램의 주요기능은 RS-232 통신을 통해 수신된 전압, 전류, 온도, 압력 데이터를 실시간 모니터링을 하고, 측정을 하여 Raw 데이터를 저장하고, 측정된 데이터에 대해 계산을 수행하여 그 계산 결과를 테이블에 표시하고, 결과 데이터 파일에도 저장합니다.

 

4. Dash Board 화면
그림 4.1에는 MeasVCTP 프로그램의 대시보드(Dash Board) 창을 보였습니다. RS-232 통신설정 및 통신상태표시 LED, 각 데이터의 수치 표시, 측정 시작과 종료를 위한 기능 버튼, 그리고 실시간 그래프 창, 데이터 그래프 창, 결과 데이터 창을 보이기 위한 토글 버튼으로 구성되어 있습니다.

 

그림 4.1 MeasVCTP 프로그램의 대시보드 화면

 

5. 실시간 그래프 화면
그림 5.1에는 실시간 그래프 창을 보였습니다. 보기 원하는 데이터 채널을 선택할 수 있고, 계속 흘러가는 그래프를 Hold 시켜서 살펴볼 수도 있습니다.

 

그림 5.1 MeasVCTP 프로그램의 실시간 그래프 창

 

6. 데이터 그래프 화면
그림 6.1에는 데이터 그래프 창을 보였습니다. 창의 크기를 자유롭게 조절할 수 있습니다.

 

그림 6.1 데이터 그래프 창

 

데이터 그래프 창은 측정된 데이터만을 보여준다는 점입니다. 측정 중이거나 측정이 종료된 데이터를 그래프에 표시합니다.
측정은 대시보드 창의 "Start DAQ" 버튼을 누르면 측정이 시작되고, "Stop DAQ" 버튼을 누르면 측정이 종료됩니다.

 

그림 6.2 측정된 데이터가 표시된 데이터 그래프 창(그래프 커서 표시)

 

그림 6.2에 보인 바와 같이 데이터 분석을 위해 그래프 커서도 2개가 준비되어 있습니다. 오른쪽 텍스트박스에는 각 그래프 커서의 위치값과 두 그래프 커서 간의 차이값을 보여줍니다.

대시보드의 "측정 종료 후 자동저장" 옵션이 체크되어 있으면, "Stop DAQ" 버튼이 실행되었을 때, Raw 데이터 파일이 저장됩니다.

측정된 Raw 데이터 파일은, 대시보드 화면의 메뉴 중 폴더 메뉴의 "Data 폴더 열기" 서브메뉴를 선택하면, 윈도 탐색기가 실행되어 해당 폴더를 보여줍니다.

그 폴더는 날짜별 폴더로 구분되어 .basic_data 파일과 .csv 파일 두가지로 저장됩니다.

​그림 6.3에 csv로 저장된 Raw 데이터 파일을 보였습니다.

 

그림 6.3 csv Raw 데이터 파일

 

7. Result 테이블 화면
대시보드 창에서 "측정 종료 후 결과 데이터 추가"라는 옵션이 선택되어 있으면, 측정 종료 후에 계산된 결과가 그림 7.1에 보인 Result 테이블에 추가됩니다.

 

그림 7.1 Result 테이블에 추가된 결과 데이터

결과 데이터 파일은 Data 폴더에서 월 단위 폴더로 이동하면, ResultP01_20210227.result_data와 ResultP01_20210227.csv 같은 파일명 형식의 파일이 보일 것입니다.

 

​그림 7.2에 csv 결과 데이터 파일을 열어 보였습니다.

 

그림 7.2 csv 결과 데이터 파일

 

마무리
이상으로 RS-232 통신을 통해 데이터를 획득하고, 저장하며, 계산 결과를 저장하는 MeasVCTP 프로그램을 소개해 드렸습니다.

"LabWindows/CVI 개발자 모임" 네이버 카페의 강좌/팁 게시판에서 다음 제목의 글을 찾으시면, 프로젝트(소스) 파일도 다운로드 받으실 수 있을 것입니다.


"[성실맨프로젝트:3] 공유주제3(SS3)에 대한 성실맨의 MeasVCTP 프로젝트(소스) 파일입니다" 

 

 

https://cafe.naver.com/cvi

 

LabWindows/CVI 개발자 모임 : 네이버 카페

National Instruments (NI) 사의 개발 소프트웨어인 LabWindows/CVI 개발자 정보교류 모임 카페입니다.

cafe.naver.com

 

진짜 마지막으로, 본 소개글을 동영상으로 설명한 유튜브 링크를 걸어드립니다.

 

RS-232 통신 프로그램 MeasVCTP 프로그램 소개

유튜브 동영상 링크: https://youtu.be/aZ-ylp3B4Mk

 

LabWindows/CVI로 즐거운 장비 프로그램 개발 되시기 바랍니다.

 

2021-03-04(목)

성실맨 허창원

극동테크(www.kdtechno.com)

'LabWindows/CVI' 카테고리의 다른 글

LabWindows/CVI에서 OpenCV 사용하기  (3) 2014.01.02
Posted by 허창원
,

* 예수님의 사랑으로 축복합니다.


LabWindows/CVI에서 OpenCV 사용하기


허창원()


차례

개요

1. LabWindows/CVI 버전

2. OpenCV 버전

3. LabWindows/CVI의 include 경로 옵션

4. 테스트 프로그램 작성 및 테스트



개요

인텔(Intel)사에서 후원하는 오픈소스 컴퓨터 비전 라이브러리인 OpenCV를 LabWindows/CVI에서 사용하기 위해 테스트하던 중 몇가지 미리 알아두면 편리한 사항이 있어서 이렇게 글을 쓰게 되었습니다. LabWindows/CVI로 OpenCV를 이용하기 위한 분들을 위한 것일뿐 아니라 사실 저 자신을 위한 것이기도 합니다. 시간이 오래 지나고 나면, 저도 기억이 가물가물해져서 누군가에서 설명을 하려고 하면 뭔가를 빠트리곤 하기 때문입니다. 어쨌거나 제 글이 도움이 되실 분들이 있을 것이라고 믿고 시작합니다.


1. LabWindows/CVI 버전

이 글을 작성하는 날짜는 2014년 1월 2일입니다. 현재를 기준으로 NI LabWindows/CVI는 2013 버전이 나와 있습니다. 정확히 말해 LabWindows/CVI 2013 f1 Patch 버전입니다.



그림 1.1 LabWindows/CVI 2013 로고


그리고, 저는 예전에 수행한 프로젝트도 지원해야할 필요도 있어서 그림 1.2와 같이 여러 버전의 LabWindows/CVI를 설치해두고 적절한 버전을 선택하여 사용하고 있습니다.



그림 1.2 여러버전의 LabWindows/CVI가 설치되어 있는 환경


이번 테스트에서는 LabWindows/CVI 2010 sp1 버전부터 2013 버전까지 이용해보았습니다.


2. OpenCV 버전

이 글을 사용하기 전에 OpenCV Version 2.4.7.2 로 테스트하였는데, OpenCV 사이트에 방금 접속해보니 그저께 새로운 버전, Version 2.4.8 이 올라와있네요. 새로 다운로드 받아 글을 써 나가겠습니다.



그림 2.1 OpenCV 버전(2014-01-02 현재)


OpenCV v2.4.8 버전을 다운로드 받아서 임의의 폴더에 압축을 해제한 후에, 전체 파일들을 아래의 경로에 이동시켰습니다. 그림 2.2에서는 include 시킬 폴더를 열어둔 화면입니다.


D:\OpenCV\OpenCV_v2.4.8


그림 2.2 OpenCV 설치된 경로



3. LabWindows/CVI의 include 경로 옵션

LabWindows/CVI 2013 버전을 실행한 다음, 테스트를 위해 새 프로젝트 파일을 열어 저장합니다. 파일명은 LOCV_p042.prj 로 지정하였습니다. (참고한 책이름 약어와 페이지를 적절히 조합한 이름입니다)


그림 3.1에 보인 대로, CVI 프로젝트 창의 메뉴에서 Options - Environment 를 선택합니다. (저는 CVI 작업환경을 아래와 같이 사용합니다. 저처럼 사용하시려면, View - Workspace View Selection... 메뉴에서 Classic View를 선택하시면 됩니다.)


그림 3.1 LabWindows/CVI Environment 옵션 선택



그림 3.2 LabWindows/CVI의 Include Paths... 설정


그림 3.3에 보인대로 OpenCV의 include 폴더를 지정합니다. Browse 버튼을 눌러 해당 경로를 찾아가 선택하면 되겠습니다. 저는 "Switch Lists (F6)" 버튼을 눌러 현재 프로젝트에서만 이 include 환경이 적용되도록 하였습니다. (저처럼 이렇게 하면, 매번 새로운 OpenCV 프로젝트를 시작할 때마다 해주어야하는 번거로움이 있겠지만, 매번 기억을 새롭게 하는 데에 도움이 될 것같고, OpenCV 버전이 바뀌더라도 한번 더 챙겨볼 수 있을 것같아 저는 이렇게 하였습니다)


그림 3.3 OpenCV Include 폴더 경로 지정


4. 테스트 프로그램 작성 및 테스트

그림 4.1에는 테스트를 위한 소스 프로그램을 편집하여 보았습니다. 일반적으로 많이 소개되는 Visual C++의 예제와 달리 간단하게 하나의 파일로 테스트 예제를 구성할 수 있습니다. ANSI C 규칙에 충실한 LabWindows/CVI의 단순하고 간결한 장점이라고 저는 봅니다.


그림 4.1 OpenCV 를 이용한 이미지 파일 불러와서 보이는 예제


이미지로 소스를 보이면 타이핑하기 불편하실까봐 소스도 아래에 넣었습니다.


// LOCV_p042.c
// 사용법: LOCV_p042.exe <imagefile>
//
#include <ansi_c.h>
#include "opencv/highgui.h"

int main (int argc, char *argv[])
{
    if(argc > 1)    // 명령행 인자로 파일명이 지정되어야 함
    {
        IplImage* img;
       
        // 파일을 불러오고,
        img = cvLoadImage( argv[1], -1);     
   
        // 이미지를 표시할 창의 이름을 정하고
        cvNamedWindow("Example", CV_WINDOW_AUTOSIZE);  
   
        // 이미지를 보여주고,
        cvShowImage("Example", img);                   
       
        // 키 입력을 기다리고,
        cvWaitKey(0);                                  
   
        // 이미지를 해제한후
        cvReleaseImage(&img);                          
   
        // 창을 닫습니다.
        cvDestroyWindow("Example");                    
    }
    else    // 파일명을 명령행 인자로 주지 않았을 때...
    {
        printf("Command Line Argument required!");
        getchar();
    }
   
    return 0;
}


위와 같이 제대로 타이핑되었다면, Build - Build(Ctrl + M) 메뉴를 선택하여 Build 합니다. 그러면, 그림 4.2와 같이 에러가 날 것입니다.



그림 4.2 Build 시의 컴파일 에러


마지막 줄의 types_c.h 에서 생긴 에러로 인해 앞의 warning도 생긴 것입니다. 이 마지막줄을 더블클릭하면 그림 4.3과 같이 문제가 된 해당 소스 파일이 열립니다.



그림 4.3 문제가 된 types_c.h 헤더파일의 해당 라인


lrint() 라는 함수의 프로토타입이 제대로 선언되어 있지 않다는 에러인데, 이 문제에 대해 CVI 표준 include 파일들과 Visual C++의 표준 헤더파일들을 비교해 보는 등 여러가지를 시도한 끝에 문제가 된 문장을 아래와 같이 바꾸어버렸습니다. 즉, OpenCV의 types_c.h 헤더파일을 수정하였습니다.


return (int)(value > 0 ? value+0.5 : value-0.5);


그리하여, types_c.h 헤더파일이 그림 4.4와 같이 수정되었습니다.


그림 4.4 수정된 types_c.h 헤더파일


다시 빌드해보면, 이제는 Link 에러가 그림 4.5와 같이 나타납니다. (Compile 단계에서는 warning 정도가 나오는데, 살펴본 결과 무시해도 되겠습니다.)


그림 4.5 Link 에러


이것은 Library가 없어서 그런 것인데, 저는 정적 library보다는 DLL을 주로 이용할 것이기 때문에, 아래의 경로에서 Import Library를 CVI 프로젝트에 포함시킵니다. (이번 테스트에서는 아래의 두 library만 있으면 되므로...)


D:\OpenCV\OpenCV_v2.4.8\build\x86\vc12\lib


그림 4.6 LOCV_p042 프로젝트에 포함시킬 Import Library


이제 Build 해보니, 정상적으로 Build 되었습니다. 이제 실행을 위해 아래의 경로에서 해당 DLL을 실행 폴더로 복사해와야겠습니다.


D:\OpenCV\OpenCV_v2.4.8\build\x86\vc12\bin


그림 4.7 LOCV_p042.exe 실행을 위한 DLL


그리고, 불러올 이미지 샘플을 아래의 경로에서 실행 폴더로 복사해 옵니다.


D:\OpenCV\OpenCV_v2.4.8\sources\samples\c


그림 4.8 LOCV_p042.exe 실해시에 이용할 샘플 이미지 파일


이제 그림 4.9와 같이 실행에 필요한 파일들이 다 모인 것 같습니다.


그림 4.9 LOCV_p042.exe 실행 폴더


실행할 때 주의할 점은, 불러올 이미지 파일명을 명령행 인자로 주어야한다는 것입니다. LabWindows/CVI의 Run - Specify Executable and Command Line.... 메뉴에서 지정해도 되겠지만, 그냥 명령 프롬프트(cmd) 창을 열어서 그림 4.10과 같이 실행을 하였습니다.



그림 4.10 명령 프롬프트(cmd)에서 LOCV_p042.exe 실행하기


실행을 했더니, 그림 4.11과 같은 에러가 나타납니다. 헉.... MSCVP120.dll 이 무슨 파일인지 인터넷 검색을 해보니, Microsoft Visual Studio 2013 관련 DLL인 것 같습니다. Visual C++ 2013 Run-Time Engine이라고 보면 되겠습니다. (OpenCV v2.4.7.2와는 달리 v2.4.8은 VC++ 2013 버전으로 개발한 모양입니다.)



그림 4.11 Visual C++ Runtime 에러



Microsoft Download Center로 가서 "Visual Studio 2013용 Visual C++ 재배포 가능 패키지"를 다운로드 받아서 설치합니다. (저는 Windows 7 x64 버전을 사용하지만, Visual C++ 재배포 가능 패키지는 x86 버전을 설치하였습니다. OpenCV도 x86 버전을 이용하였습니다.)


그림 4.12에 다운로드 및 설치과정을 보였습니다.


http://www.microsoft.com/ko-kr/download/details.aspx?id=40784




그림 4.12 Microsoft Visual C++ 2013 재배포 가능 패키지 설치


이제 다시, 그림 4.10과 같이 실행했더니, 그림 4.13과 같이 cat.jpg 이미지 파일을 불러와서 창을 띄워 보여줍니다.



그림 4.13 LOCV_p042.exe 실행화면



이렇게 하여, LabWindows/CVI에서 OpenCV를 사용하는 첫과정을 살펴보았습니다. LabWindows/CVI 2010 sp1, 2012 sp1 버전에서도 문제없이 빌드되었고, 실행되었습니다.

단, LabWindows/CVI 9.0.1 버전에서는 문제가 발생하던데, 오래된 버전이라 문제를 해결하기 위해 더 이상 시도하지는 않았습니다.


본 글은 CVI정보나눔(www.cvi.kr)에도 좀더 다듬어서 올릴 예정입니다.

LabWindows/CVI로 OpenCV를 이용하는 모든 분들에게 좋은 일이 많이 있기를 바랍니다.


2014-01-02

허창원


Posted by 허창원
,