GLOFAView
Download
1 / 9

GLOFAView 에서의 EXCEL 리포트 - PowerPoint PPT Presentation


  • 202 Views
  • Uploaded on

GLOFAView 에서의 EXCEL 리포트. 자동화기기 마케팅팀 황의완 / 김남용. .GLOFAVIew 에서의 EXCEL 리포트. GLOFAView 에서는 저장된 데이터 ( 아카이브 태그 ) 에 대해 다양한 형태의 리포트를 출력해 볼 수 있습니다 . Report Designer 를 통해 리포트 폼을 만들고 원하는 시간의 데이터를 자동 및 수동으로 출력해 볼 수 있습니다 . 또한 , 스크립트를 이용하여 원하는 데이터를 원하는 형태의 Excel 리포트로 출력해 볼 수 있습니다 .

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' GLOFAView 에서의 EXCEL 리포트' - roth-vincent


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

GLOFAView에서의 EXCEL 리포트

자동화기기 마케팅팀 황의완/김남용


.GLOFAVIew에서의 EXCEL 리포트

GLOFAView에서는 저장된 데이터(아카이브 태그)에 대해 다양한 형태의 리포트를 출력해 볼 수 있습니다. Report Designer를 통해 리포트 폼을 만들고 원하는 시간의 데이터를 자동 및 수동으로 출력해 볼 수 있습니다. 또한, 스크립트를 이용하여 원하는 데이터를 원하는 형태의 Excel 리포트로 출력해 볼 수 있습니다.

GLOFAView에서 리포트를 Excel로 출력하기 위해서는 C와 Visual Basic 스크립트를 사용해야만 합니다.


.GLOFAVIew에서의 EXCEL 리포트

원하는 리포트 형태를 Excel 파일로 먼저 구성합니다. Excel 리포트는 MS-SQL 데이터 베이스에 원하는 시간의 데이터를 요구하여 응답 온 데이터를 미리 작성한 Excel Sheet 폼의 각 셀에 기록해 줌으로써 완성됩니다.

  • 리포트를 출력하기 위해서는 먼저 MS-SQL에 저장된

  • 프로젝트의 DSN (Data Source Name)과 리포트에

  • 사용될 태그명, 시작시간, 종료시간이 필요합니다.

  • “ProjectDSN”, “begintime”, “endtime”이라는 이름으로 문자열 태그를 내부태그로 추가합니다.

  • 시작시간(begintime)과 종료시간(endtime)은 I/O 필드를 사용하여 직접 입력합니다.

  • Graphic Designer를 통해 새로운 그림 파일을 하나 추가합니다.

  • Graphic Designer의 메뉴 중 [보기]->[속성]을 선택합니다.

  • 이벤트 속성 중 [기타]->[그림열기]에서 오른쪽 마우스를 눌러 [C-동작…]을 선택합니다.


.GLOFAVIew에서의 EXCEL 리포트

C 스크립트 입력 창에 아래의 코드를 입력하여 DSN을 얻습니다. (전역 스크립트에 추가해도 됨)

#include "apdefap.h"

void OnOpenPicture(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

CMN_ERROR Error;

DM_PROJECT_INFO Info;

DWORD dwSize;

BOOL ret;

TCHAR szProject[_MAX_PATH + 1];

TCHAR szD[_MAX_PATH + 1];

dwSize=128;

if(!DMGetRuntimeProject(szProject, dwSize, &Error))

{

printf("\r\n ERROR!!");

}

else

{

printf("\r\n %s", szProject);

SetTagChar("ProjectPath",szProject); //Return-Type: BOOL

ret = DMGetProjectInformation(szProject, &Info, &Error);

if(ret == 1)

{

sprintf(szD,"%sR" , Info.szDSNName);

SetTagChar("ProjectDSN",szD);

}

}

}

프로젝트의 DSN을 얻는다.


.GLOFAVIew에서의 EXCEL 리포트

버튼의 이벤트를 통해 EXCEL 리포트를 출력하는 VB 동작을 스크립트로 작성합니다.

Dim sPro, sDsn, sSer,sCon, sSql

Dim sVid, sVal, lRet, sRel

Dim V,Sum,Avg,Std,i,Min,Max,k,j,btime,etime,count,c,temp

Dim conn, oRs, oCom, oList, oItem

Dim m,n,s,nRec,nn

Dim a(3)

Dim strSql, stime, sStart, sStop

Dim objExcelApp

Set objExcelApp = CreateObject("Excel.Application")

objExcelApp.Visible = True

objExcelApp.Workbooks.Open "C:\REPORT.xls"

a(1)="'ProcessValueArchive\D000'"

a(2)="'ProcessValueArchive\D001'"

a(3)="'ProcessValueArchive\D002'"

btime =Left(CStr(HMIRuntime.Tags("begintime").Read),10)

etime =Left(CStr(HMIRuntime.Tags("endtime").Read),10)

sDsn = HMIRuntime.Tags("ProjectDSN").Read

sPro = "Provider=WinCCOLEDBProvider.1;"

sDsn = "Catalog=" + sDsn + ";"

sSer = "Data Source=" + sSer + ".\WinCC"

sCon = sPro + sDsn + sSer

count = 5

nRec = 24

리포트에 출력할 아카이브 태그명


.GLOFAVIew에서의 EXCEL 리포트

With objExcelApp

.Worksheets("Sheet1").Select

.Worksheets("sheet1").Range("A1").select

.Worksheets("sheet1").Range("A5")=“TIME"

.Worksheets("sheet1").Range("A3")=btime

.Worksheets("sheet1").Range("A4")=etime

End With

stime = btime & " 00:00:00"

etime = btime & " 23:59:00"

sStart = SetLocalTime(stime)

sStop = SetLocalTime(etime)

For k=1 To 3

strSql="TAG:R," & a(k)& ",'" & sStart & ",'" & sStop & "'"

sSql = strSql

Set conn = CreateObject("ADODB.Connection")

conn.ConnectionString = sCon

conn.CursorLocation = 3 'adUseClient

conn.Open

Set oRs = CreateObject("ADODB.Recordset")

Set oCom = CreateObject("ADODB.Command")

oCom.CommandType = 1 ' adCmdText = 1

Set oCom.ActiveConnection = conn

oCom.CommandText = sSql

'lRet = MsgBox("Opened with " & vbCr & sCon & vbCr & sSql & vbCr, vbOKCancel)

' If lRet <> 1 Then Exit Sub

리포트로 출력할 데이터의 시작시간과 끝시간 설정


.GLOFAVIew에서의 EXCEL 리포트

On Error Resume Next

Set oRs = oCom.Execute

n = 0

Do While Not oRs.EOF

n=n+1

If( n <= nRec ) Then

objExcelApp.Cells(5, k+1).Value=b(k)

objExcelApp.Cells(count+n,1).Value= Left(CStr(GetLocalTime(oRs.Fields(1).Value)),18)

objExcelApp.Cells(count+n,k+1).Value=FormatNumber((oRs.Fields(2).Value),1)

End If

oRs.MoveNext

Loop

Next

Set oRs = Nothing

conn.Close

Set conn = Nothing

objExcelApp.Application.DisplayAlerts = False

objExcelApp.ActiveWorkbook.SaveAs "c:\report" & btime & ".xls"

objExcelApp.Application.DisplayAlerts = True

objExcelApp.Workbooks.Close

objExcelApp.Quit

Set objExcelApp = Nothing

EXCEL Sheet에 데이터 입력하는 부분


.GLOFAVIew에서의 EXCEL 리포트

GLOFAView에서는 데이터 저장을 표준 시간대(GMT/UTC)에 맞추어 저장하기 때문에 우리나라의 시간대와 차이가 있습니다. 따라서 원하는 시간의 데이터를 얻고자 한다면 시간대를 계산하여 데이터를 요구해야 합니다. 요구 시에는 9시간을 빼고, 기록 시에는 9시간을 더하여야 하는 번거로움이 있습니다만, 반드시 처리해 주어야 정확한 데이터를 얻을 수 있습니다.

Function GetLocalTime(Date) ‘시간 얻어오는 함수

Dim dt,result,ct

dt = CDate("9:00:00")

ct = CDate(Date)

result = ct + dt

GetLocalTime = result

End Function

Function SetLocalTime(strTime) ‘시간 설정하는 함수

Dim dt,st,ct, result

Dim sYear, sMonth, sDay, sH, sM, sS

dt = CDate("9:00:00")

st = CDate(strTime)

ct = st - dt

sYear = CStr(Year(ct))

sMonth = CStr(Month(ct))

sDay = CStr(Day(ct))

sH = CStr(Hour(ct))

sM = CStr(Minute(ct))

sS = CStr(Second(ct))

result = sYear & "-" & sMonth & "-" & sDay & " " & sH & ":" & sM '& ":" & sS & ".000"

SetLocalTime = result

End Function

VB Script Editor에서 함수 작성


.GLOFAVIew에서의 EXCEL 리포트

이상과 같이 스크립트를 작성하여 리포트로 작성하고자 하는 시작 시간과 종료 시간을 입력하여 버튼을 클릭하면 미리 작성된 Excel 보고서 폼에 데이터가 기록되어 출력됩니다.

자동 출력이 필요한 리포트(일보/월보)의 경우는 전역 스크립트를 이용하여 앞장에 사용된 스크립트를 VB Script Editor에 작성하고, 트리거 조건을 매일 또는 매월로 지정해 주면 됩니다.


ad