본문 바로가기
PLC 자동제어 학습/CiMon Scada 수업

데이터 베이스를 이용해서 만드는 CiMon의 보고서 part2

by 인터넷떠돌이 2018. 1. 28.
반응형

안녕하세요?


이번에는 지난번 포스팅에서 언급했다 시피, 그리드를 이용해서 어떻게 하면 Access에 있는 데이터 베이스의 내용을 출력할 수 있는지와, 그에 따른 과제들을 수행하였고, 그 내용을 포스팅 하고자 합니다.



이제 SelectAll이라는 새로운 질의를 생성 하도록 합니다.



여기서는 특별한 것이없고, From란에다가 myTable이라는 것을 입력 하도록 합니다.



이제 라이브러리에서 윈도우 컨트롤 항목으로 가서, 여기서 입출력 테이블이라는 것을 선택 하도록 합니다.



먼저 이름을 신중하게 지정해야 하는데, 제 경우에는 grid01로 지정을 했습니다. 그리고 열과 행 갯수를 지정 하도록 합니다.



그리고 리스트업이라는 스크립트를 작성 하도록 합니다. 여기서 중요한 것은 wc라는 것은 윈도우 컨트롤의 약자로, wcGridSetData "태그이름", 열, 행, 입력할 데이터 이런 식으로 지정을 하면, 입출력 테이블의 특정한 위치로 특정한 데이터를 입력할 수 있다는 것입니다. 


그리고 여기서는 For문을 사용해서 일일히 입력할 필요 없이, 행을 i로 지정해서, CSqlgetRecordNo()라는 함수를 가지고 와서, 해당하는 질의의 행이 얼마나 있는지를 알수 있습니다. 그 값을 바탕으로 얼마나 행이 많든 간에 For문을 이용, 간단하게 입출력 테이블을 사용할 수 있는 것입니다.



그리고 CiMonD에서 디자인을 한 것입니다. 여기서는 입출력 테이블-그리드를 설치한 것을 볼 수 있습니다.



CiMonX에서 작업-명령창에서 스크립트를 입력하는 단계입니다.





runscript라는 것을 이용해서, 리스트업이라는 스크립트를 작성 하도록 합니다.



그리고 CiMonX에서 실제로 Access에 있는 데이터 베이스에서 제대로 나오는 것을 볼 수 있습니다.



그리고 이제부터 하는 일의 핵심이 될 WcGridCommand()라는 함수에 대한 설명입니다. 위에 리스트업이라는 스크립트를 작성할 때만 해도 잘 몰랐는데, 이처럼 다양한 명령을 내릴 수 있는 함수입니다.


그리고 또 다른 함수입니다. wcGridGetData()라는 것을 이용, 특정한 셀에 입력된 데이터를 알려주는 함수도 있습니다.


이제 1차 과제입니다. 그리드에다가 자료별로 번호를 앞에 붙이는데, 문제는 그리드-입출력 테이블의 열 하나를 사용하지 않는 다는 것입니다. 이 과제를 수행하기 위해서 다양한 시도를 해 보았습니다.



1차적인 시도를 해 보았지만, 결과는 실패이기는 했습니다.




일단 중요한 함수입니다. get을 set으로 바꾸면 특정한 입출력 테이블에 데이터를 입력할 수 있는 것입니다.




정답은 간단하게도, for문 안에다가 wcGridSetData에다가 열을 0으로 두는 것이였습니다. 이렇게 하면;;.....



이제서야 제대로 뭐가 나오는 것을 볼 수 있었습니다. 아무튼 이것으로 첫번째 과제는 성공하기는 했습니다.


이제 두번째 과제로, 주 사용자가 편집을 위해서는 이 그리드에다가 입력을 하는 데, 이런 기능을 구현하는 것입니다. 일단 과제의 수행을 위해서 1차 시도를 했습니다.




일단 마우스 위치라는 스크립트를 작성하였는데, 여기서 가장 핵심이 되는 키워드는 wcGridGetPos라는 함수입니다.



이 함수는 Grid에서 어디가 선택이 되었는지 열이나 행의 위치를 알려 준다는 함수입니다. 이걸 하는 이유는 바로 사용자가 Grid안에서 어떤 곳을 클릭했는지 컴퓨터에 알려주기 위한 것입니다.




그리고 CiMon에서는 마우스로 클릭했을 때 작동하는 것이 없기 때문에, do while문을 이용해서 계속 실행을 시키는 것입니다.


그래서 서는 조금은 차이를 두기 위해서 MousePosition이라고 영문으로 이루어진 것을 만들었습니다. 여기 스크립트의 핵심은 바로, 각각의 항목들은 이미 열이 정해져 있으니, 행만을 선택해서 ypoint라는 것으로 행을 입력하는 것을 했습니다.



그리고 main()에서 MousePosition이라는 스크립트를 한번 실행하도록 해서, CiMonX가 실행될 때 스크립트가 실행 되도록 만들어 줍니다.



이제 CiMonX에서 실행을 하도록 할 차례입니다. 그런데 실행을 해보니, 그리드에서 한개의 셀에 입력을 하고서 일일히 삽입을 눌러야 액세스의 데이터베이스에 반영이 되는 것이였습니다. 아무튼 입력 되자마자 어떻게 되는 것은 없었고, 이렇게 귀찮은 작업을 해야만 하는 점이 여전히 단점은 단점이라는 생각이 들었습니다.

반응형