Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Открытый проект умного дома

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.12.2013, 16:06   #51
alexval2007
Member
 
Регистрация: 05.11.2012
Сообщений: 63
Вес репутации: 0
alexval2007 is an unknown quantity at this point
По умолчанию Re: Smart Home modbus web project

Ну это ясно я смотрел фотки в первом посте, на то примерно и расчёт. Тут просто суть что роутер у нас один на всю сеть и он мастер сети и на всю сеть у нас 20 регистров. Да мы можем писать и читать с каждой ардуины свои данные но если регистры будут использоваться как обычные переменные то 20 переменных это мало а вот если работать с битами то 320 переменных вполне достаточно.

Добавлено
Ну вот что я на ваял это нужно добавить в php и передать в html
PHP код:
<?php
//чтение битов из регистра
$input 5//входная переменная (регистр 16бит)
$lamp_array = array();
for (
$i=0;$i<16;$i++){
  
$lamp_array[$i] = ($input >> $i) & 0x01;
}
$var $lamp_array[0];
printf($var);// выводим на экран результат
$var $lamp_array[1];
printf($var);// выводим на экран результат
$var $lamp_array[2];
printf($var);// выводим на экран результат
$var $lamp_array[3];
printf($var);// выводим на экран результат
$var $lamp_array[4];
printf($var);// выводим на экран результат
$var $lamp_array[5];
printf($var);// выводим на экран результат
$var $lamp_array[6];
printf($var);// выводим на экран результат
$var $lamp_array[7];
printf($var);// выводим на экран результат
$var $lamp_array[8];
printf($var);// выводим на экран результат
$var $lamp_array[9];
printf($var);// выводим на экран результат
$var $lamp_array[10];
printf($var);// выводим на экран результат
$var $lamp_array[11];
printf($var);// выводим на экран результат
$var $lamp_array[12];
printf($var);// выводим на экран результат
$var $lamp_array[13];
printf($var);// выводим на экран результат
$var $lamp_array[14];
printf($var);// выводим на экран результат
$var $lamp_array[15];
printf($var);// выводим на экран результат

$button1 1;//имитация состояния кнопок
$button2 1;
$button3 0;
$button4 1;
$button5 1;
$button6 0;
$button7 1;
$button8 1;
$button9 0;
$button10 1;
$button11 0;
$button12 1;
$button13 1;
$button14 1;
$button15 0;
$button16 0;

//запись битов в регистр 
$knopka_array = array();
$knopka_array[0] = $button1;
$knopka_array[1] = $button2;
$knopka_array[2] = $button3;
$knopka_array[3] = $button4;
$knopka_array[4] = $button5;
$knopka_array[5] = $button6;
$knopka_array[6] = $button7;
$knopka_array[7] = $button8;
$knopka_array[8] = $button9;
$knopka_array[9] = $button10;
$knopka_array[10] = $button11;
$knopka_array[11] = $button12;
$knopka_array[12] = $button13;
$knopka_array[13] = $button14;
$knopka_array[14] = $button15;
$knopka_array[15] = $button16;

$knopki 0;

for (
$j=0$j<16$j++){
 
$knopki $knopki << 1;
 if (
$knopka_array[$j] == 1)
 { 
    
$knopki $knopki +1
 } 
}
p($knopki);// выводим на экран результат в двоичном виде


function p($res){// функция отображения на экрани в двоичном формате
  
$format '(%1$08b)' "\n";// формат отображения двоичный 16бит
  
printf($format$res);// выводим на экран результат
}
?>

Последний раз редактировалось alexval2007; 07.12.2013 в 20:02.
alexval2007 вне форума   Ответить с цитированием
Старый 07.12.2013, 22:24   #52
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию Re: Smart Home modbus web project

Цитата:
Сообщение от azh122 Посмотреть сообщение
Я вот тут одного не понимаю - почему 16 а не 8 (т.е. 1 байт)? ..
Потому что используемая функция модбас работет со словом.
Я уже говорил, что для ардуино я не встречал библиотеку модбас работающую с битами т.е. с функциями 0x05(0x06). Да используется не рационально для дискретных сигналов.

Если сильно захотеть можно немного "поизвращаться", как заметил alexval2007 рассматривать переменную - регистр, как 16 бит регистр и выделять каждый бит как цифровую переменную отдельно для дискретных сигналов типа вкл/выкл (1/0).
andr128 вне форума   Ответить с цитированием
Старый 07.12.2013, 22:58   #53
alexval2007
Member
 
Регистрация: 05.11.2012
Сообщений: 63
Вес репутации: 0
alexval2007 is an unknown quantity at this point
По умолчанию Re: Smart Home modbus web project

я так понимаю в dps.php файле эти строки передают регистры в html
PHP код:
  $o explode("&"$out); //конвертирование строки с разделит. в массив

    
$a["text"] = $o[0]; // сообщение об ошибке
    
$a["id"]   = $o[1]; // ID
    
$a["r0"]   = $o[2]; // регистры
    
$a["r1"]   = $o[3];
    
$a["r2"]   = $o[4];
    
$a["r3"]   = $o[5];
    
$a["r4"]   = $o[6];
    
$a["r5"]   = $o[7];
    
$a["r6"]   = $o[8];
    
$a["r7"]   = $o[9];
    
$a["r8"]   = $o[10];
    
$a["r9"]   = $o[11];
   
  echo 
json_encode($a); //послать ответ браузеру 
массив $a["r9"] пойдет в html а массив $o[11]; пришёл из modbas сервера. Я прав?
alexval2007 вне форума   Ответить с цитированием
Старый 07.12.2013, 23:25   #54
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию Re: Smart Home modbus web project

Цитата:
массив $a["r9"] пойдет в html а массив $o[11]; пришёл из modbas сервера. Я прав?
то что вы написали это не весь массив, а элемент массива. Но по факту да, $a - это массив который будет передаваться на страницу, только еще предварительно сконвертируется в json строку.
andr128 вне форума   Ответить с цитированием
Старый 07.12.2013, 23:52   #55
alexval2007
Member
 
Регистрация: 05.11.2012
Сообщений: 63
Вес репутации: 0
alexval2007 is an unknown quantity at this point
По умолчанию Re: Smart Home modbus web project

а между ними вклинится можно? например так
PHP код:
$a["r2"]   = $o[4];
//чтение битов из регистра
$input $o[4];
$lamp_array = array();
for (
$i=0;$i<16;$i++){
  
$lamp_array[$i] = ($input >> $i) & 0x01;
}
$a["lamp1"] = $lamp_array[0];
$a["lamp2"] = $lamp_array[1];
$a["lamp3"] = $lamp_array[2];
и тп
echo json_encode($a); //послать ответ браузеру 
alexval2007 вне форума   Ответить с цитированием
Старый 08.12.2013, 17:02   #56
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию Re: Smart Home modbus web project

вклинится можно, лишь бы ваша html страница правильно интерпретировала получаемые данные.
andr128 вне форума   Ответить с цитированием
Старый 08.12.2013, 17:19   #57
alexval2007
Member
 
Регистрация: 05.11.2012
Сообщений: 63
Вес репутации: 0
alexval2007 is an unknown quantity at this point
Lightbulb Re: Smart Home modbus web project

получилось вывести в web 16 лампочек сейчас разбираюсь с кнопками надеюсь скоро выложу результат

Добавлено:
Ну вот и выкладываю моё творчество конечно можно еще улучшить по крайней мере код ардуино.
В php и html возможны разные глупые ошибки извините я в этом не силён.
Лампочки в web загораются стабильно ровно те которые включаю в ардуино тут вроде всё хорошо получилось.
Кнопки тут непонятно светодиод кнопкой включить удалось а вот выключить нет. Наверно нужна консультация товарища andr128
index.html
Код HTML:
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">  
    <script type="text/javascript" src="js/jquery.js"></script>

<title>smart home</title>

<style type="text/css">

body {
//	margin: 10px;
	padding: 10px;
	background: #41A89E;
}

.p11 {
	font-family: Geneva, Arial, Helvetica, sans-serif;
	font-size: 12px;
	font-style: normal;
	line-height: 1px;
	color: #330000;
	//margin: auto;
       //margin: 1px;
}

.p12 {
	font-family: Geneva, Arial, Helvetica, sans-serif;
	font-size: 12px;
	font-style: normal;
	line-height: normal;
	color: #009999;
	margin: auto;
//	padding: 3px;
}

//#bd { text-align: center; }

.p16 {
	font-family: Geneva, Arial, Helvetica, sans-serif;
	font-size: 16px;
	font-style: normal;
	line-height: normal;
	font-weight: bold;
//	color: #009999;
//	color: #297DD1;
	color: #e9f5f0;
//	margin: auto;
	padding: 2px;
	text-align: center;

//    width: 90%; /* Ширина слоя */
    background: #009999; /* Цвет фона */

/*
background: #3b679e;
background: -moz-linear-gradient(top,  #3b679e 0%, #2b88d9 41%, #207cca 65%, #7db9e8 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3b679e), color-stop(41%,#2b88d9), color-stop(65%,#207cca), color-stop(100%,#7db9e8));
background: -webkit-linear-gradient(top,  #3b679e 0%,#2b88d9 41%,#207cca 65%,#7db9e8 100%);
background: -o-linear-gradient(top,  #3b679e 0%,#2b88d9 41%,#207cca 65%,#7db9e8 100%);
background: -ms-linear-gradient(top,  #3b679e 0%,#2b88d9 41%,#207cca 65%,#7db9e8 100%);
background: linear-gradient(to bottom,  #3b679e 0%,#2b88d9 41%,#207cca 65%,#7db9e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3b679e', endColorstr='#7db9e8',GradientType=0 );
*/

    border-radius: 5px;
}





#frm {
//    background-image: url(img/bkg.png);
//	  no-repeat;
//    background-size: 100%;
	background: #e9f5f0;
//	background: #D6D6D6;
	border-radius: 8px;
    border: 1px solid #FFFFFF;

    box-shadow: 0 0 10px rgba(0,0,0, 0.5); /* Параметры тени */
    padding: 10px;

	//margin: 10px;

    width: 320px; 
	padding: 10px;
	//padding-right: 20px; 

	float: left;
	font-family: Geneva, Arial, Helvetica, sans-serif;
	font-size: 14px;


}


#regs, #ri0, #ri1, #ri2, 
#ri3, #ri4, #ri5, #ri6, 
#ri7, #ri8, #ri9 
{ width: 55px; }



#r0, #r1, #r2, 
#r3, #r4, #r5, #r6, 
#r7, #r8, #r9, 
#lamp1, #lamp2, #lamp3, #lamp4,
#lamp5, #lamp6, #lamp7, #lamp8,
#lamp9, #lamp10, #lamp11, #lamp12,
#lamp13, #lamp14, #lamp15, #lamp16  
{ 
   width: 55px;
//display: none;

}


input {
    margin: 2px;
}

#img_lamp1, #img_lamp2, #img_lamp3, #img_lamp4, 
#img_lamp5, #img_lamp6, #img_lamp7, #img_lamp8, 
#img_lamp9, #img_lamp10, #img_lamp11, #img_lamp12,
#img_lamp13, #img_lamp14, #img_lamp15, #img_lamp16
{
 vertical-align: middle;
}




#thumb 
{
	width:  320px;
	height: 60px;
    background: #e9f5f0;
	padding: 10px;
	border-radius:5px;
    box-shadow: 0 0 10px rgba(0,0,0, 0.5); /* Параметры тени */

}


.wait { 
	display: none; 
//	vertical-align: bottom;
//	vertical-align: top;
    vertical-align: middle;

//	width:  30px;
//	height: 30px;

}

.logo{
//	margin: 2px;
	padding-left: 15px;
	padding-bottom: 5px;
}



#r9set,
set_button1, set_button2, set_button3,
set_button4, set_button5, set_button6,
set_button7, set_button8, set_button9,
set_button10, set_button11, set_button12,
set_button13, set_button14, set_button15,
set_button16
{ 
width: 60px;
}



</style>

</head>

<body>

<script>
//================================================
//                  Скрипты
//================================================

var ID_timer; 

//=======================
// вызвать при загрузке
//=======================
$(document).ready(function() { $(getjsondata(0,0,0)); });


// проверка значения надписи 
function setonoff(v)
{
 if ( v == "вкл" ) { return 1 } else { return 0 }; 
}


//===============================
// обработка событий кнопок
//===============================
$(function() {


$('*').click(function(){

		switch (this.id) {
                        //	      (addreg,  valreg,    rw)
  		case 'r0set' : getjsondata(0, $("#ri0").val(), 1 ); break;
  		case 'r1set' : getjsondata(1, $("#ri1").val(), 1 ); break;
  		case 'r2set' : getjsondata(2, $("#ri2").val(), 1 ); break; 
  		case 'r3set' : getjsondata(3, $("#ri3").val(), 1 ); break;
  		case 'r4set' : getjsondata(4, $("#ri4").val(), 1 ); break;
  		case 'r5set' : getjsondata(5, $("#ri5").val(), 1 ); break;
  		case 'r6set' : getjsondata(6, $("#ri6").val(), 1 ); break; 
  		case 'r7set' : getjsondata(7, $("#ri7").val(), 1 ); break;
  		case 'r8set' : getjsondata(8, $("#ri8").val(), 1 ); break;

  		//case 'r9set' : getjsondata(9, setonoff(this.value), 1 ); break;

              case 'set_button1' : getjsondata(9, setonoff(this.value), 1 ); break;
              case 'set_button2' : getjsondata(10, setonoff(this.value), 1 ); break;
              case 'set_button3' : getjsondata(11, setonoff(this.value), 1 ); break;
              case 'set_button4' : getjsondata(12, setonoff(this.value), 1 ); break;
              case 'set_button5' : getjsondata(13, setonoff(this.value), 1 ); break;
              case 'set_button6' : getjsondata(14, setonoff(this.value), 1 ); break;
              case 'set_button7' : getjsondata(15, setonoff(this.value), 1 ); break;
              case 'set_button8' : getjsondata(16, setonoff(this.value), 1 ); break;
              case 'set_button9' : getjsondata(17, setonoff(this.value), 1 ); break;
              case 'set_button10' : getjsondata(18, setonoff(this.value), 1 ); break;
              case 'set_button11' : getjsondata(19, setonoff(this.value), 1 ); break;
              case 'set_button12' : getjsondata(20, setonoff(this.value), 1 ); break;
              case 'set_button13' : getjsondata(21, setonoff(this.value), 1 ); break;
              case 'set_button14' : getjsondata(22, setonoff(this.value), 1 ); break;
              case 'set_button15' : getjsondata(23, setonoff(this.value), 1 ); break;
              case 'set_button16' : getjsondata(24, setonoff(this.value), 1 ); break;

              case 'btnr'  : getjsondata(0, 0, 0); break;
              case 'reset' : $('.clear').val(''); break;
//        case 'test'  : $("#auto").prop({"checked":true}); break;
//        case 'test'  : $("#auto").attr("checked", false); break;
//        case 'test'  : $("#auto").attr("checked", ! ($("#auto").prop("checked")) ); setauto( $("#auto") ); break;

  		default: break
		}
});

//
$('*').change(function(){

		switch (this.id) {
		case 'id'    : getjsondata(0, 0, 0); break;
		case 'regs'  : getjsondata(0, 0, 0); break;
		case 'auto'  : setauto(this); break;
  		default:
			break
		}

});

function setauto(e)
{
	 if ( $(e).prop("checked") ) {
     // вкл. таймер
	 ID_timer = setInterval(function() {  getjsondata(0,0,0);  }, 1000);
     $("#btnr").hide("slow");
	 $(".wait").show("slow");
           } else {
     // отключить таймер
	 clearInterval(ID_timer); 
     $("#btnr").show("slow");
     $(".wait").hide("slow");
	 }
}



});


//===========================================
//          обмен с сервером
//===========================================
function getjsondata(addreg, valreg, rw)
{
var fdata = {
 "id"   : $("#id").val(),   // ID slave
 "addr" : addreg,           // нач. адрес табл. регистров
 "regs" : $("#regs").val(), // кол-во используемых регистров
 "rw"   : rw,               // 0 - read 1- write/read
 "r"    : valreg            // значение регистра для записи
};


$.ajax({
        url: 'dps.php',
       type: 'POST',
    timeout: 7000,  // уст. таймаут 7 сек
   // async: false,
      cache: false,
       data: { param: JSON.stringify(fdata) },
    success: function(data){

      // Обратное преобразование
	  gdata = JSON.parse(data);
    
        $("#id").val(gdata.id);
        $("#r0").val(gdata.r0);
        $("#r1").val(gdata.r1);
        $("#r2").val(gdata.r2);
        $("#r3").val(gdata.r3);
        $("#r4").val(gdata.r4);
        $("#r5").val(gdata.r5);
        $("#r6").val(gdata.r6);
        $("#r7").val(gdata.r7);
        $("#r8").val(gdata.r8);
        $("#r9").val(gdata.r9);
/*
        $("#button1").val(gdata.button1);
        $("#button2").val(gdata.button2);
        $("#button3").val(gdata.button3);
        $("#button4").val(gdata.button4);
        $("#button5").val(gdata.button5);
        $("#button6").val(gdata.button6);
        $("#button7").val(gdata.button7);
        $("#button8").val(gdata.button8);
        $("#button9").val(gdata.button9);
        $("#button10").val(gdata.button10);
        $("#button11").val(gdata.button11);
        $("#button12").val(gdata.button12);
        $("#button13").val(gdata.button13);
        $("#button14").val(gdata.button14);
        $("#button15").val(gdata.button15);
        $("#button16").val(gdata.button16);
*/

	if (gdata.lamp1 == 0 || gdata.lamp1 == null){
         $('#img_lamp1').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp1').attr('src', "img/solon.png");
       }

	if (gdata.lamp2 == 0 || gdata.lamp2 == null){
         $('#img_lamp2').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp2').attr('src', "img/solon.png");
       }

	if (gdata.lamp3 == 0 || gdata.lamp3 == null){
         $('#img_lamp3').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp3').attr('src', "img/solon.png");
       }

	if (gdata.lamp4 == 0 || gdata.lamp4 == null){
         $('#img_lamp4').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp4').attr('src', "img/solon.png");
       }

	if (gdata.lamp5 == 0 || gdata.lamp5 == null){
         $('#img_lamp5').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp5').attr('src', "img/solon.png");
       }

	if (gdata.lamp6 == 0 || gdata.lamp6 == null){
         $('#img_lamp6').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp6').attr('src', "img/solon.png");
       }

	if (gdata.lamp7 == 0 || gdata.lamp7 == null){
         $('#img_lamp7').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp7').attr('src', "img/solon.png");
       }

	if (gdata.lamp8 == 0 || gdata.lamp8 == null){
         $('#img_lamp8').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp8').attr('src', "img/solon.png");
       }

	if (gdata.lamp9 == 0 || gdata.lamp9 == null){
         $('#img_lamp9').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp9').attr('src', "img/solon.png");
       }

	if (gdata.lamp10 == 0 || gdata.lamp10 == null){
         $('#img_lamp10').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp10').attr('src', "img/solon.png");
       }

	if (gdata.lamp11 == 0 || gdata.lamp11 == null){
         $('#img_lamp11').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp11').attr('src', "img/solon.png");
       }

	if (gdata.lamp12 == 0 || gdata.lamp12 == null){
         $('#img_lamp12').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp12').attr('src', "img/solon.png");
       }

	if (gdata.lamp13 == 0 || gdata.lamp13 == null){
         $('#img_lamp13').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp13').attr('src', "img/solon.png");
       }

	if (gdata.lamp14 == 0 || gdata.lamp14 == null){
         $('#img_lamp14').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp14').attr('src', "img/solon.png");
       }

	if (gdata.lamp15 == 0 || gdata.lamp15 == null){
         $('#img_lamp15').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp15').attr('src', "img/solon.png");
       }

	if (gdata.lamp16 == 0 || gdata.lamp16 == null){
         $('#img_lamp16').attr('src', "img/soloff.png");
       } else {
         $('#img_lamp16').attr('src', "img/solon.png");
       }



	if (gdata.button1 == 0 || gdata.button1 == null){
           $('#set_button1').val("вкл");
       } else {
           $('#set_button1').val("выкл");
       }



        $("#out").text(gdata.text); // сообщ. об ошибке
        }, // data

    error: function(xhr) {
        $("#out").text("server: "+ xhr.statusText);
        }

});
}

/* exampe css
if (bEnable) {
$(‘#ctrl_id’).attr(‘disabled’, true);
$(‘#ctrl_id’).css(‘background-color’, ‘#e0e0e0);
} else {
$(‘#ctrl_id’).removeAttr(‘disabled’); 
$(‘#ctrl_id’).css(‘background-color’, ‘#ffffff’);
}
*/


//============ END SCRIPTS ===============
</script>

<!--
=========================================================
                   HTML CODE 
=========================================================
<div id="thumb">
</div><br>
-->


<div id="frm">
<a href="http://www.modbus.org">    <img class="logo" src="img/modbus.png" alt="Modbus"></a>
<a href="http://www.arduino.ru">    <img class="logo" src="img/arduino.png" alt="Arduino"></a>
<a href="http://www.cyber-place.ru"><img class="logo" src="img/cyber.png" alt="cyber-place"></a><br>
<div id="hd" class="p16" >Smart Home Modbus RTU Project</div>

<div class="p12">Сообщение от сервера: </div>
<div id="out" class="p12"> Error </div><br>

<!-- выбор id устройства -->
ID Device : <select id="id">
  <option>1</option>
  <option selected>2</option>
  <option>3</option>
  <option>4</option>
  <option>5</option>
</select>
регистров: <input type="text" id="regs" name="regs" value=10><br>
регистр 0: <input type="text" id="r0" readonly> <input type="text" id="ri0" class="clear"> <input type="button" id="r0set"  value="Установить"><br>
регистр 1: <input type="text" id="r1" readonly> <input type="text" id="ri1" class="clear"> <input type="button" id="r1set"  value="Установить"><br>
регистр 2: <input type="text" id="r2" readonly> <input type="text" id="ri2" class="clear"> <input type="button" id="r2set"  value="Установить"><br>
регистр 3: <input type="text" id="r3" readonly> <input type="text" id="ri3" class="clear"> <input type="button" id="r3set"  value="Установить"><br>
регистр 4: <input type="text" id="r4" readonly> <input type="text" id="ri4" class="clear"> <input type="button" id="r4set"  value="Установить"><br>
регистр 5: <input type="text" id="r5" readonly> <input type="text" id="ri5" class="clear"> <input type="button" id="r5set"  value="Установить"><br>
регистр 6: <input type="text" id="r6" readonly> <input type="text" id="ri6" class="clear"> <input type="button" id="r6set"  value="Установить"><br>
регистр 7: <input type="text" id="r7" readonly> <input type="text" id="ri7" class="clear"> <input type="button" id="r7set"  value="Установить"><br>
регистр 8: <input type="text" id="r8" readonly><br>
регистр 9: <input type="text" id="r9" readonly><br>
<br>
1<img id="img_lamp1" src="img/soloff.png" alt="свет">
2<img id="img_lamp2" src="img/soloff.png" alt="свет">
3<img id="img_lamp3" src="img/soloff.png" alt="свет">
4<img id="img_lamp4" src="img/soloff.png" alt="свет">
5<img id="img_lamp5" src="img/soloff.png" alt="свет">
6<img id="img_lamp6" src="img/soloff.png" alt="свет">
7<img id="img_lamp7" src="img/soloff.png" alt="свет">
8<img id="img_lamp8" src="img/soloff.png" alt="свет">
<br>
9<img id="img_lamp9" src="img/soloff.png" alt="свет">
10<img id="img_lamp10" src="img/soloff.png" alt="свет">
11<img id="img_lamp11" src="img/soloff.png" alt="свет">
12<img id="img_lamp12" src="img/soloff.png" alt="свет">
13<img id="img_lamp13" src="img/soloff.png" alt="свет">
14<img id="img_lamp14" src="img/soloff.png" alt="свет">
15<img id="img_lamp15" src="img/soloff.png" alt="свет">
16<img id="img_lamp16" src="img/soloff.png" alt="свет">
<br>
<input type="button" id="set_button1"  value="вкл">
<input type="button" id="set_button2"  value="вкл">
<input type="button" id="set_button3"  value="вкл">
<input type="button" id="set_button4"  value="вкл">
<input type="button" id="set_button5"  value="вкл">
<br>
<input type="button" id="set_button6"  value="вкл">
<input type="button" id="set_button7"  value="вкл">
<input type="button" id="set_button8"  value="вкл">
<input type="button" id="set_button9"  value="вкл">
<input type="button" id="set_button10"  value="вкл">
<br>
<input type="button" id="set_button11"  value="вкл">
<input type="button" id="set_button12"  value="вкл">
<input type="button" id="set_button13"  value="вкл">
<input type="button" id="set_button14"  value="вкл">
<input type="button" id="set_button15"  value="вкл">
<br>
<input type="button" id="set_button16"  value="вкл">
<br>
<input id="auto" type="checkbox" >авто</>
<input type="button" id="btnr"  value="Получить">
<input type="button" id="reset"  value="Очистить">
<img  class="wait" src="img/1421.png" alt="autoread.." >

<!--
<input type="button" id="test"  value="Auto">
-->


</div> <!-- id frm -->

</body>
</html>

<!--
-->
dps.php
PHP код:
<?php

/*
 *
 *  Client TCP to Gateway-Server TCP-Modbus RTU 
 *  (C) By Sh.A.S. 2013 
 *
 */

// отключить вывод ошибок т.к. исп JSON формат
// ответ (ошибки) в ввиде html игнорируется
ini_set('display_errors''Off');

//ini_set('display_errors', 'On');
//error_reporting(E_ALL);
//$config['debug'] = true; 


  
$address 'localhost'// адрес шлюза
  
$port    3425;        // порт шлюза
  
$errtxt  "Ok..";


// формирует строку с ошибкой и выходит из программы
//==================================================
function ErrorExit($a$err)
{
  
$a["text"] = $err;  
  echo 
json_encode($a);
  exit;
}


//=======================
  
$gdata =  $_REQUEST['param'];            // запрос от браузера ловим строку по param
  
$a     =  json_decode($gdatatrue);  // конвертировать в массив

  // подготовить данные к отправке шлюзу
  // формат строки $pars= "1&33&0&51&"
  // $pars будет отправляться в шлюз 

/*
 "id"   - ID slave
 "addr" - нач. адрес табл. регистров
 "regs" - кол-во используемых регистров
 "rw"   - 0 - read, 1-write
 "r"    - значение регистра для записи
*/

  
$pars $a["id"  ]."&"
          
$a["addr"]."&".
          
$a["regs"]."&".
          
$a["rw"  ]."&".
          
$a["r"   ]."&";


  
$socket socket_create(AF_INETSOCK_STREAMSOL_TCP); // создать сокет

  
if ($socket === false) {$errtxt "Can't create socket. " .
  
socket_strerror(socket_last_error());
  
ErrorExit($a$errtxt);
  }

  
$result socket_connect($socket$address$port);     // соединиться со шлюзом

  
if ($result === false) {$errtxt "Can't connect socket. Gateway-Server " .
  
socket_strerror(socket_last_error());
  
ErrorExit($a$errtxt);
  }

  
$result socket_write($socket$parsstrlen($pars));  // Сообщение шлюзу

  
if ($result === false) {$errtxt "Can't Write socket. Gateway-Server" .
  
socket_strerror(socket_last_error());
  
ErrorExit($a$errtxt);
  }

  
$out socket_read($socket1024PHP_BINARY_READ); //Читаем сообщение от сервера

  
if ($out === false) {$errtxt "Can't Read socket. Gateway-Server" .
  
socket_strerror(socket_last_error());
  
ErrorExit($a$errtxt);
  }

  if (isset(
$socket)) { socket_close($socket); }      //Останавливаем работу с сокетом


  
$o explode("&"$out); //конвертирование строки с разделит. в массив

    
$a["text"] = $o[0]; // сообщение об ошибке
    
$a["id"]   = $o[1]; // ID
    
$a["r0"]   = $o[2]; // регистры
    
$a["r1"]   = $o[3];
    
$a["r2"]   = $o[4];
    
$a["r3"]   = $o[5];
    
$a["r4"]   = $o[6];
    
$a["r5"]   = $o[7];
    
$a["r6"]   = $o[8];
    
$a["r7"]   = $o[9];
    
$a["r8"]   = $o[10];
    
$a["r9"]   = $o[11];


 
//запись битов в регистр 
 
$write_bit_array = array();
 
$write_bit_array[0] = $button1;
 
$write_bit_array[1] = $button2;
 
$write_bit_array[2] = $button3;
 
$write_bit_array[3] = $button4;
 
$write_bit_array[4] = $button5;
 
$write_bit_array[5] = $button6;
 
$write_bit_array[6] = $button7;
 
$write_bit_array[7] = $button8;
 
$write_bit_array[8] = $button9;
 
$write_bit_array[9] = $button10;
 
$write_bit_array[10] = $button11;
 
$write_bit_array[11] = $button12;
 
$write_bit_array[12] = $button13;
 
$write_bit_array[13] = $button14;
 
$write_bit_array[14] = $button15;
 
$write_bit_array[15] = $button16;

 
$output_bit 0;

 for (
$j=0$j<16$j++)
 {
  
$output_bit $output_bit << 1;
   if (
$write_bit_array[$j] == 1)
   { 
    
$output_bit $output_bit +1
   } 
 }
$a["r9"] = $output_bit// выводим результат в arduino r9

      //чтение битов из регистра
       
$input_bit $a["r8"];
       
$read_bit_array = array();
       for (
$i=0;$i<16;$i++)
       {
        
$read_bit_array[$i] = ($input_bit >> $i) & 0x01;
       }

       
$a["lamp1"] = $read_bit_array[15];
       
$a["lamp2"] = $read_bit_array[14];
       
$a["lamp3"] = $read_bit_array[13];
       
$a["lamp4"] = $read_bit_array[12];
       
$a["lamp5"] = $read_bit_array[11];
       
$a["lamp6"] = $read_bit_array[10];
       
$a["lamp7"] = $read_bit_array[9];
       
$a["lamp8"] = $read_bit_array[8];
       
$a["lamp9"] = $read_bit_array[7];
       
$a["lamp10"] = $read_bit_array[6];
       
$a["lamp11"] = $read_bit_array[5];
       
$a["lamp12"] = $read_bit_array[4];
       
$a["lamp13"] = $read_bit_array[3];
       
$a["lamp14"] = $read_bit_array[2];
       
$a["lamp15"] = $read_bit_array[1];
       
$a["lamp16"] = $read_bit_array[0];
   
  echo 
json_encode($a); //послать ответ браузеру


?>
arduino
PHP код:

//********************************************
//
//     ModBus RTU TEST PROG  
//     Используется SimpleModbusSlave ver 5
//     http://code.google.com/p/simple-modbus/
//
//********************************************

#include <EEPROM.h>
#include <MsTimer2.h>
#include <SimpleModbusSlave.h> //version 5


#define ID_MODBUS  2    // ID address ModBus RTU Device
#define LED_T      13    // тестовый св. диод

enum {        
    
R0,        // Count
    
R1
    
R2,
    
R3,
    
R4,
    
R5,
    
R6,
    
R7,
    
R8,
    
R9,        // Сюда посадим Led 13
ErrorCnt,
    
MB_REGS    // общее кол-во регистров
};

uint16_t tab_reg[MB_REGS]; // массив из 10 регистров (без знаковое значение)

int count 0;
//****************************************************************************
unsigned char button1 0;//Тестовые кнопки подключённые к Arduino для проверки лампочек в WEB.
unsigned char button2 0;
unsigned char button3 0;
unsigned char button4 0;
unsigned char button5 0;
unsigned char button6 0;
unsigned char button7 0;
unsigned char button8 0;
unsigned char button9 0;
unsigned char button10 0;
unsigned char button11 0;
unsigned char button12 0;
unsigned char button13 0;
unsigned char button14 0;
unsigned char button15 0;
unsigned char button16 0;
//*******************************************************************
unsigned char led1 0;//Тестовые светодиоды для индикации нажатых кнопок в WEB.
unsigned char led2 0;
unsigned char led3 0;
unsigned char led4 0;
unsigned char led5 0;
unsigned char led6 0;
unsigned char led7 0;
unsigned char led8 0;
unsigned char led9 0;
unsigned char led10 0;
unsigned char led11 0;
unsigned char led12 0;
unsigned char led13 0;
unsigned char led14 0;
unsigned char led15 0;
unsigned char led16 0;
//*******************************************************************
unsigned int write_bit_array[16]; //Массив для хранения состояния лампочек для WEB.
unsigned int read_bit_array[16];  //Массив для хранения состояния кнопок из WEB.
//*******************************************************************

void setup() 
{
    
// 3й- управляющий пин max485 (0 и 1 - не использовать режим max485)

    
modbus_configure(19200ID_MODBUS3MB_REGStab_reg); //3 пин управление MAX485    

    
pinMode(LED_TOUTPUT);    // установка вых для св.диода

    
MsTimer2::set(1000Tim); // установка таймера 1 sec
    
MsTimer2::start();

    
//tab_reg[R2] = tab_reg[R3]; // просто заполенние тестовыми начальными значениями
    //tab_reg[R3] = -30;// хоть тип переменной uint16_t, принимает знач. без знака 
    //tab_reg[R4] = -1; // перевод знака будет происходить в шлюзе (или php)
    //tab_reg[R5] = 50; // к привидению типа к int16_t

}


void Tim() //обработка прерывания таймера
{
    
count++;
    if (
count 28800) {count 0;}  // 8 часовой счетчик
    
tab_reg[R0] = count;             // Записать в регистр
}


void NewVal()
{
   
digitalWrite(LED_Tled1); // регистр 9 на св. диод 
   
if (tab_reg[R1] > 0) {tab_reg[R1]=0count=0; }  // сбросить счетчик при зн. в 9 регистре > 0                             
}

void loop()
{
// modbus_update () является единственным методом, используемым в loop(). Возвращает общее
// кол-во ошибок с момента работы slave. Вы можете не использовать его, но это полезно
// для диагностики работы мастера Modbus.

// tab_reg[ErrorCnt] = modbus_update();
   
modbus_update();
//tab_reg[R2] = tab_reg[R3];
//tab_reg[R4] = tab_reg[R9];
//tab_reg[R7] = 0b0000111100001111;
//**********************************************
button1 1;//имитация состояния кнопок
button2 1;
button3 0;
button4 1;
button5 1;
button6 0;
button7 1;
button8 1;
button9 0;
button10 1;
button11 0;
button12 1;
button13 1;
button14 1;
button15 0;
button16 0;
//*************************************************
//запись битов в регистр 
write_bit_array[0] = button1;
write_bit_array[1] = button2;
write_bit_array[2] = button3;
write_bit_array[3] = button4;
write_bit_array[4] = button5;
write_bit_array[5] = button6;
write_bit_array[6] = button7;
write_bit_array[7] = button8;
write_bit_array[8] = button9;
write_bit_array[9] = button10;
write_bit_array[10] = button11;
write_bit_array[11] = button12;
write_bit_array[12] = button13;
write_bit_array[13] = button14;
write_bit_array[14] = button15;
write_bit_array[15] = button16;

unsigned int output_bit 0;
unsigned char j 0;

for (
j=0j<16j++){
 
output_bit output_bit << 1;
 if (
write_bit_array[j] == 1)
 { 
    
output_bit output_bit 1
 } 
}
tab_reg[R8] = output_bit;// В эту переменную принемаем результат с регистров
//**********************************************************
//чтение битов из регистра состояния кнопок из WEB.
unsigned int input_bit 0;
unsigned char i 0;

input_bit tab_reg[R9]; //входная переменная (регистр 16бит)

for (i=0;i<16;i++){
  
read_bit_array[i] = (input_bit >> i) & 0x01;
}

tab_reg[R5]= read_bit_array[0];
led1 read_bit_array[0];
led2 read_bit_array[1];
led3 read_bit_array[2];
led4 read_bit_array[3];
led5 read_bit_array[4];
led6 read_bit_array[5];
led7 read_bit_array[6];
led8 read_bit_array[7];
led9 read_bit_array[8];
led10 read_bit_array[9];
led11 read_bit_array[10];
led12 read_bit_array[11];
led13 read_bit_array[12];
led14 read_bit_array[13];
led15 read_bit_array[14];
led16 read_bit_array[15];
//**********************************************************
 
NewVal();

Вложения
Тип файла: zip тест.zip (63.8 Кб, 177 просмотров)

Последний раз редактировалось alexval2007; 10.12.2013 в 18:46. Причина: обновление
alexval2007 вне форума   Ответить с цитированием
Старый 09.12.2013, 15:59   #58
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию Re: Smart Home modbus web project

Смешалось в кучу кони, люди..
andr128 вне форума   Ответить с цитированием
Старый 09.12.2013, 16:05   #59
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию Re: Smart Home modbus web project

PHP код:
$write_bit_array[0] = $button1
$button1 - это откуда возмется?


PHP код:
$o[11] = $output_bit// выводим результат в arduino r9 
в какой еще ардуино, это уже после обмена со шлюзом, когда данные уже получены.

и т.д. и т.п. в общем каша сплошная

Последний раз редактировалось andr128; 09.12.2013 в 16:10.
andr128 вне форума   Ответить с цитированием
Старый 09.12.2013, 16:47   #60
alexval2007
Member
 
Регистрация: 05.11.2012
Сообщений: 63
Вес репутации: 0
alexval2007 is an unknown quantity at this point
По умолчанию Re: Smart Home modbus web project

цитирую сам себя делал то по аналогии спросить некого
Цитата:
В php и html возможны разные глупые ошибки извините я в этом не силён.
так давайте разбираться какой массив отвечает за то что уходит в ардуино.
$o[] значит это из шлюза то есть данные полученные из ардуино так?
$a["r9"] это тогда из HTML ?
Предполагалось что $button1 это кнопка из HTML
php
$a["button1"] = $write_bit_array[0];
хотя наверно надои на оборот
$write_bit_array[0] = $a["button1"];

По HTML
Код HTML:
//===============================
// обработка событий кнопок
//===============================
$(function() {


$('*').click(function(){

		switch (this.id) {
case 'r0set' : getjsondata(0, $("#ri0").val(), 1 ); break;
............................................................................
case 'r8set' : getjsondata(8, $("#ri8").val(), 1 ); break;
case 'set_button1' : getjsondata(9, setonoff(this.value), 1 ); break;//Обработка нажатия кнопки button1

//===========================================
//          обмен с сервером
//===========================================
      // Обратное преобразование
	  gdata = JSON.parse(data);
        $("#r9").val(gdata.r9);
        $("#button1").val(gdata.button1);//незнаю нужно ли это что делает эта строка? 
//я так понимаю что преобразовует JSON в gdata а нужно ли это нам и для чего?


<!--
=========================================================
                   HTML CODE 
=========================================================
<div id="thumb">
</div><br>
-->
<input type="button" id="set_button1"  value="вкл">//кнопка в WEB Вкл/Выкл

Последний раз редактировалось alexval2007; 09.12.2013 в 18:24.
alexval2007 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 08:04. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика