当前位置: 首页 > news >正文

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。

http://www.jsqmd.com/news/320491/

相关文章:

  • 基于PHP、asp.net、java、Springboot、SSM、vue3的南水北调工程招投标系统的设计与实现
  • 聊聊北京地区麻辣烫加盟,糊涂婶麻辣烫靠谱吗,值得推荐吗?
  • 2026年质量好的芯片激光喷码机/金属激光喷码机行业内知名厂家排行榜
  • 2026年解析污水处理菌种制造商,口碑好的品牌有哪些
  • 2026湖南民谣吉他制造企业选择攻略,性价比高的品牌排名
  • 聊聊斗牛士电吉他的动态范围大吗,株洲用户觉得它好用不?
  • 2026年比较好的入门型静电纺丝设备/通用型静电纺丝设备高评价厂家推荐榜
  • 分析盒理收纳盒怎么样?选购时要注意什么?
  • 《计算机网络》深入学:路由算法与路径选择
  • 2026年江苏值得选的不锈钢酿酒设备厂家排行
  • 搬运工人多少钱一小时?上搬运帮,透明计价,按需计费不花冤枉钱!
  • 2026年靠谱的铸铜加热器/风冷陶瓷加热器厂家最新热销排行
  • 2026年跨境美妆展推荐:中国国际美博会(CIBE)如何成为品牌全球化首选平台
  • 2026年口碑好的乳化沥青设备/沥青储存罐沥青设备行业内知名厂家排行榜
  • 解析天津性价比高的保研服务机构,服务不错的保研服务企业推荐
  • 2026年塑料垃圾桶生产厂,重庆哪家口碑好值得推荐
  • 2026年热门的钢板预处理线厂家最新热销排行
  • 2026年知名的散养草鸡蛋/无抗鸡蛋年度优质品牌榜
  • 完整教程:【算法】深度优先遍历/搜索(递归、回溯、剪枝)
  • 电子病历系统(11837)
  • 详细介绍:别急着开干!两个让团队少加班的Scrum秘诀
  • 2026年质量好的调味鸡蛋液/热稳定鸡蛋液年度信赖品牌榜
  • 东辉清洁胶带靠谱吗,真实用户体验来解答
  • 2026年质量好的陶瓷加热圈/纳米红外加热圈生产厂家
  • 东方学院校园招聘管理系统(11839)
  • 2026年口碑好的cnc手板模型/手板模型优质厂家推荐榜单
  • 2026年阀门加工厂排名大揭秘,靠谱的品牌有哪些
  • 2026年北京靠谱的华为服务器泰山2480渠道机构推荐,诚信之选有哪些
  • 2026年电吉他正规供应商推荐,价格合理的有哪些
  • 说说上海、南京等地靠谱的接线端子厂家,上海胥昌电子值得推荐吗?