Задержка непрерывной записи в последовательный порт - PullRequest
0 голосов
/ 07 апреля 2011

Я пишу «AT» команды на модем GSM через последовательный порт RS 232 для отправки сообщений.Я делаю это в цикле «for», и мне нужно знать, как уменьшить задержку, которую я должен предоставить в цикле for для успешной отправки сообщений.

Задержка сильно варьируется, например, для отправкидля сообщения до 10 чел. достаточно задержки в 3800 мс, но для 200 получателей задержка должна быть увеличена до 9000 мс.поддерживается], подключение через последовательный порт 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 ]

3 голосов
/ 30 июля 2012

Задержка является излишней - OutputStream будет блокироваться, пока все данные не будут записаны.Ваша реальная проблема, вероятно, в том, что устройство занято после отправки ему команды, и прервет предыдущую команду, если вы отправите другую слишком рано.

Этого можно избежать, проверив ответы отУстройство.Вам также необходимо открыть InputStream и ждать ответа от устройства после каждой команды.Проконсультируйтесь с руководством устройства о возможных ответах, которые оно дает.

0 голосов
/ 28 июля 2012

Это сделает цикл 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);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...