Проверьте, открыт ли или закрыт кассовый ящик - PullRequest
0 голосов
/ 30 мая 2018

Я разрабатываю POS, используя c # с WPF.Мне нужно проверить, открыт ли денежный ящик или нет, чтобы сообщить пользователю, что его нужно закрыть перед следующей продажей.

Мой денежный ящик - это dynapos, подключенный к чековому принтеру ECLine (у меня не установлены драйверы, я использую только шаблоны из Windows), этот принтер подключен через USB к ПК.Пока я могу печатать с помощью RawPrinterHelper и открывать кассовый аппарат с помощью:

byte[] codeOpenCashDrawer = new byte[] { 27, 112, 48, 55, 121 };
IntPtr pUnmanagedBytes = new IntPtr(0);
pUnmanagedBytes = Marshal.AllocCoTaskMem(5);
Marshal.Copy(codeOpenCashDrawer, 0, pUnmanagedBytes, 5);
RawPrinterHelper.SendBytesToPrinter(stringPrinterName, pUnmanagedBytes, 5);
Marshal.FreeCoTaskMem(pUnmanagedBytes);

Таким же образом я могу открыть кассовый ящик, я надеялся получить статусоб этом, отправив несколько байтов.Я нашел это решение, в котором говорится:

Чтобы получить статус ящика, мне нужно использовать DLE EOT n

Проблема в том, чтоЯ не могу узнать, являются ли байты хорошими, поскольку я не могу получить ответ от RawPrinterHelper при использовании метода SendBytesToPrinter.

Вопросы:

1) Есть ли способ получить этот статус с помощью RawPrinterHelper?

2) Если байты, которые я отправляю, не являются правильными, как я могу определить, какие из них являются правильными?

3) Нужно ли устанавливать драйвер для принтера?Я читал о некоторых людях, которые это делают, но я бы не хотел этого делать, потому что в каждом месте, где установлен мой POS, установлено разное оборудование.

1 Ответ

0 голосов
/ 31 мая 2018

При использовании используемого API-диспетчера очереди печати Windows приложение не может знать состояние принтера / кассового ящика.

В зависимости от поставщика принтера, возможно, вы предоставили драйвер устройства, который имеет свой собственныйрасширенная функция для определения состояния.

Например, EPSON предоставляет функцию API состояния с именем Advanced Driver Driver. (Поскольку страница объяснения на английском языке не найдена, введена страница на японском языке)

Узнайте у вашего поставщика принтера, доступны ли эти API-интерфейсы расширения.

Если расширенного API-интерфейса нет, рассматривается один из следующих методов.

1.Переключиться кпринтер, такой как EPSON, где существует API расширения.
2. Переключите принтер в режим, который работает как периферийное устройство, подключенное к COM-порту вместо принтера Windows, и напрямую отправляет и получает команды и ответы ESC / POS, используяCOM-порт.
3.Установите один из OPOS / POS для .NET/JavaPOS и переключитесь между методами управления p.Ринтер и кассовый ящик.

...