Java me j2me中使用commConneciton API的串行通信
我为迅驰芯片开发了一个j2me应用程序。那个芯片连接到一个EZ功率计上。我想使用Modbus协议通过串行通信RS-232从EZ仪表读取数据 我有一些代码用于发送Modbus请求读取保持寄存器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
//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
字节,因此您需要一直读取,直到根据协议有足够的字节为止。