Во многом таким же образом, как this guy was having a problem, у меня аналогичная проблема ...Почему я не могу найти свой денежный ящик, используя общие элементы управления?
Мой cashdrawer подключается к ПК через RJ11 (я думаю, что его 11 так или иначе ...) подключение к моему принтеру, который является Partner RP-600 Thermal Printer
.
У меня принтер хорошо работает, но я не могу открыть денежный ящик.
В основном мои мысли о том, как это должно работать (основано на моем ограниченном понимании это:
- Открыть принтер
- Претензия принтер
- Включить принтер
- Открыть денежный ящик
- Заявка на участие в торгах
- Включить денежный ящик
- Открыть аппаратный ящик
Я попытался это несколькими способами, и я получаю следующие ошибки:
OPOS_E_CLOSED = 101, но наиболее часто
OPOS_E_NOEXIST = 109
Если установить его в drawer.Open("rp-600 printer")
, я получаю OPOS_E_ILLEGAL = 106
Мой код следующим образом:
using OPOSCONSTANTSLib;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OposPOSPrinter_CCO;
using OposCashDrawer_CCO;
namespace PosPrinterTest
{
public partial class Form1 : Form
{
private OPOSPOSPrinterClass printer = null;
private OPOSCashDrawerClass drawer = null;
public Form1()
{
InitializeComponent();
printer = new OPOSPOSPrinterClass();
drawer = new OPOSCashDrawerClass();
_IOPOSPOSPrinterEvents_StatusUpdateEventEventHandler SUEH =
new _IOPOSPOSPrinterEvents_StatusUpdateEventEventHandler(
PrinterStatusUpdateHandler);
printer.StatusUpdateEvent += SUEH;
_IOPOSCashDrawerEvents_StatusUpdateEventEventHandler DSUEH = new _IOPOSCashDrawerEvents_StatusUpdateEventEventHandler(CashDrawerStatusUpdateHandler);
drawer.StatusUpdateEvent += DSUEH;
}
private void AddList(object listline)
{
listBox1.Items.Add(listline);
listBox1.SelectedIndex = listBox1.Items.Count - 1;
}
private void OpenCashDrawer()
{
AddList("+Open drawer");
int Result = drawer.Open("rpd");
AddList(String.Format(" 1-Open drawer: RC = {0}", Result));
Result = drawer.ClaimDevice(1000);
AddList(String.Format(" 2-Claim drawer: RC = {0}", Result));
drawer.DeviceEnabled = true;
Result = drawer.ResultCode;
AddList(String.Format(" 3-Enable drawer: RC = {0}", Result));
Result = drawer.OpenDrawer();
AddList(String.Format(" 4-Open drawer: RC = {0}", Result));
AddList(String.Format("-Open drawer: {0}", ((Result == (int)OPOS_Constants.OPOS_SUCCESS) ? "Succeeded" : "Failed")));
AddList(String.Empty);
}
private void CloseCashDrawer()
{
AddList("+Close drawer");
int Result = drawer.ReleaseDevice();
AddList(String.Format(" Release drawer: RC = {0}", Result));
AddList("-Release drawer: " + ((Result == (int)OPOS_Constants.OPOS_SUCCESS) ? "Succeeded" : "Failed"));
Result = drawer.Close();
AddList(String.Format(" Close drawer: RC = {0}", Result));
AddList("-Close drawer: " + ((Result == (int)OPOS_Constants.OPOS_SUCCESS) ? "Succeeded" : "Failed"));
AddList(String.Empty);
}
private void Print()
{
AddList("+Print");
int Result = printer.PrintNormal(2, "\x1B|cA\x1B|2COPOS POSPrinter\x1B|1C\nvia Microsoft.NET\n\n");
AddList(String.Format(" Print: BC = {0}", Result));
AddList(String.Format("-Print: {0}", ((Result == (int)OPOS_Constants.OPOS_SUCCESS) ? "Succeeded" : "Failed")));
Result = printer.CutPaper(100);
AddList(String.Format(" Cut: BC = {0}", Result));
AddList(String.Format("-Cut: {0}", ((Result == (int)OPOS_Constants.OPOS_SUCCESS) ? "Succeeded" : "Failed")));
AddList(String.Empty);
}
private void OpenPrinter()
{
AddList("+Open printer");
int Result = printer.Open("rp-600 printer");
AddList(String.Format(" Open: RC = {0}", Result));
if (Result == (int)OPOS_Constants.OPOS_SUCCESS)
{
Result = printer.ClaimDevice(1000);
AddList(String.Format(" Claim printer: RC = {0}", Result));
if (Result == (int)OPOS_Constants.OPOS_SUCCESS)
{
printer.DeviceEnabled = true;
Result = printer.ResultCode;
AddList(String.Format(" Enable printer: RC = {0}>", Result));
}
}
AddList(String.Format("-Open: {0}", ((Result == (int)OPOS_Constants.OPOS_SUCCESS) ? "Succeeded" : "Failed")));
AddList(String.Empty);
}
private void ClosePrinter()
{
AddList("+Close printer");
int Result = printer.ReleaseDevice();
AddList(String.Format(" Release printer: RC = {0}", Result));
AddList("-Release printer: " + ((Result == (int)OPOS_Constants.OPOS_SUCCESS) ? "Succeeded" : "Failed"));
Result = printer.Close();
AddList(String.Format(" Close printer: RC = {0}", Result));
AddList("-Close printer: " + ((Result == (int)OPOS_Constants.OPOS_SUCCESS) ? "Succeeded" : "Failed"));
AddList(String.Empty);
}
private void PrinterStatusUpdateHandler(int nStatus)
{
AddList(" P StatusUpdate: " + nStatus);
}
private void CashDrawerStatusUpdateHandler(int nStatus)
{
AddList(String.Format(" CD Status Update: {0}", nStatus));
}
private void btnTender_Click_1(object sender, EventArgs e)
{
//OpenPrinter();
//Print();
//ClosePrinter();
OpenCashDrawer();
CloseCashDrawer();
}
}
}
Как вы можете видеть, имя устройства, я указанием в OpenCashDrawer() такая же, как имя устройства ввода, установленного в ОПГ.
Итак, что я делаю неправильно, что препятствует тому, чтобы opos находил денежный ящик?
Выдвижной ящик и принтер являются отдельными устройствами, вы не должны открывать/требовать принтер для того, чтобы использовать выдвижной ящик. Кроме того, если вы еще этого не сделали, попробуйте установить общие объекты управления (расположенные здесь: http://monroecs.com/oposccos_current.htm). –
@ JoshAnderson просто для того, чтобы быть ясным, вы знаете, что денежный ящик не подключается к компьютеру, а вместо этого к принтеру, правильно? Потому что я все еще получаю код ошибки 109 – Ortund
Я знаю, эти денежные ящики могут быть надоедливыми. Просто увидев последнее редактирование, я подумал, что вы используете POS для Microsoft для .Net вместо прямого использования общих классов управления. Я менее знаком с ними, но есть ли способ перечислить все установленные устройства определенного типа, чтобы увидеть, появляется ли оно? Также может быть, что метод _drawer.Open() ожидает имя объекта службы, а не имя логического устройства. –