[Chapter 9] 보고서
본문
9. 보고서
eRun SCADA의 보고서 관리기능을 통해서 프로젝트 실행 중에 저장된 태그데이터를 가공하여
일정한 보고서 양식에 맞게 사용자가 원할 때 프린터에 출력하거나 자동으로 매일 정해진 시간에 출력하거나
파일에 저장할 수 있습니다.
■ 보고서의 양식은 eRun의 SF-FORM과 엑셀(MS-EXCEL)로 나누어 집니다.
■ SF-FORM은 그리기 편집도구를 이용하여 보고서 양식을 생성하고 편집합니다.
■ 스크립트를 작성해서 보고서에 반영할 수 있습니다.
■ 사용자가 수동으로 특정 일보/주보/월보/연보의 보고서를 출력할 수 있습니다.
■ 자동으로 사용자가 지정한 시간에 출력할 수 있습니다.
■ 현재 태그 값을 출력할 수 있습니다.
■ 보고서 결과는 파일에 저장하거나 프린터로 출력할 수 있습니다.
9.1 보고서 모델 생성하기
보고서 양식에 따라 보고서 템플릿을 선택하고 출력방식이나 출력시간 등을 상황에 맞게 설정해서
여러개의 보고서를 등록하고 사용할 수 있습니다. 엑셀 양식을 사용하는 보고서 모델생성은 아래와 같은 순서로 진행합니다.
① 보고서 양식 엑셀파일 생성 (C:/sefa/eRun/Project/프로젝트명/ReportTemplate/template1.xls)
② 보고서 생성용 스크립트 함수 작성
③ 보고서 모델 생성
④ 엑셀 양식파일 선택
⑤ 실행 스크립트 선택(사용자가 작성한 보고서 처리함수)
프로젝트 관리에서 보고서 항목을 선택하면 보고서관리 팝업메뉴가 아래와 같이 나타나고
[새 보고서]만 활성화 되어있습니다.
[보고서 관리 팝업메뉴]
[새 보고서] 클릭하면 아래와 같이 생성 창이 나타납니다.
항목 |
설명 |
보고서 모델명 | 보고서 이름을 입력합니다. 보고서의 모델명을 스크립트 내부함수 등에서 호출되므로 다른 오브젝트의 이름과 중복되지 않도록 합니다. |
보고서 양식 | 보고서 양식으로 SF-FORM, MS-EXCEL 두가지 모델이 있으며, SF-FORM양식을 지정하면 보고서 폼을 스튜디오를 이용하여 폼을 직접 그리고, 출력 값을 지정할 수 있으며, MS-EXCEL 양식을 지정하면 엑셀에서 작성한 폼을 이용해서 원하는 시트, 셀에 보고서 내용을 출력합니다. |
활성화 | 보고서 활성화 여부를 설정합니다. 기본적으로 보고서 출력을 원할 때는 활성화가 되어 있어야 합니다.
위의 그림에서 Report1은 활성화 상태이며, Report2는 비활성화 상태입니다. |
태그 값이 있으면 출력 | 체크가 되면 태그 값을 보고 0이 아니면 보고서 출력이 됩니다. 주로 수동으로 원하는 시간에 보고서 출력을 할 경우 사용합니다. 사용된 후에는 태그값이 "0"으로 초기화 됩니다. 태그는 디지털 태그 또는 아날로그 태그로 지정합니다. 다수의 보고서가 있는 경우 이 항목에 대해서는 서로 다른 태그를 설정해야 합니다. 태그이름은 '@'붙여서 입력해 줍니다. |
출력 기준시간 태그 | 수동으로 출력을 할 때, 원하는 날짜의 데이터를 출력하고자 할 경우 미리 태그에 날짜를 넣어주고 선택하도록 합니다. 설정이 되어 있지 않으면 당일 날짜 데이터를 기준으로 출력합니다. 날짜의 형태는 "YYYY-MM-DD hh:mm:ss"의 문자열 이어야 합니다. |
자동출력 | 자동 출력 여부를 설정합니다. 자동출력을 정하면 보고서 형태와 출력시간이 활성화 되며, 설정된 사항(파일, 프린터)로 출력됩니다. |
보고서 출력형태 | 일간/주간/월간/연간 형태를 선택하며, 그 선택에 따라서 출력시간을 선택할 수 있습니다. ■ 일간 : 매일 출력 시간에 맞추어서 자동 출력/저장합니다. ■ 주간 : 매주 출력날짜 및 시간에 맞추어 자동 출력/저장합니다. ■ 월간 : 매월 출력날짜 및 시간에 맞추어 자동 출력/저장합니다. ■ 연간 : 매년 출력 월일 및 시간에 맞추어 자동 출력/저장합니다. |
출력시간 | 출력/저장시간을 지정합니다. 보고서 형태에 따라 월, 일, 요일, 시간을 지정합니다. |
프린터 출력 | 보고서 결과를 출력하고자 하는 프린터를 선택합니다. |
파일에 출력 | 생성된 보고서 파일의 저장경로를 지정해야 합니다. 저장경로가 올바르지 않거나 존재하지 않으면 경고 메시지가 표시됩니다. |
저장완료 후 파일 열기 | 보고서가 완성된 후 저장하고 자동으로 파일을 엽니다. 수동으로 출력을 하는 경우에만 설정을 권장합니다. |
출력 프린터 | SF-FORM에서 출력할 프린터를 지정합니다. |
저장경로 | 보고서 파일을 저장할 경로를 지정합니다. 저장경로가 올바르지 않거나 존재하지 않으면 경고 메시지가 표시됩니다. |
파일명 태그 사용 | 보고서 양식이 MS-EXCEL일 때 활성화되며, 파일명을 태그로 사용하여 저장합니다. |
완료 후 실행 스크립트 | 보고서 출력(프린터, 파일저장)이 완료된 후 어떤 후 어떤 특정한 메시지를 띄우거나 로그를 기록하거나 등의 작업을 할 경우 호출되는 사용자 스크립트 함수를 지정합니다. 수동으로 출력할 경우에만 설정을 권장합니다. |
완료 후 메시지 출력 | 보고서 생성(프린터, 파일저장)이 완료된 후 지정한 메시지를 출력합니다. 수동으로 출력할 경우에만 설정을 권장합니다. |
양식파일 | 엑셀양식 파일을 선택합니다. 양식파일 우측의 버튼을 클릭해서 양식파일을 선택합니다. |
시트이름 | MS-EXCEL에 여러 개의 시트로 구성된 경우 저장할 시트이름을 입력합니다. 한 개 이상의 시트명을 지정할 수 있으며, 시트이름 구분자로 세미콜론(;)을 사용하며, 지정하지 않으면 EXCEL 기본 시트명으로 출력됩니다. |
실행 스크립트 | MS-EXCEL 양식의 보고서는 출력하고자 하는 데이터를 스크립트에서 작성하여야 합니다. 프로젝트에서 출력 실행 스크립트를 작성해두고 그 함수를 지정해서 EXCEL 보고서 양식 출력으로 활용합니다. |
읽기 전용으로 저장 | 엑셀파일을 저장시 읽기 전용으로 저장 여부를 설정합니다. 보고서 파일을 사용자가 수정할 수 없도록 하기 위해서 사용합니다. |
오류 메시지창 보이기 | MS-EXCEL을 이용한 출력시 오류가 발생하는 경우 이를 화면에 보여주도록 하기 위해 필요합니다. 정상 운전시에는 미설정을 권장합니다. |
암호 | 저장파일에 암호를 설정합니다. 보고서 파일의 보안을 위해서 암호를 사용합니다. |
9.2 보고서 삭제
이미 만들어진 보고서 위치에서 마우스 우측버튼을 클릭하면 아래 그림같이 팝업메뉴가 나타납니다.
이것은 기존의 보고서를 삭제 할 수 있도록합니다.
보고서관리 항목에서 삭제하고자 하는 보고서 모델을 선택하고 우측마우스를 클릭하면 아래 그림과 같이
팝업메뉴가 나타납니다.
팝업메뉴에서 [보고서 삭제]를 클릭하면 해당 보고서 모델 '일간보고서' 삭제 확인메시지 박스가 나타납니다.
'확인'을 클릭하여 프로젝트에 등록 되어있는 보고서 모델을 삭제합니다.
9.3 보고서 모델 다른이름으로 추가
동일한 양식으로 이름만 변경할 경우 현재의 보고서를 다른 이름으로 추가합니다.
[다른이름으로 추가] 메뉴를 클릭하면 아래와 같이 나타납니다.
보고서의 이름은 스크립트 내부함수 등에서 호출되므로 다른 오브젝트의 이름과 중복되지 않도록 합니다.
9.4 MS-EXCEL 보고서 처리용 스크립트 함수
보고서 유형을 MS-EXCEL파일을 사용할 때 사용되는 내장함수 입니다.
_RepGetValue("보고서모델명", 시트번호, "셀명", "태그명", "시간", 값종류, "검색조건")
태그값을 데이터베이스에서 검색하고 결과를 MS-EXCEL 파일의 지정시트, 셀에 출력합니다.
데이터베이스는 eRunDB유형이고 SQL 데이터베이스는 해당되지 않습니다.
파라메터에 대한 설명은 아래와 같습니다.
보고서모델명(문자열)
프로젝트에 등록되어 있는 보고서 모델이름을 문자열 형태로 지정합니다.
시트번호(정수)
엑셀 시트번호를 0번부터 지정합니다. 보고서 모델에 시트가 등록되어 있어야 합니다.
아래 그림에서 시트이름이 3개이다. Report1;Report2;Report3;
보고서 파일이 생성되고 파일을 열어보면 엑셀시트명이 순서대로 3개가 만들어집니다.
셀명(문자열)
해당 시트의 특정 셀번호를 입력합니다. 예를 들어서 "C10" 같은 형식으로 셀의 번호를 입력합니다. 동일한 시트에
동일한 셀을 두번 사용하면 두번째 셀은 검은색으로 무시되니 주의하시기 바랍니다.
태그명(문자열)
검색하고자 하는 태그 이름을 입력합니다.(예 - "TagGroup1.POWER" - 태그구분자 기호'@'는 붙이지 않습니다.)
시간(문자열)
필요한 순간의 데이터를 검색하기 위해서 입력합니다. 시간의 형태는 아래와 같습니다.
■ 일간보고서 출력에 필요한 형태
형식은 : DAY + 'D' + ',' + TIME + 'H'
기준시간일자를 정해서 특정시간 데이터를 가져옵니다. 몇일, 몇시 데이터를 가져오는지에 대한 의미입니다.
기준시간이 설정 되어있지 않은 경우는 오늘 날짜를 기준시간으로 사용합니다.
DAY : 기준시간보다 몇일 전(-) 또는 몇일 후(+)의 정수를 입력합니다. 0을 입력하면 기준시간을 사용합니다.
TIME : 몇시 데이터를 의미하며 1시 (00:00:00 ~ 00:59:59) 데이터 부터 24시(23:00:00 ~ 23:59:59) 데이터를 사용합니다.
(사용 예)
기준시간 일자 : 2009-1-9 09:00:00 설정되어 있을 경우
0D, 1H : 2009-1-9 00:00:00 ~ 2009-1-8 00:59:59
0D, 24H : 2009-1-9 23:00:00 ~ 2009-1-8 23:59:59
-1D, 1H : 2009-1-8 00:00:00 ~ 2009-1-8 00:59:59
-1D, 24H : 2009-1-8 23:00:00 ~ 2009-1-8 23:59:59
1D, 1H : 2009-1-10 00:00:00 ~ 2009-1-10 00:59:59
1D, 24H : 2009-1-10 23:00:00 ~ 2009-1-10 23:59:59
■ 주간보고서 출력에 필요한 형태
형식은 : WEEK + 'W' + ',' + DATE
기준시간일자를 정해서 특정요일의 종일 데이터를 가져옵니다. 몇째 주 몇 요일 데이터를 가져오는지에 대한 의미입니다.
기준시간이 설정되어있지 않은 경우는 오늘 날짜를 기준시간으로 사용합니다.
WEEK : 기준일자시간보다 몇주 전(-)또는 몇주 후(+)의 정수를 입력한다. 0을 입력하면 기준시간을 사용합니다.
DATE : 주간 요일을 정해진 문자열로 입력합니다.(SUN, MON, TUE, WED, THU, FRI, SAT)
(사용 예)
기준시간일자 : 2013-4-29 09:00:00 설정되어있을 경우
0W, SUN : 기준시간일자가 속해있는 주의 앞선 일요일의 종일 데이터(2013-4-29 00:00:00 ~ 2013-4-29 23:59:59)
-1W, SUN : 일주일 전 일요일 종일 데이터 (2013-4-21 00:00:00 ~ 2013-4-21 23:59:59)
1W, SUN : 일주일 후 일요일 종일 데이터 (2013-5-5 00:00:00 ~ 2013-5-5 23:59:59)
■ 월간보고서 출력에 필요한 형태
형식은 : MONTH + 'M' + ',' + DAY + 'D'
기준시간일자를 정해서 특정 월의 특정일의 종일 데이터를 가져옵니다. 몇월 몇일 데이터를 가져오는지에 대한 의미입니다.
기준시간이 설정되어있지 않은 경우는 오늘 날짜를 기준시간으로 사용합니다.
MONTH : 기준일자시간보다 몇개월 전(-) 또는 몇개월 후(+)의 정수를 입력합니다. 0을 입력하면 기준월을 사용합니다.
DAY : 지정일자를 정수로 입력합니다.(1~ 31)
(사용 예)
기준시간일자 : 2009-1-9 09:00:00 설정되어 있을 경우
0M, 1D : 2009-1-1 00:00:00 ~ 2009-1-1 23:59:59 (당월 1일 데이터)
0M, 31D : 2009-1-31 00:00:00 ~ 2009-1-31 23:59:59 (당월 31일 데이터)
-1M, 1D : 2008-12-1 00:00:00 ~ 2008-12-1 23:59:59 (전월 1일 데이터)
-1M 31D : 2008-12-31 00:00:00 ~ 2008-12-31 23:59:59 (전월 31일 데이터)
1M, 1D : 2009-2-1 00:00:00 ~ 2009-2-1 23:59;59 (익월 1일 데이터)
1M, 31H : 2009-2-28 00:00:00 ~ 2009-2-28 23:59:59 (익월 31일 데이터)
■ 연간보고서 출력에 필요한 형태
형식은 : YEAR + 'Y' + ',' + MONTH + 'M'
기준시간일자를 정해서 특정 년도의 특정월의 1개월 데이터를 가져옵니다. 몇년 몇월 데이터를 가져오는 것을 의미합니다.
기준시간이 설정되어있지 않은 경우는 오늘 날짜를 기준시간으로 사용합니다.
YEAR : 기준일자시간보다 몇년 전(-) 또는 몇년 후(+)의 정수를 입력합니다. 0을 입력하면 기준년도를 사용합니다.
MONTH : 지정월을 정수로 입력합니다. (1 ~ 12)
(사용 예)
기준시간일자 : 2009-1-9 09:00:00 설정 되어있을 경우
0Y, 1M : 2009-1-1 00:00:00 ~ 2009-1-31 23:59:59 (당해 1월 데이터)
0Y, 12M : 2009-12-1 00:00:00 ~ 2009-12-31 23:59:59 (당해 2월 데이터)
-1Y, 1M : 2008-1-1 00:00:00 ~ 2008-1-31 23:59:59 (전년 1월 데이터)
-1Y, 12M : 2008-12-1 00:00:00 ~ 2008-12-31 23:59:59 (전년 12월 데이터)
1Y, 1M : 2010-1-1 00:00:00 ~ 2010-1-31 23:59:59 (익년 1월 데이터)
1Y, 12M : 2010-12-1 00:00:00 ~ 2010-12-31 23:59:59 (익년 12월 데이터)
값종류(정수)
검색 종류를 (정시값, 평균값, 최소값, 최대값 등) 입력합니다. 값종류에 대한 인덱스 번호와 매크로는 아래와 같습니다.
일반적으로 내부스크립트 함수에서는 인덱스 번호를 사용합니다.
[보고서 내 SFDB 검색명령어 & 인덱스 번호]
매크로 |
번호 |
설명 |
raw_value | 0 | 기본 저장값 |
stat_tvalue | 1 | 통계데이터 모두 . 시 간격 |
stat_dvalue | 2 | 통계데이터 모두 . 일 간격 |
stat_mvalue | 3 | 통계데이터 모두 . 월 간격 |
flow_value | 10 | 순간값(정시값) |
avg_value | 11 | 평균값 |
differ_value | 12 | 적산차 |
min_value | 13 | 최소값 |
max_value | 14 | 최대값 |
sum_value | 15 | 합계값 |
start_value | 16 | 시작값(해당시간 첫번째 값) |
last_value | 17 | 마지막 값(해당시간 마지막 값) |
record_cnt | 18 | 레코드 개수(주어진 시간내에 기록된 데이터 개수) |
run_time1 | 30 | 운전시간 1 |
run_time2 | 31 | 운전시간 2 |
run_count | 32 | 운전 횟수 |
stop_time1 | 33 | 정지시간 1 |
stop_time2 | 34 | 정지시간 2 |
stop_count | 35 | 정지 횟수 |
cat_daily | 101 | 통계요청이 시간별 데이터 요청 |
cat_monthly | 102 | 통계요청이 일별 데이터 요청 |
cat_yearly | 103 | 통계요청이 월별 데이터 요청 |
alarm_data | 201 | 경보이력 |
검색조건
검색 값에 대한 조건식을 넣어줍니다. 예를 들어서 검색 값이 특정값이거나 특정 범위에 있는 값일 경우 결과값으로 사용합니다.
"$ > 100" -> 검색값이 100보다 큰 경우만 결과값으로 돌려줍니다.($는 검색된 값)
(사용 예)
void RepGetValue
{
_RepGetValue("ReportDaily", 0, "C10", "TagGroup1.POWER", "-1D,1H", 10, "$>100");
}
파라메터 |
값 |
보고서 모델명 | ReportDaily |
시트번호 | 0 |
셀번호 | C10 |
태그 이름 | TagGroup1.POWER |
검색시간 | -1D,1H |
검색종류 | 10 (순간 값) |
검색조건 | 100보다 큰 순간 값 |
_RepSetValue("보고서모델명", 시트번호, "셀명", 출력값)
출력값(태그값, 상수값)을 MS-EXCEL 파일에서 지정시트, 지정셀에 출력값을 표시합니다.
데이터베이스와는 관계없이 현재 태그값, 계산값 등을 내보냅니다.
파라메터에 대한 설명은 아래와 같습니다.
보고서모델명(문자열)
프로젝트에 등록 되어잇는 보고서 모델이름을 문자열 형태로 지정합니다.
시트번호(정수)
엑셀 시트번호를 0번부터 지정하며, 보고서 모델에 시트가 등록되어있어야 합니다.
셀명(문자열)
해당시트의 특정 셀번호를 입력합니다. 예를 들어서 "C10" - C열 10행
동일한 시트에 동일한 셀을 두번 사용하면 두번째 셀은 검색이 무시됩니다.
출력값(정수, 실수, 문자열)
출력하려고 하는 값을 입력합니다. 입력값은 일반숫자, 문자열, 변수들을 지정할 수 있습니다.
(사용 예)
void RepSetValue
{
_RepSetValue("일일보고서", 0, "C10", 123);
_RepSetValue("일일보고서", 0, "C11", "eRun");
_RepSetValue("일일보고서", 0, "C12", "@TagGroup1.POWER");
}
파라메터 |
값 |
보고서모델명 | 일일보고서 |
시트번호 | 0 |
셀번호 | C10, C11, C12 |
출력값 | 123, "eRun", "@TagGroup1.POWER" |
※ eRun 엑셀보고서 출력스크립트 예
// 일일보고서 출력 스크립트.
void DailyReport() <-
{
// 보고서모델명, Sheet번호, Cell번호, 검색태그, 시간, 값종류
_RepGetValue("Report3", 0, "C1", "TagGroup1.NAME0", "-1D1H", 10, "");
_RepGetValue("Report3", 0, "C1", "TagGroup1.NAME1", "-1D2H", 10, "");
_RepGetValue("Report3", 0, "C3", "TagGroup1.NAME2", "-1D3H", 10, "");
// 보고서모델명, Sheet번호, Cell번호, 출력값.
_RepSetValue("Report3", 0, "A1", “eRun");
_RepSetValue("Report3", 0, "A2", "Jpeople");
_RepSetValue("Report3", 0, "A3", "Korea.");
_RepSetValue("Report3", 0, "A4", "Republic of Korea");
_RepSetValue("Report3", 0, "B1", @TagGroup1.ANA0);
_RepSetValue("Report3", 0, "B2", @TagGroup1.ANA1);
_RepSetValue("Report3", 0, "B3", @TagGroup1.ANA2);
_RepSetValue("Report3", 1, "B4", @TagGroup1.ANA3);
_RepSetValue("Report3", 1, "B5", @TagGroup2.ANA0);
_RepSetValue("Report3", 1, "B6", @TagGroup2.ANA1);
_RepSetValue("Report3", 1, "B7", @TagGroup2.ANA2);
_RepSetValue("Report3", 1, "B8", 12345.6789);
_RepSetValue("Report3", 2, "B9", 12345.6789);
_RepSetValue("Report3", 4, "A5", 4312345.6789);
}
보고서 모델 등록시 실행스크립트 설정부분이 위에서 작성한 함수가 입력되어 있습니다.
댓글목록 0