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

Hyperf对接SCADA

SCADA 对接的核心是协议,不同 SCADA 系统暴露不同接口。以下是 PHP/Hyperf 生态里各协议最好的库: --- 库推荐总览 ┌────────────┬─────────────────────────┬──────────────────────────────────────────┐ │ 协议 │ 库 │ 适用场景 │ ├────────────┼─────────────────────────┼──────────────────────────────────────────┤ │ MQTT │ simps/mqtt │ Ignition、AVEVA、自研 SCADA 走 MQTT 推送 │ ├────────────┼─────────────────────────┼──────────────────────────────────────────┤ │ Modbus TCP │ aldas/modbus-tcp-client │ 直连 PLC/SCADA Modbus 接口 │ ├────────────┼─────────────────────────┼──────────────────────────────────────────┤ │ OPC UA │ php-opcua/opcua-client │ 西门子 WinCC、Kepware、现代 SCADA │ ├────────────┼─────────────────────────┼──────────────────────────────────────────┤ │ HTTP REST │ Hyperf 内置 Guzzle │ Ignition WebDev、RapidSCADA REST API │ └────────────┴─────────────────────────┴──────────────────────────────────────────┘ --- 方案一:MQTT(最主流,强烈推荐) 现代 SCADA(Ignition + Cirrus Link、AVEVA、自研)基本都支持 MQTT Sparkplug B 推送数据。 simps/mqtt — 专为 Swoole/Hyperf 协程设计,支持 MQTT3.1/3.1.1/5.0,是 PHP 生态最好的 MQTT 库。composerrequire simps/mqtt Hyperf 中订阅 SCADA 数据:<?php namespace App\Process;use Hyperf\Process\AbstractProcess;use Simps\MQTT\Client;use Simps\MQTT\Config\ClientConfig;class ScadaMqttProcess extends AbstractProcess{public string$name='scada-mqtt-subscriber';publicfunctionhandle(): void{$config=(new ClientConfig())->setUserName('scada_user')->setPassword('secret')->setKeepAlive(60)->setClientId('hyperf-scada-'.uniqid())->setCleanSession(true);$client=new Client('192.168.1.10',1883,$config);$client->connect();// 订阅 SCADA Tag 主题(Sparkplug B 格式)$client->subscribe(['spBv1.0/factory/DDATA/plc1/#'=>['qos'=>1],'scada/+/temperature'=>['qos'=>0],]);while(true){$data=$client->receive();if($data){$this->handleMessage($data['topic'],$data['message']);}}}privatefunctionhandleMessage(string$topic, string$payload): void{$data=json_decode($payload,true);// 存入 Redis / 数据库\Hyperf\Support\make(\App\Service\ScadaDataService::class)->store($topic,$data);}}注册进程(config/autoload/processes.php):return[App\Process\ScadaMqttProcess::class,];发布控制指令回 SCADA:<?php namespace App\Service;use Simps\MQTT\Client;use Simps\MQTT\Config\ClientConfig;class ScadaControlService{publicfunctionsendCommand(string$tag, mixed$value): void{$config=(new ClientConfig())->setClientId('hyperf-cmd-'.uniqid());$client=new Client('192.168.1.10',1883,$config);$client->connect();$client->publish(topic:"scada/commands/{$tag}", message: json_encode(['value'=>$value,'ts'=>time()]), qos:1);$client->close();}}--- 方案二:OPC UA(西门子 WinCC / Kepware) php-opcua/opcua-client — 纯 PHP 实现 OPC UA 二进制协议,无需 C 扩展,可直接跑在 Swoole 协程里。composerrequire php-opcua/opcua-client<?php namespace App\Service;use OpcUa\Client\Client;use OpcUa\Client\NodeId;class WinccScadaService{publicfunctionreadNode(string$nodeId): mixed{$client=new Client('opc.tcp://192.168.1.20:4840');$client->connect();$client->createSession();$client->activateSession();$result=$client->read(new NodeId($nodeId));$client->closeSession();$client->disconnect();return$result->getValue();}}--- 方案三:HTTP REST(Ignition / RapidSCADA) 直接用 Hyperf 内置的 Guzzle 协程客户端,无需额外库:<?php namespace App\Service;use Hyperf\Guzzle\ClientFactory;class IgnitionScadaService{publicfunction__construct(private ClientFactory$clientFactory){}publicfunctionreadTags(array$tagPaths): array{$client=$this->clientFactory->create(['base_uri'=>'http://192.168.1.10:8088','auth'=>['admin','password'],'timeout'=>3.0,]);$resp=$client->post('/data/tag/read',['json'=>['paths'=>$tagPaths],]);returnjson_decode($resp->getBody()->getContents(),true);}}--- 选哪个? 你的 SCADA 是什么品牌? ├── Ignition(Inductive Automation)→ MQTT(simps/mqtt)或 REST ├── 西门子 WinCC / TIA Portal → OPC UA(php-opcua/opcua-client)├── Kepware / KEPServerEX → OPC UA ├── AVEVA / Wonderware → MQTT 或 OPC UA ├── 自研 / 国产 SCADA → 看它支持什么协议,优先 MQTT └── 老系统只有 Modbus → aldas/modbus-tcp-client 通用建议:优先选 MQTT,它是工业 IoT 的事实标准,simps/mqtt 与 Hyperf 协程天然契合,性能最好。
http://www.jsqmd.com/news/688276/

相关文章:

  • 2022年MLOps赞助商技术突破与行业贡献解析
  • 如何高效解决跨平台音频格式兼容问题:专业qmc-decoder解密方案
  • 小目标检测效果差?试试Deformable DETR的多尺度注意力机制(原理+代码解读)
  • Zotero引用格式(Xie et al 2021)如何变成可点击的超链接?我的Word宏配置踩坑实录
  • 告别SD卡:全志V3s用16MB NOR Flash打造极简嵌入式Linux系统
  • 别再傻傻用软件AES了!手把手教你用STM32硬件AES加速物联网数据传输(附CubeMX配置)
  • DP1.2 协议精解(一):分层架构与链路管理
  • 淘宝商品详情 API 字段全解析:返回值中隐藏的高价值字段挖掘
  • 给爸妈手机装个Skype吧:一个账号搞定跨境/长途通话,操作比微信还简单
  • Unity Entities 1.0.16在移动端真的不行吗?一个实战测试后的避坑与替代方案
  • SAP MM采购管理实战:从后台配置到前台操作的完整指南
  • 从PID到LADRC:一个电源工程师的实战升级笔记(以STM32控制Buck电路为例)
  • STM32F103用CubeMX实现ADC欠采样:用800Hz采样率捕获1kHz正弦波的保姆级教程
  • 在线推荐系统构建:从基础架构到算法优化
  • FlicFlac深度解析:Windows音频格式转换的终极技术指南
  • 深度解析Resemble Enhance:突破性AI语音增强技术实现专业级音频优化
  • 为什么92%的嵌入式团队在VSCode 2026正式版发布72小时内紧急升级调试插件?揭秘DAPv2.3协议兼容性避坑清单
  • 别再让你的CUDA程序慢吞吞了!手把手教你用Memory Coalescing榨干GPU带宽
  • VMware macOS虚拟机终极解锁指南:Unlocker完整使用教程
  • 深入Linux内核:PWM风扇驱动源码解析与中断、定时器协同工作原理
  • Drupal高危漏洞实战:从XSS到RCE的攻防演练
  • 蓝桥杯单片机备赛:从LED到串口,这9个坑我帮你踩过了(附完整代码)
  • 安徽诚鑫物资回收:合肥电线回收源头厂家哪个好 - LYL仔仔
  • LTC6813-1 实战解析:构建高可靠isoSPI菊花链通信网络
  • 第10篇:面向对象总结与最佳实践
  • 十六两的白名单卡、回拨系统、截流引流获客系统、GEO - AI 搜索关键词智能优化系统是什么样的? - 速递信息
  • 硬件视频编码器能耗预测:高斯过程回归模型实践
  • 告别开机卡顿:在Ubuntu桌面版用systemd优雅延迟启动你的Docker或开发环境
  • 3分钟掌握鼠标抖动神器:让Windows电脑永不休眠的终极方案
  • 别再死记硬背for循环语法了!用C#实战打印九九乘法表,5分钟彻底搞懂