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