DB 를 이렇게 만들어준다
이거를 꼭확인할것
저거 이름 그림 이름으로 스크립트 다바꿀것!!!
##############################################
그림 그려준다 윈도우 컨트롤러 를 사용하여 끌어오면 된다
밑에 큰박스는 리스트 컨트롤러임
이건 날짜
불러와서 설정해준다
스클립트를 만들어준다
이렇게 하면 PRODUCT.CODE 가 바뀌면 그 당시 태그의 내용이 Log DB 모델에 써집니다
Sub PrInsert()
n = DbInsert("PRODUCT")
' 여기서 n 은 0 이 리턴 되야 성공이고 나머지는
' 데이터를 넣지 못했다는 얘기 입니다
End Sub
입력한 시간에서 얻은 레코드에서 어떤 특정 조건을 만족하는 레코드만 따로 뽑아 낼 수 있는 방법이 존재합니다 .
.
Sub PrTimeFind()
sDate$ = GetTagVal ("PRODUCT.SDATE")
sTime$ = GetTagVal ("PRODUCT.STIME")
' 달력 컨트롤에 물린 태그로 부터 검색 시작 날짜와 시간을 얻어온다.
eDate$ = GetTagVal ("PRODUCT.EDATE")
eTime$ = GetTagVal ("PRODUCT.ETIME")
' 달력 컨트롤에 물린 태그로 부터 검색 종료 날짜와 시간을 얻어온다.
DbSetFindTimeStr "PRODUCT",sDate$+sTime$,eDate$+eTime$
' 얻어온 시간을 입력 받아서 우리가 만든 PRODUCT 라는 Log DB 모델로
‘부터 검색 시간을 세팅한다.
n = DbFindRun("PRODUCT")
' 실제 검색을 수행한다.
wcGridCommand "그림3",102,0,0
' 그림3 는 우리가 아까 만든 리스트 컨트롤 이름이며 102라는 명령은
' 이 리스트 컨트롤에 걸려있는 Log DB 모델 검색 결과를 출력하는 명령이다.
End Sub
위에서 사용한 스크립트를 돌리기 위해 이전에 했던 것처럼 버튼을 만들고 명령식에 RunScript("PrOutput") 을 작성합니다
Sub PrOutput()
wcSaveData "그림3","D:\Z-Excel\a.csv"
'그림3 의 출력 내용을 csv 지정된 경로에 파일로 출력
wcSaveData "그림3","D:\Z-Excel\a.xlsx"
'엑셀 양식을 복사해서 엑셀 파일로 출력
wcSaveData "그림3","D:\Z-Excel\a.pdf"
'엑셀 양식을 복사해서 수정이 불가능한 pdf 문서로 출력
End Sub
행과 열의 선택이 바뀔 때 마다 "PRODUCT.SEL_STR" 태그 값이 변해야 하므로 "PRODUCT.ROW" 태그에 태그 동작과 태그 변경 시 동작을 체크하고 명령식에 RunScript("PrListChange") 를 써줍니다.
Sub PrListChange()
nRow = GetTagVal("PRODUCT.ROW")
'리스트 컨트롤 행 위치를 얻어 온다.
nCol = GetTagVal("PRODUCT.COL")
'리스트 컨트롤 열 위치를 얻어 온다.
strData$ = wcGridGetData("그림3", nCol, nRow)
' 위에서 구한 행과 열을 가지고 그 위치의 데이터를 얻어온다.
SetTagVal "PRODUCT.SEL_STR", strData$
'태그에 얻어온 값을 쓴다.
End Sub
CimonX에서 검색을 일단 먼저 후 위의 스크립트를 실행 시키면 다음과 같은 결과를 얻을 수 있습니다.
레코드가 차례대로 바뀌는 것을 알 수 있습니다.
Sub PrDirect()
nCnt = DbFindCount("PRODUCT")
' 찾은 레코드 수를 얻어온다.
n = DbFindFirstItem("PRODUCT")
' 첫번째 레코드로 이동한다.
for i= 1 to nCnt
' 레코드 수 만큼 루프를 돈다.
strVal$ = DbFindItemData("PRODUCT","TIME")
SetTagVal "PRODUCT.FIND_VAL1",strVal$
' 현 레코드 위치에서 시간 문자열을 얻어온다.
strVal$ = DbFindItemData("PRODUCT","CODE")
SetTagVal "PRODUCT.FIND_VAL2",strVal$
' 현 레코드에서 PRODUCT 모델에서 CODE 아이템에 있는 값을 가져와서 가상태그에 쓴다.
strVal$ = DbFindItemData("PRODUCT","ALERT")
SetTagVal "PRODUCT.FIND_VAL3",strVal$
' 현 레코드에서 PRODUCT 모델에서 ALERT 아이템에 있는 값을 가져와서 가상태그에 쓴다.
strVal$ = DbFindItemData("PRODUCT","TC")
SetTagVal "PRODUCT.FIND_VAL4",strVal$
' 현 레코드에서 PRODUCT 모델에서 TC 아이템에 있는 값을 가져와서 가상태그에 쓴다.
strVal$ = DbFindItemData("PRODUCT","PRESS")
SetTagVal "PRODUCT.FIND_VAL5",strVal$
' 현 레코드에서 PRODUCT 모델에서 PRESS 아이템에 있는 값을 가져와서 가상태그에 쓴다.
n = DbFindNextItem("PRODUCT")
' 다음 레코드로 이동한다.
Sleep(100)
'너무 빨리 지나가므로 좀 천천히 지나가게 해서 값을 확인
next i
End Sub
검색 내용을 뒤부터 먼저 출력하고 싶다면
Sub PrDirectReverse()
nCnt = DbFindCount("PRODUCT")
' 찾은 레코드 수를 얻어온다.
n = DbFindLastItem("PRODUCT")
' 첫번째 레코드로 이동한다.
for i= 1 to nCnt
' 레코드 수 만큼 루프를 돈다.
strVal$ = DbFindItemData("PRODUCT","TIME")
SetTagVal "PRODUCT.FIND_VAL1",strVal$
' 현 레코드 위치에서 시간 문자열을 얻어온다.
strVal$ = DbFindItemData("PRODUCT","CODE")
SetTagVal "PRODUCT.FIND_VAL2",strVal$
' 현 레코드에서 PRODUCT 모델에서 CODE 아이템에 있는 값을 가져와서 가상태그에 쓴다.
strVal$ = DbFindItemData("PRODUCT","ALERT")
SetTagVal "PRODUCT.FIND_VAL3",strVal$
' 현 레코드에서 PRODUCT 모델에서 ALERT 아이템에 있는 값을 가져와서 가상태그에 쓴다.
strVal$ = DbFindItemData("PRODUCT","TC")
SetTagVal "PRODUCT.FIND_VAL4",strVal$
' 현 레코드에서 PRODUCT 모델에서 TC 아이템에 있는 값을 가져와서 가상태그에 쓴다.
strVal$ = DbFindItemData("PRODUCT","PRESS")
SetTagVal "PRODUCT.FIND_VAL5",strVal$
' 현 레코드에서 PRODUCT 모델에서 PRESS 아이템에 있는 값을 가져와서 가상태그에 쓴다.
n = DbFindPrevItem("PRODUCT")
' 이전 레코드로 이동한다.
Sleep(1000)
' 너무 빨리 지나가므로 사람이 볼 수 있게 천천히
next i
End Sub
리스트컨트롤은LogDB 내용을 검색할 수도 있지만 사용자가 임의대로 값을 출력할 수도 있고 파일(csv 형태일 때만 가능) 을 읽어서 값을 표출할 수 있습니다.
아래와 같은 스크립트를 작성해고 실험해 봅니다.
Sub PrGaraData()
wcGridCommand "그림3", 100, 0, 0
'리스트 컨트롤 내용을 모두 지운다
for nRow = 0 to 25
'행을 0 부터 25 까지 돌린다.
data$ ="GaraA"+CStr(nRow)
wcGridSetData "그림3", 0, nRow, data$
'임의의 데이터를 만든 후 nRow 행 0열에 데이터를 쓴다
data$ ="GaraB"+CStr(nRow)
wcGridSetData "그림3", 1, nRow, data$
'임의의 데이터를 만든 후 nRow 행 1열에 데이터를 쓴다
data$ ="GaraC"+CStr(nRow)
wcGridSetData "그림3", 2, nRow, data$
'임의의 데이터를 만든 후 nRow 행 2열에 데이터를 쓴다
data$ ="GaraD"+CStr(nRow)
wcGridSetData "그림3", 3, nRow, data$
'임의의 데이터를 만든 후 nRow 행 3열에 데이터를 쓴다
data$ ="GaraE"+CStr(nRow)
wcGridSetData "그림3", 4, nRow, data$
'임의의 데이터를 만든 후 nRow 행 4열에 데이터를 쓴다
next nRow
End Sub
다음과 같은 스크립트를 실행합니다.
Sub PrGaraLoad()
wcGridCommand "그림3", 100, 0, 0
'리스트 컨트롤 내용을 모두 지운다.
wcLoadData "그림3","D:\gara.csv"
'gara.csv 를 읽어 들여 리스트컨트롤에 뿌려준다.
End Sub
이코드들 다만들어준다 8개임
이제 순서대로 하나씩 해보자
이런버튼하나 만들어준다
엑셀 만들어준다
C:\CIMON\SCADA 3.90\스마트팜\LOGDB 요따가 저장햇다난
리스트 컨트롤 다시 설정해주자
버튼도 만들어주자
끝!!
'[ 충남인력개발원 ] (2019) > ┗SCADA' 카테고리의 다른 글
CIMON access 하기 ODBC (0) | 2019.12.23 |
---|---|
CIMON SCADA 외부 접속 통신 하는법 (0) | 2019.12.23 |
CIMON OpenPageEx() 함수 (0) | 2019.12.17 |
CIMON 스크립트 만들어보자 (0) | 2019.12.17 |
CIMON 여러가지 설정에 관하여 (0) | 2019.12.17 |