0

我正在编写一个程序,该程序在写入时从条形码读取和写入我的问题(向条形码发送命令)

我在 pdf 制造商条形码中读到捕获图像的命令是 IMGSNP 所以我将它传递给写入函数,如下所示 serialPortObj.write ("IMGSNP")

但是为什么没有条码来响应命令呢?并且没有捕获图像:(这是错误的方式吗(在某些情况下我可能需要拍摄图像不是条形码本身而是护照或产品等的图像。其中不包含条形码)条形码制造商是手持式( 4800p)感谢您的帮助

这是我的代码

    private  SerialPort Com ;        
    private delegate void DataReadDel(string Text);

    private void Form1_Load(object sender, EventArgs e)
    {
        Com = new SerialPort("COM4");
        Com.Open();
        Com.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
    }
    private void port_DataReceived(object sender,SerialDataReceivedEventArgs e)
    {
        Com.Encoding = Encoding.Default;
        this.BeginInvoke(new DataReadDel(DataReceived), new object[] {Com.ReadExisting() });
    }
    private void DataReceived(string dR)
    {
        textBox1.Text = dR;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        if (! Com.IsOpen )
        {
            Com.Open();
        }
        Com.Write("IMGSNP1B1L");
        Com.Write("IMGSHP");
        string imgbytes = Com.ReadExisting();// return ""
    }
4

4 回答 4

2

您需要将串行命令标头与 IMGSNP 命令一起发送,以使扫描仪捕获并发送图像。标头是三个 ASCII 字符:SYN M CR (ASCII 22,77,13)。

于 2010-05-25T12:02:48.120 回答
1

您确定条形码阅读器没有捕获图像吗?根据文档:

处理Image Snap ( IMGSNP ) 命令时拍摄图像。最后一张图像始终存储在内存中。您可以使用IMGSHP命令“发送”图像。

因此,您可能正在使用IMGSNP拍摄图像,但所发生的只是将图像存储在内存中,而不是将其作为响应发送回您。然后尝试发出IMGSHP命令,看看是否有任何数据要从您的串行端口读取。

于 2009-10-18T17:12:17.277 回答
1

在设备考虑接受您的请求之前,您需要先发送 SYN M CR。

以下信息是使用我自己的条形码阅读器在尝试做一些非常相似的事情时获得的。

使用 IMGSHP 时,设备会回复 SYN (0x16),后跟 0xfe [4 字节数据长度,小端序] 0x0d [一些数据] 0x1d [图像数据]

于 2012-01-28T03:34:21.153 回答
0

除了命令本身,您是否必须提供任何终止字符?

一种常见的方法是将命令包包装在 STX 和 ETX 字符中,这样条形码阅读器就会知道何时收到完整的命令,或者可能只是以回车符 (CR) 和换行符 (LF) 结束。您需要检查规格。

此外,由于您要发送字符串,因此编码可能很重要,我希望条形码阅读器需要向其发送 ASCII 字符,但同样,您应该检查单位以确定。

我怀疑发送命令的最简单方法是将其作为字节数组发送,这使得在必要时更容易使用 STX、ETX、CR 或 LF 字符,因为这些是不可打印的字符并且具有以下值:

STX = 0x02,ETX = 0x03,CR = 0x0D,LF = 0x0A

于 2009-10-19T16:42:39.193 回答