scada 개체는 일반적으로 포인트의 값을 읽거나 포인트에 값을 쓸 때 사용하며 시스템 내의 데이터 처리에도 사용할 수 있습니다.

 scada 개체에서 지원하는 함수와 기능 설명은 아래와 같습니다.

Methods


리턴 값

함 수

설 명

analogData

getAnalogData( name )

아날로그 포인트의 데이터를 읽어옵니다.

CommChannelData

getCommChannel( name )

주어진 통신 채널 정보를 읽어 옵니다.

CommGroupData

getCommChannelGroup (name)

주어진 통신 채널 그룹 정보를 읽어 옵니다.

list<CommGroupData>

getCommChannelGroupList( )

전체 통신 채널 그룹 리스트를 읽어 옵니다.

list<CommChannelData>

getCommChannelList ( )

전체 통신 채널 리스트를 읽어 옵니다.

DeviceData

getDevice ( name )

주어진 디바이스 정보를 읽어 옵니다.

list<DeviceData>

getDeviceList ( )

전체 디바이스 리스트를 읽어 옵니다.

float

getPreviousValue (name)

상태 포인트 또는 아날로그 포인트의 이전 값을 읽어옵니다.

StationData

getStation ( path )

지정한 경로에 스테이션을 데이터를 읽어 옵니다.

list<StationData>

getStationList ( )

전체 스테이션 리스트를 읽어옵니다

statusData

getStatusData( name )

상태 포인트의 데이터를 읽어옵니다.

string

getTextValue( name )

텍스트 포인트의 값을 읽어옵니다.

float

getValue( name )

상태 포인트 또는 아날로그 포인트의 값을 읽어옵니다.

boolean

isPointExist( name )

해당 포인트가 있는지 확인합니다.


resetData( name )

상태 포인트 또는 아날로그 포인트의 현재 값과 이력 데이터 값을 초기화합니다.


restartCalculation()

계산식을 재시작합니다.


sendEvent( level, area, origin, desc, event )

이벤트를 만들어 전송합니다.


setFormula( name, formula )

포인트를 연산할 때 사용합니다.


setSummation( name, datas )

포인트를 합산할 때 사용합니다.


setTextValue( name, value )

텍스트 포인트에 텍스트 값을 씁니다.


setValue( name, value )

상태 포인트 또는 아날로그 포인트에 값을 씁니다.

boolean

waitForValueChange( name, value, msec )

포인트의 값이 설정한 값이 될 때까지 대기(msec) 합니다.



 analogData getAnalogData ( name:포인트명 )


 getAnalogData는 아날로그 포인트의 현재 값을 포함에 아날로그 포인트가 가지고 있는 부가적인 정보를 가져올 수 있습니다.

 반환되는 값은 analogData형식이며 현재 값 이외에 여러가지 값을 포함하고 있습니다.


  예)

# 아날로그 포인트 'Station 1.상전류 A' 의 데이터를 읽어옵니다.

data = scada.getAnalogData('Station 1.상전류 A')


# 현재 값 읽기

current  = data.lastValue()

# 현재 시간 기준 시간 최대값 읽기

current  = data.maxValue()

# 현재 시간 기준 시간 최소값 읽기

current  = data.minValue()

# 현재 시간 기준 시간 평균값 읽기

current  = data.avgValue()

# 현재 시간 기준 시간 변화량  값 읽기

current  = data.accValue()

###################################

# 현재 시간 기준 금일 최소값 읽기

current  = data.dayMaxValue()

# 현재 시간 기준 금일 최대값 읽기

current  = data.dayMinValue()

# 현재 시간 기준 금일 평균값 읽기

current  = data.dayAvgValue()

# 현재 시간 기준 금일 변화량 값 읽기

current  = data.dayAccValue()

###################################


# 현재 시간 기준 금월 최소값 읽기

current  = data.monthMaxValue()

# 현재 시간 기준 금월 최대값 읽기

current  = data.monthMinValue()

# 현재 시간 기준 금월 평균값 읽기

current  = data.monthAvgValue()  

# 현재 시간 기준 금월 변화량 값 읽기

current  = data.monthAccValue()  


###################################

# 현재 시간 기준 금년 최대값 읽기

current  = data.yearMaxValue()  

# 현재 시간 기준 금년 최소값 읽기

current  = data.yearMinValue()  

# 현재 시간 기준 금년 평균값 읽기

current  = data.yearAvgValue()  

# 현재 시간 기준 금년 변화량 값 읽기

current  = data.yearAccValue()  


###################################

# 시스템 가동 시점 부터 현재까지의  최소값 읽기

current  = data.totalMaxValue()  

# 시스템 가동 시점 부터 현재 까지의 최대값 읽기

current  = data.totalMinValue()  

# 시스템 가동 시점 부터 현재 까지의 평균값 읽기

current  = data.totalAvgValue()  

# 시스템 가동 시점 부터 현재 까지의  변화량 값 읽기

current  = data.totalAccValue()  


# 정상적인 데이터 여부 확인

good = data.isGood()  

     



 CommChannelData getCommChannel ( name : 채널 이름 )


 주어진 통신 채널 정보를 읽어 옵니다. 실행 결과는 CommChannelData로 반환되며 CommChannelData를 이용해 통신 채널에 대한 연결 상태 정보와 통신 채널에 속한 디바이스 정보를 읽어 올수 있습니다


  예)

#PCS1 채널 정보 읽기

data = scada.getCommChannel('PCS1')


#채널 이름 읽기

print ('Channel Name :' , data.getName() )


#채널 상태, 0 연결 끊김상태 , 1 연결상태

print ('Status :' , data.getStatus() )


#전체 통신 실패 기간(초) )

print ('Total Fail Duration :' , data.getTotalFailDuration() )


#전체 통신 실패 횟수

print ('Total Fail Count :' , data.getTotalFailCount() )


#금일 통신 실패 기간(초)

print ('Today Fail Duration :' , data.getTodayFailDuration() )


#금일 통신 실패 횟수

print ('Today Fail Count :' , data.getTodayFailCount() )


#통신 연결 시간

print ('Chennel Opened Time :' , data.getChennelOpenedTime() )


#통신 연결 종료 시간

print ('Chennel Closed Time :' , data.getChennelClosedTime() )


#활성 노드 : 0 Primary , 1 Secondary

print ('Active Node :', data.currentActiveNode() )


#통신 채널에 속한 디바이스 읽기

deviceList = data.getDeviceList()

for device in deviceList:

    print 'Device Name :' , device.getName()

     

결과)

Channel Name : PCS1

Status : 1

Total Fail Duration : 71443

Total Fail Count : 77

Today Fail Duration : 0

Today Fail Count : 0

Chennel Opened Time : 2025-11-05 15:17:38

Chennel Closed Time : 2025-11-05 15:16:34

Active Node : 1

Device Name : PCS1



 CommGroupData getCommChannelGroup ( name : 채널 그룹 이름 )


 주어진 통신 채널 그룹 정보를 읽어 옵니다. 실행 결과는 CommGroupData 반환되며 CommGroupData 이용해 통신 채널 그룹에 속한 통신 채널 정보를 읽어 올수 있습니다


  예)

#Default 채널 그룹 읽기

data = scada.getCommChannelGroup('Default')


#채널 그룹에 속한 통신 채널 읽기

channelList = data.getCommChannelList()

for channel in channelList:

    print 'Channel Name :' , channel.getName()

     

결과)

Channel Name : PCS1

Channel Name : BMS1

Channel Name : PCS2

Channel Name : BMS2

Channel Name : ACB1

Channel Name : PV



 list<CommGroupData> getCommChannelGroupList (  )


 전체 통신 채널 그룹 목록을 읽어 옵니다.


  예)

#채널 그룹 목록 읽기

groupList = scada.getCommChannelGroupList()


for group in groupList:

    print 'Name :' , group.getName()

    print 'Description :' , group.getDescription()

     

결과)

Group Name : Default

Group Description :



 list<CommChannelData> getCommChannelList (  )


 전체 통신 채널 목록을 읽어 옵니다.


  예)

#채널 목록 읽기

channelList = scada.getCommChannelList()


for channel in channelList:

    print 'Name :' , channel.getName()

    print 'Description :' , channel.getDescription()

    print ''

     

결과)

Name : PCS1

Description : 세종 LS PCS


Name : BMS1

Description : 세종 KOKAM BMS 1M


Name : PCS2

Description :


Name : BMS2

Description :


Name : ACB1

Description : VIPAM3500


Name : PV

Description : GE F650




 DeviceData getDevice  ( name : 디바이스 이름 )


 주어진 디바이스 정보를 읽어 옵니다. 실행 결과는 DeviceData로 반환되며 DeviceData를 이용해 디바이스의 통신 상태 정보와 같은 디바이스에 관련된 정보를 읽어 올수 있습니다


  예)

#디바이스 정보 읽기

device = scada.getDevice('PCS1')


#채널 이름 읽기

print 'Device Name :' , device.getName()

print 'Description :' , device.getDescription()

#통신 상태, 0 연결 끊김상태 , 1 연결상태

print 'Status :' , device.getStatus()

#최근 계측시간

print 'ScanTime :' , device.getScanTime()


#전체 통신 성공률

print 'Total Success Ratio :' , device.getTotalCommSuccessRatio()


#전체 통신 실패 기간(초)

print 'Total Fail Duration :' , device.getTotalFailDuration()


#전체 통신 성공 횟수

print 'Total Success Count :' , device.getTotalSuccessPollingCount()


#전체 통신 무응답 횟수

print 'Total Fail Count :' , device.getTotalNoResponseCount()


#전체 통신 시도 횟수

print 'Total Try Count :' , device.getTotalPollingCount()


#금일 통신 성공률

print 'Today Success Ratio :' , device.getTodayCommSuccessRatio()


#전체 통신 실패 기간(초)

print 'Today Fail Duration :' , device.getTodayFailDuration()


#금일 통신 성공 횟수

print 'Today Success Count :' , device.getTodaySuccessPollingCount()


#금일 통신 무응답 횟수

print 'Today Fail Count :' , device.getTodayNoResponseCount()


#금일 통신 시도 횟수

print 'Today Try Count :' , device.getTodayPollingCount()


#디바이스에 속한 아날로그 포인트 이름 읽기

analogPointNames = device.getAnalogPointNameList()

#디바이스에 속한 상태 포인트 이름 읽기

statusPointNames = device.getAnalogPointNameList()

#디바이스에 속한 Active Power 포인트 값 읽기

value =  device.getValue('Active Power')

print 'Active Power : ' , value

     

결과)

Device Name : PCS1

Description :

Status : 1

ScanTime : 2025-11-05 17:14:29

Total Success Ratio : 99.9999237061

Total Fail Duration : 71574

Total Success Count : 130365540

Total Fail Count : 64

Total Try Count : 130365637

Today Success Ratio : 100.0

Today Fail Duration : 0

Today Success Count : 22222

Today Fail Count : 0

Today Try Count : 22222

Active Power :  89.0




 list<DeviceData> getDeviceList  (  )


 전체 디바이스 목록을 읽어 옵니다.


  예)

#디바이스 목록 읽기

deviceList = scada.getDeviceList()


for device in deviceList:

    print 'Name :' , device.getName()

    print 'Description :' , device.getDescription()

    print ' '

     

결과)

Name : PCS1

Description : 세종 LS PCS, HeartBit 사용

 

Name : BMS1

Description : 세종 BMS 코캄 , 1M

 

Name : PCS2

Description :

 

Name : BMS2

Description :

 

Name : PV

Description : 태양광 PV 계측 GE F650

 

Name : ACB1

Description : 비츠로 VIPAM 그리드 전 위치

 




 variant getPreviousValue( name:포인트명 )


주어진 이름의  아날로그 포인트 또는 상태 포인트의 이전 값을 읽습니다.


 예)

# 포인트 'Station 1.고장상태' 이전 값을 읽어옵니다.

val = scada.getPreviousValue('Station 1.고장상태');




 

  StationData  getStation ( path : 스테이션 이름)

 

 주어진 이름의 스테이션 정보를 반환 합니다.

• path : 읽어오려는 스테이션 이름을 나타 냅니다.  아래와 같은 스테이션 계층 구조에서 '속초' 스테이션을 읽기 위해서는 상위 스테이션을 포함한 전체 경로을 입력 합니다.

 >>  station = getStation('강원.속초')


 스테이션 이름에 빈 문자열을 입력하면 최상위 스테이션을 반환 하며, 최상위 스테이션은 스테이션 이름과 설명과 같은 정보를 가지지 않고 하위 스테이션을 탐색하는 용도로 사용 할 수 있습니다.

>> rootStation = getStation(' ')

아래 예제는 스테이션이 아래와 같이 구성되었을때 스테이션 정보를 불러오는 방법을 보여 줍니다.

 예)

# 최상위 스테이션을 얻어 옵니다

rootStation = scada.getStation('')

# 최상위 스테이션의 하위 스테이션을 얻어 옵니다

for station in rootStation.getChildren() :

    print station.getStationName()


 결과)

강원

경북

대구

부산울산

풍속_가상포인트

통신





  list<StationData> getStationList (  )


 프로젝트에 입력된 전체 스테이션 리스트를 읽어옵니다.


  예)

# 전체 스테이션을 얻어 옵니다

stations = scada.getStationList()


for station in stations:

    print 'StationPath :', station.getPathName()

     

결과)

StationPath : 강원

StationPath : 강원.속초

StationPath : 강원.고성

StationPath : 강원.양양

StationPath : 강원.강릉

StationPath : 강원.동해

StationPath : 강원.춘천

StationPath : 강원.삼척

StationPath : 강원.양구

StationPath : 강원.영월

StationPath : 강원.인제

StationPath : 강원.철원

StationPath : 강원.홍천

StationPath : 강원.화천

StationPath : 강원.춘천.원창간 380

StationPath : 강원.춘천.강촌간 262





 statusData getStatusData( name:포인트명 )


 getStatusData는 상태 포인트의 현재 값을 포함에 상태 포인트가 가지고 있는 부가적인 정보를 가져올 수 있습니다.

 반환되는 값은 statusData형식이며 현재 값 이외에 여러가지 값을 포함하고 있습니다.


 예)

# 상태 포인트 'Station 1.고장상태' 의 데이터를 읽어옵니다.

data = scada.getStatusData('Station 1.고장상태');  


# 현재 값 읽기

current  = data.lastValue()  


# 현재 시간 기준  현재 시간에 값이 On일 동안의 시간(밀리초)

current  = data.timeOnDuration()  


# 현재 시간 기준 현재 시간에 값이 Off일 동안의 시간(밀리초)

current  = data.timeOffDuration()  


# 현재 시간 기준 현재 시간에 값이 On으로 변한 횟수

current  = data.timeOnCount()  


# 현재 시간 기준 현재 시간에 값이 Off으로 변한 횟수

current  = data.timeOffCount()  


# 현재 시간 기준 현재 시간에 값이 On일 동안의 비율

current  = data.timeOnRatio()  


###################################


# 현재 시간 기준  금일 값이 On일 동안의 시간(밀리초)

current  = data.todayOnDuration()  


# 현재 시간 기준 금일 값이 Off일 동안의 시간(밀리초)

current  = data.todayOffDuration()  


# 현재 시간 기준 금일 값이 On으로 변한 횟수

current  = data.todayOnCount()  


# 현재 시간 기준 금일 값이 Off으로 변한 횟수

current  = data.todayOffCount()  


# 현재 시간 기준 금일 값이 On일 동안의 비율

current  = data.todayOnRatio()  


###################################


# 현재 시간 기준  금월 값이 On일 동안의 시간(밀리초)

current  = data.monthOnDuration()  


# 현재 시간 기준 금월 값이 Off일 동안의 시간(밀리초)

current  = data.monthOffDuration()  


# 현재 시간 기준 금월 값이 On으로 변한 횟수

current  = data.monthOnCount()  


# 현재 시간 기준 금월 값이 Off으로 변한 횟수

current  = data.monthOffCount()  


# 현재 시간 기준  금년 값이 On일 동안의 비율

current  = data.monthOnRatio()  


###################################


# 현재 시간 기준  금년 값이 On일 동안의 시간(밀리초)

current  = data.yearOnDuration()  


# 현재 시간 기준 금년 값이 Off일 동안의 시간(밀리초)

current  = data.yearOffDuration()  


# 현재 시간 기준 금년 값이 On으로 변한 횟수

current  = data.yearOnCount()  


# 현재 시간 기준 금년 값이 Off으로 변한 횟수

current  = data.yearOffCount()  


# 현재 시간 기준 금년 값이 On일 동안의 비율

current  = data.yearOnRatio()  


###################################


# 시스템 가동 시점 부터 현재 까지 값이 On일 동안의 시간(밀리초)

current  = data.totalOnDuration()  


# 시스템 가동 시점 부터 현재 까지 값이 Off일 동안의 시간(밀리초)

current  = data.totalOffDuration()  


# 시스템 가동 시점 부터 현재 까지의 On으로 변한 횟수

current  = data.totalOnCount()  


# 시스템 가동 시점 부터 현재 까지의 Off으로 변한 횟수

current  = data.totalOffCount()  


# 시스템 가동 시점 부터 현재 까지의 On일 동안의 비율

current  = data.totalOnRatio()  


# 정상적인 데이터 여부 확인

good = data.isGood()  




 float getValue( name:포인트명 )


 getValue는 포인트의 값을 읽어옵니다. 아날로그 포인트와 상태 포인트 모두 사용할 수 있습니다.


 예)

# 포인트 'Station 1.고장상태' 의 값을 읽어옵니다.

val = scada.getValue('Station 1.고장상태');

 



 setValue( name:포인트명, value:설정값 )


 setValue는 포인트의 값을 쓸 때 사용합니다. 아날로그 포인트와 상태 포인트 구분없이 사용할 수 있습니다.


 예) 

# 포인트 'Station 1.고장상태' 의 값을 202.4로 설정합니다.

scada.setValue('Station 1.상전류', 202.4);  

 



 string getTextValue( name:포인트명 )


 텍스트 포인트의 값을 읽어옵니다.


  예) 

# 텍스트 포인트 'Station 1.버전 정보' 의 값을 읽어옵니다.

val = scada.getTextValue('Station 1.버전 정보');

 



 setTextValue( name:포인트명, text:텍스트 )


 텍스트 포인트에 값을 쓸 때 사용합니다. 텍스트 포인트에만 사용 가능합니다.


  예) 

# 텍스트 포인트 'Station 1.버전 정보' 의 값을 'myText'로 설정합니다.

scada.setTextValue('Station 1.버전 정보', 'myText');  

 



 boolean waitForValueChange( name:포인트명, value:설정값, msec:대기시간(밀리초) )


 포인트의 값이 설정한 값으로 바뀔 때까지 입력한 시간 동안 대기합니다.(설정한 값으로 바꾸지 않습니다.)

 대기시간 이내에 설정한 값으로 변경되면 True를 바로 리턴하며 대기 시간까지 값이 변경되지 않으면 False를 리턴합니다.


 예)

# 스위치 On 제어를 날립니다.

remote.setValue('Station 1.Control Switch', 1)  


# 스위치의 상태가 1로 변경될 때까지 1초동안 대기 합니다.

ret =  scada.waitForValueChange('Station 1.Switch_Status', 1, 1000);  

if ( ret == 1 ):

    print '변경됨'

else:

    print '변경되지 않음'




 resetData( name:포인트명 )


 포인트의 값을 리셋합니다. 리셋 시 이력 데이터 값도 리셋됩니다.


  예) 

# 상전류 값을 초기화합니다.

scada.resetData('Station 1.상전류')  




 sendEvent( level:경보 레벨, aor: 책임 구역, origin: 발생 위치, desc: 설명, event: 경보내용 )


 이벤트를 생성해 이벤트 창에 출력 합니다.


 예)

scada.sendEvent(1, 1, '시스템', '시스템 진단', '시스템 온도가 100도를 초과하였습니다.')


 출력)

 



 restartCalculation()


 계산식을 재시작합니다.


 예)

# 계산식을 재시작합니다.

scada.restartCalculation()  




 boolean isPointExist( name:포인트명 )


 해당 포인트가 있는지 확인합니다.


 예)

# 'Station 1.상전류 A'의 포인트가 있는지 확인합니다.

ret = scada.isPointExist('Station 1.상전류 A');  

if ( ret == 0 ):

    print '없는 포인트'

else:

    print '있는 포인트' 




 setSummation( name:저장할 포인트 이름, datas:합산할 포인트 이름 목록 )


 계산식에서 여러 포인트의 값을 합산하여 새로운 포인트에 저장할 때 사용합니다. 이때 계산식은 한번만 실행하도록 설정합니다.


  • name은 여러 포인트의 합산된 값이 저장될 포인트 이름입니다.
  • datas는 합산할 포인트 이름 목록으로 형식은 다음과 같습니다.
    • ['포인트1','포인트2']


 예)

# '공통.공통기' 포인트에 'LP 2.분기#1.누적 유효전력량'과 'LP 1.분기#1.누적 유효전력량'를 합산한 값을 저장합니다.

scada.setSummation('공통.공통기', ['LP 2.분기#1.누적 유효전력량', 'LP 1.분기#1.누적 유효전력량']);


# '공통.슈퍼공통기' 포인트에 'LP 3.분기#1.누적 유효전력량'과 '공통.공통기'를 합산한 값을 저장합니다.

scada.setSummation('공통.슈퍼공통기', ['LP 3.분기#1.누적 유효전력량', '공통.공통기']);




 setFormula( name:저장할 포인트 이름, formula: 포인트 연산식 )


 계산식에서 여러 포인트의 값을 연산한 후 새로운 포인트에 저장할 때 사용합니다. 이때 계산식은 한번만 실행하도록 설정합니다.


  • name은 여러 포인트의 값을 연산한 후 저장될 포인트 이름입니다.
  • formula는 포인트 연산식으로 사칙연산이 가능하며 형식은 다음과 같습니다.
    • 포인트1에서 포인트2를 뺄 경우 : " '포인트1' - '포인트2' "
    • 포인트1에서 포인트2를 더한 후 포인트3을 뺄 경우 : " '포인트1' + '포인트2' - '포인트3' "


 예)

# 'SG공통.제1국제관 총 누적 소비전력량' 포인트에 '이공관 HV5.분기#3 제1국제관 전기실 일반.누적 유효전력량' 에서 'SG공통.제1국제관 총-나머지분기'를 뺀 값을 저장합니다.

f = "  '이공관 HV5.분기#3 제1국제관 전기실 일반.누적 유효전력량' - 'SG공통.제1국제관 총-나머지분기' " 

scada.setFormula('SG공통.제1국제관 총 누적 소비전력량', f)


# 'SG공통.이공관 총 누적 소비전력량' 포인트에 '이공관 HV5.분기#1 이공관.누적 유효전력량' + '이공관 HV5.분기#2 정보과학관 전기실.누적 유효전력량' - '이공관 HV5.분기#3 제1국제관 전기실 일반.누적 유효전력량' 한 값을 저장합니다.

f="  '이공관 HV5.분기#1 이공관.누적 유효전력량' + '이공관 HV5.분기#2 정보과학관 전기실.누적 유효전력량' - '이공관 HV5.분기#3 제1국제관 전기실 일반.누적 유효전력량'  "

scada.setFormula('SG공통.이공관 총 누적 소비전력량', f)