コード例 #1
0
ファイル: test.php プロジェクト: cdkisa/majordomo
function prepareCommand($address, $command, $data = array())
{
    $payload = '';
    $payload .= makePayload(array($address));
    $payload .= makePayload(array($command));
    $payload .= makePayload(array(count($data)));
    if (count($data)) {
        $payload .= makePayload($data);
    }
    $payload .= crc16_modbus($payload);
    return $payload;
}
コード例 #2
0
while (microtime(1) < $timeout) {
    $c = fgetc($fp);
    if ($c === false) {
        usleep(5);
        continue;
    }
    $result .= $c;
}
fclose($fp);
// Split answer data on parts
$crc_answer = substr($result, -2);
// crc16 in answer
$addr = substr($result, 1, 3);
// address of power device
$answer_cmd = substr($result, 4, 1);
// answered command
$answer = substr($result, 5, -2);
// answer string
// Check CRC
$crc_check = 'FAIL';
if (crc16_modbus(substr($result, 0, -2)) == $crc_answer) {
    $crc_check = 'OK';
}
// Formatted output
echo 'ADDRESS: ' . nice_hex(bin2hex($addr)) . "\n";
echo 'COMMAND: ' . nice_hex(bin2hex($answer_cmd)) . "\n";
echo 'ANSWER:  ' . nice_hex(bin2hex($answer)) . "\n";
echo 'CRC:     ' . $crc_check . "\n";
echo '---------' . "\n";
echo 'Full request: ' . nice_hex($cmd) . "\n";
echo 'Full answer:  ' . nice_hex(bin2hex($result)) . "\n\n";