Java me j2me中使用commConneciton API的串行通信

Java me j2me中使用commConneciton API的串行通信,java-me,serial-port,modbus,Java Me,Serial Port,Modbus,我为迅驰芯片开发了一个j2me应用程序。那个芯片连接到一个EZ功率计上。我想使用Modbus协议通过串行通信RS-232从EZ仪表读取数据 我有一些代码用于发送Modbus请求读取保持寄存器 //declare variable here CommConnection commConn; InputStream inStream; OutputStream outStream; //这里使用commconnection打开com端口 String strCOM = "c

我为迅驰芯片开发了一个j2me应用程序。那个芯片连接到一个EZ功率计上。我想使用Modbus协议通过串行通信RS-232从EZ仪表读取数据

我有一些代码用于发送Modbus请求读取保持寄存器

 //declare variable here
 CommConnection  commConn;
 InputStream     inStream;
 OutputStream    outStream;
//这里使用commconnection打开com端口

String strCOM = "comm:COM1;baudrate=9600;bitsperchar=8;stopbits=1;parity=even;blocking=on;autocts=off;autorts=off";
commConn = (CommConnection)Connector.open(strCOM);
inStream  = commConn.openInputStream();
outStream = commConn.openOutputStream();
//这里创建modbus协议请求。我要读持有登记册地址1000这是2号登记册

    byte[] buffer = new byte[100];

    byte[] frame1 = new byte[] {(byte) 0x01, (byte) 0x03, (byte) 0x03, (byte) 0xE8, (byte) 0x00, (byte) 0x02, (byte) 0x34, (byte) 0xBA};
    outStream.write(frame1,0,frame1.length);//write(frame1);
    outStream.flush();
    int available1 = inStream.available();
    System.out.println("inStream Available : "+inStream.available());
    readBytes = inStream.read(buffer,0,available1);

    System.out.println("Read Integer : "+readBytes +" and Bytes size : "+buffer.length);
我总是读取0字节的响应。我不知道怎么了。如果我写错代码,请指导我


提前感谢。

available()
通常返回0(对于许多类型的流),因此它不是很有用。尝试一下
inStream.read(buffer)

请查看Opps中的示例部分!芯片到仪表连接上的连接错误。我已经修好了。在以上代码之后,如果找到工作。我能从仪表上读出数据。感谢您的重播,我现在用上面的更改测试代码冻结在“readBytes=inStream.read(buffer)”行。你能告诉我为什么会这样吗?一般来说,
read
会一直阻塞,直到输入数据可用为止。因此要么没有数据,要么由于连接字符串中有
blocking=on
,因此没有足够的数据来填充缓冲区-如果这就是
blocking
选项(“读取时等待完全缓冲区”)的含义。您可以尝试删除此选项,或者使用
read()
尝试读取单个字节。无论如何,无论是
read(buffer)
还是
read(buffer,offset,length)
都不能保证它将读取
buffer.length
length
字节,因此您需要一直读取,直到根据协议有足够的字节为止。