Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.09.16;
Скачать: CL | DM;

Вниз

POS Принтер   Найти похожие ветки 

 
Raisa   (2016-07-25 16:26) [0]

var prn : System.Text;
begin
//ASCII   GS V  m
//Hex     1D 42 m
//Decimal 29 66 m
//Edit1.Text:="COM1";
try
  AssignFile(prn,trim(Edit1.Text));
  Rewrite(prn);
  Write(prn,#29#86#0#5);//
except
  ShowMessage("Ошибка!");
end;

CloseFile(prn);


 
Raisa   (2016-07-25 16:30) [1]

Принтер CITIZEN. MODEL PPU-700
После вышеприведенного кода никакой реакции принтера нет.
Помогите, пожалуйста, послать команду на принтер. Напечатать, например, цифру "1", обрезать бумагу и выдать чек.


 
DayGaykin ©   (2016-07-25 18:13) [2]

Отправь "1"#10#13#29"V0" .

И используй TFileStream.
AssignFile - морально устаревшая функция.


 
Игорь Шевченко ©   (2016-07-25 18:15) [3]


> AssignFile - морально устаревшая функция.


Я-то, дурак, использую. Не знал.


 
Kilkennycat ©   (2016-07-25 20:18) [4]

А он точно к параллельному подключен? они и ком и усб варианты имеют.


 
Kilkennycat ©   (2016-07-25 20:20) [5]

а, увидел, ком1... ну, я б еще проверил настройки ком на принтере, дип-переключатели.
А то слать-то, может и шлет, но принтеру пофиг.


 
DayGaykin ©   (2016-07-25 23:57) [6]


> Kilkennycat ©   (25.07.16 20:20) [5]

Да.
Для настройки https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa363194(v=vs.85).aspx пригодится.


 
Raisa   (2016-07-26 00:20) [7]

Оправила "1"#10#13#29"V0"
На следующую строку программа не переходит. Висит.
Такое у меня уже было, когда я пробовала другие команды отправлять.

> Kilkennycat ©   (25.07.16 20:20) [5]
настройки ком на принтере, дип-переключатели

Не поняла, как проверить. Можно поподробнее?


 
Германн ©   (2016-07-26 01:01) [8]


> настройки ком на принтере, дип-переключатели
>
> Не поняла, как проверить. Можно поподробнее?
>  

Подробнее в данном случае написано в документации к принтеру.


 
Raisa   (2016-07-26 01:50) [9]

Принтер старый, раньше работал в платежном терминале. При нажатии на кнопочку Feed вылезает кусочек бумаги.

http://kiosksoft.ru/devices/citizen-ppu-700ii

Информация по принтеру имеется по ссылке выше. Мне непонятно, что и как проверить.


 
Raisa   (2016-07-26 02:14) [10]

Надо или нет устанавливать драйвер?
У меня Windos 10 64-bit. Скачала драйвер, в списке принтеров ничего не появляется и не находится.


 
Kilkennycat ©   (2016-07-26 09:42) [11]


> Мне непонятно, что и как проверить.

в инструкции есть описание малюсеньких переключателей, которые устанавливают параметры ком-порта: четность, битность, скорость (и мож че еще), которые должны быть идентичными при использованию в программе.


> Скачала драйвер, в списке принтеров ничего не появляется
> и не находится.


в случае ком-порта принтер вряд ли появится.


 
Kilkennycat ©   (2016-07-26 09:44) [12]

так а принтер-то citizen-ppu-700ii или просто 700? просто 700, как я понял, драйвера не нужны, у него только ком-порт.


 
Kilkennycat ©   (2016-07-26 09:47) [13]


> 700, как я понял, драйвера не нужны, у него только ком-порт.

ошибся, могут быть и дргие интерфейсы...

http://kiosksoft.ru/ в Инструкция принтера Citizen PPU 700 на 33 странице указано положение дипсвичей


 
DayGaykin ©   (2016-07-26 20:16) [14]


> Игорь Шевченко ©   (25.07.16 18:15) [3]
>
> > AssignFile - морально устаревшая функция.
>
>
> Я-то, дурак, использую. Не знал.

Не буду спорить.


 
Raisa   (2016-07-27 00:11) [15]

Не понимаю, зачем нужно проверять положение dip switch. Принтер же работал раньше.

Уже второй месяц я мучаюсь со стоящим на моем столе POS принтером.

Сегодня соединила принтер с компьютером еще одним кабелем,  к компьютеру USB-порт.

Результата нет....  Помогите, пожалуйста.


 
Raisa   (2016-07-27 00:27) [16]

В списке принтеров появился. Попробовала печать из блокнота. Напечатал текст из блокнота на двух метрах бумаги.


 
Kilkennycat ©   (2016-07-27 08:46) [17]


> Raisa   (27.07.16 00:11) [15]
> Не понимаю, зачем нужно проверять положение dip switch.

На принтере, например, кто-то установил скорость передачи 9600 и проверку
четности. Вы уверены, что работаете с ком-портом именно с такими параметрами?
http://www.microridge.com/comtestserial.htm - поможет.


> Принтер же работал раньше.

В Вашей программе?


> В списке принтеров появился

ну и обращайтесь тогда к принтеру из списка, как блокнот.


 
DayGaykin ©   (2016-07-27 13:46) [18]

Могу подключиться по тимвьюверу и при вас написать программу-пример на делфи, которая будет печатать на этом принтере. Не более чем за час.

Не бесплатно. Если интересно пишите на почту. 77@vilker.ru


 
iop ©   (2016-07-27 15:00) [19]

Принтер же работал раньше.

следовательно он обязан работать сегодня.
завтра он обязан работать потому что обязан работать сегодня (потому что работал вчера).
послезавтра...... ну вы понели.

единожны что-то напечатавший принтер бессмертен.


 
KSergey ©   (2016-07-29 14:32) [20]

> Kilkennycat ©   (27.07.16 08:46) [17]
> > Принтер же работал раньше.
> В Вашей программе?

А СОМ-порт непременно под каждую программу следует настраивать?
Я просто уточняю, сам не работал ни разу.


 
sniknik ©   (2016-07-29 16:05) [21]

> А СОМ-порт непременно под каждую программу следует настраивать?
параметры с которыми обращаешься с ним из программы должны совпадать с настройками в винде и устройстве. т.е. если в принтере стоит скорость 9600 бод, а пытаешься работать на 115200 то ничего не выйдет.
+ если порт занят, например тем же драйвером печати которым печатали из блокнота, то тоже ничего не выйдет.


 
Германн ©   (2016-07-31 01:27) [22]


> sniknik ©   (29.07.16 16:05) [21]
>
> > А СОМ-порт непременно под каждую программу следует настраивать?
>
> параметры с которыми обращаешься с ним из программы должны
> совпадать с настройками в винде

Ну на всякий случай. Настроек СОМ-порта в винде не существует.


 
Kilkennycat ©   (2016-07-31 02:46) [23]


> Германн ©   (31.07.16 01:27) [22]

Разве? А почему ж мне приходилось их менять в диспетчере устройств, дабы работала кучка девайсов, софт к которым был написан с расчетом (а проще говоря - криво) на изменение именно таким способом?


 
DayGaykin ©   (2016-07-31 11:51) [24]

Да и команду mode никто не отменял.


 
Raisa   (2016-08-01 00:39) [25]

У меня по-прежнему ничего не получается.
Ни один из примеров, найденных в Интернете, не работает.
Приведу кусок из программы, взятой из Интернета.


procedure PortInit;
 var
  ThreadID:dword;
 begin
 //создание и инициализация порта
 KolByte:=0;

 //создание порта и получение его хэндла
 CommHandle := CreateFile("COM1",GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);

 //ставим маску - "по пришествии определенного символа"
 SetCommMask(CommHandle,EV_RXFLAG);

 //построение DCB
  GetCommState(CommHandle,DCB);
  DCB.BaudRate:=CBR_9600;
  DCB.Parity:=NOPARITY;
  DCB.ByteSize:=8;
  DCB.StopBits:=OneStopBit;
  DCB.EvtChar:=chr(13);//задание символа для флага
  //устанавливаем DCB
  SetCommState(CommHandle,DCB);
  //создаем параллельный поток
  //там будет вертеться процедура приема строки
  //с порта - ReadComm
  CommThread := CreateThread(nil,0,@ReadComm,nil,0,ThreadID);
 end;



Я даже не знаю, сколько кабелей должно идти от этого принтера к компьютеру.


 
Германн ©   (2016-08-01 00:56) [26]


> Kilkennycat ©   (31.07.16 02:46) [23]
>
>
> > Германн ©   (31.07.16 01:27) [22]
>
> Разве? А почему ж мне приходилось их менять в диспетчере
> устройств, дабы работала кучка девайсов, софт к которым
> был написан с расчетом (а проще говоря - криво) на изменение
> именно таким способом?

Шутку юмора понял. :)


> Raisa   (01.08.16 00:39) [25]
>
> У меня по-прежнему ничего не получается.
> Ни один из примеров, найденных в Интернете, не работает.
>
> Приведу кусок из программы, взятой из Интернета.

90% кода в интернете - говно см. http://www.gunsmoker.ru/2010/05/90.html

По поводу твоего кода из #25. Параметры СОМ-порта, т.е. DCB нужно задавать до его открытия! До, а не после как у тебя.


 
Германн ©   (2016-08-01 01:02) [27]


>  DayGaykin ©   (31.07.16 11:51) [24]
>
> Да и команду mode никто не отменял.

Кстати да. Сей вариант тоже стоит проверить, если кому нужно.


 
Германн ©   (2016-08-01 01:19) [28]


> Я даже не знаю, сколько кабелей должно идти от этого принтера
> к компьютеру.
>

А это уже совсем плохо. Вам лучше отказаться от этой работы и сосредоточиться на чём-то другом.


 
sniknik ©   (2016-08-01 07:58) [29]

> CommHandle := CreateFile("COM1",GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
       FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
компорт вроде не так задается, а так - \\.\COM1, и даже проверять, смотреть старые программы не буду, это из первой же ссылке в инете.


 
Kilkennycat ©   (2016-08-01 11:21) [30]


> Я даже не знаю, сколько кабелей должно идти от этого принтера  к компьютеру.


В этом случае Вам предложен идеальный вариант: DayGaykin ©   (27.07.16 13:46) [18]


 
DayGaykin ©   (2016-08-01 11:40) [31]


> По поводу твоего кода из #25. Параметры СОМ-порта, т.е.
> DCB нужно задавать до его открытия! До, а не после как у
> тебя.

А как, если хендла нет?


 
Германн ©   (2016-08-02 01:36) [32]


> DayGaykin ©   (01.08.16 11:40) [31]
>
>

Признаю ошибку. Думал об одном, читал другое, отвечал на третье.


 
Германн ©   (2016-08-02 02:17) [33]


> sniknik ©   (01.08.16 07:58) [29]
>
> компорт вроде не так задается, а так - \\.\COM1

Для портов до девятого можно и так. Обратная совместимость.


 
Raisa   (2016-08-03 23:20) [34]

Мои выводы таковы:

1. COM-порт задается правильно.
2. При построении DCB-структуры ошибок нет.

Хочется получить ответ на вопрос, почему нет никакой реакции принтера.
Ошибка имеется при попытке послать на принтер команду печати символа и отреза бумаги?


 
DayGaykin ©   (2016-08-04 00:13) [35]

Принтер не реагирует вообще ни на что или только на специальные команды?


 
Kilkennycat ©   (2016-08-04 00:59) [36]


> Ошибка имеется при попытке послать на принтер команду печати
> символа и отреза бумаги?

это вопрос? или сообщается какая-то ошибка? если второе, то какая?


 
Германн ©   (2016-08-04 01:02) [37]

Есть возможность проверить работоспособность принтера без использования собственного ПО?


 
Kilkennycat ©   (2016-08-04 01:08) [38]

а может, есть попытка печати символов, которые отсутствуют?


 
Kilkennycat ©   (2016-08-04 01:23) [39]

и я глянул, дефолтная скорость для него 19200, а Вы ставите 9600, flowcontrol по-умолчанию DTR\DSR а у Вас в программе по флагу 13...


 
Kilkennycat ©   (2016-08-04 01:30) [40]


> Германн ©   (04.08.16 01:02) [37]


> Raisa   (27.07.16 00:27) [16]
В списке принтеров появился. Попробовала печать из блокнота. Напечатал текст из блокнота на двух метрах бумаги.

но это под управлением драйвера.


 
DayGaykin ©   (2016-08-04 13:22) [41]


> Kilkennycat ©   (04.08.16 01:23) [39]
> и я глянул, дефолтная скорость для него 19200, а Вы ставите
> 9600, flowcontrol по-умолчанию DTR\DSR а у Вас в программе
> по флагу 13...

Можно, кстати, после драйвера или тестовой программы подсмотреть какие настройки остались. Я так делал.


> Kilkennycat ©   (04.08.16 00:59) [36]
>
> > Ошибка имеется при попытке послать на принтер команду
> печати
> > символа и отреза бумаги?
>
> это вопрос? или сообщается какая-то ошибка? если второе,
>  то какая?

Насколько я помню, принтер весьма молчалив. Если только по дополнительным проводам.


 
Kilkennycat ©   (2016-08-04 15:53) [42]


> принтер весьма молчалив

еще какой молчун. Просто ошибка не принтера может быть, мож программа вопит.


 
Raisa   (2016-08-05 00:30) [43]


> DayGaykin ©   (04.08.16 00:13) [35]
> Принтер не реагирует вообще ни на что или только на специальные
> команды?


Вариантов два:
1. Программа висит после посылки некоторых команд.
2. Принтер не реагирует, то есть делает вид, что не было никаких команд.


 
Денис11998833   (2016-08-06 15:50) [44]

Вот рабочий пример работы с сканером штрих кодов через COM. Когда-то ещё писал на базе этого кода обмен с Citizen S2000, но обыскал всё так и не нашёл куда пример завалился(..


unit uScanThread;

interface

uses
 Windows, Classes, Messages, Dialogs, SysUtils, MyUtils, UITypes;

type
 TScannerOnReadDataEvent = function(ReadData: string): string of object;

 TScanThread = class(TThread)
 public
 private
   { Private declarations }
   PH: THandle;
   Msg1: String;
   ComData: AnsiString;
   nToRead: Cardinal;
   nRead: Cardinal;
   ComStat: TComStat;
   Errs: Dword;
   Buff: array[0..1023] of AnsiChar;

   procedure OnReadData;
   procedure VCL_ShowMessage;
 public
   PortName: string;
   PortBaudRate, PortParity, PortByteSize, PortStopBits: word;

 protected
   procedure Execute; override;
 end;

Var
 Nom:integer;
 FormActive:string;

implementation

uses uMainForm;

procedure TScanThread.OnReadData;
var nComData: string;
begin
 ComData:=Trim(ComData);
 ShowMessage("Событие сканнера штрих-кода. Прочитано: "+ComData);
 MainForm.ScannerOnReadData(ComData);
end;

procedure TScanThread.VCL_ShowMessage;
begin
 ShowMessage(Msg1);
end;

procedure TScanThread.Execute;
Var
DCB:TDCB;
CommTimeouts:TCommTimeouts;
begin
 PH:=Windows.CreateFile(PChar("\\.\"+PortName), GENERIC_READ,
                             FILE_SHARE_READ,
                             nil, OPEN_EXISTING,
                             FILE_ATTRIBUTE_NORMAL, 0);

if (PH=INVALID_HANDLE_VALUE)  then
begin
 Msg1:="Невозможно открыть порт сканера: "+PortName+#10#13+SysErrorMessage(GetLastError);
 Synchronize(VCL_ShowMessage);
end;

 GetCommState(PH, DCB);
 DCB.BaudRate:=PortBaudRate;
 DCB.Parity:=PortParity;
 DCB.ByteSize:=PortByteSize;
 DCB.StopBits:=PortStopBits;
 SetCommState(PH, DCB);

 GetCommTimeouts(PH, CommTimeouts);
 CommTimeouts.ReadIntervalTimeout :=MAXDWORD;
 CommTimeouts.ReadTotalTimeoutMultiplier := 0;
 CommTimeouts.ReadTotalTimeoutConstant := 0;
 CommTimeouts.WriteTotalTimeoutMultiplier := 0;
 CommTimeouts.WriteTotalTimeoutConstant := 0;
 SetCommTimeouts(PH, CommTimeouts);

 repeat
   if Terminated then Break;
   Sleep(500);
   if Terminated then Break;
   ClearCommError(PH,Errs,@ComStat);
   nToRead:=ComStat.cbInQue;
   if nToRead=0 then Continue;
   ReadFile(PH,Buff,SizeOf(Buff),nRead,nil);
   ComData:=Trim(String(Buff));
   FillChar(Buff, SizeOf(Buff), #0);
   if Terminated then Break;
   Synchronize(OnReadData);
 until (Terminated);
 CloseHandle(PH);
end;

end.



Советую начать с опроса. Отправить что типа:
$1D$49

В конце не забыть перевод строки. Эскейп символ для него - перевод строки.

http://www.sensis.ru/files/PPU-700_700IICMD110E.pdf

$1D$49 - команда "GS I n"


 
Денис11998833   (2016-08-06 15:57) [45]

Так же можно отправить команду тестовой печати "GS ( A pL pH n m", если сомневаетесь в правильности кода/проводов/настроек принтера для приёма.

Если принтер зажужжит, напечатает инфу о себе, значит данные в принтер уходят нормально, что-то с приёмом данных от принтера, а это уже половина проблемы.


 
Kilkennycat ©   (2016-08-06 17:13) [46]


> отправить команду тестовой печати "GS ( A pL pH n m", если
> сомневаетесь в правильности
кода/проводов/настроек принтера
> для приёма


волшебство


 
Денис11998833   (2016-08-06 20:57) [47]

А в чем вы здесь волшебство узрели?


 
Kilkennycat ©   (2016-08-07 01:19) [48]


> Денис11998833   (06.08.16 20:57) [47]

В том, что тестовая печать - это тест принтера, когда всё остальное не вызывает сомнений, а не наоборот. Когда наоборот, пробуют запросить принтер че-нить ответить, например, версию прошивки.

Чтобы принтер зажужжал, достаточно послать аски-код любой цифры.

> что-то с приёмом данных от принтера,

это ваще тут как бэ пофиг. Как и пример работы с устройством, которое посылает данные в комп, а не наоборот.

Ну и "вы" в данном случае надо с большой буквы, или ваще не писать.


 
Игорь Шевченко ©   (2016-08-07 10:48) [49]


> Ну и "вы" в данном случае надо с большой буквы, или ваще
> не писать.


Еще одна жертва неграмостности, блин. Учи русский!


 
Raisa   (2016-08-10 01:09) [50]

Принтер заработал.
Без провода USB принтер работает.

Спасибо всем.


Благодаря приведенному ниже сообщению я исправила скорость на 19200, и принтер стал печатать.


> Kilkennycat ©   (04.08.16 01:23) [39]
> и я глянул, дефолтная скорость для него 19200, а Вы ставите
> 9600, flowcontrol по-умолчанию DTR\DSR а у Вас в программе
> по флагу 13...


Больше ничего не меняла, так как не знаю, что и на что надо менять. Флаг 13 так и остался.


>
> Денис11998833   (06.08.16 15:50) [44]

Спасибо за выложенный кусок программы. Не исключено, что может пригодиться.


 
Kilkennycat ©   (2016-08-12 00:41) [51]


> Raisa   (10.08.16 01:09) [50]
> Принтер заработал.

Ура :)

Вы - молодец, добились всё-таки результата.



Страницы: 1 2 вся ветка

Текущий архив: 2018.09.16;
Скачать: CL | DM;

Наверх




Память: 0.61 MB
Время: 0.01 c
2-1470486053
Денис11998833
2016-08-06 15:20
2018.09.16
Инициализация значений компонента


2-1470299345
novichoks
2016-08-04 11:29
2018.09.16
StretchBlt


15-1474880632
Кто б сомневался
2016-09-26 12:03
2018.09.16
Как принять сообщение с WhatsApp?


11-1267379542
tippa
2010-02-28 20:52
2018.09.16
в Memo влазит только 29998 байт текста


2-1469453166
Raisa
2016-07-25 16:26
2018.09.16
POS Принтер