### UP&DOWN  프로그램 PLC CIMOND ###

 


다운로드

UP&DOWN.zip
0.02MB


 

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

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

  1. 게이지 
    1. 게이지 설정 
  2. 상승 하강 모션 
    1. 상승 하강 모션 시각화

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

CICON

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

 

CICON PLC UP&DOWN 만들기

### UP&DOWN 프로그램 PLC CICON ### 다운로드 ### 프로그램 설계도 ### ### 프로그램 해석도 ### 게이지 효과 프로그램이다 전원 상승펄스 와 하강펄스로 ON&OFF UP&DOWN 상승 시작 10에 도달하면 하강 0에 도..

story-of-flower.tistory.com

 

블로그 이미지

Or71nH

,

### UP&DOWN  프로그램 PLC CICON ###

 

 


다운로드

 

PrjUP&DOWN.zip
0.02MB


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

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

 

게이지 효과 프로그램이다

 

  1. 전원
    1. 상승펄스 와 하강펄스로 ON&OFF
  2. UP&DOWN
    1. 상승 시작
    2. 10에 도달하면 하강
    3. 0에 도달하면 상승

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

CIMOND3.9v

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

 

UP&DOWN 프로그램 PLC CIMOND

### UP&DOWN 프로그램 PLC CIMOND ### 다운로드 ### 프로그램 설계도 ### ### 프로그램 해석도 ### 게이지 게이지 설정 상승 하강 모션 상승 하강 모션 시각화 ### 연동 프로그램 ### CICON https://story-of-fl..

story-of-flower.tistory.com

 

블로그 이미지

Or71nH

,

### 실행 1초동안 출력 프로그램 PLC CICON ###

 


다운로드

Prj_wash_CIMON.zip
0.00MB


 

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

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

 

1초동안 실행 프로그램이다

 

  1. 감지신호
    1. 신호가 입력되면 값을 저장한다
  2. 출력
    1. 값이 들어오면 1초동안 출력한다
  3. 1초후 끄기
    1. 1초후에 값을 지운다

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

 

블로그 이미지

Or71nH

,

자 제일 햇갈리는 이것부터 해보자

PLC부터 설정하자

이거 이르 들 잘 맞쳐야함 

기기랑 CPU 정보 맞추는 거임

왼쪽 밑에 잘보자 Connection Destinaltion

이거 눌러서 인터넷 설정해야함

저거 더블클릭

일단눌러지는거 노란색으로 표시되있다

 

맨위에부터

 

Ethernet Board 는 

난 TCP 통신으로 할꺼다

 

 

 

PLC Module 

여기서 자동 찾기도 있으니 

Ficd CPU 누르면 내가 접속 되있는 인터넷에 PLC 를 찾아준다

 

이건뭐 딜레이 시간 넘 빠르면 애 힘들어함

그럼 잘됫고

 

 

여러가지 만들어준다 

보면 메모리 사용을 어디했나 함 보면 좋다

 

난 주석을 걸어놔서 뭐썻는지 보임 

 

저거 더블 클릭해주자

PLC Parmeter

위에꺼 맨 끝에 

Built-in Ethernet Port Setting 

클릭

이거보니깐 여러가지 있다 음

저거 IP Addres 는 PLC IP 써주고 밑에는 비워두자 

그럼 알아서 잡음

Open Setting을 누르면 

아직 이렇게되있는데 요롯게 바꿔준다

 

그리고 이제 PLC 에 잘 써준다

 

CHECK 해주고

잘됫다고 한다

 

End 끝

 

 

쪼기 위에 쓰기 해서

써주고

 

우리세상에 존제하는 PLC 

PLC 기계 온 오프!!!

껏다가 켜준다

 

 

 

이젠 SCADA 만 해주면 된다

 

이건 만들어져있어서 그런데 새걸로 해보자

여기서

통신만 연결하고 그다음에 동작은 알아서 만들어라 

땡강부리는 애는 키우지 않는다 

스파르타식이 좋음

여기서 같은거 찾아줘야한다

이름은 편한거 하는데 난 기계 이름 줫음

 

통신블록 쓴 워드 에 맞게 넣어줌

넣어주면 끝

잘만들어짐

 

 

 

데이터베이스 만들기

저따구로 태크 만들어주면 연동되있음

 

블로그 이미지

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

,