如何使用串口从J2ME中的血糖仪获取数据?

时间:2013-03-11 10:27:40

标签: java-me serial-port

我必须申请GPRS调制解调器JAVA (J2ME)可编程,必须与电子医疗设备(血糖仪)接口

我在设备的串口上有一个输入缓冲区和一个输出缓冲区。

当应用程序启动时,我在串口上收听,我从血糖仪收到一个带十进制代码“5”的字节,对应于ASCII表,查询符号,15秒后我得到字节“ 4“对应于传输结束。

要从血糖仪接收数据,我需要发送一个ACK信号(确认),它对应于字节“6”。 我尝试了以下形式:

outBuffer.write("ACK\r\n".getBytes()); //first without setting the charset and after I trying to set all the charset.

我试图像这样发送一个字节缓冲区:

byte[] bSend = new byte[] { 6 }; outBuffer.write(bSend); //(I tried also with the byte 10 (LF) and 13 (CR)).

结果是我无法接收数据,但我得到周期性但只有值5和4。

如果发送ACK消息,所有可以与串口(如串行监视器)通信的软件我都能正确地从血糖仪接收数据。

我认为我的问题是由于Java中的ACK编码的价值,有人可以指出任何解决方案吗?

2 个答案:

答案 0 :(得分:1)

由于这似乎是一个使用ASCII控制字符进行通信的相当低级别的接口,我认为你需要逐字发送这些字节值,而不需要像换行符或其他任何东西。这意味着

byte[] bSend = new byte[] { 6 }; 
outBuffer.write(bSend);

是正确的方法吗?现在,这个协议看起来很像ASTM E1381,所以我查了here,第6.1.2段可能与你的问题有关:

  

当仪表启动建立阶段时,仪表确定   如果通过最初发送<ENQ>字符来连接计算机。   如果计算机通过发送<ACK>在15秒内响应   字符,仪表进入数据传输模式。如果是电脑   使用<NAK>字符在15秒内响应,仪表发送一个   <EOT>然后通过查找来尝试进入远程命令模式   来自计算机的<ENQ>字符。另请参见“6.2节远程   命令模式协议“。在15秒内对仪表的任何响应   除了<ENQ><ACK>字符之外的<NAK>会导致电表发送   <EOT>,延迟一秒,然后发送另一个<ENQ>。如果是电脑   在15秒内没有响应,然后仪表发送<EOT>,   延迟一秒,然后发送另一个<ENQ>并再次等待   来自电脑的回应。 注意:发送<ENQ>后一秒钟,   仪表可以进入低功率模式。因此,有可能   计算机发送的第一个<ACK>未正确读取。在   在这种情况下,仪表以<EOT>响应,延迟一秒,然后   发送另一个<ENQ>

强调我的,我想这就是发生的事情。因此,您应该重复发送另一个ENQ以使其进入数据传输模式,假设这就是您想要的。

答案 1 :(得分:0)

它应该是 byte bSend =(byte)0x6; outBuffer.write(BSEND);