기본 콘텐츠로 건너뛰기

싸이몬 CIMON SCADA FAQ - 보고서 기능과 같은 엑셀파일 쓰기 및 출력 방법

안녕하세요.

싸이몬 CIMON-SCADA 관련 FAQ를 소개 합니다.

 

보고서 기능처럼 엑셀 파일에 데이터를 쓰기 및 출력하고자 할 때, 

다음 예제에서 제시되는 스크립트를 통해 기능을 설정할 수 있습니다.

 

[적용 방법]

1. 데이터 베이스에서 보고서 데이터로 등록할 태그를 생성합니다.

값1, 값2, 값3은 ‘ANA1’, ‘ANA2’,  ‘ANA 3’ 태그로 등록합니다.

쓰기 신호는 ‘SIN’ 태그로 등록합니다.

제품코드는 ‘제품코드’ 태그, 제품명은 ‘제품명’ 태그로 등록합니다.

 

2. 사전에 설정하여야 할 내용은 다음과 같습니다.

*모든 경로는 ‘C:\보고서’입니다. 엑셀 파일을 출력하기 전에 폴더를 만들어 주시거나, 

스크립트 내에 입력된 경로들을 동일하게 변경해 주시기 바랍니다.

*보고서 폴더 내에 Test.xls라는 양식 파일이 존재해야 합니다.

*쓰기 신호(‘SIN’ 태그)가 1일 때 보고서 실행을 하면 현재 태그 값이 엑셀에 입력됩니다. 

저장 형식은 ‘제품코드-금일 날짜’입니다.

* 제품 코드가 다르거나 날짜가 다를 경우 새로운 파일을 생성하게 됩니다.

* 생성된 파일은 코드 별 날짜 별로 저장이 되기 때문에 금일의 날짜를 기준으로 

3일 이전의 파일들은 자동적으로 삭제됩니다.

*엑셀 파일을 출력하고자 할 때, ‘파일 불러오기’ 버튼을 눌러 저장 폴더의 목록을 불러와 

파일 선택 후, ‘인쇄’ 버튼을 눌러 출력할 수 있습니다.

 

3. [도구]-[스크립트]에 진입하여 다음과 같이 메인 스크립트를 작성합니다.

Sub Main()

While 1

SetTagVal”ANA1″,Random(0,100)

SetTagVal”ANA2″,Random(0,100)

SetTagVal”ANA3″,Random(0,100)   ‘테스트임으로 각 태그의 값을 랜덤으로 받습니다.

sleep(1000)

Wend

End Sub

===========================================================

아래 그림과 같이 스크립트를 등록합니다.

 

4. 각 버튼 오브젝트를 다음과 같이 생성합니다.

RUN 버튼을 등록하고, 명령식 동작으로 Runscript(“Scr”)을 입력합니다.

RUN 버튼으로 구동할 스크립트는 다음과 같이 작성합니다.

 

Sub Scr()

Dim DelFileName(2)

‘신호태그를 불러와 신호 태그가 1이 됐을 경우만 스크립트를 실행한다.

WT = GetTagVal(“SIN”)

Code$ = GetTagVal(“제품코드”)

If WT = 1 Then

‘오늘 부터 3일치 이후의 같은 코드의 파일을 삭제 한다.

For i = 0 to 2

TStr$ = ReportTimeStr(“-” & i+3 & “일”,14)

DelFileName(i) = Left(TStr$,4) & Mid(TStr$,6,2) & Right(TStr$,2)

FileDel$ = “C:\보고서” & Code$ & “-” & DelFileName(i) & “.xls”

If FileExists(FileDel$) Then Kill FileDel$

Next i

‘엑셀파일 경로

FileName$ = “C:\보고서” & Code$ & “-” & TimeStr(50) & TimeStr(51)& TimeStr(52) & “.xls” ‘생성될 파일

FileOld$ = “C:\보고서\Test.xls” ‘양식 파일

If FileExists(FileName$) Then ‘동일한 파일이있면 파일에 계속 쓴다.

Else

FileCopy FileOld$, FileName$ ‘없으면 양식 파일에서 복사해 새로운 파일을 만듬

End If

Set ExcelApp = CreateObject(“Excel.Application”)

Set ExcelFile = ExcelApp.Workbooks.Open(FileName$)

Set ws=ExcelFile.sheets.item(“sheet1”)

‘엑셀 파일에 저장될 행을 불러온다.

Cell_Cnt = ws.range(“A1”).currentregion.rows.count + 1

‘태그들의 값을 가져온다.

Val1% = GetTagVal(“ANA1”)

Val2% = GetTagVal(“ANA2”)

Val3% = GetTagVal(“ANA3”)

‘엑셀 파일에 데이터 쓰기                 ‘행,     열

 

ws.Cells(Cell_Cnt,1) = Cell_Cnt – 3 ‘카운트

ws.Cells(Cell_Cnt,2) = TimeStr(37) ‘시간 출력

ws.Cells(Cell_Cnt,3) = Val1%

ws.Cells(Cell_Cnt,4) = Val2%

ws.Cells(Cell_Cnt,5) = Val3%

ws.Calculate

ExcelFile.Save

ExcelApp.Quit

Set ExcelApp = Empty

End If

End Sub

===============================================

아래 그림과 같이 스크립트를 등록합니다.

 

5. ‘파일 불러오기’ 버튼을 등록하고, 명령식 동작으로 Runscript(“FileListLoad”)를 입력합니다.

‘파일 불러오기’ 버튼으로 실행할 스크립트는 다음과 같이 작성합니다.

 

Sub FileListLoad()

On Error Goto Pass

‘ ListBox에 있는 파일 리스트 초기화

wcDeleteAll “List1”

FilePathLoad$ = “C:\보고서”

Dim FileName$()

FileList FileName$, FilePathLoad$+”*.xls”

‘ ListBox에 파일 리스트 추가

i% = 0

While ( FileName$(i) <> “” )

WcInsertItem “List1”, -1, FileName$(i%)

i% = i%+1

Wend

Pass:

End Sub

==========================================

아래 그림과 같이 스크립트를 등록합니다.

6. ‘파일 인쇄’ 버튼을 등록하고, 명령식 동작으로 Runscript(“Scr1”)을 입력합니다.

 

‘파일 인쇄’ 버튼으로 실행할 스크립트는 다음과 같이 작성합니다.

Sub Scr1()

a$=wcGetData(“List1”,-1)

FileName$ = “C:\보고서” & a$

Set ExcelApp = CreateObject(“Excel.Application”)

Set ExcelFile = ExcelApp.Workbooks.Open(FileName$)

Set ws=ExcelFile.sheets.item(“sheet1”)

ws.PrintOut

ExcelApp.Quit

End Sub

=============================================

아래 그림과 같이 스크립트를 등록합니다.

7. CimonX를 실행한 후 각 버튼을 누를 때 다음과 같이 동작합니다.

쓰기 신호(‘SIN’ 태그)가 1인 상태에서 RUN버튼을 눌렀을 때, 

TEST.XLS양식 파일을 바탕으로 데이터가 엑셀에 입력되면서 

제품코드-금일 날짜 형태의 데이터가 생성됩니다.

제품코드가 CIMON001일 경우, RUN버튼을 누른 후 ‘파일 불러오기’ 버튼을 누르면

CIMON001-20171014 라는 파일이 생성됩니다.

 

싸이몬 홈페이지에서 다양한 FAQ를 확인할 수 있습니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.


감사합니다.

댓글

이 블로그의 인기 게시물

싸이몬 CIMON SCADA FAQ - 키락 Keylock 종류 및 사용법

안녕하세요. 싸이몬 CIMON-SCADA 관련 FAQ를 소개 합니다. Q: SCADA 페러럴(프린터포트) 키락을 사용할 때 문제점이 없나요? A: SCADA 페러럴 키락 관련해서 설명 드리겠습니다. [페러럴(프린터포트) 키락을 사용하는 경우] 1) Window XP까지 권장 하며, Window 7 이상에서 인식이 불가능할 수 있습니다. 2) USB 컨버터를 이용하여 사용하실 수 없습니다. 3) 장치관리자의 프린터포트(LPT)가 인식되는지 확인이 필요합니다. 키락의 Lamp가 점멸되지 않기 때문에 CimonD를 실행하기 전까지 확인이 불가능합니다. 4) CimonD에서 키락이 인식되면 SCADA 버전과 호환성은 무관합니다. 단, 예외의 경우가 있을 수 있으며 USB 키락으로 업그레이드를 권장 드립니다. 5) 현재까지의 Cimon SCADA 키락 제품입니다. Q: 키락의 종류의 대해서 궁금합니다. A: 키락의 종류 및 간단한 내용 설명, 유의점에 대해 설명 드리겠습니다. [키락의 종류와 간단한 내용 설명] 1) 키락의 종류 ㄱ. DS : 개발 및 실행용 키락 ㄴ. RS : 실행용 키락 ㄷ. VS : View를 구성하실 때 사용되는 키락(감시만 가능) ㄹ. CS : View를 구성하실 때 사용되는 키락(감시 및 제어가능) ㅁ. WS : Web을 구성하실 때 사용되는 키락(감시 및 제어가능) Mobile을 사용하시는 경우는 Option으로 추가하여 사용이 가능합니다. DS와 RS는 실태그(장비와 통신하는 태그)를 기준으로 구분됩니다. VS & CS & WS 의 경우 동시접속 가능유저를 기준으로 구분됩니다. 2) DS 및 RS 키락 사용시 유의점 ㄱ. RS 키락을 사용할 경우 반드시 DS키락으로 먼저 저장되어야 합니다. ㄴ. 먼저 저장되는 DS키락의 태그수의 따라서 RS키락의 사용이 제한될 수 있습니다. Q: SCADA가 데모모드로 동작합니다. 해결 방법은 없을까요?

싸이몬 CIMON SCADA FAQ - Script에서 태그를 변수로 사용 하는 방법

 안녕하세요. 싸이몬 CIMON-SCADA 관련 FAQ를 소개 합니다. 스크립트에서 태그를 변수로 직접 사용할 수는 없습니다. GetTagVal(“태그이름”) 함수를 이용하여 해당 태그 값을 변수에 옮긴 후 사용 가능합니다. 그 후 SetTagVal(“태그이름”, 태그값) 함수를 이용하여 지정된 태그에 값을 설정할 수 있습니다.   다음 예제는 스크립트에서 지정된 태그에 값을 설정하는 방법입니다.   [예제]   [도구]-[스크립트]에 진입하여 스크립트를 아래와 같이 작성합니다. Sub ValueChange() ‘가상태그로 태그_1, 태그_2가 있습니다. Tag1 = GetTagVal(“태그_1″) SetTagVal “태그_2″, Tag1 End Sub =============================== 다음 그림과 같이 스크립트를 등록합니다. “태그_1”의 값을 GetTagVal() 함수를 사용하여 가져온 후, 변수 Tag1에 저장합니다. SetTagVal() 함수를 사용하여 “태그_2”에 변수 Tag1의 값을 씁니다. 싸이몬 홈페이지에서 다양한 FAQ를 확인할 수 있습니다. >>홈페이지가기 언제나 고객을 먼저 생각하는 CIMON이 되겠습니다. 감사합니다.

싸이몬 CIMON SCADA FAQ - 내부함수 사용방법과 스크립트 함수 차이점

안녕하세요. 싸이몬 CIMON-SCADA 관련 FAQ를 소개 합니다. 명령식과 스크립트는 태그값 쓰기의 표현 형식 및 내부 함수 사용시 표현 형식에서 차이가 있습니다. [ 예문] 1. 태그값 쓰기 ( 예를 들어 TAG1 에 TAG2의 값을 넣을 경우 ) ex) Sub changevlaue() vlaue = gettagval(“TAG1”) settagval “TAG2”, value end sub 2. 내부함수 사용 내부 함수를 사용시 명령식은 도움말의 내부함수 표현을 그대로 사용하면 됩니다. 하지만 스크립트의 경우 함수를 사용하여 어떤 값을 쓰거나 지령을 내릴 경우 함수에 괄호가 들어가지 않으며, 그 반대로 값을 불러오거나 상태를 받아올 경우 괄호가 들어 갑니다. 예를 들어 다음 과 같은 경우 차이점이 발생 합니다. 1) 트렌드 모드 변경 함수를 이용하여 지령을 내릴 경우 ※ TrendSetPenVal() 의 자세한 내용은 도움말에 연산식 및 명령식에서 확인하실 수 있습니다. – 값 종류에 따라 다음과 같은 Pen에 관련된 값이 설정 됩니다. 0 : Pen의 이름 (설정값을 문자열로 입력합니다.) 1 : Pen의 주석 (설정값을 문자열로 입력합니다.) 2 : Pen에 설정된 최소값 3 : Pen에 설정된 최대값 4 : Pen의 연결방법 (0:표시없음, 1:선연결, 2:계단형) 2) 트렌드 모드 함수를 이용하여 펜의 상태를 확인하는 경우 ※ GetTrendMode()의 자세한 내용은 도움말에 연산식 및 명령식에서 확인하실 수 있습니다. – 지정된 Trend Object가 RealTime 트렌드인 경우에는 0을, Historical Trend인 경우에는 1을 출력합니다. [T I P] 스크립트 함수와 내부함수의 차이점 스크립트 : Microsoft 사의 Visual Basic 을 기반으로 만들어진 일종의 컴파일러( 컴퓨터가 인식할 수 있는 언어) 를 사용합니다. 여기서 제공되는