간만에 정리하는 글을 쓰려고 한다.
plc 에서 데이터를 받아와 data hub 르르 통해 opc ua -> opc da 로 변환후 서버로 데이터를 가져오는 프로젝트가 거의 마무리 되어서 정리를 하려고 한다.
우선
PLC는 Programmable Logic Controller(프로그램 가능 논리 제어기)의 약자입니다. 일부에서는 산업용 컴퓨터라고 부르기도 합니다.
단순한 수준의 PLC는 로직을 사용하여 입력을 설정된 출력으로 변환합니다. 이는 컴퓨터가 키보드의 버튼을 누르면(입력) 화면에 문자로 표시(출력)되도록 만드는 것과 같습니다. PLC는 일반적으로 산업용 응용제품에서 동일한 작업을 수행합니다. 이는 녹색 버튼을 누르면 컨베이어가 센서를 통해 모니터링 되는 로봇에 의해 복잡한 일련의 움직임으로 구동되도록 하는 것과 같은 간단한 것일 수 있습니다.
즉, 내가 하는 프로젝에서는 공장에서 돌아가는 데이터를 plc 를 통해서 받아와야 한다.
이 원초적인 plc를 가져오라면 opc 를 통해야 한다.
OPC는 산업 자동화의 개방형 연결입니다. 비독점적인 개방형 표준 사양에서 상호 운용성을 지원합니다. 이 최초의 OPC 표준 사양은 전 세계 주요 자동화 공급업체와 Microsoft 간 협력의 산물입니다. 원래 Microsoft의 OLE COM 및 DCOM 기술을 기반으로 한 이 사양에서는 상호 운용성 촉진을 목적으로 공정 제어 및 제조 자동화 소프트웨어 응용 프로그램에 사용할 일련의 표준 객체, 인터페이스 및 방법을 정의했습니다. 오늘날 존재하는 OPC 데이터 액세스 서버와 클라이언트는 수백 개에 달합니다.
OPC UA와 OPC DA는 차이는 동작환경입니다. 기존 OPC DA는 오직 Windows 계열에서만 동작하였습니다. 그래서 서버와 통신할때 COM/DCOM 통신을 하였습니다. 그래서 다른 OS와의 연동은 힘들었습니다.
이러한 OS의 제약을 이유로 OPC 재단은 OPC UA를 구성하여 발표하였습니다. 기존 OPC DA에서 보안 영역을 추가하였습니다. 따라서, UA와 DA의 차이는 사용하려는 클라이언트의 통신 방식의 차이 입니다.
PLC는 안에 메모리 영억이 있습니다. OPC서버는 PLC와 통신을 하여 메모리 영역에 있는 데이터를 Read, Write를 하기위해 사용됩니다. 예를 들어 제조에서 많이 사용하려는 이유는 현장 설비에 PLC가 설비의 제어를 하고 있고, 해당 설비와 MES/ERP 시스템과 통합하여 사용하기 위함입니다. 이러한 이유로 OPC UA에 대한 관심이 늘어났습니다. 예를 들어 설비에 생산수량, 온도, 압력등 생산과 관련된 정보를 가져와 품질에 대한 문제를 분석을 할 수 있을것이며, 서버동작에 대한 모니터링도 가능합니다. 조금 더 응용을 하여, 설비의 조작도 가능하게 됩니다.
또한 현재 내가 사용하는 nest 서버에서는 OPC UA 프로토콜 연결이 원할하게 진행이 되었다.
즉 , plc -> opc da -> opc ua -> wep server 로 연결이 되는 것 이다.
해당 코드와 같이 conect로직을 작성하고 데이터를 받아오면 된다.
데이터를 가져오는 로직은 간단히
const testNode = { // testNode
nodeId: "ns=2;s=default:Device2.D00712",
attributeId: AttributeIds.Value
};
nodeData['키값'].value = await this.session.read(testNode, this.maxAge).value
이런식으로 가져 올 수 있다. 나는 데이터를 가져온후 소켓통신으로 실시간으로 프론트엔드로 데이터를 연동 하였다.
또한 ocp server 자체를 구독하는 로직등 다양하게 활용 할 수 있어 좋은 경험이 되었던 프로젝트 였다.