优化 PLCnext REST API:搭建反向代理
PLCnext REST 接口是向后端系统展示和接收数据的绝佳工具。REST,即表述性状态转移,是创建可扩展 Web 服务的指导原则和最佳实践的软件架构风格。PLCnext 信息门户 已有大量优质信息,请查阅!固件提供的 URI 适合从零构建系统。但若想在 PLCnext 上改造现有 REST 接口则不理想。本博客展示如何搭建自己的 URI 并通过反向代理连接变量。从小例子入手!
先决条件
我用 AXC F 2152 控制器,FW2020.6 和 PLCnext Engineer 2020.6。但 2020.0 后版本应同样可行。我用 PuTTY 建立 SSH 连接,Postman 处理 HTTP 请求。为开发方便禁用了认证,生产环境切勿如此!PLCnext Engineer 指令仅高层级,不确定做什么?查阅 PLCnext 信息门户和教学视频或对比样例项目!我用的控制器 IP 192.168.10.10,请改为您的 IP。
示例
本博客以简单泵 UDT 为例。可从 GitHub 页面 下载样例程序,或自建。在 eHMI 设置关闭 “user management” 并创建全局变量。在 eHMI 页面使用此变量以便 API 使用。
第一个 API 调用
也许先看看我们马上要改什么!
发送 GET 请求获取第一个泵的值。
用 Postman 发送 GET 请求到以下 URI:
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": ""
}
}
]
}
设置自定义端点
打开 Shell 会话,创建 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 发送 GET 请求到第一个 URI 得到如前相同结果。发送到第二个 URI 得到相同数据类型的数组。
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/
工业技术