프로그래밍/Python

파이썬으로 구현해 확인하는 OPCUA통신 - Server편

Dibrary 2022. 2. 9. 10:00
반응형

안녕하세요. Dibrary입니다.

 

이번엔 저번에 이어서 OPC통신 중에 Server를 만들어 보겠습니다.

역시 opcua모듈을 사용하며, 이번에도 간단합니다. (노드가 많아지면 약간의 노가다가 필요할 뿐 그 외에 나머지 원리는 같습니다.)

이번에도 저번과 비슷하게 IP만 달라지고 포트(4842)는 똑같이 해보았습니다. 

 

우선 name은 그냥 제가 임의로 지었고, 노드는 테스트용으로 2개만 만들어보았습니다.

add_variable이 중요한데, ns=1은 노드의 번호이고, s=로 시작하는 것이 실제 노드의 '이름'입니다. 그 옆에 "normal_operation"은 사람이 판단하는데 도움을 주는 이름이죠. 그리고 마지막으로 숫자는 '초기값'입니다.

0으로 했으니 0으로 처음에 쓰고 그 상태를 유지합니다.

밑에 set_writable은 말 그대로 해당 노드에 값을 Client가 쓸 수 있게 하는 것입니다. 설정을 해주지 않으면 쓸 수 없습니다.

마지막으로 반드시 start( )를 해 줘야 서버가 실행됩니다.

 

만약 노드가 많은데 반복되는게 많다면 dict( ) 자료형을 써서 for문으로 여러 노드를 한 번에 생성해버리면 됩니다.

 

많은 노드의 경우에 대해서 xml파일로 설정정보를 저장한 후 사용하는 서버는 아래에 샘플로 구현해놓았습니다.

 

GitHub - Dibrary/OPC_simulator: Industrial opcua simulator like master or slave device.

Industrial opcua simulator like master or slave device. - GitHub - Dibrary/OPC_simulator: Industrial opcua simulator like master or slave device.

github.com

 

 

과연 파이썬으로 만든 서버가 정상적으로 생성되었는지 확인해보겠습니다.  UaExpert로 접속해보면 알 수 있죠.

이야 딱 2개만 만들었고, test_node로 이름지은 노드 역시 생성되었습니다.

그리고 초기값도 설정한 대로 0과 12가 나타나있는 것을 볼 수 있습니다.

과연 set_writable의 기능이 정상으로 동작하는지 보겠습니다.

set_writable을 설정하지 않은 노드에 set_value를 하려니까 에러가 납니다.

그러면 set_writable을 설정한 노드는 어떨까요?

오 정상으로 쓰는데 성공했습니다. 

잘 보시면, 해당 노드에 처음에 12라는 값이 설정되어 있었는데, 4342로 쓰고 난 이후에는 아무리 읽어도 12는 나오지 않습니다. 즉, Server를 가동할 때 처음에 설정한 초기값은 한 번만 쓰는 것을 알 수 있죠.

그리고 node역시 int번호로 설정했기 때문에 i=33으로 노드에 연결한 것을 볼 수 있습니다.

728x90
반응형