logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Modyfikacja danych sczytywanych przez skaner kodów 2D przy użyciu skryptu Python

roszej 17 Sty 2025 10:29 354 1
REKLAMA
  • #1 21396894
    roszej
    Poziom 12  
    Posty: 208
    Ocena: 20
    Witam.
    Chciałbym usprawnić trochę pracę w firmie, poprzez używanie skanera kodów 2D (data matrix lub qr). Branża spożywcza, firma niewielka, bez pełnej gospodarki magazynowej tzn nanoszenia stanów magazynowych do programu. Używamy Optimy z Comarchu.

    O ile nie ma problemu z wczytaniem kodu towaru oraz ilości to jest problem z dodaniem do danej pozycji na dokumencie numeru partii produkcyjnej. Standardowo w Optimie jest moduł, który umożliwia dodawanie cech (np numeru partii) towarom. Jednak aby taki towar z konkretną cechą zdjąć z magazynu musi się on na nim znajdować więc to rozwiązanie na chwilę obecną odpada.

    Jakie rozwiązanie jest w tej chwili?
    Obecnie towar jest wprowadzany ręcznie i wygląda to tak (pomijam kwestię utworzenia dokumentu chodzi o samo wprowadzanie pozycji na listę)
    1. wpisanie kodu literowego towaru
    2. zatwierdzenie klawiszem enter
    3. wpisanie ilośći towaru w postaci np 1,255
    4. kliknięcie myszką w pole "Opis"
    5. wpisanie numeru partii składającego się z trzech cyfr np 123
    6. zatwierdzenie pozycji klawiszami ctrl+enter
    7. naciśnięcie klawisza insert - i teraz można wrócić do pkt 1

    można też wprowadzać dane bez użycia myszki, ale wtedy należy używać tabulatora - będzie o tym dalej.

    Znalazłem firmę, która posiada dodatkowe moduły do Optimy do użycia z kolektorem danych, jednakże koszty tego rozwiązania są dość spore na tą chwilę. Koszt oprogramowania to 5000PLN i do tego kolektor danych minimum 3100PLN. Pojawiłyby się też dodatkowe problemy generujące dodatkowe koszty ponieważ w tym rozwiązaniu:
    kolektor danych łączy się przez zdalny pulpit z komputerem, na którym jest zainstalowany program i jest traktowany jako osobny użytkownik, a to z kolei uniemożliwia pracę na kolektorze i komputerze jednocześnie bo w standardowych edycjach windowsa może być zalogowany tylko jeden użytkownik.

    Trochę poczytałem i doszedłem do takiego wniosku, że skoro skaner kodów działa jak klawiatura to czy można by zmodyfikować te dane które są przez niego sczytywane. Poprosiłem więc o pomoc chat GPT a ten zaproponował mi użycie skryptu w Pythonie - skrypt wkleję na końcu.

    Finalnie na potrzeby testów, po kilku poprawkach chat gpt wygenerował mi kod, który działa tak jak powinien - przetestowałem i pozycje dokumentu są dodawane poprawnie.
    Działa to tak, że jak wcisnę "tyldę" to generowany jest ciąg znaków, tak jakbym używał tylko klawiatury do wprowadzania kolejnych pozycji.

    I teraz do sedna o problemach jakie chciałbym rozwiązać:

    1. Skrypt musi "czegoś" nasłuchiwać - w testach używałem tyldy, ale to eliminuje używanie tego znaku podczas działania skryptu. Rozwiązaniem tego byłoby dodanie do kodu 2D (a mam taką możliwość) dodania ciągu znaków np "##QR"
    2. Automatyczne uruchomienie skryptu po starcie komputera - to zdaje się można zrobić bez problemu
    3. Pomyślałem o ograniczeniu nasłuchiwania tylko gdy włączona jest Optima. Czy można takie coś zrobić?

    4. Jak takie rozwiązanie obciążałoby cały system ?

    Kod: Python
    Zaloguj się, aby zobaczyć kod


    Dzięki jeśli dobrnąłeś do końca :)
  • REKLAMA
  • #2 21457618
    mwilkowski1
    Poziom 10  
    Posty: 42
    Pomógł: 2
    Ocena: 9
    Cześć,
    Rozwiązanie Twojego problemu jest bardzo proste. Używany przez Ciebie pakiet keyboard pozwala na akceptację kombinacji klawiszy, nie tylko pojedynczego jak tylda. Ja regularnie stosuję takie rozwiązanie, że jakąś kombinację klawiszy stosuję do "przechwytywania" sygnału, np. ALT F3, albo CTRL SHIFT ~ itd., a nie sama tylda. Sprawdź sobie w dokumentacji, jak to zrobić (poproś chata :))).

    Po drugie - pytałeś, czy można zrobić tak, aby ta kombinacja działała tylko wtedy, gdy działa optima. To też się da bardzo łatwo zrobić, np. za pomocą pakietu psutil, który pozwala wylistowane aplikacje i wtedy jak znasz nazwę aplikacji optima (np. optima.exe) to po prostu dodajesz warunek, że musi być uruchomiona (chatgpt Ci wygeneruje kod, jeśli masz wątpliwość).

    Trzecia kwestia - pytałeś, czy można to uruchamiać ze startem komputera. Można, ale to trochę upierdliwe skonfigurować (jeśli jesteś programistą lub informatykiem to poradzisz sobie bez problemu): https://nssm.cc/

    Kodu szczegółowo nie analizowałem, ale kilka rzeczy rzuciło mi się w oczy:
    - blokujesz przycisk funkcją block_key(), ale nie widzę, abyś gdziekolwiek go odblokowywał (poproś chatgpt o poprawkę)
    - pętla "napier...a" w twój procesor, bo nigdzie w pętli nie masz krótkiego sleep (np. sleep 0.1, które zasypia na 100 ms), dlatego ten skrypt może wbrew pozorom dość mocno obciążać komputer. Podobnie ta pętla zagnieżdżona, która czeka na puszczenie klawisza (chociaż tutaj to akurat ona działa pewnie dość krótko)

    Powodzenia.
REKLAMA