news 2026/4/23 14:01:17

OpenPLC Editor 集成(英译中)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenPLC Editor 集成(英译中)

OpenPLC Editor 集成

本文档描述 OpenPLC Editor 如何与 OpenPLC Runtime v4 通信。

概述

OpenPLC Runtime v4 是一个无头服务,设计为由 OpenPLC Editor 桌面应用程序控制。没有供最终用户使用的Web浏览器界面。所有与运行时的交互都是通过 OpenPLC Editor 在端口 8443 上的 REST API 进行的。

架构

OpenPLC Editor (桌面应用) | | HTTPS (端口 8443) | JWT 认证 | v OpenPLC Runtime v4 (无头服务) - REST API 服务器 - PLC 运行时核心 - 编译引擎

工作流程

1. 用户在编辑器中创建程序

用户使用 OpenPLC Editor 的图形界面(梯形图、功能块图、顺序功能图)或基于文本的语言(结构化文本、指令列表)创建 PLC 程序。

2. 本地编译

当用户在编辑器中点击“编译”时,以下步骤在用户的本地机器上执行:

  1. 编辑器将项目 JSON 转换为 XML 格式
  2. 使用 xml2st 将 XML 转换为结构化文本 (ST)
  3. 使用 iec2c 将 ST 转换为 C 代码
  4. 生成 C/C++ 功能块
  5. 创建调试文件和胶水变量
  6. 对于 Runtime v4:将所有源文件压缩到program.zip
  7. 对于 Runtime v3:只准备program.st

3. 认证

上传程序前,编辑器必须先向运行时认证:

首次设置:

POST /api/create-user { "username": "admin", "password": "password", "role": "user" }

登录:

POST /api/login { "username": "admin", "password": "password" } 响应: { "access_token": "eyJ0eXAiOiJKV1QiLCJhbGc..." }

编辑器存储此 JWT 令牌,并在所有后续请求中将其包含在请求头中:

Authorization: Bearer <jwt_token>

4. 程序上传

编辑器将编译后的程序上传到运行时:

端点:POST /api/upload-file

请求:

  • 方法:POST
  • Content-Type: multipart/form-data
  • Authorization: Bearer<jwt_token>
  • 正文:包含 program.zip (Runtime v4) 或 program.st (Runtime v3) 的 file 字段

响应:

{"UploadFileFail":"","CompilationStatus":"COMPILING"}

5. 编译状态监控

运行时异步编译上传的程序。编辑器轮询其状态:

端点:GET /api/compilation-status

轮询配置:

  • 间隔:1 秒
  • 超时:5 分钟 (300 秒)

响应:

{"status":"COMPILING","logs":["[INFO] 开始编译","[INFO] 正在编译源文件...","..."],"exit_code":null}

状态值:

  • IDLE- 无编译进行中
  • UNZIPPING- 正在解压上传的 ZIP 文件
  • COMPILING- 正在运行编译脚本
  • SUCCESS- 编译成功完成
  • FAILED- 编译失败

6. PLC 控制

编译完成后,编辑器可以控制 PLC 执行:

启动 PLC:

GET /api/start-plc Authorization: Bearer <jwt_token> 响应: { "status": "RUNNING" }

停止 PLC:

GET /api/stop-plc Authorization: Bearer <jwt_token> 响应: { "status": "STOPPED" }

获取状态:

GET /api/status Authorization: Bearer <jwt_token> 响应: { "status": "RUNNING" }

7. 调试

编辑器连接到运行时的 WebSocket 调试接口,用于实时变量监控和强制赋值:

连接:

import{io}from'socket.io-client';constsocket=io('https://runtime-ip:8443',{path:'/socket.io',transports:['websocket'],auth:{token:jwt_token},rejectUnauthorized:false// 编辑器处理自签名证书});// 连接到调试命名空间socket.on('connect',()=>{socket.emit('join',{namespace:'/api/debug'});});// 监听调试响应socket.on('debug_response',(data)=>{console.log('调试响应:',data);});// 发送调试命令socket.emit('debug_command',{command:'45 00 00'// 十六进制编码的调试命令});

详细的 WebSocket 协议文档请参阅 DEBUG_PROTOCOL.md。

TLS/证书处理

运行时默认使用自签名 TLS 证书。OpenPLC Editor 通过以下方式处理:

  1. 在 HTTPS 请求中设置rejectUnauthorized: false
  2. 在 HTTP 客户端库中使用等效的-k标志
  3. 可选地允许用户配置RUNTIME_TLS_REJECT_UNAUTHORIZED环境变量

注意:这是编辑器侧的配置,不是运行时配置。

API 端点摘要

认证

  • POST /api/create-user- 创建用户账户
  • POST /api/login- 登录并获取 JWT 令牌
  • POST /api/logout- 登出并撤销 JWT 令牌
  • GET /api/get-users-info- 检查用户是否存在
  • GET /api/get-user-info/<user_id>- 获取用户信息
  • PUT /api/password-change/<user_id>- 更改密码
  • DELETE /api/delete-user/<user_id>- 删除用户

PLC 操作

  • POST /api/upload-file- 上传程序 ZIP 文件
  • GET /api/compilation-status- 获取编译状态和日志
  • GET /api/status- 获取 PLC 运行时状态
  • GET /api/start-plc- 启动 PLC 执行
  • GET /api/stop-plc- 停止 PLC 执行
  • GET /api/ping- Ping 运行时
  • GET /api/runtime-logs?id=<min_id>&level=<level>- 获取运行时日志

调试接口

  • wss://host:8443/api/debug- WebSocket 调试接口

/api/create-user(仅限第一个用户)、/api/login/api/get-users-info外,所有端点都需要 JWT 认证。

错误处理

编辑器处理各种错误情况:

上传错误:

  • 文件过大(每文件 >10 MB,总计 >50 MB)
  • 无效的 ZIP 文件
  • 编译已在进行中
  • 路径遍历尝试
  • 禁止的文件扩展名 (.exe, .dll, .sh, .bat, .js, .vbs, .scr)

编译错误:

  • ST 代码中的语法错误
  • 缺少依赖项
  • 编译超时(5 分钟)

连接错误:

  • 无法访问运行时
  • JWT 令牌无效
  • 证书验证错误

开发与测试

对于需要与运行时 API 集成的开发者,请参阅 API.md 以获取详细的端点文档和 curl 示例。

对于运行时开发者,请参阅 DEVELOPMENT.md 以获取本地开发设置。

安全注意事项

  • 所有 API 请求都需要 HTTPS(端口 8443)
  • 除初始用户创建和登录外,所有操作都需要 JWT 令牌
  • 可以通过注销来撤销令牌
  • 文件上传时会验证大小、压缩比和文件扩展名
  • ZIP 解压过程中强制执行路径遍历保护

全面的安全文档请参阅 SECURITY.md。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:17:53

不懂后端,我如何用 XinServer 交付一个管理系统

不懂后端&#xff0c;我如何用 XinServer 交付一个管理系统 最近有个朋友找我吐槽&#xff0c;说接了个小活儿&#xff0c;要给一个线下培训机构做个学员管理系统。需求其实挺简单&#xff1a;学员信息录入、课程管理、老师排课、再加上个简单的数据统计看板。但他是个纯前端&…

作者头像 李华
网站建设 2026/4/23 13:38:59

超越消息传递:图神经网络的进阶组件解析与实践

超越消息传递&#xff1a;图神经网络的进阶组件解析与实践 引言&#xff1a;图神经网络的演进与组件化趋势 图神经网络&#xff08;GNN&#xff09;已成为处理非欧几里得数据的核心工具&#xff0c;在社交网络分析、分子结构预测、推荐系统等领域展现出卓越性能。然而&#x…

作者头像 李华
网站建设 2026/4/23 13:38:46

Docker - 搭建镜像仓库- 了解

文章目录1. 搭建镜像仓库2. 简单搭建镜像仓库步骤验证镜像仓库是否搭建成功镜像命名规范总结✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来&#xff01; 编程真是一件很奇妙的东西。你只是浅尝辄止&#xff0c;那么只会觉得枯燥乏味&#xff0c;像对待任务似的应付…

作者头像 李华
网站建设 2026/4/23 8:33:33

fastapi是什么框架?我看好多人提到了

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Python Web 框架&#xff0c;专门用于构建 API&#xff08;尤其是 RESTful API&#xff09;。它基于 Python 3.6 的类型提示&#xff08;type hints&#xff09;&#xff0c;使用 Starlette 和 Pydantic 构建。为什么…

作者头像 李华
网站建设 2026/4/23 8:34:54

香港科技大学:用涂鸦秒变动画,AI让任何人都能成为动画师

这项由香港科技大学艺术与机器创意学院、计算机科学与工程学院以及香港科技大学&#xff08;广州&#xff09;计算媒体与艺术学院联合开展的研究发表于2026年CHI会议&#xff08;CHI 26, April 13–17, 2026, Barcelona, Spain&#xff09;&#xff0c;论文编号为ACM ISBN 979-…

作者头像 李华
网站建设 2026/4/23 8:33:53

声学研究者新突破:让计算机在“回声房间“里也能准确听懂人话

这项由声学研究领域专家完成的研究发表于2026年1月&#xff0c;论文编号为arXiv:2601.19949v1&#xff0c;为语音识别技术在复杂声学环境中的应用提供了重要的标准化测试平台。 当你在空旷的教室里说话时&#xff0c;是否注意到声音会产生回音&#xff1f;或者在会议室开电话会…

作者头像 李华