안녕하세요. Dibrary입니다.
이번엔 저번에 이어서 OPC통신 중에 Server를 만들어 보겠습니다.
역시 opcua모듈을 사용하며, 이번에도 간단합니다. (노드가 많아지면 약간의 노가다가 필요할 뿐 그 외에 나머지 원리는 같습니다.)
이번에도 저번과 비슷하게 IP만 달라지고 포트(4842)는 똑같이 해보았습니다.
우선 name은 그냥 제가 임의로 지었고, 노드는 테스트용으로 2개만 만들어보았습니다.
add_variable이 중요한데, ns=1은 노드의 번호이고, s=로 시작하는 것이 실제 노드의 '이름'입니다. 그 옆에 "normal_operation"은 사람이 판단하는데 도움을 주는 이름이죠. 그리고 마지막으로 숫자는 '초기값'입니다.
0으로 했으니 0으로 처음에 쓰고 그 상태를 유지합니다.
밑에 set_writable은 말 그대로 해당 노드에 값을 Client가 쓸 수 있게 하는 것입니다. 설정을 해주지 않으면 쓸 수 없습니다.
마지막으로 반드시 start( )를 해 줘야 서버가 실행됩니다.
만약 노드가 많은데 반복되는게 많다면 dict( ) 자료형을 써서 for문으로 여러 노드를 한 번에 생성해버리면 됩니다.
많은 노드의 경우에 대해서 xml파일로 설정정보를 저장한 후 사용하는 서버는 아래에 샘플로 구현해놓았습니다.
과연 파이썬으로 만든 서버가 정상적으로 생성되었는지 확인해보겠습니다. UaExpert로 접속해보면 알 수 있죠.
이야 딱 2개만 만들었고, test_node로 이름지은 노드 역시 생성되었습니다.
그리고 초기값도 설정한 대로 0과 12가 나타나있는 것을 볼 수 있습니다.
과연 set_writable의 기능이 정상으로 동작하는지 보겠습니다.
set_writable을 설정하지 않은 노드에 set_value를 하려니까 에러가 납니다.
그러면 set_writable을 설정한 노드는 어떨까요?
오 정상으로 쓰는데 성공했습니다.
잘 보시면, 해당 노드에 처음에 12라는 값이 설정되어 있었는데, 4342로 쓰고 난 이후에는 아무리 읽어도 12는 나오지 않습니다. 즉, Server를 가동할 때 처음에 설정한 초기값은 한 번만 쓰는 것을 알 수 있죠.
그리고 node역시 int번호로 설정했기 때문에 i=33으로 노드에 연결한 것을 볼 수 있습니다.
'프로그래밍 > Python' 카테고리의 다른 글
Dixon Q test - 특이치 식별 및 제거, 파이썬으로 구현 (0) | 2022.03.23 |
---|---|
Anderson-Darling 통계 - 정규성 검정, 파이썬으로 확인하기 (0) | 2022.03.16 |
파이썬 데이터 분석 준비! - Numpy배열 다루기 - 1(객체 만들어보기) (0) | 2022.03.15 |
알고리즘을 풀 때 항상 생각해봐야 하는 것 - 복잡도 (0) | 2022.02.16 |
파이썬으로 구현해 확인하는 OPCUA통신 - Client편 (18) | 2022.02.07 |