'연동'에 해당되는 글 3건

### 수위센서 실행 프로그램 PLC CICON ###

 

 


다운로드

 

물탱크.zip
0.00MB


 

### 프로그램 설계도 ###

### 프로그램 해석도 ###

 

게이지 효과 프로그램이다

 

  1. 벨브 설정
    1. 수위에 따른 벨브 ON/OFF 
  2. SCADA 입력값 받을 데이터 설정
    1. 물탱크
    2. 센서
  1.  물 투입 센서에 따른 수위 변화 조절 
    1. 물탱크 1 조절
    2. 물탱크 2 조절
  2. 물탱크 2 수위에 따른 물탱크 1 물 공급 가능 여부
    1.  물 탱크 2 빼기 설정 

### 추가 설정 필요 ###

  1. 펜에 따른 설정 

 

### 연동 프로그램 ###

X-SCADA (수위에 따른 물탱크 조절)

https://story-of-flower.tistory.com/131

 

수위에 따른 물탱크 조절

### 수위센서 실행 프로그램 PLC CICON ### 다운로드 ### 프로그램 설계도 ### ### 프로그램 해석도 ### 물탱크 자동조절 프로그램이다 벨브 자동화 탱크 수위에 맞는 벨브 ON/OFF 하였다 펜에 따른 설정 펜 움..

story-of-flower.tistory.com

 

블로그 이미지

Or71nH

,

### 수위센서 실행 프로그램 PLC CICON ###

 


다운로드

Tank.xid
0.20MB
Tank.xix
0.04MB


 

### 프로그램 설계도 ###

### 프로그램 해석도 ###

 

물탱크 자동조절 프로그램이다

 

  1. 벨브 자동화 
    1. 탱크 수위에 맞는 벨브 ON/OFF 하였다
  2. 펜에 따른 설정 
    1. 펜 움직임에 따른 수위 조절  
    2. 펜이 작동 중에만 수압에 의하여 물이 나온다
  3. 시나리오
    1. 시나리오를 사용하여자연스러운 모션 사용
  4. 색상 사용 설정
    1. 빨강 252.2.27
    2. 초록 102.24.51

### 필요 수정 ###

  1. 물탱크 상승 및 하강 설정
  2. 파이프 라인 수중 이동 추가 필요

 

### 연동 프로그램 ###

CICON

https://story-of-flower.tistory.com/132

불러오는 중입니다...

 

'+++++소스코드+++++ > X-SCADA' 카테고리의 다른 글

온도에 따른 알람 표시  (0) 2020.02.14
X-SCADA OPC 통신  (0) 2020.01.28
블로그 이미지

Or71nH

,

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 요따가 저장햇다난

 

리스트 컨트롤 다시 설정해주자

 

 

 

버튼도 만들어주자

 

끝!!

블로그 이미지

Or71nH

,