PLCnext REST API 간소화: 리버스 프록시 설정하기
PLCnext REST 인터페이스는 백엔드 시스템에서 데이터를 제시하고 수신하는 환상적인 도구입니다. REST, 또는 REpresentational State Transfer는 확장 가능한 웹 서비스를 생성하기 위한 지침과 모범 사례로 구성된 소프트웨어 아키텍처 스타일입니다. PLCnext 인포포털에 이미 많은 훌륭한 정보가 있으니 꼭 확인해 보세요! PLCnext 펌웨어가 제공하는 URI는 시스템을 처음부터 구축할 수 있다면 완벽합니다. 그러나 기존 REST 인터페이스를 PLCnext에 개조하려는 경우 이상적이지 않습니다. 이 블로그에서는 리버스 프록시를 사용하여 자신만의 URI를 설정하고 변수와 연결하는 방법을 보여줍니다. 작은 예제로 시작하여 거기서부터 작업해 보겠습니다!
사전 요구 사항
FW2020.6이 설치된 AXC F 2152 컨트롤러와 PLCnext Engineer 2020.6을 사용합니다. 하지만 2020.0 이후 버전에서도 동일하게 가능해야 합니다. SSH 연결용 PuTTY와 HTTP 요청 처리용 Postman을 사용합니다. 개발 목적으로 '사용자 관리' 사용을 비활성화했습니다. 프로덕션에서는 절대 그렇게 하지 마세요! PLCnext Engineer 지침은 매우 높은 수준으로 제공됩니다. 무엇을 해야 할지 모르겠다면 PLCnext 인포포털과 교육 비디오를 보거나 샘플 프로젝트와 비교해 보세요! 사용하는 컨트롤러의 IP 주소는 192.168.10.10입니다. 사용하는 IP 주소로 변경하세요.
예제
이 블로그에서는 간단한 펌프 UDT를 예제로 사용합니다. 이 GitHub 페이지에서 샘플 프로그램을 다운로드하거나 직접 만들 수 있습니다. eHMI 설정에서 '사용자 관리' 사용을 끄고 전역 변수를 생성하세요. 이 변수를 eHMI 페이지에서 사용하여 API에서 사용할 수 있게 하세요.
첫 번째 API 호출
아마 우리가 잠시 후에 정확히 무엇을 변경하는지 먼저 알아봐야 할 것입니다!
첫 번째 펌프의 값을 얻기 위해 GET 요청을 보내보겠습니다.
Postman을 사용하여 다음 URI로 GET 요청을 보내세요:
GET https://192.168.10.10/_pxc_api/api/variables?paths=Arp.Plc.Eclr/Pump1
(Pump1을 자신의 변수로 변경할 수 있습니다)
결과는 다음과 같습니다:
{
"apiVersion": "1.4.0.0",
"projectCRC": 3448945666,
"userAuthenticationRequired": true,
"variables": [
{
"path": "Arp.Plc.Eclr/Pump1",
"value": {
"xStatus": false,
"iNumberOfStarts": 0,
"sStatus": ""
}
}
]
}
커스텀 엔드포인트 설정
셸 세션을 열고 root 암호를 생성한 후 root 사용자로 로그인하세요.
다음 명령어를 터미널에 입력하고 터미널 '하단'으로 이동하여 중간에 아무것도 입력하지 않도록 주의하세요!
nano /etc/nginx/nginx.conf
다음 부분을 복사하여 터미널에 붙여넣고 ctrl + s로 저장하고 ctrl + x로 닫으세요.
location /Pump1 {
proxy_pass https://127.27.0.1:443/_pxc_api/api/variables?paths=Arp.Plc.Eclr/Pump1;
}
새 엔드포인트로 요청 보내기
Postman으로 새 GET 요청을 보내세요. 이때 다음 URI로:
GET https://192.168.10.10/Pump1
같은 응답을 받으셨나요? 축하합니다. 프록시가 성공적으로 설정되었습니다!
여러 펌프 설정
좋습니다, 하지만 펌프가 여러 개라면요? 한 가지 접근법은 펌프 UDT를 담는 배열을 만드는 것입니다. 변수를 호출하여 전체 배열을 얻거나, 원하는 인덱스를 오른쪽 대괄호 사이에 지정하여 관심 있는 요소만 얻을 수 있습니다. 예를 들어 Pump2[1]은 Pump2라는 배열에서 인덱스 1인 요소를 제공합니다.
하지만 이 블로그의 주제는 그게 아닙니다. 프록시를 설정하여 여러 펌프에 접근할 수도 있습니다.
이전 단계에서 붙여넣은 텍스트를 다음 스키마와 일치하도록 수정하세요:
location /pumps {
proxy_pass https://127.27.0.1:443/_pxc_api/api/variables?paths=Arp.Plc.Eclr;
}
Postman으로 첫 번째 URI에 GET 요청을 보내면 이전과 같은 결과를 얻습니다. 두 번째 URI에 GET 요청을 보내면 동일한 데이터 타입의 배열을 얻습니다.
https://192.168.10.10/pumps/Pump1
https://192.168.10.10/pumps/Pump2
이제 어떤 API 스키마든 매칭하여 PLCnext 장치에 통합하는 데 필요한 모든 것을 갖게 되었습니다!
추가 참고 자료
https://www.howtogeek.com/343877/what-is-an-api/
https://www.w3schools.com/tags/ref_httpmethods.asp
https://medium.com/@TebbaVonMathenstien/what-is-an-api-and-why-should-i-use-one-863c3365726b
https://restfulapi.net/rest-api-design-tutorial-with-example/