Ale jak wagę mam na konwerterze to jak czytać bezpośrednio przez port, musze go jakoś najpierw lokalnie podlinkować. Gdy biore konwerter odczytam po sokecie fakt to jest myśl.
Chyba, że miałeś na myśli odczyt bezpośrednio gdy mam fizycznie do RS232 w serwerze podpięte, ale ta opcja nie wchodzi w grę nie do wykonania.
Wagi są radwagu, dokumentacja jest OK, są kody sterujące nie powinno być problemu. Moxe już mi jedna osoba polecała, mogę też kupić oryginał Radwagu pod te wagi.
OK. Mam głowicę radwagu (co prawda bez tensometrów, ale sztucznie dało się oszukać wynik).
Bez problemu obsługuję ją konwerterem MP-W5100.
Mam taki kod:
<?php
$address="192.168.1.1";
$service_port="8300";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror
(socket_last_error
()) . "\n"; } else {
}
echo "Połączenie z '$address' port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "Bład: ($result) " . socket_strerror
(socket_last_error
($socket)) . "\n"; } else {
}
$in = "SI\r\n";
$out = '';
socket_write
($socket, $in, strlen($in));
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
} else {
echo "Błąd: " . socket_strerror
(socket_last_error
($socket)) . "\n"; }
socket_close($socket);
?>
LUB taki:
<?php
$fp = fsockopen("tcp://192.168.1.1", 8300
, $errno, $errstr); if (!$fp) {
echo "$errno - $errstr<br />\n"; } else {
}
Pierwszym kodem bez problemu odczytuje pełną odpowiedź z wagi i ją sobie mogę przerobić. Jednak odpowiedź to czas jakieś 6 sek.
Drugim sposobem chcę odczytać 21 bajtów (tyle też wynika z dokumentacji RADWAGU) ale dostaję tylko 'S'. Oczywiście sposób o wiele szybszy.
Może ktoś mnie naprowadzi gdzie robię błąd.
Wynik z wagi dla ogólnego zrozumienia tematu na zapytanie SI wygląda tak:
SI 1041 kg
OK. Zmieniłem rozmiar bufora dla socket_recv an 21b. Teraz jest gitara. KO