Thinkphp 物联网对接
ThinkPHP 结合 Modbus 和 MQTT 实现 MES 代码示例好直接给你 ThinkPHP 可直接复制运行的两套代码1. Modbus Slave 数据读取PLC / 机床仿真2. MQTT 数据订阅 自动入库MES 设备上云你直接贴到项目里就能跑。---一、ThinkPHP 读取 Modbus Slave机床 / PLC 仿真1. 先装库composer require angeloc/php-modbus2. 代码控制器 / 任务?phpnamespace app\api\controller;use PHPModbus\ModbusMaster;use think\Controller;class Modbus extends Controller{// 读取 Modbus Slave 模拟机床数据public function readMachine(){// 你的电脑/模拟器IPModbus Slave所在机器$host 127.0.0.1;$port 502; // 默认Modbus TCP端口try {// 1. 连接Modbus TCP$modbus new ModbusMaster($host, TCP);$modbus-port $port;$modbus-timeout_sec 5;// 2. 读取保持寄存器机床地址1从0开始读10个// 对应你Modbus Slave里设置的 Slave Definition$unitId 1;$startAddress 0;$quantity 10;$data $modbus-readMultipleRegisters($unitId, $startAddress, $quantity);// 3. 解析机床数据和你模拟器对应$machine [status $data[0], // 0停机,1运行,2报警speed $data[1], // 转速total $data[2], // 总产量work_sec $data[3], // 加工时长alarm $data[4], // 报警码];// 4. 直接给MES用存库/显示/统计return json([code 1,msg 读取成功,data $machine]);} catch (\Exception $e) {return json([code 0,msg 失败.$e-getMessage()]);}}}3. 怎么用- 打开 Modbus Slave → F3 选 Connection → Connect → TCP/IP- 端口 502 → 点 OK- 访问http://你的项目/api/modbus/readMachine---二、ThinkPHP MQTT 订阅 自动入库MES 必备1. 先装库composer require php-mqtt/client2. 建表 SQLCREATE TABLE machine_data (id int(11) NOT NULL AUTO_INCREMENT,topic varchar(100) DEFAULT NULL COMMENT MQTT主题,device varchar(50) DEFAULT NULL COMMENT 机床编号,status tinyint(1) DEFAULT 0 COMMENT 0停机1运行2报警,speed int(11) DEFAULT 0 COMMENT 转速,total int(11) DEFAULT 0 COMMENT 产量,alarm int(11) DEFAULT 0 COMMENT 报警码,raw text COMMENT 原始JSON,create_time datetime DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8;3. 订阅代码命令行常驻运行app/command/MqttSubscribe.php?phpnamespace app\command;use PhpMqtt\Client\MqttClient;use think\console\Command;use think\console\Input;use think\console\Output;use think\Db;class MqttSubscribe extends Command{protected function configure(){$this-setName(mqtt:subscribe)-setDescription(MQTT机床数据订阅);}protected function execute(Input $input, Output $output){// 配置和你MQTTX一致$server broker.emqx.io; // 免费测试服务器$port 1883;$clientId mes-machine-.uniqid();$topic mes/cnc/#; // 订阅所有机床try {// 连接MQTT$mqtt new MqttClient($server, $port, $clientId);$mqtt-connect();$output-writeln(✅ MQTT已连接等待机床数据...);// 订阅入库$mqtt-subscribe($topic, function ($topic, $message) use ($output) {$output-writeln(\n 收到$topic);$output-writeln(内容$message);// 解析JSON$data json_decode($message, true);if (!$data) return;// 写入MES数据库Db::name(machine_data)-insert([topic $topic,device $data[device] ?? ,status $data[status] ?? 0,speed $data[speed] ?? 0,total $data[total] ?? 0,alarm $data[alarm] ?? 0,raw $message,create_time date(Y-m-d H:i:s)]);$output-writeln(✅ 已存入数据库);}, 0);// 常驻循环$mqtt-loop(true);$mqtt-disconnect();} catch (\Exception $e) {$output-writeln(❌ 错误.$e-getMessage());}}}4. 运行订阅命令行php think mqtt:subscribe5. 测试用 MQTTX 发- 主题mes/cnc/001- 消息{device: CNC-001,status: 1,speed: 1500,total: 300,alarm: 0}发完 → 数据库立刻有记录 ✅---三、你现在就能做1. 运行 Modbus Slave → 改数字 → PHP 直接读到2. 运行 MQTT 订阅 → MQTTX 发 JSON → 自动进 MES 库3. 完全不用真实机床、不用现场、不用强电要不要我再给你- 机床状态 / 产量 / 报警 前端看板页面HTMLVue- 定时采集 历史曲线 导出 Excel 的完整代码
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2593792.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!