처음 설정한 목표를 드디어 수행했다. 서버를 대략 구현했으니 다음으로 클라이언트를 만들었다. 내가 쪼랩이라 tutorial 문서 그대로 사용했다. cilent는 UA_Client_Service_browse로 server가 어떤 데이터를 가지고 있는지 볼 수 있다. 그러나 역시 한 단계밖에 볼 수 없다. 하부 구조를 보려면 nodeId를 기억하여 다시 browse를 해야 한다. 더 좋은 방법이 있겠지만, 이것도 되니까 문제 안된다. 서버가 method를 가지고 있어…… open62541 server+client 공정 동작 시간 측정 계속 읽기
![](./temperature.jpg)
![](./humidity.jpg)
[태그:] opcua
open62531 server plc 시뮬레이션
임의 설비에 latch, clamp, pin, robot을 설치했다. 대부분 래더로 동작하고, PLC 메이커가 cpu에 opc ua 서버 기능을 구현하여 주기적으로 plc 메모리 데이터를 server로 업데이트 한다.(고 생각하자.) 집에 PLC가 없고, 아직 이를 제대로 구현할지 모르겠어 대충 짜집기로 만들었다. object로 각 설비를 등록하고 Value 변수로 staus를 bool 타입으로 등록했다. OPC UA 문서를 읽지 못해 이렇게 하는게 맞는지…… open62531 server plc 시뮬레이션 계속 읽기
open62541 browse
open62541이 OPC UA 규격에 맞춰 browse 기능을 지원한다. OPC UA 문서에 어떻게 사용하는지 알 수 있는데, 멤버만 볼 수 있다. 일단 대충 필요한 실린더를 구성했다 하자. 상용 PLC 메이커가 OPC UA 기능을 구현한다면 내부에 server 기능으로 넣을 듯 하다. 지금 구할 수 없으니, 대충 비슷하게 만들고 싶다. 여기서 문제를 알았다. 한번 Variable을 할당하면 어떻게 바꾸지?…… open62541 browse 계속 읽기
open62541 server 설정
tutorial을 따라하다 보면 내가 무엇을 모르는지 잘 모른다. 아래 같은 그림을 그리고 싶었는데 잘 안된다. 내가 서버를 건드릴 일은 없겠지만, 클라이언트를 테스트하려면 서버가 필요하다. #include “open62541.h” #include <signal.h> #include <stdlib.h> static volatile UA_Boolean running = true; static void stopHandler(int sig) { UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, “received ctrl-c”); running = false; } static void beforeReadVal(UA_Server *server, const UA_NodeId…… open62541 server 설정 계속 읽기
open62541 method call
튜토리얼에 method call이 있어 따라 해봤다. method를 서버에 설정하고, client에서 반응을 보고 싶었는데, 잘 안됬다. 두 시간 삽질만에 UA_VARINT에서 UA_String을 출력했다. 처음에는 몰랐는데 gdb로 구조를 보면 대략 알 수 있다. UA_String도 구조체라 data와 length로 구성된다. UA_Variant로 data를 출력하려면 UA_String으로 캐스팅하여 data의 data를 찾아야 한다.–; (gdb) 45 /* Call a remote method */ 46 UA_Variant input;…… open62541 method call 계속 읽기