Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]PHP konwerter RS232 - wagi, Odczyt zdalny z konwerterów RS232
KarolOl
post 26.11.2014, 15:06:42
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.07.2014

Ostrzeżenie: (0%)
-----


Witam,

Jak ugryźć temat.

Mam wagi które są daleko od serwera z PHP.
Host serwujący dostęp dla klientów jest Linuxowy.

Klienci zdalnie opisują cechy towarów i ważą je na wagach. Chce podpiąć te wagi by nie przepisywali wartości ręcznie. Jak ugryźć temat konwertera i PHP. Nie jest to lokalny RS232 z którym bym sobie poradził, nie mam softu pod linuxa do odczytu wag. Musze wysłać komendę sterującą, lub prościej ustawie sobie wagę by wysyłała non-stop wartości w kierunku serwera. Czy odebrać to bezpośrednio przez PHP (jaka funkcja?). Czy kombinować z NC i tworzyć coś lokalnie w sql lub pliku tekstowym?

Ktoś już testował takie rozwiązanie?

Chyba, że można stworzyć wirtualnego RS232 na linuxie robiąć coś w rodzaju kolejki FIFO i odwoływać się już wtedy z php'a do /dev/ttySx
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
mls
post 26.11.2014, 15:23:26
Post #2





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Możesz czytać bezpośrednio z portu COM (fopen lub IMO zdecydowanie lepsze dio), możesz podłączyć wagi do sieci ethernet poprzez Moxę i czytać z socketa TCP, wybór jest.
Przede wszystkim jednak musisz znać protokół w jakim komunikują się wagi poprzez RS232.


--------------------
Go to the top of the page
+Quote Post
KarolOl
post 16.12.2014, 10:10:20
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.07.2014

Ostrzeżenie: (0%)
-----


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:
  1. <?php
  2. $address="192.168.1.1";
  3. $service_port="8300";
  4. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  5.  
  6. if ($socket === false) {
  7. echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
  8. } else {
  9. echo "OK.\n";
  10. }
  11.  
  12. echo "Połączenie z '$address' port '$service_port'...";
  13.  
  14. $result = socket_connect($socket, $address, $service_port);
  15. if ($result === false) {
  16. echo "Bład: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
  17. } else {
  18. echo "OK.\n";
  19. }
  20.  
  21. $in = "SI\r\n";
  22. $out = '';
  23.  
  24. socket_write($socket, $in, strlen($in));
  25.  
  26. if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
  27. echo "Read $bytes";
  28. } else {
  29. echo "Błąd: " . socket_strerror(socket_last_error($socket)) . "\n";
  30. }
  31.  
  32. socket_close($socket);
  33.  
  34. echo "\n". $buf . "\n";
  35. ?>


LUB taki:
  1. <?php
  2. $fp = fsockopen("tcp://192.168.1.1", 8300, $errno, $errstr);
  3. if (!$fp) {
  4. echo "$errno - $errstr<br />\n";
  5. } else {
  6. fwrite($fp, "SI\r\n");
  7. echo fread($fp, 21);
  8. fclose($fp);
  9. }


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:
  1. SI 1041 kg


OK. Zmieniłem rozmiar bufora dla socket_recv an 21b. Teraz jest gitara. KO

Ten post edytował KarolOl 16.12.2014, 11:21:50
Go to the top of the page
+Quote Post
mls
post 16.12.2014, 20:50:12
Post #4





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Polecam użyć stream_set_blocking - dzięki temu może będzie trochę prościej wink.gif


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 14:20