Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/75: Рейтинг темы: голосов - 75, средняя оценка - 4.88
4 / 4 / 4
Регистрация: 10.05.2014
Сообщений: 60

PHP + COM порт

10.05.2014, 15:51. Показов 15079. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Стоит задача реализовать отправку смс через 3g модем средствами пхп. Воспользовался классом php_serial.class.php, но скрипт отправки отправки отказывается работать с com портом, указываю ошибку, что порт не верный. Проблема как для меня - доступ к com порту запрещен. Прежде никогда не работал с com портами, но считаю, что все должно работать, так как на сервере стоит два модема и на один модем комманды уходят, но он используется другим(аналогичным) ПО, написанным на делфи и его использовать нельзя. Модем Huawei, как мне заставить модем работать с php. утилита Putty отправляет сообщения с этого модема . Пример скрипта

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
include 'php_serial.class.php';
 
// Let's start the class
$serial = new PhpSerial;
 
// First we must specify the device. This works on both linux and windows (if
// your linux serial device is /dev/ttyS0 for COM1, etc)
$serial->deviceSet("COM1");
 
// We can change the baud rate, parity, length, stop bits, flow control
$serial->confBaudRate(2400);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
 
// Then we need to open it
$serial->deviceOpen();
 
// To write into
$serial->sendMessage("Hello !");
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2014, 15:51
Ответы с готовыми решениями:

PHP и Arduino. COM порт. Не сохраняется $_SESSION
Требуется управлять платой Arduino по usb - ком интерфейс. Ос ubuntu. Отправка в ком порт - как и в файл: fopen, fwrite. Сначала делал...

Ищу помошников, для того что бы закончить порт UglifyJS на PHP
Привет всем, я ищу помощь. Сам я программист но из за учебы сейчас не достаточно времени что бы заняться этим делом самому, по этому дал...

Открыть порт 4444 в брэндмауэре. Антивируса нет. провайдером порт открыт
Подскажите как открыть данный порт,все делал как тут http://windows.microsoft.com/ru-ru/windows/open-port-windows-firewall#1TC=windows-7....

24
4 / 4 / 4
Регистрация: 10.05.2014
Сообщений: 60
27.05.2014, 23:43  [ТС]
В общем никто не знает. В прочем разобрался и выяснил, что свободно контачит с модемами Pantech и с мобильными устройствами, модемы ZTE подходят, но их нужно "пинать", отправив несколько команд через Putty, при этом программа интерфейсного управления должна быть открыта. Но вот осталось загадкой - модемы Huiwei не дают php классу пользоваться com портами.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 9
11.01.2015, 11:39
CarterSS, сегодня полдня точно так же проигрался с 3G модемом Huawei E173 и отправкой СМС с PHP-скрипта.
Все примеры в интернете перепробовал, но СМС не уходят. С штатной программы улетают на "раз-два".

Но, есть одно "НО". Пользуюсь так же программкой - и СМС улетают на УРА, при том что улетают как из самой программы, так и через VBS-скрипт.
Запуск VBS-скрипта идет с PHP-скрипта. Криво, но как-то работает... Но хотелось бы работать с модемом напрямую с PHP-скрипта.

Добавлено через 1 час 12 минут
Работает... :-)
Оказывается, забыли включить в пример первоначальную АТ-команду "AT"
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?PHP
    require "php_serial.class.php";
 
    $tTime = time();
 
    $serial = new phpSerial;
    $serial->deviceSet("COM9");
    $serial->confBaudRate(115200);
 
    // Then we need to open it
    $serial->deviceOpen();
 
    // To write into
    $serial->sendMessage("AT\n\r");
    $serial->sendMessage("AT+CMGF=1\n\r");
    $serial->sendMessage("AT+CMGS=\"НОМЕР_ТЕЛЕФОНА\"\n\r");
    $serial->sendMessage("Test SMS via PHP - ".date("Y-m-d H:i:s", $tTime)."\n\r");
    $serial->sendMessage(chr(26));
 
    //wait for modem to send message
    sleep(1);
    $read=$serial->readPort();
    $serial->deviceClose();
?>
модем Huawei E173

так же где-то в интернете читал, что желательно после каждой команды делать задержку и считывать информацию с порта - если кто знает, подскажите, нужно или нет.

Добавлено через 13 часов 54 минуты
CarterSS, Вы правы.
Huawei пингвин гордый. Нужно его "пинать" через heperterminal. И то, не всегда выходит
0
4 / 4 / 4
Регистрация: 10.05.2014
Сообщений: 60
13.01.2015, 11:32  [ТС]
kvo_ua, Для меня эта тема уже не актуальна, но все же, я добился максимально возможного взаимодействия, все вышеуказанные примеры должны работать. Вот чем я пользовался в итоге:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
include "php_serial.class.php";
// начало класса
$serial = new phpSerial;
$serial->deviceSet("COM15"); //com порт модема
$serial->confBaudRate(9600);
$serial->confCharacterLength(8);
$serial->confParity("none");
$serial->confStopBits(1);
$serial->confFlowControl("xon/xoff"); // управление потоком
$serial->sendMessage("AT+CMGF=1\r");
sleep(3);
$serial->sendMessage("AT+CMGS=\"$phone\"\r");
$serial->sendMessage($message.chr(26));
sleep(3);//ждем отправку сообщения
$serial->deviceClose();
sleep(4);//ждем закрытие устройства
Как видно из примера я делал задержку между командами.
P.S. Модем Huiwei приходилось однократно при подключении к ПК "открывать" через гипертерминал, дальше он взаимодействовал со скриптом до последующего отключения\подключения к ПК.
0
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
 Аватар для Tatikoma
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
13.01.2015, 14:09
Этот класс write-only под Windows (и rw под *nix), не интересно.

Я для работы с COM-портами использую http://pecl.php.net/dio , работает прекрасно. Вероятно и в вашем случае компиляция (вру, там есть готовая DLL'ка под Windows!) этого расширения решит проблему без костылей вроде коннекта к порту из стороннего ПО. Правда конфигурировать КОМ-порт придется все равно через сторонние утилиты (аналогично тому, как это делает php_serial.class.php).

Правда после написания своих велосипедов на PHP, - я случайно наткнулся что в расширениях к Chroimium-based браузеру можно обращаться напрямую к COM-портам, что кстати тоже очень интересное решение в рамках стека веб-технологий, например (гуглить "chrome serial api"):
JavaScript
1
2
3
chrome.serial.connect('yourDevicePath', {bitrate: 115200}, function(openInfo) {
    console.log(openInfo);
});
0
Заблокирован
13.01.2015, 18:44
странная идея заставить веб-сервер отдать доступ к своим аппаратным ресурсам.. и самое странное, что это не считается ненормальным и всерьез обсуждается. блажен кто верует, кто ищет тот всегда найдет(не всегда, правда найдет и не всегда блажен). Вопрос как обычно в личном отношении к образованию. Всегда приятней помыться пассатижами в бане, пассатижи-то свои..
1
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
 Аватар для Tatikoma
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
13.01.2015, 18:47
root, почему обязательно веб-сервер?

У меня это терминал на raspberry pi, у него есть картридер и ко всему этому счастью - веб-интерфейс, как раз на chromium. Работать с картридером прямо из JS очень даже логично (т.к. картридер напрямую связан с пользовательским интерфейсом), нежели гонять на локалхост запросы (и тут уже не важно, - общаешься ты дальше с ним из PHP или из C++, тут уже костыль), чтобы обратится к картридеру.

Или по-вашему делать терминалы на веб-технологиях - тоже бред?.. ;-)

PS: Нет, не тормозит.
0
Заблокирован
13.01.2015, 19:04
Цитата Сообщение от Tatikoma Посмотреть сообщение
почему обязательно веб-сервер?
не знаю, вроде бы как раздел форума обязывает.. хотелось бы следовать.. ээ правилам..

Добавлено через 2 минуты
Цитата Сообщение от Tatikoma Посмотреть сообщение
У меня это терминал на raspberry pi, у него есть картридер и ко всему этому счастью
хороший у вас сервант.. У меня доступ к серверу только через веб.. к кардридерам доступ получу, если штурмом возьму датацентр

Добавлено через 1 минуту
а если я доступ получу, то не пых использовать буду для доступа к портам.. Но как обычно простые пути не для нас
0
13.01.2015, 19:10

Не по теме:

Цитата Сообщение от root Посмотреть сообщение
не знаю, вроде бы как раздел форума обязывает.. хотелось бы следовать.. ээ правилам..
Поясните о каких конкретно правилах речь? - Это раздел PHP, он умеет работать без веб-сервера и многие люди этим активно пользуются, т.к. PHP уже переболел детские болезни и может использоваться в серьезном продакшне в различных целях.
Цитата Сообщение от root Посмотреть сообщение
хороший у вас сервант.. У меня доступ к серверу только через веб.. к кардридерам доступ получу, если штурмом возьму датацентр
У меня что-то типа платежного терминала, типа как у QIWI, типа пополнить баланс на мобильник за пару минут. Вы же понимаете что моя железка явно не ставится в датацентр? - Т.е. получается ваша критика относится именно к тому, что вам никогда не приходилось делать всяких классных интересных штук на пхп? - Сожалею об этом :-)
Цитата Сообщение от root Посмотреть сообщение
а если я доступ получу, то не пых использовать буду для доступа к портам.. Но как обычно простые пути не для нас
Почему? - К минусам PHP я могу отнести только его быстродействие, но минутку, мы работаем с COM-портом, тут быстродействие в 99% случае не к месту (исключение, - если для общения с устройством подключенным по COM-порту требуются сложные вычисления, однако мне таких устройств не известно).

0
13.01.2015, 19:31

Не по теме:

Цитата Сообщение от Tatikoma Посмотреть сообщение
критика относится именно к тому, что вам никогда не приходилось делать всяких классных интересных штук на пхп?
классные штуки можно сделать паяльником, а потом ассемблером.. критика в том что не удобно убивать сторожа засохшим батоном из булочной. есть топор. кстати убивать нельзя. вот и вся критика

0
4 / 4 / 4
Регистрация: 10.05.2014
Сообщений: 60
14.01.2015, 09:53  [ТС]
Необоснованный спор. Мне приходилось писать приложение на том, что мне было ближе, к тому же действительно крутился веб-сервер, но доступ к ресурсам был у php скрипта и пользователь никак на это не влиял, он только лишь мог выполнять определенные, доступные ему функции через веб-интерфейс, а скрипт делал свою работу независимо. Решение тот еще костыль, но на тот момент этого функционала хватало вполне.
0
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
 Аватар для Tatikoma
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
14.01.2015, 15:39
root, вырезка из моего PHP-кода:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
include 'hcr900.class.php';
include 'amqp.class.php';
 
$amqp = new PHPAMQP();
$amqp->connect('host', 'user', 'password');
 
$device = new HCR900('/dev/ttyS0');
$device->reset();
$device->on('error', function($error) use(&$amqp){
    $amqp->message($error);
});
$device->activate();
 
while(true){
    $amqp->consume(function($message) use (&$device){
        $device->handleMessage($message);
    });
    usleep(100000);
}
А теперь попробуйте мне показать, как это можно сделать более, как вы говорите, "удобно"? - Отлично, покажите удобство =)

К слову, - этот код написан в крайне сжатые сроки и уже полгода в продакшне. За эти полгода - не было ни одного сбоя в работе картоприемника. Аптайм у терминала - 4 месяца, был ребут из-за отключения электричества.

Добавлено через 7 минут
Цитата Сообщение от CarterSS Посмотреть сообщение
Необоснованный спор. Мне приходилось писать приложение на том, что мне было ближе, к тому же действительно крутился веб-сервер, но доступ к ресурсам был у php скрипта и пользователь никак на это не влиял, он только лишь мог выполнять определенные, доступные ему функции через веб-интерфейс, а скрипт делал свою работу независимо. Решение тот еще костыль, но на тот момент этого функционала хватало вполне.
Просто программисты зачастую забывают, что самая главная задача при реализации ПО - в разумные сроки удовлетворить бизнес-требования. А бизнес-требования, нередко, оказываются совсем не очевидными для программиста.
Например я работал в интернет-магазине, прайс-листы от поставщиков приходили в разных странных форматах, - целый отдел специально обученных менеджеров эти прайсы приводил к единому виду и загружал в систему. Потом был потрачен месяц моего времени на автоматизацию процесса и отдел менеджеров уменьшился вдвое.
Смысл данной истории в том, что я пообщался в руководством на тему "чего сразу не автоматизировали-то?", - со мной поделились цифрами из которых следует, что так было дешевле до некоторого момента, а для бизнеса при этом результат был одинаковый, с той лишь разницей, что нанять несколько менеджеров было быстрее, чем тратить месяц на внедрение автоматизации.
Я это веду к тому, что не всегда перфекционизм уместен, иногда нужно уметь просто решать текущие проблемы. Это как раз то, чего совершенно не понимает некто root. Полагаю если он не поленится показать чем на его взгляд удобнее избегать, в данной ситуации, использования PHP - то он сам разберется в том, где же он просчитался и спор иссякнет =)
0
Заблокирован
14.01.2015, 20:18
Цитата Сообщение от Tatikoma Посмотреть сообщение
root, вырезка из моего PHP-кода:
замечательная вырезка без учета инклюдов.. а таам!!вырезка из чего?
Цитата Сообщение от Tatikoma Посмотреть сообщение
А теперь попробуйте мне показать, как это можно сделать более, как вы говорите, "удобно"? - Отлично, покажите удобство =)
зачем мне пробовать кому-то что-то показывать когда про удобства еще не начинался разговор
Цитата Сообщение от Tatikoma Посмотреть сообщение
Я это веду к тому, что не всегда перфекционизм уместен, иногда нужно уметь просто решать текущие проблемы. Это как раз то, чего совершенно не понимает некто root.
некто я предлагаю не какать на потолок, его можно измазать шваброй. это удобно и быстро
1
15.01.2015, 14:04

Не по теме:

Цитата Сообщение от root Посмотреть сообщение
замечательная вырезка без учета инклюдов.. а таам!!вырезка из чего?
Там аналогичный код, с тем же успехом можно обвинить то что сишный код превращается в машинные кода а там.. а там не кроссплатформенно! =)
Цитата Сообщение от root Посмотреть сообщение
ачем мне пробовать кому-то что-то показывать когда про удобства еще не начинался разговор
Как не начинался, если вы сами его начали?
Цитата Сообщение от root Посмотреть сообщение
некто я предлагаю не какать на потолок, его можно измазать шваброй. это удобно и быстро
Лично я предлагаю не мазать потолок говном, зачем вы хотите это сделать - понятно не до конца.

0
2 / 2 / 2
Регистрация: 27.12.2012
Сообщений: 80
10.08.2016, 12:35
Хотелось бы вновь поднять тему, т.к. появилась потребность, а реализовать пока не удается... Что делал: скачал php_serial.class.php, использовал скрипты от CarterSS и kvo_ua. Модем ZTE, предварительно отправлял СМС через Windows-приложение - все ОК. Посредством php - ошибки:

Warning: Specified serial port is not valid in /home/virtwww/w_sam-pskov-ru_9b2d315c/http/sms/php_serial.class.php on line 111

Warning: Unable to set the baud rate : the device is either not set or opened in /home/virtwww/w_sam-pskov-ru_9b2d315c/http/sms/php_serial.class.php on line 204

Warning: Unable to set length of a character : the device is either not set or opened in /home/virtwww/w_sam-pskov-ru_9b2d315c/http/sms/php_serial.class.php on line 298

Warning: Unable to set parity : the device is either not set or opened in /home/virtwww/w_sam-pskov-ru_9b2d315c/http/sms/php_serial.class.php on line 254

Warning: Unable to set the length of a stop bit : the device is either not set or opened in /home/virtwww/w_sam-pskov-ru_9b2d315c/http/sms/php_serial.class.php on line 335

Warning: Unable to set flow control mode : the device is either not set or opened in /home/virtwww/w_sam-pskov-ru_9b2d315c/http/sms/php_serial.class.php on line 376

Warning: Device must be opened in /home/virtwww/w_sam-pskov-ru_9b2d315c/http/sms/php_serial.class.php on line 541
Для начала вопросы:
1. Может все это актуально на локальной машине? Сейчас скрипты выполняю на сервере, модем воткнут в локаль.
2. Нужно ли что-то править в php_serial.class.php ?
3. Как пнуть модем через гипертерминал?

P.S. Сразу извиняюсь за, возможно, глупые вопросы.
0
4 / 4 / 4
Регистрация: 10.05.2014
Сообщений: 60
10.08.2016, 17:17  [ТС]
Цитата Сообщение от alsio Посмотреть сообщение
1. Может все это актуально на локальной машине? Сейчас скрипты выполняю на сервере, модем воткнут в локаль.
Модем воткнут в серверную машину? Просто ошибки смахивают на недоступность com порта вроде как, то ли он занят программой, то ли указан не тот com порт.
Цитата Сообщение от alsio Посмотреть сообщение
Как пнуть модем через гипертерминал?
Ну можно скачать утилиту Putty, подключиться к com порту, на котором висит железка и скормить ему пару команд, да хотя бы "AT".
Предлагаю тебе такой вариант, который я очень давно пробовал: отправляешь смс посредством родного приложения модема, после оставляешь его открытым и пытаешься пхп скриптом отправить смс.
С PHP давно работал, на сервере должна быть установлена библиотека по идее для работы с ком портом.
0
2 / 2 / 2
Регистрация: 27.12.2012
Сообщений: 80
10.08.2016, 17:27
Цитата Сообщение от CarterSS Посмотреть сообщение
Модем воткнут в серверную машину? Просто ошибки смахивают на недоступность com порта вроде как, то ли он занят программой, то ли указан не тот com порт.
Вот и я подумал, что тут и затупил. Модем воткнут в локальную машину. А все скрипты заливаю в инет на сервер хз куда. Т.е. по-идее мне надо денвер ставить и все выполнять на локальной машине (и скрипты и модем)?
0
4 / 4 / 4
Регистрация: 10.05.2014
Сообщений: 60
10.08.2016, 22:52  [ТС]
Цитата Сообщение от alsio Посмотреть сообщение
Т.е. по-идее мне надо денвер ставить и все выполнять на локальной машине (и скрипты и модем)?
Скрипт работы с модемом это же серверная часть, то есть все - и модем и веб-сервер привязаны только к одной машине, пусть даже будет твоя локальная, но если организуешь доступ с других машин, то ты так же будешь иметь возможность скрипт запускать и отправлять смс, это очевидная, я думаю, для тебя вещь. Если нужен пример скрипта, то попробую отыскать.
0
2 / 2 / 2
Регистрация: 27.12.2012
Сообщений: 80
11.08.2016, 10:16
Цитата Сообщение от CarterSS Посмотреть сообщение
Скрипт работы с модемом это же серверная часть, то есть все - и модем и веб-сервер привязаны только к одной машине
Понял уже Сегодня попробую реализовать на локальной машине, отпишусь. Спс.
0
2 / 2 / 2
Регистрация: 27.12.2012
Сообщений: 80
12.08.2016, 12:52
Поставил Денвер. Запустил скрипт CarterSS. Выдал:

Warning: Device must be opened in Z:\home\sms\www\php_serial.class.php on line 541
Скрипт kvo_ua:

Warning: Reading serial port is not implemented for Windows in Z:\home\sms\www\php_serial.class.php on line 503
Предварительно отправил СМС через Билайновскую утилиту, все ОК.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2016, 12:52
Помогаю со студенческими работами здесь

В конфигурационном файле прописан порт, но пишет ошибку порт 80 занят другим приложением
Здравствуйте. Пишу решение с 2 проектами - сервер и клиент с дуплексным контрактом. Служба запускается нормально. Когда же запускаю...

В порт в среднем приходит 3 корабля в день. Какова вероятность того, что в порт в день придет 2 корабля; 4 корабля?
помогите решить пожалуйста В порт в среднем приходит 3 корабля в день. Какова вероятность того, что в порт в день придет 2 корабля;...

Примеры использования Async Free (СОМ-порт) или Async Pro (СОМ-порт)
Здравствуйте! Скажите пожалуйста есть пример где используют Async Free (СОМ-порт) или Async Pro (СОМ-порт)? почему то не могу найти и...

Game порт. или не Game порт
Добрый день! Конструирую свой игровой девайс (корабельный штурвал). Суть - вращаемый вал, непосредственно над ним лазерная мышь. С...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru