'scada'에 해당되는 글 3건

윈도우 7 은 무선 인터넷 부터 확인해야한다

이 익숙한ㅇ 꽃개 모양 애 열어주고 없으면 설치할것 

저기에 액세스 들어간다

그리고

아두이노 SSID 를 적어서 주소를 맞쳐주고 네트워크는 WPA2=PSK로 하자 왠지 모름

 

비밀번호 처서 연결해준다

그럼 본인의 피씨가 핫스팟이 되어 외부 네트워크랑 공유가 가능하게 만들어준다

이런 코드표가 있다 

참고를 하여 주소의 값을 가져와야 하는데 

저기 트릭이라고 저거 불러오면 된다 

핀번호는 아두이노 할때 설정값인 걸로 알고 있다

 

 

설정값은 이렇게 장치 추가 해주고

이런식으로 추가를 해준다 

그러면 불러오기가 가능해진다

통신을 만들어줄 서버와 확인할거 CMD 틀어주고

써버임 위에거

 

이건 확인차 열어놓은거

 

 

이거할려면 mosquitto 따운 해야함 

.

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

 

모스키토 통신 사용하기 windows X-SCADA

https://deneb21.tistory.com/416 MQTT 개념과 Mosquitto 설치 및 사용 이번에는 사물인터넷에서 각광 받고 있는 메시지 전송 프로토콜인 MQTT (Message Queue Telemetry Transport) 에 대해서 알아보겠습니다. M..

story-of-flower.tistory.com

 

여기에서 확인하여 다운하면됨

 

실행하면 끝

블로그 이미지

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

,