[SCADA] [경향감시] 트렌드의 데이터 값을 엑셀로 출력하고 싶어요.
2016.08.19

트랜드 오브젝트의 데이터를 엑셀파일로 출력하는 예제 입니다.  

[예제]   

●예제프로젝트 설명 

Cycle태그(초단위 주기) 설정에 따라 트랜드 오브젝트에 표시된 데이터를 엑셀 파일로 출력하는 예제  

 

1.       아래와 같이 데이터 수집모델을 생성합니다. 

         수집방법 : 정주기로 수집 

         수집주기 : 1초

 

2.       데이터베이스에 3개의 태그를 생성

 

3.       ANA1과 ANA2에 데이터수집 태그로 설정합니다.  

 

4.       트랜드 오브젝트를 생성하여 아래와 같이 설정합니다. 

         오브젝트 이름 : Trend 

         펜등록 : ANA1, ANA2

 

 

 

5.       스크립트를 작성

아래와 같이 스크립트를 작성합니다.

Sub StatusSave()

 If GetTagVal(“CYCLE”) <> 0 Then

 ‘주기가 0이 아닐경우

           Set ExcelApp = CreateObject(“Excel.Application”)

                      fFormName$ = “D:TESTSCADAReport양식양식.xlsx”

                      ‘양식파일 위치

                      fTodayName$ = “D:TESTSCADAReport출력”+TimeStr(44)+”.xlsx”

                      ‘생성될 파일 위치

                      If (FileExists(fTodayName$) <> True) Then

                      ‘파일이 없을 경우

                                FileCopy fFormName$ , fTodayName$

                                ‘양식파일 복사

                      End If

                      Set DayRpt = ExcelApp.Workbooks.Open(fTodayName$)

                      ‘Excel Workbook Open

                      Set Sheet1 = DayRpt.Worksheets(1)

                                If GetTrendMode(“Trend”) = 1 Then

                                ‘과거 트랜드 모드일 경우

                                           hsTrendTime& = TrendGetTime(“Trend”, 4)

                                           ‘트랜드 시작시간

                                           heTrendTime& = TrendGetTime(“Trend”, 5)

                                           ‘트랜드 끝시간

                                           hTrendCycleCounter% = ((heTrendTime& – hsTrendTime&) – ((heTrendTime& – hsTrendTime&) Mod GetTagVal(“Cycle”))) / GetTagVal(“Cycle”)

                                           ‘데이터 갯수

                                           For i = 0 to hTrendCycleCounter%

                                                     hTrendTime& = hsTrendTime& + (i * GetTagVal(“Cycle”))

                                                     ‘시각값

                                                     hTrendTimeStr$ = TimeToStr(hTrendTime&, 12) + TimeToStr(hTrendTime, 5)

                                                     ‘시간 값을 YYYY년MM월DD일hh시mm분ss초 변환

                                                     Set Cell = Sheet1.Range(“A”+CSTR(i + 1))

                                                     Cell.Value = hTrendTimeStr$

                                                     Set Cell = Sheet1.Range(“B”+CSTR(i + 1))

                                                     Cell.Value = Dlogval(“ANA1”,hTrendTimeStr$)

                                                     ‘ANA1의 수집데이터를 셀에 출력

                                                     Set Cell = Sheet1.Range(“C”+CSTR(i + 1))

                                                     Cell.Value = Dlogval(“ANA2”,hTrendTimeStr$)

                                                     ‘ANA2의 수집데이터를 셀에 출력

                                           Next i

                                Else

                                           ‘과거 트랜드 모드일 경우

                                           rsTrendTime& = TrendGetTime(“Trend”, 0)

                                           ‘트랜드 시작시간

                                           reTrendTime& = TrendGetTime(“Trend”, 1)

                                           ‘트랜드 끝시간

                                           rTrendCycleCounter% = ((reTrendTime& – rsTrendTime&) – ((reTrendTime& – rsTrendTime&) Mod GetTagVal(“Cycle”))) / GetTagVal(“Cycle”)

                                           ‘데이터 갯수

                                           For i = 0 to rTrendCycleCounter%

                                                     rTrendTime& = rsTrendTime& + (i * GetTagVal(“Cycle”))

                                                     ‘시각값

                                                     rTrendTimeStr$ = TimeToStr(rTrendTime&, 12) + TimeToStr(rTrendTime&, 5)

                                                     ‘시간 값을 YYYY년MM월DD일hh시mm분ss초 변환

                                                     Set Cell = Sheet1.Range(“A”+CSTR(i + 1))

                                                     Cell.Value = rTrendTimeStr$

                                                     Set Cell = Sheet1.Range(“B”+CSTR(i + 1))

                                                     Cell.Value = Dlogval(“ANA1”,rTrendTimeStr$)

                                                     ‘ANA1의 수집데이터를 셀에 출력

                                                     Set Cell = Sheet1.Range(“C”+CSTR(i + 1))

                                                     Cell.Value = Dlogval(“ANA2”,rTrendTimeStr$)

                                                     ‘ANA2의 수집데이터를 셀에 출력

                                           Next i

                                End If

                                Sheet1.Calculate

                      ‘ Sheet1.PrintOut

                      DayRpt.Save

           ExcelApp.Quit

           Set ExcelApp = Empty

 End If

End Sub

이후 CIMONX 실행 후 스크립트 동작 시 설정한 주기로 엑셀파일이 생성되는 것을 확인 할 수 있습니다.  

 

#트랜드#트렌드#Trend#엑셀#excel#엑셀파일#트렌드데이터#트랜드데이터#data