延迟连续写入串口

时间:2011-04-07 07:31:29

标签: java serial-port

我正在通过RS 232串口向GSM调制解调器发送“AT”命令以发送消息。 我在“for”循环中这样做,我需要知道如何减少在for循环中为成功发送消息而需要提供的延迟。

延迟变化很大,例如将消息发送到10 ppl,延迟3800ms就足够了,但对于200个接收者,延迟需要增加到9000ms。

环境 - Netbeans,javax.comm api,具有波特率的wavecom fastrack调制解调器 - 115200 [支持],RS232串口连接。

我正在做类似的事情 -

 OutputStream os = serialPortInstance.getOutputStream();  
 String arrOfNumbers = {"872346334","23423433"};//I have the list of numbers here  
 String command = "";   
 for(int i = 0 ;i < arrOfNumbers.length ; i++){
     command = "AT+CMGS=\""+arrOfNumbers[i]+"\"\nHello" + ((char)26);
     os.write(command.getBytes());
     Thread.sleep(5000);  
 }

我想尽量减少这种延迟 请帮助, 谢谢。

2 个答案:

答案 0 :(得分:3)

延迟是超级的 - OutputStream将阻塞,直到所有数据都被写入。你的真正的问题可能是你发送命令后设备正忙,如果你太快发送它就会中止上一个命令。

通过检查设备的回复可以避免这种情况。在每个命令之后,您还需要打开一个InputStream并等待以获取设备的回复。有关可能给出的回复,请参阅设备手册。

答案 1 :(得分:0)

这会使你的for循环更有效:

 final OutputStream os = serialPortInstance.getOutputStream();  
 final String arrOfNumbers = {"872346334","23423433"};//I have the list of numbers here
 final Byte[] commands = new Byte[arrOfNumbers.length];
 for(int i = 0 ;i < arrOfNumbers.length ; i++){
     final String commandString = "AT+CMGS=\""+arrOfNumbers[i]+"\"\nHello" + ((char)26);
     commands[i++] = commandString.getBytes(); 
 }

 for (int i = 0; i < arrOfNumber.length; i++) {
    os.write(commands[i]);
    os.flush();
    Thread.sleep(5000);
 }