![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
POS Принтер
Raisa © (2016-07-25 16:26:00)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);
Kilkennycat (2016-08-12 00:41:00) [1]
> Raisa (10.08.16 01:09) [50]
> Принтер заработал.
Ура :)
Вы - молодец, добились всё-таки результата.
Raisa (2016-08-10 01:09:00) [2]Принтер заработал.
Без провода USB принтер работает.
Спасибо всем.
Благодаря приведенному ниже сообщению я исправила скорость на 19200, и принтер стал печатать.
> Kilkennycat © (04.08.16 01:23) [39]
> и я глянул, дефолтная скорость для него 19200, а Вы ставите
> 9600, flowcontrol по-умолчанию DTR\DSR а у Вас в программе
> по флагу 13...
Больше ничего не меняла, так как не знаю, что и на что надо менять. Флаг 13 так и остался.
>
> Денис11998833 (06.08.16 15:50) [44]
Спасибо за выложенный кусок программы. Не исключено, что может пригодиться.
Игорь Шевченко (2016-08-07 10:48:00) [3]
> Ну и "вы" в данном случае надо с большой буквы, или ваще
> не писать.
Еще одна жертва неграмостности, блин. Учи русский!
Kilkennycat (2016-08-07 01:19:00) [4]
> Денис11998833 (06.08.16 20:57) [47]
В том, что тестовая печать - это тест принтера, когда всё остальное не вызывает сомнений, а не наоборот. Когда наоборот, пробуют запросить принтер че-нить ответить, например, версию прошивки.
Чтобы принтер зажужжал, достаточно послать аски-код любой цифры.
> что-то с приёмом данных от принтера,
это ваще тут как бэ пофиг. Как и пример работы с устройством, которое посылает данные в комп, а не наоборот.
Ну и "вы" в данном случае надо с большой буквы, или ваще не писать.
Денис11998833 (2016-08-06 20:57:00) [5]А в чем вы здесь волшебство узрели?
Kilkennycat (2016-08-06 17:13:00) [6]
> отправить командутестовой печати 'GS ( A pL pH n m', если
> сомневаетесь в правильностикода/проводов/настроек принтера
> для приёма
волшебство
Денис11998833 (2016-08-06 15:57:00) [7]Так же можно отправить команду тестовой печати 'GS ( A pL pH n m', если сомневаетесь в правильности кода/проводов/настроек принтера для приёма.
Если принтер зажужжит, напечатает инфу о себе, значит данные в принтер уходят нормально, что-то с приёмом данных от принтера, а это уже половина проблемы.
Денис11998833 (2016-08-06 15:50:00) [8]Вот рабочий пример работы с сканером штрих кодов через 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'
Raisa (2016-08-05 00:30:00) [9]
> DayGaykin © (04.08.16 00:13) [35]
> Принтер не реагирует вообще ни на что или только на специальные
> команды?
Вариантов два:
1. Программа висит после посылки некоторых команд.
2. Принтер не реагирует, то есть делает вид, что не было никаких команд.
Kilkennycat (2016-08-04 15:53:00) [10]
> принтер весьма молчалив
еще какой молчун. Просто ошибка не принтера может быть, мож программа вопит.
DayGaykin (2016-08-04 13:22:00) [11]
> Kilkennycat © (04.08.16 01:23) [39]
> и я глянул, дефолтная скорость для него 19200, а Вы ставите
> 9600, flowcontrol по-умолчанию DTR\DSR а у Вас в программе
> по флагу 13...
Можно, кстати, после драйвера или тестовой программы подсмотреть какие настройки остались. Я так делал.
> Kilkennycat © (04.08.16 00:59) [36]
>
> > Ошибка имеется при попытке послать на принтер команду
> печати
> > символа и отреза бумаги?
>
> это вопрос? или сообщается какая-то ошибка? если второе,
> то какая?
Насколько я помню, принтер весьма молчалив. Если только по дополнительным проводам.
Kilkennycat (2016-08-04 01:30:00) [12]
> Германн © (04.08.16 01:02) [37]
> Raisa (27.07.16 00:27) [16]
В списке принтеров появился. Попробовала печать из блокнота. Напечатал текст из блокнота на двух метрах бумаги.
но это под управлением драйвера.
Kilkennycat (2016-08-04 01:23:00) [13]и я глянул, дефолтная скорость для него 19200, а Вы ставите 9600, flowcontrol по-умолчанию DTR\DSR а у Вас в программе по флагу 13...
Kilkennycat (2016-08-04 01:08:00) [14]а может, есть попытка печати символов, которые отсутствуют?
Германн (2016-08-04 01:02:00) [15]Есть возможность проверить работоспособность принтера без использования собственного ПО?
Kilkennycat (2016-08-04 00:59:00) [16]
> Ошибка имеется при попытке послать на принтер команду печати
> символа и отреза бумаги?
это вопрос? или сообщается какая-то ошибка? если второе, то какая?
DayGaykin (2016-08-04 00:13:00) [17]Принтер не реагирует вообще ни на что или только на специальные команды?
Raisa (2016-08-03 23:20:00) [18]Мои выводы таковы:
1. COM-порт задается правильно.
2. При построении DCB-структуры ошибок нет.
Хочется получить ответ на вопрос, почему нет никакой реакции принтера.
Ошибка имеется при попытке послать на принтер команду печати символа и отреза бумаги?
Германн (2016-08-02 02:17:00) [19]
> sniknik © (01.08.16 07:58) [29]
>
> компорт вроде не так задается, а так - \\.\COM1
Для портов до девятого можно и так. Обратная совместимость.
Германн (2016-08-02 01:36:00) [20]
> DayGaykin © (01.08.16 11:40) [31]
>
>
Признаю ошибку. Думал об одном, читал другое, отвечал на третье.