hat jemand ein Beispiel, wie man einen String oder ein U16 von einem KOSTAL Wechselrichter mit diesem LBS hier 19001586 abfragen kann.
Die Installation habe ich durch einige Adressen kann ich auch auslesen.
Versuche dies mit dem test.php herauszufinden, ehe ich mich mit dem LBS in dem Logikeditor befasse.
Bin für Ideen/Vorschläge Dankbar. Oder auch hinweise, was ich überlesen haben sollte
Übrigens, bei der Abfrage von Adressen mit "String" habe ich es auch zusätzlich mit einer Angabe von "endian" als weiteren Parameter in dem JSON String probiert, hat aber nix geholfen.
Das geht:
PHP-Code:
<?php
use ModbusTcpClient\Composer\Read\ReadRegistersBuilder ;
use ModbusTcpClient\Network\NonBlockingClient;
use ModbusTcpClient\Utils\Endian;
require __DIR__ . '/vendor/autoload.php';
// IP + Port + ID pflegen <<<<<<<<<<<<<<<<<<<<<<<<<<
$ip = '192.168.178.219';
$port = '1502';
$slaveID = '71';
// Bei Bedarf ENDIAN ändern <<<<<<<<<<<<<<<<<<<<<<<<
Endian::$defaultEndian = Endian::BIG_ENDIAN_LOW_WORD_FIRST;
// Register-JSON pflegen <<<<<<<<<<<<<<<<<<<<<<<<<<<
// Achtung: Bei letzter Zeile darf hinter } kein , mehr folgen!
$json = '[
{"address":"152","type":"float","name":"Grid Frequency"},
{"address":"120","type":"float","name":"Isolation Resistence"}
]';
// ================================================================
// hier ist nix mehr zu machen...
$registers = json_decode($json, true);
$uri = $ip.':'.$port;
foreach($registers as $i=>$innerArray) {
$registers[$i]['uri'] = $uri;
$registers[$i]['unitId'] = $slaveID;
}
print_r($registers);
try {
$fc3 = ReadRegistersBuilder::newReadHoldingRegisters()
->allFromArray($registers)
->build();
} catch (Exception $e) {
echo ('FEHLER: '.$e->getMessage()."\n");
return;
}
print_r('Anzahl Register gesamt: '.count($registers));echo("\n");
print_r('Anzahl Requests gesamt: '.count($fc3));echo("\n");
$response = (new NonBlockingClient(['readTimeoutSec' => 2.0, 'connectTimeoutSec' => 2.0]))->sendRequests($fc3);
print_r($response);
?>
Ergebnis:
Code:
[root@edomi7-prod ~]# php /usr/local/edomi/main/include/php/modbus-tcp-client/test2.php
Array
(
[0] => Array
(
[address] => 152
[type] => float
[name] => Grid Frequency
[uri] => 192.168.178.219:1502
[unitId] => 71
)
[1] => Array
(
[address] => 120
[type] => float
[name] => Isolation Resistence
[uri] => 192.168.178.219:1502
[unitId] => 71
)
)
Anzahl Register gesamt: 2
Anzahl Requests gesamt: 1
ModbusTcpClient\Network\ResultContainer Object
(
[data:ModbusTcpClient\Network\ResultContainer:private] => Array
(
[Isolation Resistence] => 65535000
[Grid Frequency] => 49.996948242188
)
[errors:ModbusTcpClient\Network\ResultContainer:private] => Array
(
)
)
Das geht nicht:
PHP-Code:
<?php
use ModbusTcpClient\Composer\Read\ReadRegistersBuilder ;
use ModbusTcpClient\Network\NonBlockingClient;
use ModbusTcpClient\Utils\Endian;
require __DIR__ . '/vendor/autoload.php';
// IP + Port + ID pflegen <<<<<<<<<<<<<<<<<<<<<<<<<<
$ip = '192.168.178.219';
$port = '1502';
$slaveID = '71';
// Bei Bedarf ENDIAN ändern <<<<<<<<<<<<<<<<<<<<<<<<
Endian::$defaultEndian = Endian::BIG_ENDIAN_LOW_WORD_FIRST;
// Register-JSON pflegen <<<<<<<<<<<<<<<<<<<<<<<<<<<
// Achtung: Bei letzter Zeile darf hinter } kein , mehr folgen!
$json = '[
{"address":"14","type":"string","length":"16","name":"Serial Number"},
{"address":"120","type":"float","name":"Isolation Resistence"}
]';
// ================================================================
// hier ist nix mehr zu machen...
$registers = json_decode($json, true);
$uri = $ip.':'.$port;
foreach($registers as $i=>$innerArray) {
$registers[$i]['uri'] = $uri;
$registers[$i]['unitId'] = $slaveID;
}
print_r($registers);
try {
$fc3 = ReadRegistersBuilder::newReadHoldingRegisters()
->allFromArray($registers)
->build();
} catch (Exception $e) {
echo ('FEHLER: '.$e->getMessage()."\n");
return;
}
print_r('Anzahl Register gesamt: '.count($registers));echo("\n");
print_r('Anzahl Requests gesamt: '.count($fc3));echo("\n");
$response = (new NonBlockingClient(['readTimeoutSec' => 2.0, 'connectTimeoutSec' => 2.0]))->sendRequests($fc3);
print_r($response);
?>
Code:
[root@edomi7-prod ~]# php /usr/local/edomi/main/include/php/modbus-tcp-client/test2.php
Array
(
[0] => Array
(
[address] => 14
[type] => string
[length] => 16
[name] => Serial Number
[uri] => 192.168.178.219:1502
[unitId] => 71
)
[1] => Array
(
[address] => 120
[type] => float
[name] => Isolation Resistence
[uri] => 192.168.178.219:1502
[unitId] => 71
)
)
Anzahl Register gesamt: 2
Anzahl Requests gesamt: 1
ModbusTcpClient\Network\ResultContainer Object
(
[data:ModbusTcpClient\Network\ResultContainer:private] => Array
(
)
[errors:ModbusTcpClient\Network\ResultContainer:private] => Array
(
[0] => ModbusTcpClient\Packet\ErrorResponse Object
(
[header:ModbusTcpClient\Packet\ErrorResponse:private] => ModbusTcpClient\Packet\ModbusApplicationHeader Object
(
[transactionId:ModbusTcpClient\Packet\ModbusApplicationHeader:private] => 17872
[length:ModbusTcpClient\Packet\ModbusApplicationHeader:private] => 4
[unitId:ModbusTcpClient\Packet\ModbusApplicationHeader:private] => 71
)
[functionCode:ModbusTcpClient\Packet\ErrorResponse:private] => 3
[errorCode:ModbusTcpClient\Packet\ErrorResponse:private] => 2
)
)
)


.
Sollte ich eine möglichkeit finden dann werde ich es hier im Forum
Einen Kommentar schreiben: