PDA

Просмотр полной версии : Работа с принтерами UCS БЕЗ R-Keeper



48sfmdk4cx2n
03.02.2017, 02:03
Добрый день, коллеги.

Хочу поделиться со всеми решением проблемы, описанной в заголовке.
Входные данные: имеется принтер Star 650 с интерфейсной платой UCS.
Задача: заставить его печатать без наличия R-Keeper.

Попытки сделать это "легально", через:
- установку родных драйверов Star 650,
- поиска описания протокола на сайте UCS,
- поиска информации на данном форуме
успеха не принесли.

Спасла noname утилитка, которая смогла вывести текст, но только латиницей.
При помощи сниффинга трафика удалось чуть приоткрыть завесу (на это ушло два дня и рулон бумаги).

Данные передаются по протоколу UDP. IP принтер сообщает при включении. Порт по умолчанию 18251.

Любой управляющий пакет должен начинаться с такой последовательности $02,$41,$FF,$21,$01.

Перед командой вывода текста принтеру зачем-то понадобился вот такой пакет $02,$41,$FF,$20. Без него никак :(

Сама команда вывода текста выглядит так $02,$41,$FF,$21,$00. После неё текст в cp866.

Последовательность для русификации мне удалось найти здесь RK6WIN\RK6\KACCA\STATIONS\DEVICES\PRINTERS\TSP700. RUS

Выглядит она так: $1b, $1d, $74, $0a

Ну и прогон 5 строк+подрезка: $1b, $64, $05, $1d, $56, $01

Между пакетами обязательно нужна пауза. В моём случае стабильной работы удалось добиться при паузе в 100мс.

Эта информация минимально достаточна, чтобы вывести на печать текст без изысков.

Ниже приведена процедура на Delphi, выводящая на печать текстовый файл на русском языке. Код, может и кривой, но вполне рабочий.




...
udpc: TIdUDPClient;
...
procedure TForm1.PrintTXT(fname: String);
var
s: string;
f: textfile;
i: integer;
sl: TStringList;
countString: Integer;
begin

//Русификация
udpc.Send(#$02+#$41+#$FF+#$21+#$01+#$1b+#$1d+#$74+ #$0a);
sleep(100);

//Получаем количество строк текстового файла, чтобы в последней передать команду подрезки
sl := TStringList.Create;
sl.LoadFromFile(fname);
countString := sl.Count;
sl.Free;

//"Дедовский" способ работы с текстовыми файлами
i:=0;
assignfile(f,fname);
reset(f);
repeat
readln(f,s);
inc(i);
//Видимо инциализируем
udpc.Send(#$02+#$41+#$FF+#$20);
sleep(100);
//Или просто выводим строку или выводим и подрезаем
s:=#$02+#$41+#$FF+#$21+#$00+StrAnsiToOem(trim(s));
if i<>countString then s:=s+#10+#13
else s:=s+#$1b+#$64+#$05+#$1d+#$56+#$01;
udpc.Send(s);
sleep(100);
until eof(f);
closefile(f);
end;


Это всё. Надеюсь, что данная информация будет полезна.
Желающим могу выслать исходники или консольную утилиту, которой можно скармливать txt файлы для печати.

GODzilla
19.09.2019, 23:34
столько времени прошло.... так как печатать на этом принтере? скиньте ссылку на програмку или как его по сети заставить печатать?

SH
20.09.2019, 00:52
Готового решения, кроме как у автора темы, ни у кого нет, я предполагаю.
Стандартными способами заставить нельзя.

vandy
20.09.2019, 11:09
как печатать на этом принтере?

Попробовать обратиться в Мультисофт, они на базе этого принтера делают ФР. может есть родные стандартные COM | Ethernet платы.

GODzilla
20.09.2019, 12:55
Попробовать обратиться в Мультисофт, они на базе этого принтера делают ФР. может есть родные стандартные COM | Ethernet платы.
что то мне подсказывает это будет стоить не очень бюджетно =(

принтер есть, печатать хочется, а интерфейс все портит =(

SH
20.09.2019, 15:06
может есть родные стандартные COM | Ethernet платы.
Проще принтер поменять.

а интерфейс все портит =(
Ну так интерфейс был заточен под ДОС и R_Keeper6. Так что тут всё сложно.

sibgaba
20.09.2019, 15:19
принтер есть, печатать хочется, а интерфейс все портит =(

Выбросьте вы его
б/у с нормальным интерфейсом на авито 3-4 рубля стоить будет.

Для свое времени было не плохое решение для некоторых спец случаев.
Сейчас оживлять такой принтер все равно что второй айфон пытаться обновить до текущей оси...