我正在编写一个从条形码读取和写入的程序 我写的问题(向条形码发送命令)
我在pdf制造商条形码中读到捕获图像的命令是IMGSNP所以我把它传递给写函数如下serialPortObj.write(“IMGSNP”)
但为什么没有条形码来响应命令?并没有捕捉图像:( 这是错误的方式 (在某些情况下我可能需要拍摄图片不是为了自己的条码而是用于护照或产品等的图片。其中不包含条形码) 条形码制造商是HandHeld(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 ""
}
答案 0 :(得分:2)
您需要发送串行命令标头以及IMGSNP命令以使扫描仪捕获并发送图像。标题是三个ASCII字符:SYN M CR(ASCII 22,77,13)。
答案 1 :(得分:1)
您确定条形码阅读器没有捕获图像吗?根据文件:
处理图像捕捉( IMGSNP )命令时拍摄图像。最后一张图像始终存储在内存中。您可以使用 IMGSHP 命令“运送”图像。
因此,您可能正在使用 IMGSNP 拍摄图像,但所有发生的事情是它将图像存储在内存中,而不是将其作为响应发送给您。然后尝试发出 IMGSHP 命令,看看是否有任何数据要从串口读取。
答案 2 :(得分:1)
您需要先在设备考虑接收请求之前发送SYN M CR。
使用我自己的条形码阅读器获取以下信息,同时尝试做类似的事情。
当使用IMGSHP时,设备将回复SYN(0x16),然后是0xfe [4字节数据长度,小端] 0x0d [某些数据] 0x1d [图像数据]
答案 3 :(得分:0)
除命令本身外,您还必须提供任何终止字符吗?
一种常见的方法是将命令包包装在STX和ETX字符中,这样条形码阅读器就会知道何时收到完整的命令,或者可能只是以回车符(CR)和换行符(LF)结束。你需要查看规格。
另外,由于你发送的是字符串,编码可能很重要,我希望条形码阅读器需要发送ASCII字符,但是你应该再次检查单元。
我怀疑发送命令的easiset方法是将其作为一个字节数组发送,这样可以在必要时更容易使用STX,ETX,CR或LF字符,因为它们是不可打印的字符并具有以下值:
STX = 0x02,ETX = 0x03,CR = 0x0D,LF = 0x0A