C# 为什么可以';opos是否使用常用控件找到我的现金抽屉?
就像,我有一个相似的问题 我的现金抽屉通过RJ11连接到电脑(我想无论如何它是11…)连接到我的打印机,这是一台C# 为什么可以';opos是否使用常用控件找到我的现金抽屉?,c#,opos,C#,Opos,就像,我有一个相似的问题 我的现金抽屉通过RJ11连接到电脑(我想无论如何它是11…)连接到我的打印机,这是一台合作伙伴RP-600热敏打印机 我的打印机工作正常,但我无法打开现金抽屉 基本上,我认为这应该如何工作(基于我有限的理解是: 开放式打印机 索赔打印机 启用打印机 打开现金抽屉 索赔现金抽屉 启用现金抽屉 打开五金抽屉 我已经尝试了很多方法,但我得到了以下错误: OPOS_E_CLOSED=101,但最常见的是 OPOS_E_NOEXIST=109 如果我将其设置为drawer.Op
合作伙伴RP-600热敏打印机
我的打印机工作正常,但我无法打开现金抽屉
基本上,我认为这应该如何工作(基于我有限的理解是:
开放式打印机
索赔打印机
启用打印机
打开现金抽屉
索赔现金抽屉
启用现金抽屉
打开五金抽屉
我已经尝试了很多方法,但我得到了以下错误:
OPOS_E_CLOSED=101,但最常见的是
OPOS_E_NOEXIST=109
如果我将其设置为drawer.Open(“rp-600打印机”)
,我会得到OPOS\u E\u非法=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无法找到现金抽屉?您的屏幕截图显示,现金抽屉LDN是“rp现金抽屉”,但您的代码使用的是“rpd”
您应该使用配置的LDN打开设备,如:
drawer.Open("rp-cashdrawer");
抽屉和打印机是独立的设备,您不需要打开/认领打印机才能使用抽屉。此外,如果尚未打开/认领打印机,请尝试安装公用控制对象(位于此处:)@Josh Anderson只是想澄清一下,你知道现金抽屉没有连接到电脑,而是连接到打印机,对吗?因为我仍然收到109错误代码,我知道,这些现金抽屉可能很麻烦。看到你的最新编辑,我以为你在使用Microsoft的POS for.Net,而不是直接使用公共控制类Es、 我对它们不太熟悉,但是有没有一种方法可以枚举每一个安装的特定类型的设备,看看它是否出现?也可能是_drawer.Open()方法需要一个服务对象名,而不是逻辑设备名。oposcapshdrawer类中似乎没有相应的方法。虽然这是一个有效点,但现金抽屉无法打开的原因是我需要现金抽屉的特定驱动程序。一旦我得到了这个驱动程序,代码就正常工作了(在我在.Open()方法中找到正确的设备之后。
drawer.Open("rp-cashdrawer");