Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Печать на принтер EU-T432 
V
    Опции темы
CrazyPiggy
Дата 1.7.2013, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 4.6.2008

Репутация: нет
Всего: нет



Добрый день Помогите пожалуйста разобраться с принтером EPSON EU-t432. Уже весь инет искурил а так и не смог понять как на нем печатать. Вот ссылка на похожий пример но не могу распечатать русские буквы. уже 2 неделю бьюсь не могу понять что и как. Заранее спасибо smile 

Это сообщение отредактировал(а) CrazyPiggy - 1.7.2013, 11:55
PM MAIL   Вверх
Poseidon
Дата 1.7.2013, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(CrazyPiggy @ 1.7.2013,  10:14)
не могу распечатать русские буквы.

Ну ты хоть покажи как ты пробуешь. В общем случае для печати в Delphi используется класс TPrinter. И ему все равно какая у тебя марка принтера. 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
CrazyPiggy
Дата 1.7.2013, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 4.6.2008

Репутация: нет
Всего: нет



А для TPrintera должны быть установлены драйвера принтера в системе? Просто данный аппарат подключен к com порту. И нет драйверов. Пробовал пример приведенный выше по ссылке. Вроде печатает только вместо русских буков иероглифы. 
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  
const
  ComPort = 'COM1';
var
  Form1         : TForm1;
  ComFile       : THandle;
  ReadAr        : array[1..255] of byte;
  BytesWritten  : DWORD;
  BytesRead     : DWORD ;

implementation

{$R *.dfm}


procedure WriteCyrillic(Str:String);
var
  i       : Integer;
  s       : AnsiString;
  nWrite  : Cardinal;
begin
  for i := 1 to Length(Str) do begin
    Case Str[i] of
      'А' : s := s + #$80;
      'Б' : s := s + #$81;
      'В' : s := s + #$82;
      'Г' : s := s + #$83;
      'Д' : s := s + #$84;
      'Е' : s := s + #$85;
      'Ж' : s := s + #$86;
      'З' : s := s + #$87;
      'И' : s := s + #$88;
      'Й' : s := s + #$89;
      'К' : s := s + #$8A;
      'Л' : s := s + #$8B;
      'М' : s := s + #$8C;
      'Н' : s := s + #$8D;
      'О' : s := s + #$8E;
      'П' : s := s + #$8F;
      'Р' : s := s + #$90;
      'С' : s := s + #$91;
      'Т' : s := s + #$92;
      'У' : s := s + #$93;
      'Ф' : s := s + #$94;
      'Х' : s := s + #$95;
      'Ц' : s := s + #$96;
      'Ч' : s := s + #$97;
      'Ш' : s := s + #$98;
      'Щ' : s := s + #$99;
      'Ъ' : s := s + #$9A;
      'Ы' : s := s + #$9B;
      'Ь' : s := s + #$9C;
      'Э' : s := s + #$9D;
      'Ю' : s := s + #$9E;
      'Я' : s := s + #$9F;
      'а' : s := s + #$A0;
      'б' : s := s + #$A1;
      'в' : s := s + #$A2;
      'г' : s := s + #$A3;
      'д' : s := s + #$A4;
      'е' : s := s + #$A5;
      'ж' : s := s + #$A6;
      'з' : s := s + #$A7;
      'и' : s := s + #$A8;
      'й' : s := s + #$A9;
      'к' : s := s + #$AA;
      'л' : s := s + #$AB;
      'м' : s := s + #$AC;
      'н' : s := s + #$AD;
      'о' : s := s + #$AE;
      'п' : s := s + #$AF;
      'р' : s := s + #$E0;
      'с' : s := s + #$E1;
      'т' : s := s + #$E2;
      'у' : s := s + #$E3;
      'ф' : s := s + #$E4;
      'х' : s := s + #$E5;
      'ц' : s := s + #$E6;
      'ч' : s := s + #$E7;
      'ш' : s := s + #$E8;
      'щ' : s := s + #$E9;
      'ъ' : s := s + #$EA;
      'ы' : s := s + #$EB;
      'ь' : s := s + #$EC;
      'э' : s := s + #$ED;
      'ю' : s := s + #$EE;
      'я' : s := s + #$EF;
      'Ё' : s := s + #$F0;
      'ё' : s := s + #$F1;
    else
      s := s + Str[i];
    end;
  end;
  WriteFile(ComFile, Pointer(s)^, Length(s), nWrite, nil);
end;

// OpenCOMPort
function OpenCOMPort: Boolean;
var
  DeviceName: array[0..80] of Char;
begin
  StrPCopy(DeviceName, ComPort);
  ComFile := CreateFile(DeviceName, GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if ComFile = INVALID_HANDLE_VALUE then
    Result := False
  else
    Result := True;
end;
// SetupCOMPort
function SetupCOMPort: Boolean;
const
  RxBufferSize = 256;
  TxBufferSize = 256;
var
  DCB: TDCB;
  CommTimeouts: TCommTimeouts;
begin
  Result := True;
  if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then Result := False;

  if not GetCommState(ComFile, DCB) then Result := False;
  DCB.BaudRate:=9600;
  DCB.ByteSize:=8;
  DCB.Parity:=NoParity;
  DCB.StopBits:=ONESTOPBIT;
  DCB.Flags:=DTR_CONTROL_ENABLE;
  if not SetCommState(ComFile, DCB) then Result := False;
  GetCommTimeouts(ComFile, CommTimeouts);
  with CommTimeouts do begin
    ReadIntervalTimeout :=MAXDWORD;
    ReadTotalTimeoutMultiplier := 0;
    ReadTotalTimeoutConstant := 0;
    WriteTotalTimeoutMultiplier := 0;
    WriteTotalTimeoutConstant := 0;
  end;

  if not SetCommTimeouts(ComFile, CommTimeouts) then Result := False;
end;
// CloseCOMPort
procedure CloseCOMPort;
begin
  CloseHandle(ComFile);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  Init          : array[1..2] of Byte = ($1B,$40);
  Center        : array[1..3] of Byte = ($1B,$61,$01);
  FontSize      : array[1..3] of Byte = ($1B,$21,20);
  PrintFeed       : array[1..3] of Byte = ($1B,$64,$03);
  Lang          : array[1..3] of Byte = ($1B, $74, $17); //ESC t n Select character code table
                                                        //но я не знаю какой параметр сюда передавать вместо n
                                                       // А может эта команда и не нужна вовсе
  CutAlligment  : array[1..4] of Byte = ($1D,$F8,$65,$03);
  Cut           : array[1..2] of Byte = ($1B,$69);
var
  Text    : PAnsiChar;
  nWrite  : DWord;
begin

  if OpenCOMPort then begin
    Memo1.Lines.Add('Порт открыт');

    if SetupCOMPort then begin
      Memo1.Lines.Add('Порт настроен');

      WriteFile(ComFile, Init, SizeOf(Init), BytesWritten, nil);

      // Center
      WriteFile(ComFile, Center, SizeOf(Center), BytesWritten, nil);
      // FontSize
      WriteFile(ComFile, FontSize, SizeOf(FontSize), BytesWritten, nil);

      //Lang
      WriteFile(ComFile, Lang1, SizeOf(Lang1), BytesWritten, nil);

      // Text
      WriteCyrillic(Memo1.Text);

      // Preent and Feed
      WriteFile(ComFile, PrintFeed, SizeOf(PrintFeed), BytesWritten, nil);

      // Cut alligment
      WriteFile(ComFile, CutAlligment, SizeOf(CutAlligment), BytesWritten, nil);

      // Cut
      WriteFile(ComFile, Cut, SizeOf(Cut), BytesWritten, nil);
      // закрываем порт
      CloseHandle(ComFile);

    end else begin
      Memo1.Lines.Add('Не удалось настроить порт');
    end;
  end else begin
    Memo1.Lines.Add('Не удалось открыть порт');
  end;
end;

end.
 

Это сообщение отредактировал(а) CrazyPiggy - 1.7.2013, 22:56
PM MAIL   Вверх
northener
Дата 1.7.2013, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(CrazyPiggy @  1.7.2013,  22:33 Найти цитируемый пост)
Просто данный аппарат подключен к com порту. И нет драйверов. Пробовал пример приведенный выше по ссылке. Вроде печатает только вместо русских буков иероглифы. 

Так всё же - как пробуешь? Что именно и как посылаешь в СОМ-порт?

P.S. Для того чтобы печатать на принтере средствами Windows драйвер нужен. Т.е. и для работы через TPrinter. 

Это сообщение отредактировал(а) northener - 1.7.2013, 23:01


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CrazyPiggy
Дата 2.7.2013, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 4.6.2008

Репутация: нет
Всего: нет



Цитата(northener @  1.7.2013,  22:57 Найти цитируемый пост)
Так всё же - как пробуешь? Что именно и как посылаешь в СОМ-порт?
 Я же выше привел код что я отправляю в com-порт. Там идет Esc/POS последовательность команд.
Отправляю все через WriteFile

Цитата(CrazyPiggy @  1.7.2013,  22:33 Найти цитируемый пост)
  Init          : array[1..2] of Byte = ($1B,$40);
  Center        : array[1..3] of Byte = ($1B,$61,$01);
  FontSize      : array[1..3] of Byte = ($1B,$21,20);
  PrintFeed       : array[1..3] of Byte = ($1B,$64,$03);
  Lang          : array[1..3] of Byte = ($1B, $74, $17); //ESC t n Select character code table
                                                        //но я не знаю какой параметр сюда передавать вместо n
                                                       // А может эта команда и не нужна вовсе
  CutAlligment  : array[1..4] of Byte = ($1D,$F8,$65,$03);
  Cut           : array[1..2] of Byte = ($1B,$69);

PM MAIL   Вверх
kami
Дата 2.7.2013, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Код

WriteFile(ComFile, Pointer(s)^, Length(s), nWrite, nil);

Это я не проснулся, или должно быть
Код

WriteFile(ComFile, s[1], Length(s), nWrite, nil);
?

Это сообщение отредактировал(а) kami - 2.7.2013, 09:33
PM MAIL WWW   Вверх
northener
Дата 2.7.2013, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(CrazyPiggy @  2.7.2013,  08:54 Найти цитируемый пост)
ESC t n Select character code table
                                                        //но я не знаю какой параметр сюда передавать вместо n

А их всего 4 по стандарту ESC/P
Но обрати внимание ещё на команду ESC ( t  - Assign character table
 Полное руководство по языку ESC/P (на английском языке) 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CrazyPiggy
Дата 2.7.2013, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 4.6.2008

Репутация: нет
Всего: нет



Цитата(northener @  2.7.2013,  12:23 Найти цитируемый пост)
А их всего 4 по стандарту ESC/P
 А есть разница между ESC/P и ESC/POS ?
Вот что нашел в описании ESC/POS
Цитата

ESC t n 
Name Select character code table 
Code ASCII ESC t n 
 Hex. 1B 74 n 
 Decimal 27 116 n 
Defined Region 0 ≤ n ≤ 5, n = 255 
Initial Value n = 0 
Function Select page n of the character code table. 
n Character Type 
0 PC437 (USA: Standard Europe) 
1 Katakana 
2 PC850(Multilingual) 
3 PC860(Portuguese) 
4 PC863(Canadian-French) 
5 PC865(Nordic) 
16 WPC1252 
17 PC866 (Cyrillic #2) 
18 PC852 (Latin2) 
19 PC858 
255 Blank page 


Описание ESC/POS

Это сообщение отредактировал(а) CrazyPiggy - 2.7.2013, 15:33
PM MAIL   Вверх
northener
Дата 2.7.2013, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(CrazyPiggy @  2.7.2013,  15:16 Найти цитируемый пост)
 А есть разница между ESC/P и ESC/POS ? 

Конечно есть хоть и не большая.
Но Эпсон исторически работает с ESC/P.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CrazyPiggy
Дата 2.7.2013, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 4.6.2008

Репутация: нет
Всего: нет



Цитата(northener @  2.7.2013,  15:20 Найти цитируемый пост)
Но Эпсон исторически работает с ESC/P. 
 Вот что нарыл по EU-T432 
Цитата

EU-T432 Technical Manual
Confidential
Chapter 1
Features and Specifications
Features
The EU-T432 is designed to be used for kiosks and cash dispensers. The features of the EU-T432
are as follows:
o High speed receipt issuing: 150 mm/s {5.9"/s} maximum
o High reliability: 300,000 receipt issue
o Length of receipt: 228.4 mm {9"} maximum
(When the EU-T432 is equipped with an optional loop guide: 600 mm {23.6"}
o Available for large paper roll core dimensions:
203 mm {8"} diameter maximum
o Supports ESC/POS equivalent commands
o Able to print bar codes (fence and ladder) and graphics
o Options available for all models:
• Japanese Kanji model: Supports JIS Level 1 and 2
• Simple Chinese model: Supports GB50007-85
• Traditional Chinese model: Supports BIG5 Level 1 and 2
• Korean model: Supports C-6501C


Это сообщение отредактировал(а) CrazyPiggy - 2.7.2013, 15:39
PM MAIL   Вверх
northener
Дата 2.7.2013, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(CrazyPiggy @  2.7.2013,  15:39 Найти цитируемый пост)
 Вот что нарыл по EU-T432 

Ну попробуй работать с ним по ESC/POS протоколу. Вдруг что-то получится.

P.S.
А почему бы не попробовать поставить драйвер? https://download.epson-biz.com/modules/pos/...t=31&pcat=3



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CrazyPiggy
Дата 2.7.2013, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 4.6.2008

Репутация: нет
Всего: нет



Цитата(northener @  2.7.2013,  19:45 Найти цитируемый пост)
А почему бы не попробовать поставить драйвер

Ставил, но почему то из винды не печатается даже пробная страница. Нашел мануал что там переключатели какие то на принтере надо выставить по скорости и др. настройки. А потом при установке дров устанавливаемые параметры должны соответствовать переключателям. Завтра буду пробовать, разбирать. Он постоянно в работе этот принтер и нет постоянного к нему доступа. Приходится в перерывах бегать к этому терминалу и испытывать программки по печати.
PM MAIL   Вверх
CrazyPiggy
Дата 3.7.2013, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 4.6.2008

Репутация: нет
Всего: нет



В общем установил дрова, посмотрел по переключателям все вроде соответствует настройкам. Но принтер отказывается печатать пробную страницу. Дело в том что у нас есть ПО которое нормально печатает без драйверов русским шрифтом по com порту. Не могу понять что я делаю не так. Отсылаю команды английский нормально русский кракозябры

Это сообщение отредактировал(а) CrazyPiggy - 3.7.2013, 11:16
PM MAIL   Вверх
northener
Дата 3.7.2013, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(CrazyPiggy @  3.7.2013,  09:46 Найти цитируемый пост)
Дело в том что у нас есть ПО которое нормально печатает без драйверов русским шрифтом по com порту.

Поставь Portmon да и посмотри что то ПО шлет в порт при печати.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CrazyPiggy
Дата 4.7.2013, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 4.6.2008

Репутация: нет
Всего: нет



northener
Огромное спасибо за  Portmon. С её помощью выцарапал коды. Всем спасибо. Тема закрыта
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0938 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.