Biblioteka interfejsu kasy POSNET COMBO oraz POSNET NEO

1.0.1

Spis Treœci

Zgodnie z INSTRUKCJ¥ PROGRAMISTY COMBO 1.01, v. 1.6.61.1 oraz SPECYFIKACJ¥ PROTOKO£U KASY POSNET NEO 1.01 v. 006 oraz SPECYFIKACJ¥ PROTOKO£U KAS POSNET NEO 1.02 ORAZ POSNET COMBO 1.02 v.004


Wprowadzenie

Podstawowe za³o¿enia, które zosta³y przyjête przy projektowaniu biblioteki dla kasy POSNET COMBO s¹ nastêpuj¹ce: Ze wzglêdu na to, ¿e iloœæ rozkazów wykorzystywanych w komunikacji z kas¹ jest ogromna przy projektowaniu biblioteki zrezygnowano z literalnej realizacji ka¿dego rozkazu jako osobnej funkcji. Grupowanie rozkazów w/g rodzaju parametrów tak¿e nie jest dobrym rozwi¹zaniem. W tej sytuacji zosta³ zastosowany model "obiektu rozkazowego (Request)", wraz z zestawem funkcji umo¿liwiaj¹cych ustawianie parametrów (Obs³uga parametrów rozkazu).

Zastosowanie takiego rozwi¹zania ma dodatkow¹ zaletê. Drobne korekty w rozkazach obs³ugi kasy w tym dodanie nowych czy zmiana iloœci i rodzaju parametrów nie wymagaj¹ wtedy zmian w bibliotece komunikacyjnej, a jedynie dostosowania aplikacji do tych zmian.

Po wykonaniu takiego obiektu rozkazowego przez kasê (por. Przep³yw informacji) wyniki dostêpne s¹ w analogiczny sposób - przez zestaw funkcji pobieraj¹cych je kolejno z obiektu rozkazowego.

Cztery niezale¿ne kolejki rozkazowe (rozkazy oczekuj¹ce, rozkazy wykonane, zdarzenia asynchroniczne i pozycje paragonowe) umo¿liwiaj¹ jednoczeœnie du¿¹ swobodê przy tworzeniu aplikacji klienckiej zostawiaj¹c znaczn¹ swobodê wybory sposobu obs³ugi kasy jej twórcy.

Przep³yw informacji

W aplikacji istniej¹ 4 kolejki rozkazowe, pomiêdzy którymi nastêpuje przep³yw danych jak w grafie poni¿ej.
inline_dotgraph_1.dot

Ca³oœæ transmisji obs³ugiwana jest przez dwa niezale¿ne w¹tki, jeden transmisyjny, drugi odbiorczy operuj¹ce na odpowiednich kolejkach rozkazów.

Zdarzenia asynchroniczne i bufor paragonowy

Zdarzenia asynchroniczne

Kasa POSNET COMBO posiada mo¿liwoœæ generacji pewnych zdarzeñ w sposób asynchroniczny w stosunku do wykonywanych poleceñ wydawanych przez nadzoruj¹c¹ j¹ aplikacjê steruj¹co-magazynow¹.

Do obs³ugi zdarzeñ w tym trybie zosta³ przygotowany zestaw funkcji opisany w module Obs³uga zdarzeñ asynchronicznych. Przychodz¹ce zdarzenia asynchroniczne gromadzone s¹ w osobnej kolejce zdarzeñ, w której oczekuj¹ na obs³ugê. Aplikacja g³ówna mo¿e zostac powiadomiona o przyjœciu nowego zdarzenia za pomoc¹:

Aplikacja mo¿e te¿ cyklicznie sprawdzaæ, czy w kolejce znajduj¹ siê nowe zdarzenia asynchroniczne (polling).

Bufor pozycji paragonowych

Aby uproœciæ obs³ugê pozycji paragonowych tak, aby nie kolidowa³a z g³ówn¹ kolejk¹ zdarzeñ i w efekcie mog³a byæ obs³ugiwana za poœrednictwem osobnego watku aplikacji zosta³a stworzona osobna kolejka zdarzeñ zbieraj¹ca wyniki poleceñ czytaj¹cych pozycje paragonowe patrz Obs³uga bufora pozycji paragonowych.

W ten sposób w¹tek odbioru danych paragonowych mo¿e wysy³aæ zapytania o pozycje paragonowe w standadowy sposób (do g³ównej kolejki rozkazów). G³ówna kolejka rozkazów do wys³ania mo¿e równolegle otrzymywaæ rozkazy przygotowywane przez ró¿ne w¹tki (jest w pe³ni wielow¹tkowa), serializowaæ je i wysy³ac w kolejnoœci otrzymania do kasy.

Odpowiedzi s¹ natomiast rozdzielane od siebie i trafiaj¹ do dwóch osobnych kolejek odbiorczych. W kolejce pozycji paragonowych umieszczane s¹ wy³¹cznie wyniki wysy³anych rozkazów dotycz¹cych pozycji paragonowych.

Mog¹ to byæ w³asciwe pozycje paragonowe lub informacje o b³êdach wykonania tych rozkazów.

Obs³uga modemu

Obs³uga modemu w bibliotece COMBO/NEO jest realizowana poprzez trzy dodatkowe funkcje biblioteczne oraz trzy dodatkowe parametry dla urz¹dzenia typu RS232. Umo¿liwia realizacjê zarówno po³¹czeñ wychodz¹cych (wybieranie numeru telefonu) jak i przyjmowanie po³¹czeñ przychodz¹cych (odbieranie telefonu). Stanowi ona integraln¹ czêœæ urz¹dzenia typu RS232.

Aby w³¹czyæ tryb modemowy nale¿y ustawiæ parametr urz¹dzenia RS232 POSNET_DEV_PARAM_MODEMMODE na wartoœæ 1. Po wykonaniu tej czynnoœci urz¹dzenie nie bêdzie wykonywa³o zleconych poleceñ do momentu nawi¹zania po³¹czenia modemowego. Urz¹dzenie jest tak¿e gotowe do przyjmowania po³¹czeñ przychodz¹cych. W przypadku pojawienia siê sygna³u RING na modemie zostanie automatycznie odebrana rozmowa.

UWAGA: W trybie odbioru rozmowy nie ma mo¿liwoœci ustawienia modemu ci¹giem inicjuj¹cym bezpoœrednio (tryb zaczyna siê pasywnie) – mo¿na to jednak zrobiæ za poœrednictwem polecenia dzwonienia bez ustawiania numeru telefonu (polecenie to zakoñczy siê b³êdem POSNET_STATUS_MODEM_BADDIAL) ale wyœle do modemu ci¹g inicjuj¹cy.

Dla urz¹dzenia modemowego mo¿na ustawiæ dwa ci¹gi:

Urz¹dzenie modemowe NIGDY samo nie wybiera numeru i nie ponawia przerwanych po³¹czeñ – ta operacja pozostawiona jest w gestii aplikacji zarz¹dzaj¹cej kasami.

Do obs³ugi trybu modemowego s³u¿¹ nastêpuj¹ce funkcje

Przyk³ad u¿ycia – patrz demo demo_modem.exe.

Przyk³adowa sekwencja poleceñ

Obs³uga kasy wymaga wykonania pewnego zestawu standardowych operacji. Poni¿szy opis przedstawia jedn¹ z mo¿liwoœci na przyk³adzie polecenia DSPPARAMGET. Przyk³ad jest w jêzyku C++, pominiêto obs³ugê sytuacji wyj¹tkowych.

        // Deklaracje zmiennych
        POSNET_HANDLE hDevice;
        POSNET_HANDLE hGlobalDevice;
        POSNET_HANDLE hRequest;

        // Wyniki
        unsigned char kontrast;
        unsigned char podswietlenie;
        unsigned char tryb;

        // Utworzenie obiektu urz¹dzenia
        hGlobalDevice = POS_CreateDeviceHandle(POSNET_INTERFACE_RS232);

        // Ustawienie parametrów urz¹dzenia
        POS_SetDeviceParam(hGlobalDevice, POSNET_DEV_PARAM_COMSETTINGS,"COM1,19200,8,N,1,H");

        // Otwarcie urz¹dzenia
        hDevice = POS_OpenDevice(hGlobalDevice);

        // Przygotowanie polecenia
        // Numer polecenia DSPPARAMGET = 101
        hRequest = POS_CreateRequest(hDevice,POSNET_CMDID_DSPPARAMGET);

        // Przygotowanie parametrów polecenia
        // Pobierz dane dla wyœwietlacza operatora
        // Wymagany 1 paramter typu 'B' o wartoœci 0
        POS_PushRequestParamByte(hRequest,0);

        // Wyœlij rozkaz do kasy w trybie interaktywnym
        POS_PostRequest(hRequest,POSNET_REQMODE_IMMEDIATE);

        // Oczekuj na wykonanie
        POS_WaitForRequestCompleted(hRequest,INFINITE);

        // SprawdŸ czy zakoñczy³o siê sukcesem
        if (POS_GetRequestStatus(hRequest) == POSNET_STATUS_OK)
        {
                // Pobranie wyników, polecenie zwraca 3 wartoœci typu byte
                unsigned char kontrast,podswietlenie,tryb;
                POS_PopResponseValueByte(hRequest,&kontrast);
                POS_PopResponseValueByte(hRequest,&podswietlenie);
                POS_PopResponseValueByte(hRequest,&tryb);
        }

        // Usuñ stworzone zapytanie
        POS_DestroyRequest(hRequest);

        // Zamknij urz¹dzenie
        POS_CloseDevice(hDevice);

Wykorzystanie w jêzykach programowania

W wersji prototypowej biblioteka zosta³a przetestowana w:

Poni¿ej przedstawiono przyk³adowy kod dla VBA.

	Private Declare Function POS_PopSalesQueue Lib "posnet.dll" (ByVal H As Long, ByVal P As Long) As Long
	

Podobny kod dla Delphi 7

	function POS_PopSalesQueue (hDevice : THandle; k: longint) : THandle; stdcall; external 'posnet.dll'
	

Wersja dla systemu Linux

Natywny port dla systemu Linux sk³ada siê z bibliotek:

libposnet.so.1.0

libhlapi.so.1.0

oraz

libptypes.so.2.0.2 (http://www.melikyan.com/ptypes/)

Biblioteki te s¹ zale¿ne tak¿e od dostêpnych na licencji LGPL bibliotek obs³uguj¹cych podsystem USB:

libusb - w wersji 0.1.11+ dostêpnej standardowo w wiêkszoœci dystrybucji (http://libusb.sourceforge.net/)

oraz

libftdi w wersji 0.7+ (http://www.intra2net.com/de/produkte/opensource/ftdi/index.php) do obs³ugi konwertera FTDI zastosowanego w urz¹dzeniu.

UWAGA!!! W przypadku korzystania z trybu natywnego USB (POSNET_INTERFACE_USB) do poprawnego dzia³ania kasy niezbêdne jest zablokowanie automatycznego ³adowania i usuniêcie jesli jest za³adowany modu³u j¹dra ftdi_sio. W przeciwnym razie po³¹czenie z kas¹ nie bêdzie mo¿liwe (w pliku logu zg³aszany bêdzie b³¹d o kodzie -5), gdy¿ modu³ ten przejmuje kontrolê nad konwerterem FTDI tworz¹c wirtualny port szeregowy (/dev/ttyUSBx).

W przypadku korzystania w trybie wirtualnego portu szeregowego, sterownik ftdi_sio jest potrzebny.


Wygenerowano Wed Apr 15 20:03:06 2009 dla POSNET COMBO LIBRARY programem  doxygen 1.5.8