2015-10-07 30 views
0

在几乎相同的方式为this guy was having a problem,我有一个类似的问题...为什么不能使用通用控件找到我的钱箱?

我cashdrawer通过RJ11连接到PC(我认为它的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设置设备名称。

那么,我在做什么错误,这是防止opos找到现金抽屉?

+0

抽屉和打印机是单独的设备,你不应该需要打开/要求打印机以使用抽屉。另外,如果您还没有,请尝试安装通用控制对象(位于此处:http://monroecs.com/oposccos_current.htm)。 –

+0

@JoshAnderson要清楚,你知道现金抽屉没有连接到电脑,而是连接到打印机,对吧?因为我仍然得到了109错误代码 – Ortund

+0

我知道,那些钱箱可以是讨厌的。 刚刚看到你最新的编辑,我以为你使用Microsoft的POS为.Net而不是直接使用公共控制类。我对它们不太熟悉,但是有没有一种方法可以通过每种特定类型的已安装设备进行枚举来查看它是否显示出来?也可能是_drawer.Open()方法需要一个服务对象名称,而不是逻辑设备名称。 –

回答

0

您的屏幕截图显示cashdrawer LDN是“rp-cashdrawer”,但您的代码正在使用“rpd”。

drawer.Open("rpd"); 

你应该配置的LDN被打开设备,如:

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

尽管这是一个有效的观点,但现金抽屉无法打开的原因是因为我需要现金抽屉的特定驱动程序。一旦我得到了这些,代码就工作了(在我将.Open()方法中的正确设备作为目标之后。 – Ortund

相关问题