2011-04-07 55 views
0

我正在通過RS 232串口向GSM調制解調器發送「AT」命令來發送消息。 我這樣做是爲了「for」循環,我需要知道如何減少我需要在for循環中提供的成功發送消息的延遲。延遲連續寫入串口

延遲差別很大,例如發送消息到10ppl時,3800ms的延遲就足夠了,但對於200個接收者,延遲需要增加到9000ms左右。

環境 - Netbeans,javax.comm api,波特率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); 
} 

我想這種延遲最小化。
請幫助, 謝謝。

+0

什麼影響所需的延遲? (如何計算出?) – 2011-04-07 07:36:41

+0

arrOfNumbers的長度會影響所需的延遲時間。 – Gyan 2011-04-12 12:32:30

回答

3

的延遲superflous - OutputStream的將阻塞,直到所有的數據已經寫入。您的真實問題可能是您的設備在發送命令後很忙,如果過早發送它,將會中止上一條命令。

這可以通過檢查設備的回覆來避免。您還需要在每個命令之後打開一個InputStream和等待以獲取來自設備的回覆。請參閱設備手冊,瞭解它提供了哪些可能的答覆。

+0

是的。這並沒有解決問題,但得到了方向。 「調制解調器的手冊」。調制解調器的處理速度明顯低於for-loop的速度。 (比較糟糕的英特爾芯片發射速度負載)。好點@Durandal。 – Gyan 2012-07-31 12:58:35

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); 
} 
+0

感謝您的回答。但是我不能將byte []作爲final,Im在for循環中使用相同的賦值,之後。 我想減少實際發送消息的延遲,代碼執行延遲 - 我可以負擔我的情況。 – Gyan 2012-07-29 14:57:55

+1

好吧,我的錯誤,你可以離開最後這樣:Byte [] commands = new Byte [arrOfNumbers.length];但這仍然是我的答案,只有那麼小的修正。你想減少5秒延遲?爲什麼你有5秒的延遲呢?任何方式都是永恆的。 – ricardoespsanto 2012-07-30 13:17:11

+0

是真的,根據Durandal的回答 - 我參考了調制解調器的手冊。調制解調器的處理過程需要一點時間。因此,延遲。 – Gyan 2012-07-31 12:59:49