WinCC VBS에서 활용하는 다양한 객체 및 변수 선언 패턴

WinCC 환경에서 VBS 스크립트를 작성할 때, 단순한 스칼라 타입뿐만 아니라 외부 COM 객체, 내부 런타임 요소, 동적 컬렉션 등 다양한 형태의 선언이 필요하다. 이 문서에서는 실무에서 자주 마주치는 선언 패턴을 체계적으로 정리한다.

1. 스칼라 및 기본 타입 선언

변수는 Dim, Public, Private 키워드로 선언하며, VBS는 Variant 타입 기반으로 동작한다.

Dim cnt
Dim ratio
Dim msgStr
Dim isEnabled

명시적 타입 지정이 없으므로, CInt, CDbl, CStr, CBool 등의 변환 함수를 적절히 활용해야 한다.

2. 배열과 동적 재할당

2.1 정적 배열

Dim weekDays(6)
weekDays(0) = "월"
weekDays(1) = "화"

2.2 동적 배열 및 Redim

차원을 미리 지정하지 않고 선언한 후, ReDim으로 크기를 확장할 수 있다. Preserve를 함께 쓰면 기존 데이터를 유지하면서 마지막 차원만 조정 가능하다.

' 동적 선언
Dim buffer
ReDim buffer(4)

buffer(0) = 10
buffer(1) = 20

' 크기 확장 (데이터 보존)
ReDim Preserve buffer(9)

' 다차원 동적 배열
Dim matrix
ReDim matrix(2, 3)
matrix(0, 0) = "A"
matrix(1, 2) = "B"

ReDim Preserve matrix(2, 5)  ' 마지막 차원만 확장 가능

주의: 이미 고정 차원으로 선언된 배열은 ReDim으로 재정의할 수 없다.

3. 파일시스템 객체

로그 파일 기록이나 외부 파일 입출력 시 Scripting.FileSystemObject를 활용한다.

Dim fsoHandler
Set fsoHandler = CreateObject("Scripting.FileSystemObject")

Dim txtStream
Set txtStream = fsoHandler.CreateTextFile("D:\Logs\event.txt", True)
txtStream.WriteLine "기록 시각: " & Now
txtStream.Close

4. 데이터베이스 연결

WinCC와 외부 데이터베이스를 연동할 때 ADODB를 통한 접근이 일반적이다.

Dim dbConn
Set dbConn = CreateObject("ADODB.Connection")

Dim connStr
connStr = "Provider=SQLOLEDB;Data Source=SERVER01;Initial Catalog=ArchiveDB;Integrated Security=SSPI;"

dbConn.Open connStr
' Recordset 처리 로직...
dbConn.Close

5. Excel 연동

보고서 자동 생성이나 데이터 내보내기 시 Excel Application 객체를 인스턴스화한다.

Dim xlApp
Set xlApp = CreateObject("Excel.Application")

xlApp.Visible = True
Dim xlBook
Set xlBook = xlApp.Workbooks.Add
Dim xlSheet
Set xlSheet = xlBook.Sheets(1)

xlSheet.Cells(1, 1).Value = "온도"
xlSheet.Cells(1, 2).Value = "압력"

6. WinCC 화면 요소 참조

런타임에서 화면 내 특정 객체에 접근하려면 ScreenItems 컬렉션을 사용한다.

Dim btnStart
Set btnStart = ScreenItems("btn_MotorStart")

btnStart.BackColor = RGB(0, 255, 0)
btnStart.Text = "운전 중"

7. 태그(변수) 객체 접근

PLC 태그 값을 읽거나 쓰려면 HMIRuntime.Tags를 통해 태그 핸들을 얻는다.

Dim tagPressure
Set tagPressure = HMIRuntime.Tags("Tag_PV_Pressure_001")

tagPressure.Read
If tagPressure.Quality = 192 Then  ' Good quality
    Dim curValue
    curValue = tagPressure.Value
End If

' 쓰기 예시
HMIRuntime.Tags("Tag_SP_Temperature_005").Write 125.5

8. 음성 합성 (TTS)

알람 발생 시 음성 안내를 구현할 수 있다.

Dim voice
Set voice = CreateObject("SAPI.SpVoice")

voice.Rate = 1
voice.Volume = 80
voice.Speak "긴급 알람 발생. 현장을 확인하십시오."

9. WSH 셸 객체

외부 프로그램 실행, 레지스트리 접근, 환경변수 조회 등에 활용된다.

Dim wsh
Set wsh = CreateObject("WScript.Shell")

' 외부 프로그램 실행
wsh.Run "notepad.exe D:\Report\daily.txt", 1, False

' 환경변수 조회
Dim progPath
progPath = wsh.ExpandEnvironmentStrings("%PROGRAMFILES%")

' 특정 키 누르기 시뮬레이션
wsh.SendKeys "{ENTER}"

10. 기타 유용한 COM 객체

용도ProgID활용 예시
XML 문서 처리MSXML2.DOMDocument설정 파일 파싱
HTTP 통신MSXML2.XMLHTTPREST API 연동
이메일 발송CDO.Message알람 메일 전송
디렉터리 모니터링Scripting.Dictionary키-값 캐시 관리

각 객체는 사용 후 Set obj = Nothing으로 명시적 해제를 권장하며, 특히 Excel이나 ADODB 같은 대형 COM 리소스는 반드시 Close 후 해제해야 메모리 누수를 방지할 수 있다.

태그: WinCC VBS SCADA COM automation

6월 22일 21:01에 게시됨