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

Java me 如何使用串口从J2ME中的血糖仪获取数据?,java-me,serial-port,Java Me,Serial Port,我必须做一个GPRS调制解调器JAVA(J2ME)的应用程序,该程序必须与电子医疗设备(血糖仪)接口 我在设备的串行端口上有一个输入缓冲区和一个输出缓冲区 当应用程序启动时,我通过串行端口监听,从血糖仪接收到一个字节,该字节带有十进制代码“5”,对应于ASCII表中的查询符号,15秒后,我得到对应于传输结束的字节“4” 为了从血糖仪接收数据,我需要发送一个与字节“6”对应的ACK信号(确认)。 我尝试了以下形式: exputffer.write(“ACK\r\n.getBytes())//首先不

我必须做一个GPRS调制解调器JAVA(J2ME)的应用程序,该程序必须与电子医疗设备(血糖仪)接口

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

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

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

exputffer.write(“ACK\r\n.getBytes())//首先不设置字符集,然后尝试设置所有字符集。

我尝试发送一个字节缓冲区,如下所示:

byte[]bSend=新字节[]{6};
突发写入(bSend)//(我也尝试了字节10(LF)和13(CR))。

结果是我无法接收数据,但我得到了​​循环,但仅为值5和4

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


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

因为这似乎是一个非常低级的接口,使用ASCII控制字符进行通信,我认为您需要逐字发送这些字节值,而不需要额外的东西,如换行符或其他东西。这意味着

byte[] bSend = new byte[] { 6 }; 
outBuffer.write(bSend);
这是正确的方法。现在,这个协议看起来很像ASTM E1381,所以我检查了一下,第6.1.2段可能与您的问题有关:

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

强调我的,我想这就是正在发生的事情。因此,您应该重复发送另一个ENQ以使其进入数据传输模式,假设这是您想要的 字节bSend=(字节)0x6;
突发写入(bSend)

情况正是如此。我读过与拜耳Contour XT相同的文件。之前我忘了写,我以循环的方式向仪表接收到的每条消息发送一个ACK,所以我不限制自己只发送一个ACK,没有结果……我非常确定发送ACK字节的方式是正确的。如果可能的话,请查看GPRS调制解调器使用的电压水平,可能它的Tx信号使用了血糖仪无法可靠检测到的电压(使用示波器即可轻松完成-有关应工作的电压范围,请参阅链接文档的第27页)。另外,有一个串行端口嗅探器是非常方便的。也许调用flush()会有所帮助?谢谢大家的贡献!目前,我没有直接在GPRS调制解调器上使用该软件,而是通过电脑上的模拟器使用。我已经测试了该模拟器,它工作正常,因为在尝试从血糖仪获取数据之前,我尝试使用命令查询GPRS调制解调器,我也可以通过shell发送命令,我没有问题!我已经尝试过使用FLUSH方法。使用嗅探器串行端口是个好主意。你知道一些Windows软件吗(可能是免费的)?IMO纯软件嗅探器对嵌入式工作没有多大用处,所以我不能推荐那里的产品,现在我主要使用a来分析通信。这不是免费的,但它是一个非常通用的伟大的小设备,我只能推荐。缺点是,您需要访问通信的TTL端(线路驱动器的“内部”),您不能仅将其卡在RS232链路上。