-
제품선택
-
안녕하세요.
CIMON입니다.
SCADA에서 캡쳐한 페이지를 다른 페이지에서 표시하고자 할 때,
CaptureEx 함수 및 OxMethod 함수를 이용하여 스크립트를 작성하는 것으로 구현할 수 있습니다.
[함수 설명]
CaptureEx 현재 화면의 지정한 범위를 jpg 포맷의 파일로 저장합니다. 명령함수명 명령식 표기 CaptureEx(“X,Y,Width,Height”,”파일 경로 이름”) 스크립트 표기 CaptureEx“X,Y,Width,Height”,파일 경로 이름” 기능 현재 화면의 “X,Y,Width,Height” 로 지정한 영역을 “파일 경로 이름” 에 jpg 포맷의 파일로 저장합니다. 사용 예제 현재 화면의 X좌표 100, Y좌표 100부터 너비 500픽셀, 높이 500픽셀의 이미지를 C 드라이브에 CaptureEx1.jpg 파일로 저장합니다. 명령식 표기: CaptureEx(“100, 100, 500, 500”, “C:\CaptureEx1.jpg“)
스크립트 표기: CaptureEx “100, 100, 500, 500”, “C:\CaptureEx1.jpg“
OcxMethod ActiveX에 동작을 명령할 때 사용합니다. 명령함수명 명령식 표기 OcxMethod(“Object 이름”,”Method 이름”,데이터) 스크립트 표기 OcxMethod“Object 이름”,”Method 이름”,데이터 기능 ActiveX에 동작을 명령합니다. “Method 이름” 은 업체에서 제공하는 ActiveX의 Event Message List를 참조합니다. Method에 따라 데이터는 문자열로 입력할 수도 있습니다. 사용 에제 “C:\SCADA3.90\Image.jpg” 이라는 데이터를 이름이 “ActiveX” 인 ActiveX 오브젝트에 Navigate 되도록 명령합니다. (Microsoft Web Brower 사용 시) 명령식 표기: OcxMethod(“ActiveX”,”Navigate”,”C:\SCADA3.90\Image.jpg”)
스크립트 표기: OcxMethod “ActiveX”,”Navigate”,”C:\SCADA3.90\Image.jpg”
기능 구현 방법은 다음 예제를 참조하여 주시기 바랍니다.
[적용 방법]
1. [도구]-[CimonX 환경]에서 CimonX의 윈도우 형태를 설정합니다. 메뉴, 도구모음, 화면 제목을 모두 숨김 처리합니다.
2. 데이터베이스에서 문자열 태그 ‘JPG이름’을 생성합니다.
3. 팝업 페이지를 편집 후, 이름을 ‘POPUP’으로 지정합니다. 팝업 페이지를 여는 버튼 오브젝트를 다음과 같이 생성합니다.
4. 팝업 페이지의 실행 위치를 다음과 같이 지정합니다.
5. ActiveX 오브젝트를 생성합니다.
[편집]-[ActiveX 삽입]을 클릭한 후 ‘Microsoft Web Browser’를 선택합니다.
6. ActiveX 오브젝트의 그림 설정 화면으로 진입하여, 오브젝트의 이름을 ‘그림’으로 지정합니다.
7. [도구]-[스크립트]에 진입하여 다음과 같이 스크립트를 작성합니다.
Sub Script1()
C_Year = Timestr(50)
C_Month = Timestr(51)
C_Day = Timestr(52)
C_Hour = Timestr(53)
C_Min = Timestr(54)
Total_Time = C_Year + C_Month + C_Day + C_Hour + C_Min ‘JPG 이름은 변수에 YYYYMMDDhhss 형식으로 저장됩니다.
Settagval “JPG이름”, Total_Time ‘JPG이름 태그의 Total(YYYYMMDDhhss) 값을 저장합니다.
JPG이름 = “D:\” + Gettagval(“JPG이름”) + “.jpg” ‘변수 JPG이름의 리턴값은 D:YYYYMMDDhhss.jpg입니다.
CaptureEx “0, 0, 200, 200”, JPG이름 ‘cimonx 화면좌표 (0,0) 크기 200*200만큼의 화면을 캡쳐하여 D:YYYYMMDDhhss.jpg으로 저장합니다.
sleep(300)
OcxMethod “그림”, “Navigate”, JPG이름 ‘그림 오브젝트에 캡쳐화면을 표시합니다.
End sub
==========================
아래 그림과 같이 스크립트를 등록합니다.
8. 팝업 페이지에서 화면을 캡쳐하는 버튼 오브젝트를 다음과 같이 설정합니다.
[버튼정의]-[동작정의]에서 ‘명령식’을 선택 후, ‘Runscript(“Script1”)을 입력합니다.
9. CimonX를 실행하여 동작을 확인합니다.
팝업 페이지를 실행하는 버튼을 클릭 후, 팝업 페이지 내의 ‘캡쳐’ 버튼을 클릭하였을 때 ActiveX 오브젝트에 지정된 위치 및 크기의 팝업 페이지가 표현됩니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON입니다.
SCADA에 CCTV 화면을 나타내고자 할 때, Html 파일의 경로를 불러오는 방식을 사용할 수 있습니다.
아래의 적용 방법을 참조하여 주시기 바랍니다.
웹 상에서 화면을 실행하는 방법은 해당 CCTV 업체의 매뉴얼을 참조하거나, 업체에 문의하여 주시기 바랍니다.
※ 본 FAQ는 한화 테크윈 네트워크 카메라를 기준으로 작성되었습니다.
한화 테크윈 CCTV는 현재 ActiveX를 통한 접속이 지원 중단된 상태이며, 2018년 4월1일 이전에 생산된 모델 대상으로만 SCADA에서 영상을 확인할 수 있습니다. 이 점 유의하시어 FAQ 참조 바랍니다.
[적용 방법]
1. SCADA 에서 영상을 보기 위하여 ActiveX 오브젝트를 생성합니다.
[편집]-[ActiveX 삽입]을 클릭한 후, ActiveX 설정화면에서 ‘Microsoft Web Browser’를 선택하고 ‘확인’ 버튼을 누릅니다.
2. 오브젝트의 [그림 설정]화면에서 오브젝트 이름을 설정합니다. 본 예시에서는 ‘그림1’로 입력합니다.
3. 오브젝트에 영상을 띄우기 위해서는 OcxMethod 명령함수를 사용합니다. 다음 함수 설명을 참고하여 주시기 바랍니다.
OcxMethod ActiveX에 동작을 명령할 때 사용합니다. 명령함수명 명령식 표기 OcxMethod(“Object 이름”,”Method 이름”,데이터) 스크립트 표기 OcxMethod“Object 이름”,”Method 이름”,데이터 기능 ActiveX에 동작을 명령합니다. “Method 이름” 은 업체에서 제공하는 ActiveX의 Event Message List를 참조합니다. Method에 따라 데이터는 문자열로 입력할 수도 있습니다. 사용 에제 “C:\SCADA3.90\CCTV.html” 이라는 데이터를 이름이 “ActiveX” 인 ActiveX 오브젝트에 Navigate 되도록 명령합니다. (Microsoft Web Brower 사용 시) 명령식 표기: OcxMethod(“ActiveX”,”Navigate”,”C:\SCADA3.90\CCTV.html”)
스크립트 표기: OcxMethod “ActiveX”,”Navigate”,”C:\SCADA3.90\CCTV.html”
4. [도구]-[스크립트]에 진입하여 다음과 같이 스크립트를 입력합니다.
Sub Script1
OcxMethod “그림1”, “Navigate”, “D:\SCADA3.90\CCTV.html”
End Sub
==================
아래 그림과 같이 스크립트를 등록합니다.
※ SCADA에서 CCTV 화면을 나타낼 때, 웹상에서 CCTV를 실행할 수 있는 Html 샘플 파일이 있어야 합니다.
CCTV 업체에 해당 파일을 문의하시기 바랍니다.
5. 버튼 오브젝트를 생성합니다. [버튼정의]-[동작정의]에서 명령식 동작을 선택하고 ‘Runscript(“Script1”)’을 입력합니다.
6. CimonX를 실행한 후, 버튼을 눌러 스크립트를 실행합니다.
ActiveX 오브젝트에 CCTV 화면이 나타나는 것을 확인할 수 있습니다.
2. CCTV 채널 변경 방법.
[CCTV 채널 변경 방법]
XNS ActiveX SDK 의 샘플 프로그램은 기본적으로 카메라의 1번 프로파일을 보여주도록 설정되어 있습니다.
1번 프로파일은 MJEG, framerate는 5로 설정되어 있기 때문에 5~10 정도의 ips 값이 출력되며, 이에 따라 화면이 끊겨 보일 수 있습니다.
원활한 움직임의 화면을 확인하고자 할 경우 1번 프로파일의 framerate를 변경하시거나, OpenMedia() 함수 호출 시 다른 프로파일을 가지고 오도록 수정하시면 됩니다.
프로파일을 설정할 때, Control ID를 변경해주시면 됩니다.
예를 들어 네트워크 카메라의 경우, Control ID 3은 1번 프로파일(1번 채널)을 의미하며,
Control ID를 3으로 입력하면 첫 번째 비디오 프로파일 영상을 출력합니다.
따라서 2번 프로파일(2번 채널) 비디오 영상을 보고자 할 경우, Control ID를 4로 설정해주시면 됩니다.
위 영상은 기본 Vedeo 01번으로 지정이 되어있으며, 화면 끊김 현상이 발생할 수 있습니다.
이 때 CCTV.html 파일을 웹에서 실행한 후, CCTV 화면을 우클릭 후 ‘소스 보기’를 선택합니다.
아래 그림처럼 ‘OpenMediaEX’의 숫자 3을 4로 변경 후 저장합니다.
↓
소스를 수정한 후, CimonX를 재실행하면 CCTV 화면이 Video 02번으로 변경되어 영상이 빨라진 것을 확인할 수 있습니다.
네트워크 카메라의 Control ID는 다음과 같은 구조로 되어있습니다.
비디오 프로파일을 선택하실 때 참고하여 주시기 바랍니다.
< Network Camera control module structure >
Control Module(Device, 1) *************** Control ID : 1
|*** Control Module(Camera, 1) ********** Control ID : 2
|***** Control Module(Video, 1) ********** Control ID : 3
|***** Control Module(Video, 2) ********** Control ID : 4
|****** …
|****** Control Module(Video, 10) ******** Control ID : 12
|****** Control Module(Sensor-in, 1) ****** Control ID : 13
|****** Control Module(Digital-out, 1) ***** Control ID : 14TIP. 웹상에서 소스를 수정할 수 없을 경우, 다음과 같이 메모장을 이용하여 소스를 수정해주시면 됩니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON 입니다.
다음은 함수를 이용하여 경보 내용을 CSV파일로 저장하는 사용 예제이며,해당 내용은 Xpanel V2.52버전 기준으로 작성되었습니다.
함수 형식 : AlarmCsvWr(R1,S2,R3,R4,R5)
[R1] 경보 그룹 번호(1-10)
저장하고 싶은 경보 그룹을 지정합니다.
[S2] CSV 파일 이름을 지정합니다.
확장자와 경로는 사용자의 환경에 맞게 작성합니다.
단, 파일이름 지정 시 큰 따옴표 (” “)를 사용하여야 합니다.
[R3] 날짜 및 시간 표시 형태를 지정합니다.
0 = YYYY/MM/DD HH:MM:SS
1 = DD/MM/YYYY HH:MM:SS
2 = MM/DD/YYYY HH:MM:SS
3 = MM/DD HH:MM:SS
4 = DD/MM HH:MM/SS
5 = HH:MM:SS
[R4] CSV 파일에 기록할 내용들을 선택합니다.
※ 주의사항
두 개 이상의 Item을 선택할 때는 ORING표시( | ) 를
사용하여 선택가능합니다.
Ex) _ALMPRT_TIME_|_ALMVALUE_
[R5] CSV 파일 위치 코드
( 0 : 로컬 , 1 : SD/MMC , 2 : USB )
[사용 예제]
다음과 같은 형태의 함수를 스크립트 또는 명령식에 입력합니다.
AlarmCsvWr (1,”AlarmSave1″,0,_ALMPRT_ALL_,_USBMEM_)
해당 함수가 적용된 프로젝트를 실행합니다.입력된 함수가 동작하면 지정된 경보 그룹 (1번그룹)을 “AlarmSave1_생성시간”이라는 파일명으로
[R3]의 형식에 맞춰 모든 내용을 USB에 저장합니다.
생성된 파일의 예시는 다음 그림을 참조하시기 바랍니다.
● 생성된 파일 안의 내용
시간, 어드레스, 값, 타입, 주석 까지 표시됩니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
#엑스판넬알람파일 #엑스판넬알람파일생성 #엑스판넬CSV #엑스판넬CSV파일 #엑스판넬CSV생성 #엑스판넬CSV파일생성 #엑스판넬CSV알람파일 #엑스판넬CSV알람파일생성 #엑스판넬알람파일만들기 #엑스판넬CSV만들기 #엑스판넬CSV파일만들기 #엑스판넬CSV알람파일만들기 #엑스판넬알람파일만드는방법 #엑스판넬CSV만드는방법 #엑스판넬CSV파일만드는방법 #엑스판넬CSV알람파일만드는방법 #XPANEL알람파일 #XPANEL알람파일생성 #XPANELCSV #XPANELCSV파일 #XPANELCSV생성 #XPANELCSV파일생성 #XPANELCSV알람파일 #XPANELCSV알람파일생성 #XPANEL알람파일만들기 #XPANELCSV만들기 #XPANELCSV파일만들기 #XPANELCSV알람파일만들기 #XPANEL알람파일만드는방법 #XPANELCSV만드는방법 #XPANELCSV파일만드는방법 #XPANELCSV알람파일만드는방법
-
안녕하세요.
CIMON입니다.
스크립트 상에서 DateSerial 함수와 DateAdd 함수를 사용하여 전 월의 말일을 출력할 수 있습니다.
다음의 예제를 참고하여 주시기 바랍니다.
[예제]
1. 데이터베이스에서 문자열 태그 ‘말일’을 생성합니다.
2. [도구]-[스크립트]에 진입하여 다음과 같이 스크립트를 작성합니다.
Sub EMonth()
Dim sDate#
sDate# = DateSerial(YYYY, M, 1) ‘당 월 1일
eDate# = DateAdd(“d”, -1, sDate#) ‘당월 1일에 -1일(전 월 말일)
endDate$ = Format(eDate#, “YYYY 년MM월DD일”) ‘문자열 변환
SetTagVal “말일”, endDate$ ‘말일 문자열태그에 Write
End Sub
=============================
DateSerial(YYYY, M, D) 함수에는 금월의 1일 날짜를 입력합니다.
DateAdd 함수의 “d”는 하루 단위를 의미하며, -1은 -1d(일)을 의미합니다.
sDate#의 시간값에서 -1일 한 값을 endDate에 문자열 형태로 저장합니다.
아래 그림과 같이 스크립트를 등록합니다.
3. 버튼 오브젝트를 생성한 후, [동작정의]에서 ‘명령식 동작’을 선택하고 ‘RunScript(“EMonth”)’를 입력합니다.
4. CimonX를 실행 후, 버튼을 클릭하면 문자열 태그에 전월의 말일 날짜가 출력되는 것을 확인할 수 있습니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON입니다.
텍스트 파일 생성 시, 최근의 데이터를 최상위에 표시하고자 할 때 다음 예제의 스크립트를 사용할 수 있습니다.
[예제]
1. [도구]-[스크립트]에 진입하여 다음과 같이 스크립트를 입력합니다.
Sub TxtFileReadWrite()
Dim Arr(0 to 32767) ‘배열 선언
UFILENAME$ = “D:\TESTSCADA.txt”
‘txt파일위치
If(fileExists(UFILENAME$)=True) then ‘txt파일이 있을 경우
UFileNum = FreeFile
Open UFILENAME For Input As UFileNum ‘txt 파일 열기
txtRecordNum% = 0 ‘txt파일 레코드 초기화
Do Until EOF(UFileNum)
txtRecordNum% = txtRecordNum% +1 ‘txt파일 레코드 카운터
Line Input #UFileNum, Arr(txtRecordNum%) ‘txt 내용 읽어 Arr 배열에 저장
Loop
Close UFileNum ‘txt 파일 닫기
Open UFILENAME For Output As #1 ‘txt 파일 열기
Print #1, Timestr(44) ‘YYYY년MM월DD일 hh시mm분ss초로 txt파일에 쓰기
For i = 1 to txtRecordNum%
Print #1, Arr(i) ‘Arr 배열에 저장한 데이터 txt 파일에 쓰기
Next i
Close #1
Else
Open UFILENAME For Output As #1 ‘파일이 없을 경우 txt 파일 열기
Print #1, Timestr(44) ‘YYYY년MM월DD일 hh시mm분ss초로 txt파일에 쓰기
Close #1 ‘txt 파일 닫기
End If
End Sub
=====================================================
아래의 그림과 같이 스크립트를 등록합니다.
2. 버튼 오브젝트를 생성합니다.
[버튼정의]-[동작정의]에서 ‘명령식’ 동작을 선택하고 ‘RunScript(“TxtFileReadWrite”)을 입력합니다.
3. CIMONX 실행 후, 스크립트를 실행하였을 때 경로에 텍스트 파일이 생성된 것을 확인할 수 있습니다.
스크립트 동작 시 텍스트 파일을 읽고, 먼저 저장된 데이터의 상위에 최근의 데이터를 표시합니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON입니다.
사용자 보안 설정 시 ‘로그인 동작’ 기능을 이용하여 각 사용자의 시작 페이지를 다르게 설정할 수 있습니다.
다음 예시를 참고하여 주시기 바랍니다.
[적용 방법]
1. [도구]-[사용자 보안]에 진입하여 ‘새 사용자’ 버튼을 누른 후, 두 명의 사용자(A, B)를 등록합니다.
2. 사용자 ID ‘A’와 ‘B’의 로그인 동작에 Openpage(“페이지 이름”) 명령식을 입력합니다.
사용자 ID ‘A’와 ‘B’가 로그인했을 때, 각자 “A로그인”, “B로그인”페이지가 실행되도록 합니다.
3. CimonX를 실행하여 각 사용자 ID로 로그인합니다.
각 계정으로 로그인 시 시작 페이지가 다르게 나타나는 것을 확인할 수 있습니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON입니다.
태그값을 텍스트 파일로 저장하고자 하는 경우, 다음 예제와 같이 스크립트를 작성하여 활용할 수 있습니다.
[적용 방법]
파일이 저장되는 경로는 C 드라이브 내 ‘TEST’ 폴더입니다.
1. 데이터베이스에서 아날로그 태그 DATA1, DATA2를 생성합니다.
2. [도구]-[스크립트]에 진입하여 다음과 같이 스크립트를 작성합니다.
Sub MakeTextFile1()
Dim StrRecord As String ‘text 에 데이터를 저장할 스트링 버퍼
Const crlf = Chr$(13) + Chr$(10) ‘줄바꾸기 변수
‘파일저장 경로
Path$ = “C:\TEST\”
‘파일명 저장하기 위한 현재시간 받아오기
CurTime# = Now()
YYYY$ = FormatStr(“%04d”, 0, Year(CurTime#)) ‘현재 연도
Mon$ = FormatStr(“%02d”, 0, MonTh(CurTime#)) ‘현재 월
DD$ = FormatStr(“%02d”, 0, Day(CurTime#)) ‘현재 일
HH$ = FormatStr(“%02d”, 0, Hour(CurTime#)) ‘현재 시
MM$ = FormatStr(“%02d”, 0, Minute(CurTime#)) ‘현재 분
SS$ = FormatStr(“%02d”, 0, Second(CurTime#)) ‘현재 초
DateTime$ = YYYY$ & Mon$ & DD$ & HH$ & MM$ & SS$
‘파일 이름
FileName$ = Path$ & DateTime$ & “.txt”
If FileExists(FileName$ ) Then
Kill FileName$ ‘파일 이름 똑같은 경우 삭제함
Sleep(100)
End If
‘저장될 데이터 얻어오기
StrRecord = FormatStr(“%f”, 1, GetTagVal(“DATA1”))+_ ‘Binary 데이터를 스트링 데이터로 변환
crlf+_ ‘줄바꾸기
FormatStr(“%5.2f”, 1, GetTagVal(“DATA2”))
Open FileName$ For Append Access Read Write Shared As #1
Print #1, StrRecord
Close
End Sub
===============================================
아래 그림과 같은 형식으로 스크립트를 등록합니다.
3. 버튼 오브젝트를 생성합니다.
[버튼정의]-[동작정의] 선택 후 ‘명령식’ 동작으로 Runscript(“MakeTextFile1”)을 입력합니다.
4. CimonX를 실행하여 동작을 확인합니다.
스크립트 동작 시, ‘C:\TEST\’ 경로 내에 ‘YYYYMMDDhhmmss.txt’의 형식으로 텍스트 파일이 생성됩니다.
스크립트 구동 시의 DATA1, DATA2 태그값이 파일 내에 저장됩니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON입니다.
아래의 함수를 사용하면 Beep 음을 울리게 할 수 있습니다.
StaticBeepCtrl(R1)
R1이 0이 아닌 경우 Beep 음이 발생하고, 0이면 Beep 음이 꺼지게 됩니다.
다음은 함수를 이용한 활용 예제입니다.
1. [도구] – [경보]를 클릭합니다.
2. 태그 이름과 경보 내용을 입력합니다.
3. 경보 발생 조건을 설정합니다. ( e.g. ANA1 > 100 )
4. 경보 발생 동작을 ‘명령식’ 으로 설정합니다.
5. 발생 동작 변수에 ScriptBeepCtrl(1)을 입력합니다.
6. 경보 해제 동작에 ScriptBeepCtrl(0)을 입력합니다.
위와 같이 설정을 한 뒤, 경보를 등록합니다.
ANA1의 값이 100보다 커지면 Beep음이 발생하고, 100 이하가 되면 Beep음이 해제됩니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
#Beep #비프
-
안녕하세요.
CIMON입니다.
PulseOn 내부함수를 명령식 또는 스크립트로 사용하면 특정 태그를 ON으로 출력한 후, 일정 시간 후에 다시 OFF 전환할 수 있습니다.
다음 함수 설명을 참조하여 주시기 바랍니다.
PulseOn 지정된 태그를 주어진 Pulse 폭만큼 ON 출력한 후, OFF로 전환합니다. 명령함수 명령식 표기 PulseOn(“태그이름”, Pulse폭) 스크립트 표기 PulseOn“태그이름”, Pulse폭 기능 지정된 태그를 지정한 Pulse 폭 (msec 단위)만큼 Pulse ON 출력합니다. 사용 예제 “TEST” 태그를 1초동안 ON(1)출력한 뒤 다시 0(OFF)을 출력합니다. 명령식으로 사용할 때: PulseOn(“TEST”,1000 )
스크립트 내에서 사용할 때: PulseOn“TEST”,1000
[적용방법]
1. 데이터베이스에서 디지털 태그 ‘TEST’, ‘TEST1’을 생성합니다.
2. [도구]-[스크립트]를 선택하여 다음과 같이 스크립트를 작성합니다.
‘TEST’ 태그가 1일 때 ‘TEST1’ 태그를 1초동안 ON 시킨 후 OFF 시키는 스크립트입니다.
Sub Pulse()
A= GetTagval(“TEST”) ‘TEST라는 태그를 A변수로 설정합니다
if A = 1 then ‘A 변수 값이 1일 때
PulseOn “TEST1”, 1000 ‘TEST1 태그를 1초동안 ON시킵니다. (2000으로 했을시 2초)
end if
End Sub
================================================
아래와 같이 스크립트를 등록합니다.
3. CimonX를 실행하여 동작을 확인합니다.
TEST 태그의 값이 1일 때 스크립트를 동작시키면, TEST1태그의 값이 1초 동안 ON으로 출력되었다가 다시 OFF로 전환됩니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON입니다.
보고서 기능처럼 엑셀 파일에 데이터를 쓰기 및 출력하고자 할 때, 다음 예제에서 제시되는 스크립트를 통해 기능을 설정할 수 있습니다.
[적용 방법]
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 라는 파일이 생성됩니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.