За последние 24 часа нас посетил 15261 программист и 1671 робот. Сейчас ищут 833 программиста ...

Работа с GSM модемом

Тема в разделе "Прочие вопросы по PHP", создана пользователем Olfi, 5 окт 2011.

  1. Olfi

    Olfi Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    10
    Симпатии:
    0
    $f = fopen ("COM6", "w+");
    fputs($f, "ATDХХХХХХХХХ\r");
    while ($s = fgets($f,5)) echo "[".$s."]";
    fclose($f);


    Пытаюсь наладить работу с GSM модемом. Номер набирает, но ничего не отвечает ни на какие ATкоманды, нет обратной связи. Подскажите, как это исправить.
    ОС - Windows7
    Модем - встроенный в телефон Nokia 2690
     
  2. asik

    asik Активный пользователь

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    а что нужно реализовать? и что ты хотел-бы увидить в ответ на АТDT?
     
  3. Olfi

    Olfi Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    10
    Симпатии:
    0
    нужно общаться с модемом, например на команду АТ получать ответ "ОК"
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    попробуй читать под одному байту
     
  5. Olfi

    Olfi Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    10
    Симпатии:
    0
    пробую, ответ - пустой. т.е. в ответ на


    $f = fopen ("COM6", "w+");
    fputs($f, "AT\n");
    echo "AT";
    while (!feof ($f)) {
    $s = fgets($f,1);
    echo $s."[".ord($s)."]";
    }
    fclose($f);


    получается

    AT[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]...[0]
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Ты уж определись чем закрывать надо. Может быть, вообще \0?
     
  7. georgela

    georgela Активный пользователь

    С нами с:
    11 май 2011
    Сообщения:
    395
    Симпатии:
    0
    Таким макаром php позволяет работать с com портами?
     
  8. Olfi

    Olfi Активный пользователь

    С нами с:
    1 окт 2008
    Сообщения:
    10
    Симпатии:
    0
    ну вроде. в мануале fopen так написано. У меня получилось т.о. открыть "файл" и заставить модем набрать номер телефона. Т.е. работает.

    я не знаю точно, как правильно
     
  9. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    можно поискать php com в интернетах. советы сводятся к двум видам: работать через файл и через расширение пхп (они в основном платные). работа через файл реализована в скрипте, который на достаточно высоких позициях в выдаче и что самое интересное - этот скрипт работает. только автор скрипта обращает внимание на то, что под виндовс удаётся только открыть и писать в ком-порт, читать не удаётся. под линуксом получается полноценная работа. ну и как один из хаков данной проблемы - поставить виртуалку с линуксом и из под неё запускать скрипт для работы с ком-портом - так всё работает.
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Я не пробовал, но в теории может сработать - открыть COM на запись, записать, ЗАКРЫТЬ, открыть на чтение и прочитать
     
  11. asik

    asik Активный пользователь

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    так нельзя
    Для "правильной" работы юзайте библиотеку phpSerial.php
    примерно вот так:
    PHP:
    1.  
    2. <?php
    3.   $serial = new phpSerial;
    4.  
    5.   $serial->deviceSet("/dev/ttyS0");
    6.   $serial->confBaudRate(115200);
    7.   $serial->confCharacterLength(8);
    8.   $serial->confParity("none");
    9.   $serial->confStopBits(2);
    10.   $serial->confFlowControl("none");
    11.  
    12.   $serial->deviceOpen();
    13.  
    14.   $serial->sendMessage(chr(27));
    15.  
    16.   $serial->sendMessage("AT+CMGF=1\r");
    17.   $read = $serial->readPort();
    18.