Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2018.09.16;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





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


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


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


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


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский