Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Odczyt inputu z klawiatury w czasie rzeczywistym, Klawiatura / czytnik kodów kreskowych
scanner
post
Post #1





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Mam do rozwiązania pewien problem:

Dysponując czytnikiem kodów kreskowych napisać aplikację reagującą na aktywność czytnika i zapisującą kod i inne dane w bazie.

Oczywiście jedynym zmartwieniem dla mnie jest przechwycenie z poziomu php (najlepiej w przeglądarce) sekwencjio znaków wypisanych z klawiatury (czytnik kresek jest wpięty równolegle z klawiaturą i generuje cyfry na stdin - tyle informacji a razie mam).
Odczyt powinien się odbywac oczywiście bez ingerencji uzytkownika.

Pytanie:
Gdzie i co poczytać o tym?
Dajcie mi lekturkę do obiadu, jeśli macie coś pod ręką.
Go to the top of the page
+Quote Post
misterLu
post
Post #2





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 27.08.2004

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


Cytat
przechwycenie z poziomu php (najlepiej w przeglądarce)

Możesz coś przechwycic albo z poziomu php (po stronie serwera), alebo w przeglądarce (po stronie klienta).
Poczytać musisz o JavaScripcie, bo to jest narzędzie do działania po stronie przeglądarki, a co za tym idzie klawiatury, itp.
Polecam coś o 'dynamic forms'.

Przykładowe działanie skryptu:

na wejsciu ustaw focus (kursor) w polu w którym ma byc wczytana wartosc z czytnika.
Za kazdą zmiana zawartości 'tego' pola formularza (onChange()) zliczaj ilosc zankow w tym polu. Jezeli bedziesz mial ilosc znakow rowną ilosci znaków zczytanych z czytnika (czyli tyle, ile przewidujesz na kod kreskowy), to wyslij formularz (submit).

Ten post edytował misterLu 5.10.2004, 17:17:59
Go to the top of the page
+Quote Post
NuLL
post
Post #3





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Moge napomkan ze w php sa dostepne strumienie(o ktorych rzadko kto pamieta) takie jak w C - to chyba rozwiazuje problem - moge jutro cos podrzucic nt. - tzn. jakis przykladzik wkleje a manual reszte powie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował null 5.10.2004, 21:54:48
Go to the top of the page
+Quote Post
scanner
post
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Obu dzieki za naprowadzenie.. a co do strumieni.. zawsze sie ich obawiałem, ale chyba tak jak mówi null - przyszła pora na nie...
Będę wdzięczny za te przykłady.
Go to the top of the page
+Quote Post
NuLL
post
Post #5





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Scanner wybacz za brak przykladu - sprobuje wytlumaczyc bo nie moge znalesc skryptu(napisze cos jutro i wkleje jak trzeba). Strumen otwieramy fopenem i korzystamy z standardowych funkcji systemu plikow- jak przeczytac pasek kreskopwy nie wiem za cholere - nie wiem jak jest zoorganizowany strumien(napisz cos (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) jakbys cos napisal to moze napisze cos bardziej konkretnego

Pozdro
Go to the top of the page
+Quote Post
scanner
post
Post #6





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Więc tak.
Póki nie otrzymam czytnika do ręki, cięzko mi powiedzieć coś konkretnego, moge się tylko opierać na informacjach, jakie zleceniodawca mi przedstawił.

- Czytnik jest wpięty poprzez rozgałęziacz z portem klawiatury.
- Symuluje działanie klawiszy numerycznych
- Można mu ustawić poprzedzenie każdej odczytanej sekwencji dowolnym znakiem ASCII

Co do aplikacji:
Na razie przewiduję dwa moduły:
- Jeden pracujący w tle i obsługujący: odczytywanie sekwencji, zapis zdarzenia do bazy.
- Drugi pracujący w przeglądarce i obsługujący: drukowanie etykiet "Gość", zapis logu odwiedzin gościa (kto, do kogo, kiedy)

Całość ma pracować na zasadzie identyfikacji pracowników na portierniach.
Myślałem nad napisaniem tego w JAVie, ale tej dopiero zaczyna się uczyć i za długo by potrwało - php powinno sobie z tym poradzić.
Go to the top of the page
+Quote Post
kszychu
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Scanner: a nie lepiej napisać coś powiedzmy w c siedzącego u klienta, odczytującego te dane i przesylajacego je do php? Albo zaprządz gtk do uaktywnienia php po stronie klienta? No chyba, że jakoś (javascript?) oprogramować przeglądarkę, która po odebraniu określonej liczby cyfr wyśle je do serwera.
Go to the top of the page
+Quote Post
scanner
post
Post #8





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Ostatni raz pisałem cos w C 7 lat temu niestety.

Przy okazji już wykształcił mi się teoretyczny problem:
Co w sytuacji gdy portier generuje etykietke dla gościa a w tym momencie przechodzi przez bramke uprawniona osoba?

teoretycznie zadziałają dwie kalwiatury i portier w formularzu zobaczy wpisywane dane czytnika

Więc moduł czytnika musiałby pobrać dane z stdin() i od razu je usunąć z bufora - taka operacja powinna IMHO zając nie wiecej niż ułamek sekundy, więc zmieści się pomiędzy dwoma naciśnięciami klawiszy na klawiaturze przez portiera - ale musże miec to na uwadze.
Go to the top of the page
+Quote Post
nocnyMark()
post
Post #9





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 26.04.2004

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


Scanner, mam prosbe

jak juz bedziesz mial cos konkretnego,
w sensie "jak pogryzles temat i co z tego wyszlo"
to wrzuc to na forum tutaj

osobiscie do tej pory stojac w supermarkecie w kasie obmyslalem sobie na ile sposobow mozna by wykorzystac taki czytnik

tylko problem byl zawsze jak zaczac od strony technicznej

czekam z niecierpliwoscia na twoje powodzenie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdr.
K.

Ten post edytował nocnyMark() 6.10.2004, 23:47:47
Go to the top of the page
+Quote Post
yeti
post
Post #10





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 12.09.2003

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


Nie wiem, dlaczego nie chcesz spróbować z JavaScriptem (jak radził misterLu). IMHO jest to najłatwiejszy sposób. W taki sposób oprogramowywałem system do obsługi biblioteki i działał jak marzenie.
Go to the top of the page
+Quote Post
patrycjusz
post
Post #11





Grupa: Zarejestrowani
Postów: 263
Pomógł: 0
Dołączył: 13.07.2003
Skąd: wawa

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


Cytat(scanner @ 2004-10-06 10:01:42)
Co w sytuacji gdy portier generuje etykietke dla gościa a w tym momencie przechodzi przez bramke uprawniona osoba?

teoretycznie zadziałają dwie kalwiatury i portier w formularzu zobaczy wpisywane dane czytnika

Więc moduł czytnika musiałby pobrać dane z stdin() i od razu je usunąć z bufora - taka operacja powinna IMHO zając nie wiecej niż ułamek sekundy, więc zmieści się pomiędzy dwoma naciśnięciami klawiszy na klawiaturze przez portiera - ale musże miec to na uwadze.

@scanner: w javie nie bedzie to trudne, poczytaj o standardowym wczytywaniu informacji z inputu, a co do tego zacytowanego problemu, wielowątkowość (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
a to juz troche wyższa szkoła jazdy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
zoba, masz jeden wątek który nie przerwanie nasłuchuje z czytnika, i jeżeli czytnik się "odezwie" to go obsługuje, dodatkowo wątki które nasłuchują z innych urządzeń dostępowych, czy to czytnik czy cokolwiek innego (koleś za biurkiem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
i wsio (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
pzdr
Go to the top of the page
+Quote Post
scanner
post
Post #12





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




No i zdobyłem już czytnik.
Pierwsze eksperymenty wykazują, ze przesyła on do komputera 13 cyfr i znak końca linii.
Próby robiłem w notepad.exe - linijka po linijce pokazywał kody wszystkiego co skanowałem.

mając jeszcze chwile wolnego czasu, próbowałem coś sklecić:
  1. <?php
  2.  
  3. $File = fopen( 'php://stdin', 'r');
  4. if ( !$File )
  5. {
  6. echo &#092;"'Błąd...n\";
  7. }
  8. while( true )
  9. {
  10. $sChar = fgetc( $File );
  11. echo $sChar.&#092;"n\";
  12. } 
  13. ?>
Ale nie wyszło... Chyba nie mam natchnienia dzisiaj...
Załozęnie jest takie, że czytnik jest podpięty bezpośrednio do komputera, na którym działa oskryptowanie. PHP5 jako moduł.

Mógłby mnie ktoś nakierować w dobrą stronę?
Prirytetem na chwile obecną jest odczyt wspomnianej sekwencji znaków. Jak to zrobię, to jestem w domu - reszta aplikacji to już betka.
Go to the top of the page
+Quote Post
Vengeance
post
Post #13





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


@scanner

zamiast fgetc() ktore pobiera jeden znak daj
fgets() dodajac moze drugi parametr czyli dlugosc lini do pobrania (z tego co mowiles to 13+1 > 13 znakow i znak nowej lini)

Powinno śmigać.

Pozatym kiedyś coś takiego robiłem w Delphi i działało na zasadzie, że gdy TEdit zmieniał swoją wartość i osiągał te np. 13 znaków to zaczynało się wyszukiwanie. To samo (co już ktoś zaproponował) mógłbyś i ty zastosować. W javascript sprawdzać te znaki i wysyłać formularz gdy będzie ich 13. przecież czytnik wstawia txt "na raz". a jakby ktoś chciałby wprowadzać kod ręcznie to też zadziała. to chyba nawet bardziej miłe dla użytkownika wyjście niż STDIN
Go to the top of the page
+Quote Post
matid
post
Post #14





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

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


Skrypt poprawnie czyta /dev/stdin, tylko nic nie jest przekazywane przez wejście tego procesu.
Spróbuj odpalić ten skrypt z lini poleceń:
php skrypt.php
Wtedy po naciskaniu przycisków na klawiaturze itp. wszystko działa. Trzeba znaleść jak sprawdzać dane wchodzące na wszystkie wejścia a nie tylko na jedno.
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


a te kody wczytywane z czytnika mają jakąs sumę kontrolną ?
Go to the top of the page
+Quote Post
scanner
post
Post #16





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Nie zagłębiałem się jeszcze w sposoby generowania kodów - ale chyba widziałeś cyferki pod kreskami - jakis algorytm na to jest.
Go to the top of the page
+Quote Post
Vengeance
post
Post #17





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


co do kodow jeszcze u mnie na forum bylo podobne pytanie:
http://strefaphp.net/index.php?page=forum&...iew_topic&t=114
Go to the top of the page
+Quote Post
scanner
post
Post #18





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Dzięki za link.

Co do generowania kodu - informatyk firmy ma już w głownej aplikacji odpowiednie implementacje i wybrany sposób kodowania.

Co do problemu. Wymysliłem na razie (teoretycznie) coś takiego:
  • Pakiet musi działać zarówno pod Win jak i Linuxem. (odpada zastosowanie JS?)
  • Jest proces działający w tle - strażnik (Sentinel.php) który nasłuchuje wejścia klawiatury. Dodaje znaki do wewnętrznego bufora i w momencie, gdy sekwencja ma określoną długość i pasuje do wzorca (RegExp) wysyła impuls do bazy danych zapisując zdarzenie.
    Detekcja zdażeń może być nieco utrudniona, ale wystarczy zrobić X znakowy bufor, z którego spada najstarszy element:
    Out <------ [buffer] <------ In
    (robiłem to już w Basic'u na Meritum) i patrzeć czy ToString() bufora pasuje do wzorca i teoretycznie mamy po sprawie.
  • Jest proces aktywny (Doorman.php), który działając w przeglądarce (może GTK? Jeszcze się tym nie zajmowałem, może pora) umożliwia:
    • Podgląd zapisanych zdażeń,
    • Generowanie i wydruk kodów tymczasowych (pdf),
    • Export i import określonych danych,
    • ... innych zadań wykonywanych jawnie przez obsługującego
Podstawowy problem jest w tym, jak odczytać (wiadomo, jesli będzie potrzebne, Sentinel rozpozna system na którym jest zainstalowany) to co przychodzi z portu klawiatury.

Na razie czytam o wielowątkowości w Javie, ale chyba jestem lekko za słaby jeszcze na ten język, poza tym ambicjonalnie chciałbym udowodnić zleceniodawcy, że to jest możliwe do wykonania w php/MySQL.
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #19





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


Nie jestem pewien ale chyba musisz tez wziasc pod uwage ze user w czasie kozystania ze skryptu moze robic cos innego i musialbys jakos sprawdzac czy te dane które "strażnik (Sentinel.php)" bedzie wczytywał w tle, będą tymi które chcesz nasłuchiwać...
Go to the top of the page
+Quote Post
matid
post
Post #20





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

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


No przecież napisał że skrypt będzie sprawdzał czy sekwencja ma odpowiednią długość i czy pasuje do wzorca. Wystarczy dobrze czytać :]
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 8.10.2025 - 11:56