У меня есть сервер сокетов, и я использую 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
Кемеровские программисты php общаются здесь
-
Anonymous
1730926720
Anonymous
У меня есть сервер сокетов, и я использую 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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79164274/how-to-wait-for-modbus-rtu-response-over-tcp-in-php[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия