-
제품선택
-
안녕하세요,
CIMON입니다.
VB 함수를 이용하여 스크립트를 작성하는 것으로 엑셀 파일의 시트 이름을 표시할 수 있습니다.
다음 예제를 참조하여 주시기 바랍니다.
[사용 예제]
1. 시트 이름을 가져올 엑셀 파일의 위치를 확인합니다.
2. [도구]-[스크립트]에 진입하여 다음과 같이 스크립트를 작성합니다.
Sub ReadExcelSheet()
Dim ExcelApp As Object
Dim DayRpt As Object
‘Read 파일 이름
fName$ = “C:\보고서\Test.xls”‘Excel 실행
Set ExcelApp = CreateObject(“Excel.Application”)‘Excel 파일 열기
Set DayRpt = ExcelApp.Workbooks.Open (fName$)‘Excel 파일의 모든 시트를 돌며 시트의 이름을 가져와서 표시한다.
For nIdx = 1 To DayRpt.Worksheets.Countshname = DayRpt.Worksheets(nIdx).Name
msgbox shnameNext nIdx
‘파일을 닫는다.
DayRpt.Close‘Excel 를 종료한다.
ExcelApp.QuitEnd Sub
=====================================
위 스크립트를 다음 그림과 같이 등록합니다.
3. CimonX를 실행합니다.
스크립트를 실행하면, 경로의 엑셀 파일에 저장된 모든 시트 이름을 메시지 박스로 표시합니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
트랜드 오브젝트의 데이터를 엑셀파일로 출력하는 예제 입니다.
[예제]
●예제프로젝트 설명
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
-
CIMON-SCADA월보인 경우는 3개월을 저장하고 있습니다. 따라서 3개월 이전의 값을 유지 하시려면 가상태그를 만들어서 보관한 후 보고서로 출력할 때 사용 하십시오.
[ 예제설명]
스크립트에서 TimeStr(51) 함수를 사용해서 현재 월을 가져옵니다.
예제는 ANA1 을 실 태그로 두시고, SUM01~SUM12 는 가상태그입니다.
보고서에 출력 전 스크립트를 사용해서 RunScript 를 사용 하시면 됩니다.
[ 적용방법]
‘ SUM01, SUM02 ~ SUM12 까지가 ANA1 태그에 대한 월 적산합이 들어 갑니다.
‘ 보고서 셀에는 TLogVal(“SUM01~SUM12″,”-1 월“, 적산합) 이 아닌 그냥 SUM01, SUM02 처럼 쓰면 됩니다.
prevMon$ = TimeStr(51)
curMon$ = prevMon$
curMon$ = TimeStr(51)
if curMon$ <> prevMon$ then ‘ 달이 바뀌었는지 체크
nSum = TLogVal (“ANA1″,”-1 월“,” 적산값“) ‘ 전월 적산값을 구한다
SetTagVal “SUM”+prevMon$ , nSum ‘ 전월 태그에 값을 밀어 넣는다
prevMon$ = curMon$
end if
End Sub
-
안녕하세요.
CIMON입니다.
명령식과 스크립트는 태그값 쓰기의 표현 형식 및 내부 함수 사용시 표현 형식에서 차이가 있습니다.
[ 예문]
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 을 기반으로 만들어진 일종의 컴파일러( 컴퓨터가 인식할 수 있는 언어) 를 사용합니다. 여기서 제공되는 함수를 이용하여Cimon 의 데이터를 접근하여 수정할 수 있습니다.
- 내부함수( 연산식) : Microsoft 사의 Visual Basic 에서 제공하는 라이브러리를 이용하여 Cimon 을 실행할 때 유용한 함수를 직접 만들어서 Cimon 프로그램 내부에서만 이용할 수 있도록 되어진 함수 입니다. 예를 들어 태그동작이나 터치동작 같은 오브젝트 사용시 동작명령어에 사용할 수 있습니다. 이러한 내부함수는 스크립트 내부에서 사용이 가능합니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요,
CIMON입니다.
CIMON-SCADA 에서 사용하는 FEP 포트는 UDP 1609 이며,
다음 공유기 설정 방법을 통해 적용할 수 있습니다.
[적용 방법]
ipTIME 공유기를 예로 들어 설명합니다.
1. 공유기 웹 설정 화면에 진입합니다.
[고급설정]-[NAT/라우터 관리]-[포트포워드 설정] 메뉴를 선택합니다.
2. ‘포트포워드 설정’ 화면에서 다음과 같이 설정합니다.
(1) 규칙 이름을 입력한 후, 내부 IP를 입력합니다. 현재 PC의 IP 어드레스를 사용하려면 ‘현재 접속된 PC의 IP주소로 설정’을 선택합니다.
(2) 프로토콜을 입력합니다. CIMON-FEP는 UDP 1609 포트를 사용합니다. 외부포트 및 내부포트 입력란에 1609를 입력합니다.
(3) ‘추가’를 선택합니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON입니다.
CIMON-SCADA에서는 기본적으로 아날로그 값이 10진수로 표현됩니다.
XG 5000 내에서는 디바이스 모니터의 데이터 표시 형식이 ‘명령어에 따른 표시’로 기본값 설정 되어 있습니다.
이 상태에서 CIMON-SCADA로 아날로그 데이터를 읽어올 경우, 태그값이 각각 다르게 표시될 수 있습니다.
이 값을 동일하게 맞추고자 하실 경우, 다음 방법을 통해 적용하실 수 있습니다.
[적용 방법]
XG5000 내 [도구] – [옵션]으로 진입합니다.
모니터 표시 형식을 ‘명령어에 따라서 표시’에서 ’10진수로 표시’로 변경하여 적용 가능합니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON입니다.
스크립트를 작성하실 때, While문 또는 For 문의 중간에 Sleep 함수가 없을 경우 리소스를 계속 점유하여 CPU 사용률이 100%까지 올라가게 됩니다.
While ~ WEnd문이 실행 중일 경우, 이 문장 사이에 sleep 함수가 있어야 이러한 현상을 방지할 수 있습니다.
예)
Sub Test()
While 1
SetTagVal “TAG1”, 1
SetTagVal “TAG2”, 1 Sleep(100) Wend
End Sub
======================
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
[SCADA]
안녕하세요.
CIMON입니다.
보고서에서의 1일 평균값은 ‘TLogVal()’ 함수에서 시간 값을 일단위로 사용하는 것으로 구할 수 있습니다.
다음 함수 설명을 참조하여 주시기 바랍니다.
[함수 설명]
TLogVal 지정한 태그의 보고서 데이터 값을 표시합니다. 함수명 연산식 표기 TLogVal (“태그 이름”, “시각값”, “값종류”) 스크립트 표기 n = TLogVal (“태그 이름”, “시각값”, “값종류”) 기능 각 태그 이름이 등록된 보고서 데이터에서, 시각값에 해당하는 시간대에 보고서에 기록된 데이터의 값을 값종류에 따라 표시합니다. 이 때, 태그는 보고서용 태그로 지정되어야 합니다. 시각값 일단위로 데이터를 표시하고자 할 경우, dd일의 형식으로 지정합니다. 음수인 경우에는 금일부터 지정된 수만큼 전일을 표시합니다. 값종류 평균값으로 지정하여 일별/월별/연도별 평균값을 표시합니다. 사용 예제 예1) 월보 사용 시, ‘POWER’ 태그의 값에 대하여 전일의 평균값을 표시합니다. 연산식 표기: TLogVal (“POWER”, “-1일”, “평균값”) = n
스크립트 표기: n = TLogVal (“POWER”, “-1일”, “평균값”)
예2) 월보 사용 시, ‘POWER’ 태그의 값에 대하여 전월 1일의 평균값을 표시합니다.
연산식 표기: TLogVal (“POWER”, “-1월 1일”, “평균값”) = n
스크립트 표기: n = TLogVal (“POWER”, “-1월 1일”, “평균값”)
※ TLogVal() 함수의 자세한 사용 방법은 CimonD 내 도움말을 참조하여 주시기 바랍니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
안녕하세요.
CIMON입니다.
태그동작 및 태그동작실행 기능을 사용하고자 할 때, 태그값이 변화했을 때에만 지정된 스크립트를 실행할 수 있습니다.
PLC의 전원이 재부팅되었을 경우, 태그값이 변화한 것이 아니므로 태그값은 동기화되지 않습니다.
다음은 PLC의 전원이 재부팅되어도 태그값을 자동으로 동기화시킬 수 있도록 구성한 예제입니다.
1. 데이터베이스에서 아날로그 태그 A, B를 생성합니다.
2. 태그 A의 값이 변경될 때마다 B의 값도 같은 값으로 동기화하기 위해, 태그 A에 ‘태그 동작을 지정함’과 ‘태그값 변경시 태그 동작을 실행함’ 옵션을 선택합니다.
3. [태그 동작] 탭에 B=A를 입력합니다.
이는 B의 값을 A에 쓰기하는 동작입니다.
4. [도구]-[스크립트]에 진입하여 다음과 같이 스크립트를 작성합니다.
Sub Main()
while 1 ‘ 통신상태 checking
com = commstatus(“디바이스이름”)
if com <> 0 then ‘ 통신이 오프라인이면
Do ‘ 무조건 반복 루프 실행
com = commstatus(“디바이스이름”)
sleep(2000)
Loop Until com = 0 ‘ 통신이 정상이 될때 까지
AA = Gettagval(“A”)
settagval “B” , AA
sleep(2000)
end if
sleep(2000)
wend
End Sub
======================================
아래 그림과 같이 스크립트를 등록합니다.
Commstatus 함수에 대한 설명은 다음을 참고바랍니다.
Commstatus 지정된 디바이스 또는 스테이션의 통신 상태를 출력합니다. 수치함수 연산식 표기 Commstatus (“디바이스이름”) Commstatus (“디바이스이름.스테이션이름”)
Commstatus (“”)
스크립트 표기 n = Commstatus (“디바이스이름”) n = Commstatus (“디바이스이름.스테이션이름”)
n = Commstatus (“”)
기능 지정된 디바이스 또는 스테이션의 통신 상태를 출력합니다. 디바이스 이름을 지정하지 않으면 시스템 전체적인 통신 상태를 출력합니다. -1 통신이 비활성화된 상태입니다. 0 통신이 정상적인 상태입니다. 1 통신이 비정상적인 상태입니다. 사용 예제 디바이스 이름이 ‘PLC’일 때, 해당 디바이스의 통신 상태를 확인합니다. 연산식 입력: Commstatus (“PLC”) = n
스크립트 입력: n = Commstatus (“PLC”)
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.
-
[SCADA]
t,z,안녕하세요,
CIMON입니다.
스크립트 편집기에 등록할 수 있는 스크립트의 개수에는 제한이 없습니다.
다음은 스크립트 작성 시 각 요소에서 사용 가능한 용량을 나타낸 표입니다.
표를 참고하시어 스크립트 작성에 유의하여 주시기 바랍니다.
언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.
감사합니다.