modbus tcp通信
composer require aldas/modbus-tcp-client 2.4
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use ModbusTcpClient\Network\BinaryStreamConnection;
use ModbusTcpClient\Packet\ModbusFunction\ReadHoldingRegistersRequest;
use ModbusTcpClient\Packet\ModbusFunction\ReadHoldingRegistersResponse;
class ModbusController extends Controller
{
public function connect()
{
try {
// 创建 Modbus TCP 连接
$connection = BinaryStreamConnection::getBuilder()
->setHost('192.168.254.15')
->setPort(502)
->build();
// 建立连接
$connection->connect();
// 创建读取保持寄存器请求
$request = new ReadHoldingRegistersRequest(0, 256, 3);
// 发送请求并获取响应
/** @var ReadHoldingRegistersResponse $response */
$response = $connection->sendAndReceive($request);
// 获取响应数据
$data = $response->getData();
// 关闭连接
$connection->close();
return $data;
} catch (\Exception $e) {
return 'Modbus TCP 连接失败:' . $e->getMessage();
}
}
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use ModbusTcpClient\Network\BinaryStreamConnection;
class ModbusController extends Controller
{
public function testConnection()
{
try {
// 创建 Modbus TCP 连接
$connection = BinaryStreamConnection::getBuilder()
->setHost('192.168.254.15')
->setPort(502)
->build();
// 建立连接
$connection->connect();
// 连接成功
$message = 'Modbus TCP 连接成功';
// 关闭连接
$connection->close();
return $message;
} catch (\Exception $e) {
return 'Modbus TCP 连接失败:' . $e->getMessage();
}
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
aldas/modbus-tcp-client 接收包超时,没查到原因,所以改成python socket