|
西门子 S7-1500 PLC 的 HTTP 通信主要分为两种应用场景: 作为 HTTP 客户端 (Client):PLC 主动向外部的 Web 服务器、API 接口或云平台发送请求(GET/POST),获取数据或上传数据。这是最常用的数据交互方式。作为 HTTP 服务器 (Server):利用 PLC 内置的 Web 服务器功能,允许浏览器或其他客户端通过 HTTP/HTTPS 访问 PLC 的状态页面、诊断信息,甚至通过自定义脚本读写数据。以下是针对这两种模式的详细配置与使用指南。 --- 一、S7-1500 作为 HTTP 客户端 (HTTP_CLIENT) 此模式用于 S7-1500 主动访问互联网或局域网内的 Web 服务(如 REST API、MQTT Broker 的 HTTP 接口、ERP 系统等)。 1. 硬件与软件要求 CPU 固件:建议 V2.6 及以上(早期版本功能受限),推荐 V2.9+ 以获得更好的 HTTPS 支持。TIA Portal 版本:V15.1 及以上(指令块 HTTP_CLIENT 在 V15.1 中引入并不断完善)。网络:PLC 需配置 IP 地址,且能路由到目标服务器(若访问外网,需配置网关和 DNS)。2. 核心指令:HTTP_CLIENT 在 TIA Portal 右侧“指令” -> “通信” -> “开放式用户通信” -> “其他协议”中找到 HTTP_CLIENT 指令块。 3. 关键参数配置 将指令块拖入 OB1 或 FB/FC 中,主要参数如下: 参数名 | 数据类型 | 说明 | | REQ | Bool | 上升沿触发通信请求。通常使用脉冲信号(如每次扫描周期的第一个周期,或定时器触发)。 | | URL | String | 目标服务器的完整地址。例如:http://192.168.1.100:8080/api/data 或 https://api.example.com/login。 | | METHOD | String | HTTP 方法。常用值:GET (读取), POST (提交), PUT, DELETE。 | | HEADERS | String (可选) | HTTP 请求头。例如:Content-Type: application/json 或 Authorization: Bearer token。多行需用 CR/LF 分隔。 | | BODY | Variant/String | 请求体数据。用于 POST/PUT 请求,通常传递 JSON 字符串或 XML。 | | RESPONSE | Variant | 输出。接收服务器返回的完整响应(包含状态行、头和体)。通常需要配合 GetBody 等库函数解析。 | | STATUS | Word | 指令执行状态代码(参考 Siemens 帮助文档,0x0000 表示空闲,0x0001 表示忙碌,其他为错误码)。 | | ERROR | Bool | 出错标志。 |
4. 典型编程步骤 构建 URL:在静态变量或 DB 块中定义 String 类型的 URL。设置请求头 (Headers):如果发送 JSON 数据,必须设置 Content-Type: application/json。如果需要认证,添加 Authorization 头。示例:"Content-Type: application/json\r\nAuthorization: Basic dXNlcjpwYXNz" 构建报文体 (Body):如果是 POST 请求,将数据格式化为 JSON 字符串存入 BODY 引脚。示例:"{\"temperature\": 25.5, \"status\": \"OK\"}" 触发执行:给 REQ 一个上升沿。注意不要每个扫描周期都触发,通常配合 BUSY 引脚或使用定时器间隔触发。处理响应:检查 STATUS 和 ERROR。 从 RESPONSE 中提取 HTTP 状态码(如 200 OK, 404 Not Found)。 解析返回的 JSON/XML 数据(S7-1500 标准库中没有直接的 JSON 解析器,通常需要编写 SCL 代码进行字符串处理,或使用第三方库/UDT 映射)。 5. 常见问题与调试 DNS 解析失败:确保在 CPU 属性 -> PROFINET 接口 -> IP 参数中配置了正确的 DNS 服务器。HTTPS 证书问题:访问 HTTPS 站点时,如果服务器证书不受信任,通信可能失败。在较新的固件中,可以在指令属性中配置是否验证证书,或者将根证书导入 PLC。数据长度限制:HTTP_CLIENT 对请求和响应的大小有限制(取决于 CPU 型号和固件,通常在几 KB 到几十 KB 之间)。大数据传输需分片。防火墙:确保 PLC 所在网络的防火墙允许出站流量(端口 80 或 443)。--- 二、S7-1500 作为 HTTP 服务器 (Web Server) S7-1500 内置了一个 Web 服务器,无需编写代码即可启用,主要用于诊断和基础数据访问。 1. 启用 Web 服务器 在 TIA Portal 项目树中,双击 设备组态 (Device configuration)。 选中 CPU,打开 属性 (Properties) 选项卡。 找到 Web 服务器 (Web server) -> 常规 (General)。 勾选 启用 Web 服务器 (Enable Web server)。 安全设置:可以选择仅允许 HTTPS(推荐,更安全)。 配置 用户管理 (User management):创建用户(如 Administrator, User),分配权限(如 HMI、诊断、读写变量等)。如果不配置用户,默认可能无法登录或权限受限。 2. 访问方式 浏览器访问:在 PC 或手机浏览器输入 http://<plc_ip> 或 https://<plc_ip>。功能页面:启动列表 (Start list):查看 PLC 状态。诊断 (Diagnostics):查看缓冲区、模块信息。变量表 (Variable tables):如果权限允许,可以在线监控和修改已定义的 PLC 变量(需在变量表中勾选“HMI 可访问”或在 Web 服务器设置中暴露特定区域)。文件浏览器:访问 PLC 存储卡中的文件。3. 高级应用:通过 HTTP 读写数据 (RESTful API 风格) 虽然内置 Web 服务器主要用于诊断,但结合 Openness 或 用户自定义网页 (User-defined Web pages) (部分旧型号或通过特定方式),可以实现更灵活的数据交互。 注意:S7-1500 原生不支持像 Node.js 那样直接运行自定义后端脚本来处理复杂的 HTTP POST 逻辑。替代方案:如果需要 S7-1500 作为服务器接收复杂 HTTP 请求(如接收 MES 系统的指令),通常建议使用 TCP 开放通信 (TCON/TSEND/TRCV) 自行解析 HTTP 报文,或者使用 OPC UA(S7-1500 原生支持 OPC UA 服务器,更适合工业数据交互)。--- 三、场景对比与建议 特性 | HTTP_CLIENT (PLC 做客户端) | Web Server (PLC 做服务器) | TCP 开放通信 (自行解析 HTTP) | OPC UA (推荐替代) | | 主要用途 | 上报数据到云/MES,调用外部 API | 远程诊断,简单监控 | 高度定制的 HTTP 服务 | 标准化数据交换,跨平台 | | 配置难度 | 中等 (需处理 JSON/字符串) | 低 (勾选即可) | 高 (需手动解析 HTTP 协议) | 中等 (需配置信息模型) | | 数据方向 | PLC -> 外部 | 外部 -> PLC (主要是读) | 双向 | 双向 | | 实时性 | 取决于轮询周期 | 较低 | 高 | 高 (订阅机制) | | 推荐度 | (上云/对接 API 必选) | (运维诊断必选) | (除非特殊需求) | (系统间集成首选) |
四、实战案例:S7-1500 发送 JSON 数据到 Web 服务器 假设要将温度数据发送到本地测试服务器 http://192.168.0.50:3000/upload。 定义数据结构:创建一个 DB 块,包含温度值 Temp_Real (Real)。编写 SCL 代码构建 JSON (在调用 HTTP_CLIENT 之前):// 假设 JsonBody 是 String 类型变量JsonBody := '{"device": "PLC_01", "temperature": ' + RealToString(Temp_Real) + ', "timestamp": "' + GetTimeString() + '"}';(注:实际工程中需要完善的字符串处理函数来处理引号和特殊字符)调用 HTTP_CLIENT:REQ: M10.0 (上升沿)URL: 'http://192.168.0.50:3000/upload'METHOD: 'POST'HEADERS: 'Content-Type: application/json'BODY: JsonBody监控状态:观察 STATUS 引脚,若返回 160000 (IDLE) 且无 Error,且服务器收到数据,则成功。若 STATUS 显示错误码,查阅手册排查(如 0x000B 表示 DNS 错误,0x000E 表示连接超时)。总结 对外交互:首选 HTTP_CLIENT 指令,适合现代化的 REST API 对接。对内诊断:开启 内置 Web 服务器,方便手机/PC 随时查看状态。复杂集成:如果是与 SCADA、MES 或其他 PLC 进行高频、稳定的数据交换,OPC UA 往往比 HTTP 更稳定且易于维护。 </plc_ip></plc_ip> 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |