2015-10-07 4 views
0

Во многом таким же образом, как this guy was having a problem, у меня аналогичная проблема ...Почему я не могу найти свой денежный ящик, используя общие элементы управления?

Мой cashdrawer подключается к ПК через RJ11 (я думаю, что его 11 так или иначе ...) подключение к моему принтеру, который является Partner RP-600 Thermal Printer.

У меня принтер хорошо работает, но я не могу открыть денежный ящик.

opos cash drawer config

В основном мои мысли о том, как это должно работать (основано на моем ограниченном понимании это:

  1. Открыть принтер
  2. Претензия принтер
  3. Включить принтер
  4. Открыть денежный ящик
  5. Заявка на участие в торгах
  6. Включить денежный ящик
  7. Открыть аппаратный ящик

Я попытался это несколькими способами, и я получаю следующие ошибки:

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 находил денежный ящик?

+0

Выдвижной ящик и принтер являются отдельными устройствами, вы не должны открывать/требовать принтер для того, чтобы использовать выдвижной ящик. Кроме того, если вы еще этого не сделали, попробуйте установить общие объекты управления (расположенные здесь: http://monroecs.com/oposccos_current.htm). –

+0

@ JoshAnderson просто для того, чтобы быть ясным, вы знаете, что денежный ящик не подключается к компьютеру, а вместо этого к принтеру, правильно? Потому что я все еще получаю код ошибки 109 – Ortund

+0

Я знаю, эти денежные ящики могут быть надоедливыми. Просто увидев последнее редактирование, я подумал, что вы используете POS для Microsoft для .Net вместо прямого использования общих классов управления. Я менее знаком с ними, но есть ли способ перечислить все установленные устройства определенного типа, чтобы увидеть, появляется ли оно? Также может быть, что метод _drawer.Open() ожидает имя объекта службы, а не имя логического устройства. –

ответ

0

Ваш скриншот показывает, что кассовый аппарат LDN является «rp-cashdrawer», но ваш код использует «rpd».

drawer.Open("rpd"); 

Вы должны быть открытия устройства с настроенными LDN, как:

drawer.Open("rp-cashdrawer"); 
+0

Хотя это действительная точка, причина, по которой денежный ящик не мог открыть, заключалась в том, что мне нужен был конкретный драйвер для денежного ящика. Как только я получил это, код работал (после того, как я нацелил правильное устройство в методе .Open(). – Ortund