PHP и com-порт: Как не закрывать соединение? Или, все таки JAVA?

а зачем вы везде пишете sleep? зачем заставляете ждать?
Попробуйте без sleep. У меня не успевало соединиться без задержки.
Но будет ли она работать без AJAX? для чего он здесь применяется?
Если у вас с контроллером нет проблем, то конечно, будет. Аякс используется для того, чтобы передать/получить информацию от скрипта без явной загрузки страницы. То есть, обычно, если нам нужно обратится к какому-то скрипту, мы вбиваем его адрес в браузере и на мониторе видим информацию, которую он выводит. Но мы так же можем обратиться к этому скрипту без его явной загрузки, с использованием асинхронного запроса, за который отвечает javascript. Ход действий такой: мы нажимаем кнопку в браузере, срабатывает javascript, который привязан кнопке и шлет посредством ajax информацию php скрипту(без его явной загрузки) о том, что была нажата такая-то кнопка. Этот php скрипт отсылает уже данные на ком порт(микроконтроллер) и тут же возвращает результат javascript'у. То есть, все происходит динамически. То что мы сейчас пытаемся сделать - это загрузить такой скрипт в браузере явно и, если он заработает, значит все хорошо с микроконтроллером и он готов работать в таком режиме. Тогда уже можно будет улучшать программу и добавлять всякие аякс кнопки, которые будут работать без перезагрузки и другие удобства интерфейса...
 
Попробуйте без sleep. У меня не успевало соединиться без задержки.
Пхп выполняет код построчно,
fopen - получаем ресурс, если по каким-то причинам получить доступ к файлу не удалось, вылетит варнинг
 
Пхп выполняет код построчно,
fopen - получаем ресурс, если по каким-то причинам получить доступ к файлу не удалось, вылетит варнинг
Любой язык выполняется сверху-вниз, это логично. В данном случае мы подключаемся не к файлу, а к микроконтроллеру (как к файлу). Подключимся мы то сразу и тут же передаем в него данные, но не каждый микроконтроллер успеет стать вот так вот сразу в готовность принимать данные. Я ж говорю, попробуйте, без задержки у меня через раз работало.
 
Любой язык выполняется сверху-вниз, это логично. В данном случае мы подключаемся не к файлу, а к микроконтроллеру (как к файлу). Подключимся мы то сразу и тут же передаем в него данные, но не каждый микроконтроллер успеет стать вот так вот сразу в готовность принимать данные. Я ж говорю, попробуйте, без задержки у меня через раз работало.
стремно получается как-то, эдакая неуверенность выполнится ли скрипт, что если 2сек. не хватит?) ладно не сталкивался с таким, не буду надумывать))
 
Не получается(((((((Микроконтроллер работает сам нормально, но когда пытаешься управлять им через web-интерфейс он ни как не реагирует((((Там ведь в программе указывается лишь com-порт, без указания реле, может она из-за этого не срабатывает или она должна все реле включать и выключать? У меня в микроконтроллере всего 4 реле, а передаваемое значение работает так: 0 – контакты реле 1 и 2 замкнуты, 2 и 3 разомкнуты; 1 – контакты реле 1 и 2 разомкнуты, 2 и 3 замкнуты.
А чтобы просто управлять контроллером, к нему прилагается специальная программа которая посылает ему не только 0 и 1, но и указывает номер реле например вот, так $KE,REL,1,1 и $KE,REL,1,0 где первое число это номер реле, а вторая команда включения выключения, просто так она с 0 и 1 не работает. Тогда я подумала может в php их тоже вписать в таком виде в котором может понять контроллер, но все равно ничего не работает((((((
PHP:
<?php
$port = fopen('COM3', 'w');

if(isset($_GET["val"]) && ($_GET["val"]==$KE,REL,1,1 || $_GET["val"]==$KE,REL,1,0)) {
    fwrite($port, $_GET["id"]);
}

fclose($port);
?>

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>   
<p align="center"><p align="right">
<script type="text/javascript">
function pressAnyKey() {
    var val='$KE,REL,1,0';
    }
</script>
<script type="text/javascript">
function pressSomeKey() {
    var val='$KE,REL,1,1';
  }
</script>
<!--#include virtual="lamp.php" -->
<!--#include virtual="index.php" -->
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />   
<meta name="author" content="" />    <title>Untitled 3</title> 
<link href="css/main.css" rel="stylesheet" type="text/css"/></head>
<body><div id="page_align" class="b3radius">
  <div id="header">
<div id="header_nav"><ul><li><a href="a">Главная</a></li>
<li><a href="a">Климат-контроль</a></li>
<li><a href="a">Кормление</a></li>
<li><a href="a">Наблюдение</a></li>
<li><a href="a">Регулятор поводка</a>
<li><a href="a">Взвешивание</a></li>
<li><a href="a">Температура тела собаки</a></li>
<li><a href="a">Надеваемая камера</a></li>
<li><a href="a">Обогрев воды</a></li></li>
</ul>

<div id="content" class="f_right">
<div id="c_right f_right">
<input type="button" value="Вкл" name="button" class="push_but" onclick="pressAnyKey()" />
<input type="button" value="Выкл" name="btn" class="push_btn" onclick="pressSomeKey()" />
</div>
</div>
</div>
<div id="sidebar"></div><div id="content">Это сайт для удаленного контроля собаки. Собаку зовут Шарик.Она очень дружелюбная, но с посторонними не дружит.</div>
<div class="clr"></div></div></body></html></p></p>
 
А чтобы просто управлять контроллером, к нему прилагается специальная программа которая посылает ему не только 0 и 1, но и указывает номер реле например вот, так $KE,REL,1,1 и $KE,REL,1,0 где первое число это номер реле, а вторая команда включения выключения, просто так она с 0 и 1 не работает
Ну так я же 0 и 1 для примера показал. Понятно, что вам нужно передавать данные такие, которые микроконтроллер принимает. Откуда я знаю, как он работает. И еще раз - выкиньте вы свой скрипт. Я же предложил сначала просто запустить страницу с параметрами, либо вообще без параметров! Создайте файл index.php с таким содержимым:
Код:
<?php
$port = fopen('COM3', 'w');
sleep(2);
$data = '1,1,1,1'; // здесь укажите свои циферки...
fwrite($port, $data);
fclose($port);?>
И запустите в браузере Для просмотра ссылки Войди или Зарегистрируйся
У вас еще простейший алгоритм не работает, а вы уже интерфейс собрались писать.
 
Все равно, что-то не пашет(((он же при запуске Для просмотра ссылки Войди или Зарегистрируйся должен включать реле? и в строке
$data = '1,1,'; получается что первая цифра будет реле а второй команда или $data = '1,1,1,1'; включается все четыре реле?
 
Все равно, что-то не пашет(((он же при запуске Для просмотра ссылки Войди или Зарегистрируйся должен включать реле? и в строке
$data = '1,1,'; получается что первая цифра будет реле а второй команда или $data = '1,1,1,1'; включается все четыре реле?
Еще раз. Я не знаю, что у вас там за микроконтроллер и какие данные принимает. Вставляйте свои данные в переменную $data, вместо этих единиц. Если не помогает, значит не подключается пхп к вашему микроконтроллеру. Возможно порт указали не верно (там где COM3), возможно ваш микроконтроллер не работает как ком порт, а только как usb. Вариантов масса...
 
Про инициализацию com-порта также не забудьте
exec("mode com3: BAUD=9600 PARITY=N data=8 stop=1 xon=off");
перед открытием порта.
И в диспетчере устройств для com3 проставьте скорость 9600, на всякий случай.
А вообще, полезно посмотреть в документации к вашему МК на какой частоте с ним лучше работать по com-порту, может и не 9600 вовсе.
 
PHP:
<?php
$port = fopen('COM3', 'w');

if(isset($_GET["val"]) && ($_GET["val"]==$KE,REL,1,1 || $_GET["val"]==$KE,REL,1,0)) {
    fwrite($port, $_GET["id"]);
}

fclose($port);
?>
Для начала.
Неправильно. Нужны кавычки и экран \ для символа переменной $.
Во вторых, почему в порт пишется $_GET["id"] ? Должно быть "\$KE,REL,1,1" или "\$KE,REL,1,0", короче говоря $_GET["val"].
PHP:
<?php
$port = fopen('COM3', 'w');

if(isset($_GET["val"]) && ($_GET["val"]=="\$KE,REL,1,1" || $_GET["val"]=="\$KE,REL,1,0")) {
    fwrite($port, $_GET["id"]);
}

fclose($port);
?>
 
Назад
Сверху