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

CiMon Scada에서 로그인과 권한을 설정하는 방법

by 인터넷떠돌이 2017. 12. 3.
반응형

안녕하세요?


이번 포스팅에서는 CiMonX에서 실행을 시켰을 때, 권한을 부여하고, 어떻게 하면 지정한 사용자만이 특정한 동작을 지시할 수 있는지에 대해서 수업을 했었고, 그 내용에 대해서 포스팅을 하고자 합니다.



언제나 그렇듯이, 새 프로젝트를 생성해서 들어가 보도록 합니다. 이번에는 건물 안에 전등을 제어하는 패널을 만들고자 합니다.



다소 노가다성 작업이기는 했지만, 우선은 위와 같이 디자인을 하는 작업을 하도록 합니다.



이번에는 다량의 태그를 만들어 주도록 합니다.



이제 제어를 위해서 버튼을 만들어 주도록 합니다.



태그값에서 timestr(44)라고 입력을 하도록 합니다.



그리고 나서 CiMonX에서 실행을 시키자, 초까지 정확하게 나오는 것을 볼 수 있었습니다.



이제는 사용자 보안이라고 하는 항목을 불러 오도록 합니다.



여기서 사용자 등급이라고 해서 보안등급을 지정할 수 있는데, 처음 Guest라는 것으로 들어오면 보안등급은 100등급이고, 여기서 숫자가 낮아 질수록 더 보안 등급이 높은 것이 됩니다.




이렇게 해서 새로운 test라는 사용자 그룹을 하나 만드는 데는 성공했습니다. 하지만 이것만 있고, 따로 로그인을 해야 하는 것이 없으면 아무런 소용이 없습니다.



일련의 보안관련 함수입니다. 여기서 중요한 것은 Login()이라는 것으로, 이걸 지정하면, 로그인을 위해서 아이디와 암호를 입력하는 윈도우가 따로 만들어 진 것이 뜬다는 것입니다.



사용자 버튼을 하나 만들어 두고 나서, 여기다가 login()이라고 명령식을 내리도록 합니다. 그리고 나서, 그러면 버튼을 누르면 로그인창이 뜨게 됩니다.



그리고 나서 다음은 태그값에다가 getusername()라는 명령식을 태그이름에다가 쓰면, 로그인을 한 유저의 아이디를 나타내게 됩니다.



getuserlevel()이라는 명령식은 로그인한 유저의 보안등급을 나타내 주는 명령식입니다. 이 역시 다른 태그값에서 표시를 하기위해서 태그이름 대신에 넣어 주도록 합니다.




위 스크린샷은 CiMonX에서 로그인이라고 지정을 한 버튼을 눌렀을 때 나왔는 윈도우 입니다. 여기다가 사용자ID와 암호를 입력하면 로그인이 됩니다.



위 스크린샷에서 따로 지정한 상단을 보시면, test1과 99라는 사용자ID와 보안등급이 나오는 것을 볼 수 있습니다. 그런데 로그인을 했는데, 계속 로그인 창이 나와 있는 것은 문제가 있어는 보입니다. 이를 이제 보완하러 갑니다. 그전에 다른 조작 버튼에 어떻게 보안등급을 지정하는 지에 대해서 알아봅니다.



버튼을 만들어 놓고나서, 버튼정의에 보면 보안등급설정이라고는 것이 있습니다. 여기에는 기본적으로 100이라는 보안등급이 기본적으로 나와 있는 것을 볼 수 있었습니다.



다음에는 로그인창을 로그인이 된 다음에 가리기 위해서, LOG1이라는 디지털 태그를 만들도록 합니다. 여기서는 당연 로그인을 하면 1이 되도록 설정을 하도록 합니다.



그래서 로그인을 담당하는 버튼에다가 log1=1이라고 지정을 하도록 합니다. 이러면 로그인을 하게 되면, 태그의 값을 1이 되는 것입니다.



그리고 출몰 조건에서 로그인의 경우에는 로그인 하지 않은 상태-off인 상태에서 출몰을 하도록 설정을 하도록 합니다.



이번 버튼은 로그아웃 버튼입니다. 명령식 logout()이라고 입력하면 말그대로 로그아웃이 되고, 여기서는 로그인에 관계된 함수를 log1=0라고 지정을 하도록 합니다.



CiMonX상에서 로그아웃을 시켰을 때, 제대로 보안등급이 100으로 변하는 것을 볼 수 있었습니다. 그리고 다시 로그인을 하면........



다시 test1으로 돌아가서 보안등급이 99가 되며, 그전에 안 보이던 로그아웃 버튼이 나타났고, 로그인 창은 사라진 것을 확인할 수 있었습니다.



다음은 사용자 메뉴라는 항목에 들어가 보도록 합니다. 이 메뉴에서 CiMonX상에서 이래저래 아무 메뉴나 건드리면 에러가 날 수 있기 때문에, 이를 제한하는 기능이 있는 것입니다.



먼저 사용자 메뉴 모델을 등록하도록 합니다. 이름은 임의로 지정을 해도 됩니다.





이제 메뉴 편집이라는 항목을 누르도록 합니다.



제 경우에는 경고 메세지에 관련된 메뉴 빼고는 CiMonX에서 아무것도 못 건드리도록 다 바꾸어 놓았습니다.



이제 사용자 보안 정보로 가서, 사용자 메뉴를 지정 하도록 합니다.



기존에 다양하게 주렁주렁 있던 메뉴는 다 사라진 것을 볼 수 있습니다. 이런 식으로 보안 등급이 낮은 사용자에게는 CiMonX상에서 보여줄 수 있는 메뉴의 양도 줄이는 것이 가능하다고 합니다.



이제 모처럼 Guest등급이라고 해서, 맨 처음 CiMonX를 실행하자 마자 나오는 보안등급100이라는 것을 지정하기는 했지만, 처음 CiMonX를 켤때는 바로 지정이 안되는 문제가 있습니다. 그래서 시작 하자마자 바로 이 사용자로 로그인이 되도록 지정을 하는 것입니다.


문제는 main()이라는 스크립트에서 loginex("사용자ID","패스워드")라는 명령식이 작동을 했으면 좋겠지만, 스크립트 상에서는 작동을 안하기 때문에, 부득이 하게 페이지 환경설정에서 페이지를 열자마자 바로 guest아이디로 로그인이 되도록 지정을 했습니다.



실제로 CiMonX를 실행하자 마자 따로 로그인을 하지 않았는데, 보안등급이 100으로 설정이 되는 것을 볼 수 있었습니다. 그래서 이번에는 과제로, 로그인이 되는 윈도우를 기존의 것을 쓰지 말고, 새로 디자인 해서 쓰는 과제를 수행하였습니다.



일단 새로운 페이지를 생성 하도록 합니다.



일자척으로 디자인을 하기는 했습니다.


다음은 로그인창에 있는 로그인 버튼을 눌렀을 경우 loginex(ID,PASS)라고 명령식을 입력합니다. 여기서 ID와 PASS라는 것은 위에 나와 있는 태그값입니다. 여기 태그값에 ID와 패스워드를 입력하는 란에다가 각각 ID, PASS라는 문자열 태그에 값이 입력이 되도록 하고, 이 값을 로그인 버튼이 가지고 도로고 하는 것입니다.



그런데 다른 건 괜찮은데, 페이지 닫기가 제대로 되지 않았습니다. 이 경우에는 명령식 Down이라고 해서 버튼을 누를때 명령식이 실행되지 것 말고, 다음에는 명령식 UP이라고 눌렀다가 손을 뗄 때 실행이 되도록 합니다. 위 스크린샷처럼 closepage("닫고자 하는 페이지 이름") 을 지정해서, 버튼을 누르는 순간은 로그인에 관여된 내용이 실행이 되도록 하고, 눌렀다가 땔 때 페이지를 닫는 명령이 실행되도록 합니다.



그리고 문자 입력창은 따로 라이브러리에서 윈도우 컨트롤에 들어가면 나오는데, 여기서 password라는 항목을 누르면 암호를 입력할 때 윈도우 상에서 가려주는 역할을 하게 됩니다.



위 스크린샷에서 관련된 내용입니다. PASS라는 문자열 태그에 암호를 입력하라고 하고, 여기다가 password라는 항목을 체크해서 암호라는 것을 지정을 하도록 합니다.




다시금 CiMonX에서 실행을 시킨 화면입니다. 다른건 다 제대로 작동을 하는데, 문제는 로그아웃을 하고나서 다시 로그인을 하면, 이전에 입력을 하였는 아이디와 비밀번호가 그대로 남아 있다는 문제점이 있습니다. 이래서야 로그인 설정을 걸어둔 의미가 없어지기 때문에, 하는 수 없이 이를 지우기 위한 작업에 들어가야 합니다.



해결책은 의외로 간단했습니다. 우선 로그인창의 페이지를 여는 순간 ID와 PASS라는 문자열 태그의 값을 빈칸으로 만들어 주고, 그 다음에 페이지를 닫는 순간에도 ID와 PASS를 빈칸으로 만들어 주어서 바꾸도록 합니다. 여는 순간만 빈칸으로 만들면, 1초 미만의 순간이기는 하지만 아이디가 노출되는 시간이 있을 수도 있기 때문에 이러는 것입니다.



한번 더 실행시켜 보았을 때, CiMonX상에서 로그아웃하고 다시 로그인을 했을 때 아이디와 비밀번호가 그대로 남아 있는 현상은 없어진 것을 볼 수 있었습니다.



다음은 allon이라고 스크립트를 실행시키도록 합니다. 이름에서 짐작이 가능하듯이 모든 전원을 켜는 스트립트 입니다.



보통의 경우에는 settagval이라고 노가다성이 짙게 일일히 설정을 합니다만, 문제는 1층의 경우에는 태그를 모두 L1,L2,L3... 이런식으로 설정 했기 때문에 다른 층에서 6~7줄이 되는 스크립트를 짜야하는 동안 자기는 단 4줄의 스크립트로 다 완료하는 것을 볼 수 있습니다. 이렇게 for문을 사용해서 한꺼번에 처리가 가능하기 때문에, 태그의 이름을 보통은 A1,A2.... 이런 식으로 지정하는 이유이기도 합니다.



다음은 전체 소등에 관련이 된 스크립트입니다. 여기서는 반대로 모두 0으로 디지털 태그를 끄는 스크립트를 짜도록 합니다. 여기서도 for문을 쓰면 상당히 길다란 스크립트를 간단하게 할 수 있다는 것을 볼 수 있습니다.



그리고 전체 소등 버튼은 보안등급을 높여서 지정을 하도록 합니다.



다음은 그룹 일정기에 관련된 명령식과 함수입니다.



지난번에 설명을 했다시키 그룹 일정기를 실행 시키기 위해서는 그룹을 정의해야 하는데, 여기서는 최대 8개의 태그를 지정해서 값을 설정할 수 있습니다. 



다음은 그룹일정기 입니다. 일단 CiMonD에서 보안등급을 건드릴 수 있는데, 여기서 100이외에 건드리면, 나중에 특정 보안 등급이 되지 않으면, 나중에 그룹만을 건드릴 수 있는 명령식으로도 따로 건드릴 수 없게 됩니다.



바로 여기입니다. gsch_groupsetval("그룹일정기의 그룹",0,1) 이라는 공식을 사용하는 것입니다. 여기서는 우선 그룹 일정기의 보안등급 자체가 99이상으로 설정되어 있으면, 버튼의 보안등급을 100이라고 해도 동작을 하지 않는 현상이 발생하게 됩니다. 그리고 그룹 일정기의 값이 중요하기, 위 명령식에 나오는 0과 1이라는 숫자는 큰 상관은 없는 것으로 보입니다.

반응형