Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]Obsługa drukarki fiskalnej

Napisany przez: adi456 12.01.2019, 11:30:26

Witam

Próbuje odpalić drukarkę fiskalną
port COM przekierowałem na TCP poprzez com2tcp-rfc2217

teraz jestem na początku instrukcji programisty w której pisze

2 Jednobajtowe instrukcje sterujące
2.1 ENQ - Żądanie odesłania statusu drukarki (5h)

no więc próbuje wysłać "\x05" przez socket ale skrypt nie pokazuje żadnej odpowiedzi, proszę o sugestie co robię źle

  1. $ENQ = "\x05";
  2. $STX = "\x02";
  3. $TAB = "\x09";
  4. $ETX = "\x03";
  5. $HASH = "\x23";
  6. $AT = "\x40";
  7.  
  8. function fiscalprint($ip, $port, $postString, $writeOnly)
  9. {
  10. //create
  11. if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
  12. {
  13. $errorcode = socket_last_error();
  14. $errormsg = socket_strerror($errorcode);
  15.  
  16. http://www.php.net/die("Error Code: [$errorcode] $errormsg \n");
  17. }
  18. //connect
  19. if(!socket_connect($sock , $ip , $port))
  20. {
  21. $errorcode = socket_last_error();
  22. $errormsg = socket_strerror($errorcode);
  23.  
  24. http://www.php.net/die("Error Code: [$errorcode] $errormsg \n");
  25. }
  26. //write
  27. $length = http://www.php.net/strlen($postString);
  28. while (true) {
  29. $sent = socket_write($sock, $postString, $length);
  30. if ($sent === false) {
  31. break;
  32. }
  33. if ($sent < $length) {
  34. $st = http://www.php.net/substr($st, $sent);
  35. $length -= $sent;
  36. } else {
  37. break;
  38. }
  39. }
  40. //read
  41. if($writeOnly != 1){
  42. if(!socket_last_error($sock)){
  43. if($buffer=socket_read($sock,512,PHP_NORMAL_READ)){
  44.  
  45. return $buffer;
  46. }}}
  47.  
  48. socket_close($sock);
  49.  
  50. }
  51. $post_string = $ENQ;
  52. $ip = '127.0.0.1';
  53. $port = 5333;
  54.  
  55. $hdResponse = fiscalprint($ip, $port, $post_string,0);
  56. http://www.php.net/echo( http://www.php.net/htmlentities($hdResponse));
  57.  


chyba jeszcze tego bajta trzeba wysłać w takiej postaci?

3 Ogólny format rozkazów
Wszystkie rozkazy przesyłane do drukarki mają jednolity format w postaci ciągu kodów
ASCII, rozpoczynających się znakami <ESC>P (identyfikującymi początek rozkazu) i
kończących się z znakami <ESC>\ (identyfikującymi koniec rozkazu). ( Kod <ESC> odpowiada
1Bh w formacie ASCII ).
Wszystkiego rodzaju liczby i kwoty takie jak np. BRUTTO lub NETTO towarów są również
przesyłane w formacje ASCII. Tak więc gdy istnieje potrzeba wysłania liczby np. 10000.00 to
należy wysłać łącznie 8 znaków w formacie ASCII (7 cyfr i kropkę).
Poniżej przedstawiono typowy format rozkazów sterujących drukarką:
<ESC>P P1;P2;P3;...;Pn $X <text 1> CR <text 2> CR ... <text n> CR [liczba1] / [liczba2] / ... /
[liczba n] / <check> <ESP> \

tego trochę bardzo nie kumam tzn w przykładach widzę że zaczyna \x02 i kończy \x03 czyli mój request powinien wyglądać \x02\x05\x03 ? jednak zaprzecza to trochę powyżej instrukcji które kazuję wysyłać <ESC> i <ESP> \

znalazłem że <ESC> to \x1Bh
użyje sygnału dźwiękowego żeby sprawdzić czy jest jakaś reakcja \x07
i na koniec <ESP> \ wie ktoś jaki to kod w ASCII ?

Napisany przez: Pyton_000 12.01.2019, 12:10:55

Powiedz jaka to drukarka to będzie łatwiej to ogarnąć.

Napisany przez: adi456 12.01.2019, 12:13:59

drukarka EMAR Printo line
http://atelkom.pl/InstrProgEmarTempo3.pdf

a jeszcze tak się zastanawiam jeśli nawet źle wysyłam komendę sterującą to czy nie powinienem dostać w odpowiedzi kod błędu?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)