改造 REST API – 设置反向代理
PLCnext REST 接口是一个出色的工具,用于呈现和接收来自后端系统的数据。 REST 或 REpresentational State Transfer 是一种软件架构风格,由用于创建可扩展 Web 服务的指南和最佳实践组成。 PLCnext 信息门户上已经有很多很棒的信息,请务必查看!如果您可以从头开始构建系统,PLCnext 固件提供的 URI 是完美的。但是,如果您想改造 PLCnext 上现有的 REST 接口,它们并不理想。本博客将向您展示如何设置自己的 URI 并使用反向代理将它们与您的变量连接起来。我们从建立一个小例子开始,然后从那里开始工作!
先决条件
我正在使用带有 FW2020.6 和 PLCnext Engineer 2020.6 的 AXC F 2152 控制器。但是对于 2020.0 之后的早期版本应该也可以做到这一点。我将使用 PuTTY 设置 SSH 连接和邮递员来处理我的 HTTP 请求。我出于开发目的禁用了身份验证,您不应该在生产中这样做! PLCnext Engineer 的指导将非常高水平,不知道该怎么办?查看 PLCnext 信息门户和说明视频和/或与示例项目进行比较!我使用的控制器的IP地址是192.168.10.10,请改成你使用的IP地址。
示例
在本博客中,我将使用一个简单的泵 UDT 作为示例。您可以从这个 GitHub 页面下载示例程序,当然也可以创建自己的。在 eHMI 设置中使用“用户管理”并创建一个全局变量。在 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;
}
向新端点发送请求
使用邮递员发送一个新的 GET 请求,这次是到下一个 URI:
获取 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;
}
使用邮递员向第一个 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.asphttps://medium.com/@TebbaVonMathenstien/what-is-an -api-and-why-should-i-use-one-863c3365726b https://restfulapi.net/rest-api-design-tutorial-with-example/工业技术