У меня есть сервер сокетов, и я использую responsephp для получения соединений от нескольких клиентов. Мне нужно будет сделать несколько запросов на запись и дождаться возврата каждого из них, прежде чем перейти к следующей записи.
При моем выполнении происходит то, что я делаю цикл и результат не такой, как ожидалось. Например, если мне нужны записи 30001, 30004 и 30006, даже в цикле, с запросом ($conn->write($rtuPacket)) для всех записей, конечный результат будет просто «30001» повторно. .
Как мне дождаться завершения каждой транзакции вопроса/ответа, прежде чем переходить к следующему запросу?
Ниже приведена часть моего код:
for ($i = 0; $i < sizeof($get_index_read_input_registers); $i++) {
$startAddress = $get_index_read_input_registers[$i]["ADDRESS"];
$quantity = $get_index_read_input_registers[$i]["QUANTITY"];
$slaveId = $arr_addr_rs485[$j];
$packet = new ReadInputRegistersRequest($startAddress, $quantity, $slaveId);
$rtuPacket = RtuConverter::toRtu($packet);
$conn->write($rtuPacket);
$receivedData = b'';
$conn->on('data', function ($data) use ($conn, $logger, &$receivedData) {
$logger->debug($conn->getRemoteAddress() . ": RTU received: (in HEX):" . unpack('H*', $data)[1]) . PHP_EOL;
});
//React\Async\await(3.0);
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... tcp-in-php
Как дождаться ответа Modbus RTU через TCP в PHP? ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение