Trzepak.pl


Nowy temat  Odpowiedz w temacie
Autor Wiadomość
Post: wt, 15 maja 2018 16:55:03 
Odpowiedz z cytatem
Offline
Leniwy eseista
Leniwy eseista

Rejestracja: pn, 24 sie 2015 23:36:46
Posty: 686
Witam.

Próbuję sterować urządzeniem podłączonym do portu COM1 (/dev/ttyS0) pewnego terminala z Linuksem (Debian 9).

Z samym urządzeniem po RS232 gadam bez problemu za pomocą tekstowego pakietu minicom. Wystarczy skonfigurować minicom-a na klasyczny format 8,n,1, prędkość na 4800 i już można gadać.

Jedną z komend jest "cd gp1" na co sterowane urządzenie wykonuje pewną czynność i odpowiada innym komunikatem.

Chciałbym urządzeniem sterować przez stronę WWW. W tym celu na terminali z Debianem postawiłem apahe2 z php7. Serwer z php-em działa poprawnie.

Ściągnąłem klasę:
https://www.phpclasses.org/package/3679 ... -port.html

wrzuciłem na serwer, i zapisałem kod do pliku .php:



Kod:
<?php
include("php_serial.class.php");
$serial = new phpSerial();
$serial->deviceSet("/dev/ttyS0");
$serial->confBaudRate(4800);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");

$str = "cd gp1";
print $str;

$serial->sendMessage($str);

$read = $stty->readPort();
print $read;

$serial->deviceClose();
?>


Gdy wejdę na stronę www na tym serwerze, pojawia mi się napis "cd gp1" ale na urządzeniu na porcie COM1 brak reakcji, nie zwróciło też żadnego komunikatu.

Zastanawiam się (nie jestem specjalistą od PHP-a) jak mogę to sobie zdebugować, wyłapać, czemu nie śmiga.

Dziękuję pięknie za podpowiedzi.


Ostatnio zmieniony czw, 17 maja 2018 0:42:24 przez mes mariusz, łącznie zmieniany 1 raz.

Na górę
Post: wt, 15 maja 2018 17:11:56 
Odpowiedz z cytatem
Offline
Obsesyjny prozaik
Obsesyjny prozaik
Awatar użytkownika

Rejestracja: śr, 24 kwie 2013 18:07:46
Posty: 1207
Lokalizacja: Myszków
Kto uruchamia skrypt .php i czy ma dostęp do /dev/ttyS0.

_________________
http://www.morawiec.info - taki tam sobie blog


Na górę
Post: śr, 16 maja 2018 8:17:02 
Odpowiedz z cytatem
Offline
Leniwy eseista
Leniwy eseista

Rejestracja: pn, 24 sie 2015 23:36:46
Posty: 686
Cramin pisze:
Kto uruchamia skrypt .php i czy ma dostęp do /dev/ttyS0.


Nie bardzo wiem, jak to sprawdzić, ale zakładam, że user www-data.

Kod:
root@LT310:~# groups www-data
www-data : www-data dialout


/etc/group
Kod:
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:www-data
fax:x:21:
voice:x:22:
cdrom:x:24:mariusz
floppy:x:25:mariusz
tape:x:26:
sudo:x:27:
audio:x:29:pulse,mariusz
dip:x:30:mariusz
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:mariusz
sasl:x:45:
plugdev:x:46:mariusz
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-timesync:x:102:
systemd-network:x:103:
systemd-resolve:x:104:
systemd-bus-proxy:x:105:
input:x:106:
crontab:x:107:
netdev:x:108:mariusz
ssl-cert:x:109:
rtkit:x:110:
messagebus:x:111:
ssh:x:112:
bluetooth:x:113:mariusz
lpadmin:x:114:mariusz
geoclue:x:115:
pulse:x:116:
pulse-access:x:117:
scanner:x:118:saned,mariusz
avahi:x:119:
colord:x:120:
saned:x:121:
Debian-gdm:x:122:
mariusz:x:1000:
lightdm:x:123:



Poprawiłem też kod php, by sygnalizował błędy:

Kod:
<?php

ini_set( 'display_errors', 'On' );
error_reporting( E_ALL );

include("php_serial.class.php");
$serial = new phpSerial();
$serial->deviceSet("/dev/ttyS0");
$serial->confBaudRate(4800);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");

$str = "cd gp1\n\r";
print $str;

$serial->deviceOpen();
$serial->sendMessage($str);
$read = $serial->readPort();
print $read;

$serial->deviceClose();

alamakota;

?>


Błędy są poprawnie sygnalizowane.

Rezultat:

https://obrazki.elektroda.pl/5130452400_1526449829.png

Myślę, że problem może dotyczyć wysłania znaku końca linii (by urządzenie na COM przyjęło instrukcję. Ale nie wiem, jak sprawdzić jakiego typu znaku końca linii oczekuje urządzenie.

Wiem tylko, że gdy uruchamiam konsolowy terminal portu szeregowego (pakiet minicom dla środowiska tekstowego Linux) to urządzenie na COM bezproblemowo przyjmuje enter. Czyli wpisanie: "cd gp1[enter]" powoduje, że urządzenie na COM prawidłowo przyjmuje polecenie i wykonuje zadania sprzętowe.

Ale co wysłać php-em, żeby zadziałało, nie mam pojęcia.

Próbowałem:

Kod:
$str = "cd gp1\n\r";


oraz

Kod:
$str = "cd gp1\n";


ale bez rezultatu.


Na górę
Post: śr, 16 maja 2018 9:06:26 
Odpowiedz z cytatem
Offline
Leniwy eseista
Leniwy eseista

Rejestracja: pn, 24 sie 2015 23:36:46
Posty: 686
Ponadto, mimo, że minicom uruchamia się poprawnie na konfigu:

Kod:
  GNU nano 2.7.4           Plik: /etc/minicom/minirc.dfl

# Wygenerowano przez Minicoma - użyj "minicom -s" do zmiany ustawień.
pu port             /dev/ttyS0
pu baudrate         4800
pu bits             8
pu parity           N
pu stopbits         1
pu rtscts           No


Po wyjściu prędkość zostaje poprawna (zakładam, że format 8,n,1 również):

Kod:
root@LT310:~# stty -F /dev/ttyS0
speed 4800 baud; line = 0;
-brkint -imaxbel


O ile w minicomie polecenie:

Kod:
cd gp1[enter]


powoduje wykonanie akcji na urządzeniu, o tyle wydanie komend bezpośrednio spod konsoli Linuksa:

Kod:
root@LT310:~# echo "cd gp1" > /dev/ttyS0
root@LT310:~# echo "\n" > /dev/ttyS0
root@LT310:~# echo "\r" > /dev/ttyS0


nie powoduje oczekiwanej akcji urządzenia na porcie COM.

Coś musi być chyba nie tak ze znakiem końca linii...


Na górę
Post: śr, 16 maja 2018 22:48:15 
Odpowiedz z cytatem
Offline
Obsesyjny prozaik
Obsesyjny prozaik

Rejestracja: czw, 12 mar 2009 23:46:35
Posty: 1418
Kolego, masz drugi port szeregowy lub przejściówkę na USB?
To pozwoliłoby zdebugowac problem.
Z powodzeniem korzystałem z php serial class.


Na górę
Post: czw, 17 maja 2018 0:39:41 
Odpowiedz z cytatem
Offline
Leniwy eseista
Leniwy eseista

Rejestracja: pn, 24 sie 2015 23:36:46
Posty: 686
mxmxmxmxmx pisze:
Kolego, masz drugi port szeregowy lub przejściówkę na USB?
To pozwoliłoby zdebugowac problem.
Z powodzeniem korzystałem z php serial class.


Działa, Panowie :-D

Podłączyłem do terminala dwa konwertery:
1). COM<->RS485
2). USB<->RS485

Oba podłączyłem do magistrali RS485 wraz z urządzeniem na RS485.

Teraz pisząc w jednym terminalu widać, co dzieje się w drugim i na odwrót :-) Szybko ustaliłem, że urządzenie do zadziałania potrzebuje kodu klawisza Enter (czyli &h13)

Zacznijmy od tego, dlaczego nie działało konsolowe
echo "cd gp1\r" > /dev/ttyS0

Ano dlatego:

https://obrazki.elektroda.pl/4790371400_1526509668.png

Czyli znaki \r przekazane zostały kodem jawnym (zamiast kodu klawisza Enter).

I teraz uwaga...

https://obrazki.elektroda.pl/6021917600_1526509678.png

Przez Apache-a też działa :D Pełen sukces :-D

Dzięki Panowie!


Na górę
Post: czw, 17 maja 2018 8:26:53 
Odpowiedz z cytatem
Offline
Obsesyjny prozaik
Obsesyjny prozaik
Awatar użytkownika

Rejestracja: śr, 24 kwie 2013 18:07:46
Posty: 1207
Lokalizacja: Myszków
Z ciekawości po co Ci ta alamakota?

_________________
http://www.morawiec.info - taki tam sobie blog


Na górę
Post: czw, 17 maja 2018 10:12:43 
Odpowiedz z cytatem
Offline
Leniwy eseista
Leniwy eseista

Rejestracja: pn, 24 sie 2015 23:36:46
Posty: 686
Cramin pisze:
Z ciekawości po co Ci ta alamakota?


Sprawdzałem, czy wygeneruje komunikaty o błędach jak zrobię błąd ;-) Generuje :-)


Na górę
Post: ndz, 20 maja 2018 2:43:10 
Odpowiedz z cytatem
Offline
Młodociany subskrybent
Młodociany subskrybent

Rejestracja: śr, 10 wrz 2014 9:18:06
Posty: 211
Lokalizacja: /dev/null
Kolego... podstawy basha się kłaniają
z konsoli nie działało ci echo "dupa\r\n"
bo aby wysłać kody \r i \n to trzeba wpisać
echo -e "dupa\r\n"
;p

to tak na przyszłość ;d


Na górę
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat  Odpowiedz w temacie


Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
Dzisiaj jest pt, 17 sie 2018 9:00:11

Strefa czasowa UTC+02:00

Moderatorzy: Administratorzy, Moderatorzy

Nakarm glodne dziecko - wejdz na strone www.Pajacyk.pl


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
SubSilver2 modified for Trzepak.pl by Colir
Polski pakiet językowy dostarcza phpBB.pl