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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.12.2012, 17:27   #1
alexval2007
Member
 
Регистрация: 05.11.2012
Сообщений: 63
Вес репутации: 0
alexval2007 is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Kuhelbekker Посмотреть сообщение
если в умном доме на modbus сдохнет master то мы рискуем остаться без отопления или без света.
Для этих целий и придумано местное управление на всех выключателях должна быть кнопка ВКЛ/ВЫКЛ а не только по сети и отопление долно иметь возможность включения по месту
alexval2007 вне форума   Ответить с цитированием
Старый 19.12.2012, 18:18   #2
zuriuslev
Junior Member
 
Регистрация: 19.12.2012
Адрес: Марбелья
Сообщений: 18
Вес репутации: 0
zuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond repute
Thumbs up Сегодня, успешно завершил тест работы libmodbus

В качестве сервера работал роутер TP-Link TL-MR3220 v1, на котором установлен OpenWrt Attitude Adjustment 12.09-rc1.
libmodbus для роутера можно установить стандартными средствами (opkg install libmodbus)
Тестовая программа (unit-test-client) собиралась стандартными средствами OpenWrt на Ubuntu.

В качестве клиента работал LaunchPad MSP430 ( IDE energia-0101E0009 ),
здесь работал немного модифицированный скетч из четвёрторо поста.
Дело в том, что у LaunchPad есть два встроенных светодиода и датчик температуры.
Вот их-то и задейсвовал.

Slave ID = 1
Декларировано 10 регистров.
Первый (0) и второй (1) регистр управляет включением-выключением светодиодов.
Последний регистр (9) читает температуру процессора с встроенного термодатчика.
В остальные регисры пишутся случайные числа.

Исходник программы на C -
Код:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus.h>
#include "unit-test.h"

#define SL_ID 1

int main(int argc, char *argv[])
{
    uint16_t tab_reg[64];
    modbus_t *ctx;
    int i, n , rc;

    ctx = modbus_new_rtu("/dev/ttyACM0", 9600, 'N', 8, 1);
    if (ctx == NULL) {
        fprintf(stderr, "Unable to allocate libmodbus context\n");
        return -1;
    }
    modbus_set_debug(ctx, TRUE);
    modbus_set_error_recovery(ctx,
                              MODBUS_ERROR_RECOVERY_LINK |
                              MODBUS_ERROR_RECOVERY_PROTOCOL);

    modbus_set_slave(ctx, SL_ID);

    if (modbus_connect(ctx) == -1) {
        fprintf(stderr, "Connection failed: %s\n",
                modbus_strerror(errno));
        modbus_free(ctx);
        return -1;
    }

    printf("** UNIT TESTING **\n");
    printf("\nTEST WRITE/READ:\n");


    tab_reg[0] = 0;
    tab_reg[1] = 1;

    for ( n=0 ; n<100 ; n++ ) {
        rc = modbus_read_registers(ctx, 0, 10, tab_reg);
	if (rc == -1) {
	    fprintf(stderr, "%s\n", modbus_strerror(errno));
	    return -1;
	}

	for (i=0; i < rc; i++) {
	    printf("reg[%d]=%d (0x%X)\n", i, tab_reg[i], tab_reg[i]);
	}

	if (tab_reg[0] == 1) tab_reg[0]=0; else tab_reg[0]=1;
	if (tab_reg[1] == 1) tab_reg[1]=0; else tab_reg[1]=1;
	tab_reg[2] = rand();
	tab_reg[3] = rand();
	tab_reg[4] = rand();
	tab_reg[5] = rand();
	tab_reg[6] = rand();
	tab_reg[7] = rand();
	tab_reg[8] = rand();

        rc = modbus_write_registers(ctx, 0, 10, tab_reg);
	if (rc == -1) {
	    fprintf(stderr, "%s\n", modbus_strerror(errno));
	    return -1;

	}
        for (i=0; i < rc; i++) {
		printf("reg[%d]=%d (0x%X)\n", i, tab_reg[i], tab_reg[i]);
	}

	sleep(1);
	
    }

    /* Close the connection */
    modbus_close(ctx);
    modbus_free(ctx);

    return 0;
}
Скетч -
Код:
#include <Modbusino.h>

const int ledPin_g =  GREEN_LED;
const int ledPin_r =  RED_LED;
const int RL0 = GREEN_LED;
const int RL1 = RED_LED;
const int RL2 = 12;
const int RL3 = 13;
const int rl_arr[] = { RL0,RL1,RL2,RL3 };
const int regs = 10; // количество регистров
const int ID_slave = 1;

uint16_t tab_reg[regs]; //задаем массив регистров

// Инициализация SLAVE, идентификатор (адрес) в сети ID = 1
ModbusinoSlave modbusino_slave(ID_slave);

// на цифр. выходы сразу записываем значение регистров
// любое значение > 0 это HIGH, 0 - LOW   

void SetRelay() {
  int i;
  for (i = 0; i < 4; i++) {
    digitalWrite(rl_arr[i], tab_reg[i]); 
  }
}

void setup() {
  modbusino_slave.setup(9600);
// установка цифровых вх/вых в режим выхода  
  pinMode(RL0, OUTPUT);
  pinMode(RL1, OUTPUT);
  pinMode(RL2, OUTPUT);
  pinMode(RL3, OUTPUT);
}

void loop() {
  modbusino_slave.loop(tab_reg, regs);
  SetRelay();
  tab_reg[9] = analogRead(TEMPSENSOR); //запись аналогового значения в 9-ый регистр

}
Вывод тестовой программы -
Код:
root@zuriuslev:~# /home/ServoManager/ACM0/unit-test-client
Opening /dev/ttyACM0 at 9600 bauds (N, 8, 1)
** UNIT TESTING **

TEST WRITE/READ:
[01][03][00][00][00][0A][C5][CD]
Waiting for a confirmation...
<01><03><14><00><00><00><01><99><38><E8><E0><CA><79><5C><4D><EA><3D><1A><34><5D><BC><01><3E><40><7D>
reg[0]=0 (0x0)
reg[1]=1 (0x1)
reg[2]=39224 (0x9938)
reg[3]=59616 (0xE8E0)
reg[4]=51833 (0xCA79)
reg[5]=23629 (0x5C4D)
reg[6]=59965 (0xEA3D)
reg[7]=6708 (0x1A34)
reg[8]=23996 (0x5DBC)
reg[9]=318 (0x13E)
[01][10][00][00][00][0A][14][00][01][00][00][45][67][23][C6][98][69][48][73][DC][51][5C][FF][94][4A][01][3E][6A][82]
Waiting for a confirmation...
<01><10><00><00><00><0A><40><0E>
reg[0]=1 (0x1)
reg[1]=0 (0x0)
reg[2]=17767 (0x4567)
reg[3]=9158 (0x23C6)
reg[4]=39017 (0x9869)
reg[5]=18547 (0x4873)
reg[6]=56401 (0xDC51)
reg[7]=23807 (0x5CFF)
reg[8]=37962 (0x944A)
reg[9]=318 (0x13E)
[01][03][00][00][00][0A][C5][CD]
Я ОООчень доволен
Метод отлично работает ! LaunchPad MSP430 весело моргает светодиодами и показывает изменения температуры

Програмка для роутера в аттачменте
Вложения
Тип файла: zip unit-test-client.zip (3.5 Кб, 406 просмотров)
zuriuslev вне форума   Ответить с цитированием
Старый 19.12.2012, 22:02   #3
zuriuslev
Junior Member
 
Регистрация: 19.12.2012
Адрес: Марбелья
Сообщений: 18
Вес репутации: 0
zuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond repute
Smile Продолжил разборки с modbus.

Хочу управлять шиной при помощи PHP.
НО ! для PHP, нашел вразумительные классы только для ModBus TCP,
для ModBus RTU, ничего нет.

Начал рыться и наткнулся на замечательную программу -
Free MODBUS/TCP to MODBUS/RTU gateway

Действительно !
скомпилировал, запустил на роутере
(mbusd -d -v9 -L- -p/dev/ttyACM0 -s9600 -P502)
и подключился уже с виндозы, через ModbusPoll.
Всё работает !

Даже собрал .ipk для OpenWrt.

Завтра продолжу уже из PHP.
Вложения
Тип файла: zip mbus_0.1.2_ar71xx.zip (10.2 Кб, 459 просмотров)
zuriuslev вне форума   Ответить с цитированием
Старый 18.04.2013, 21:44   #4
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
По умолчанию

Цитата:
Сообщение от zuriuslev Посмотреть сообщение
..
Начал рыться и наткнулся на замечательную программу -
Free MODBUS/TCP to MODBUS/RTU gateway

Действительно !
скомпилировал, запустил на роутере
(mbusd -d -v9 -L- -p/dev/ttyACM0 -s9600 -P502)
и подключился уже с виндозы, через ModbusPoll.
Всё работает !

Даже собрал .ipk для OpenWrt.

Завтра продолжу уже из PHP.

Пожалуйста можно поподробнее как вы компилировали.

Дело в том что mbusd контролирует состояние RTS линии и не работает с любыми UART MC.

Последний раз редактировалось andr128; 18.04.2013 в 21:53.
andr128 вне форума   Ответить с цитированием
Старый 19.12.2012, 18:43   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Программу для роутера не совсем понял как запускать?
Admin вне форума   Ответить с цитированием
Старый 19.12.2012, 22:05   #6
zuriuslev
Junior Member
 
Регистрация: 19.12.2012
Адрес: Марбелья
Сообщений: 18
Вес репутации: 0
zuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
Программу для роутера не совсем понял как запускать?
Скопировать на роутер. (Например в /usr/bin)
Сделать "chmod 755 /usr/bin/unit-test-client"
и запустить unit-test-client


Немножко доработал прогу, новое название mbtest
Usage: mbtest [-p name] [-s value] [-e value]
-p<name> set serial port device name (default /dev/ttyACM0)
-s<value> set serial port speed (default 9600)
-e<value> set slave id (default 1)

Т.Е можно изменять порт, скорость и номер слейв устройства,
запуск без параметров эквивалентен комманде - mbtest -p ttyACM0 -s 9600 -e 1
список параметров - mbtest -h
комплект прилагается.
Вложения
Тип файла: zip mbtest.zip (6.0 Кб, 375 просмотров)

Последний раз редактировалось zuriuslev; 20.12.2012 в 02:15.
zuriuslev вне форума   Ответить с цитированием
Старый 20.12.2012, 04:53   #7
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
По умолчанию

Отлично наш человек!
PHP хорошо работает через сокеты.
Вот пример клиента:
PHP код:
<?php
  header
('Content-Type: text/plain; charset=utf-8 '); //Мы будем выводить простой текст
  
set_time_limit(0); //Скрипт должен работать постоянно
  
ob_implicit_flush(); //Все echo должны сразу же выводиться

  
$address 'localhost';
  
$port 3425;

  
$socket socket_create(AF_INETSOCK_STREAMSOL_TCP);
  
$result socket_connect($socket$address$port);

  
$msg "hello server!";

  
socket_write($socket$msgstrlen($msg)); //Сообщение серверу
  
  
$out socket_read($socket1024PHP_BINARY_READ);   //Читаем сообщение от сервера

// echo "Сообщение от сервера: $out\n"; //Выводим сообщение от сервера

//здесь можно задать массив с данными, получив их с сервера.
    
$n = array("id" => 56
           
"val1" => "off",
           
"val2" => "on",
           
"val3" => 129,
           
"val4" => "0",
           
"server" => $out,
           
"time" => date("H:i:s"));
    echo 
json_encode($n);


  
//Останавливаем работу с сокетом
  
if (isset($socket)) {
    
socket_close($socket);
  }
?>
Пример сервера для работы с сокетами:

PHP код:
//gcc serv_select.c -o serv_select 


#include <string.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>

#include <unistd.h>    /* UNIX standard function definitions */
#include <fcntl.h>     /* File control definitions */
#include <errno.h>     /* Error number definitions */
#include <termios.h>   /* POSIX terminal control definitions */


int PORT_SERV 3425;
char sendstr[] = "I'm Server port 3425";

char str[10];

int count 0;

int main() {

    
int sock_fd;
    
int list_fd;

    
int selvar;
    
struct sockaddr_in addr;
    
char buf[1024];
    
int bytes_read;

    
list_fd socket(AF_INETSOCK_STREAM0); //создание сокета
    
if (list_fd 0) { perror("socket"); exit(1); }
    
//    fcntl(list_fd, F_SETFL, O_NONBLOCK); //не блокируемый сокет
    
    
addr.sin_family AF_INET;        //тип соединения
    
addr.sin_port htons(PORT_SERV);    //порт
    
addr.sin_addr.s_addr INADDR_ANY;    //принимать соед. с любого адреса 

    //связывание сокета с адресом, портом ..
    
if ( bind(list_fd, (struct sockaddr *)&addrsizeof(addr)) < 0) { perror("bind"); exit(2); }

    
listen(list_fd1); //слушать соединения на сокете, 1 - возможн. кол-во соединений


// главный цикл    
while(1)
{
        
sock_fd accept(list_fdNULLNULL); //
        
if (sock_fd 0) { perror("accept"); close(sock_fd); return -1; }

  while(
1) {
        
// Заполняем множества дискрипторов
        
fd_set readset;            // type
        
FD_ZERO(&readset);        // очистить набор всех дискрипторов
        
FD_SET(sock_fd, &readset);    // включить в набор файловый дискриптор сокета

        // Задаём таймаут
        
struct timeval timeout;
        
timeout.tv_sec =  1;
        
timeout.tv_usec 0;

        
// Ждём события в одном из сокетов
        
selvarselect (sock_fd+1, &readsetNULLNULL, &timeout);
    if (
selvar <= 0) { perror("select"); exit(3); } 
    else {
        if ( 
FD_ISSET(sock_fd, &readset) )
        {
        
bytes_read recv(sock_fdbuf10240); // получаем данные из сокета sizeof(buf)
        
if (bytes_read <= 0) {printf("Bytes: %d\n"bytes_read); close(sock_fd); break; } // Соединение разорвано или ошибка

        
buf[bytes_read]=0//добавить в конец 0
        
printf(" bytes: %d read str: %s\n"bytes_readbuf);


        
count++; if (count 0xFFFEcount=0// просто счетчик
        //itoa(count, str, 10);
        
sprintf(str"%6u"count); //преобразовать число в строку

//        send(sock_fd, sendstr, strlen(sendstr), 0);
        
send(sock_fdstrstrlen(str), 0); //в ответ будем посылать счетчик
        
}
        }
   
printf(" Cycle osn\n");
  } 
//осн. цикл

printf(" Cycle MAIN\n");
//гл. цикл

    
return 0;

Добавьте в этот код работу с модбас и будет у вас свой шлюз.
Код:
Arduino (slave) <---> Modbus RTU (Master) - Sokcet TCP(Server) <---> PHP Socket TCP (Client) -- Web страница
По поводу компиляции под роутер. Мы тут все подсажены на версию trunk r33482. Поэтому скомпилированные вами программы могут не запускаться.
Хотя если использовать библиотеки от нашей версии то...

Последний раз редактировалось andr128; 20.12.2012 в 15:08.
andr128 вне форума   Ответить с цитированием
Старый 20.12.2012, 17:19   #8
zuriuslev
Junior Member
 
Регистрация: 19.12.2012
Адрес: Марбелья
Сообщений: 18
Вес репутации: 0
zuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond reputezuriuslev has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от andr128 Посмотреть сообщение
По поводу компиляции под роутер. Мы тут все подсажены на версию trunk r33482. Поэтому скомпилированные вами программы могут не запускаться.
Хотя если использовать библиотеки от нашей версии то...
Спасибо за примеры и образцы программ.
Сейчас задумался об использовании LUA.
Оно всё родное для OpenWRT и вторым HTTP сервером железяку напрягать не придётся.
Сижу ковыряюсь с тулзами для биндинга библиотек в LUA
Пробую разную хрень отсюда
Может Вы в курсе, что наиболее юзабельно ?

А для транка скомпилить, это разве проблема ?
Могу начинающим расписать процедуру ...

Последний раз редактировалось andr128; 29.06.2013 в 16:59.
zuriuslev вне форума   Ответить с цитированием
Старый 20.12.2012, 18:42   #9
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
По умолчанию

Цитата:
Сообщение от zuriuslev Посмотреть сообщение
Спасибо за примеры и образцы программ.
Сейчас задумался об использовании LUA.
Оно всё родное для OpenWRT и вторым HTTP сервером железяку напрягать не придётся.
Сижу ковыряюсь с тулзами для биндинга библиотек в LUA
Пробую разную хрень отсюда.
Может Вы в курсе, что наиболее юзабельно ?
Я так понял это web-сервер.
кстати ссылку не верно дали: (_http://http//lua-users.org/wiki/BindingCodeToLua)
Нет не ковырялся. Я вообще не ставил люси нафиг нужно, только место занимать (как раз одна из проблем нехватки места во флэш на mr3020, на версиях др. прошивок где встроен люси, не удается даже установить поддержку usb флэшек). Все что надо, настраивается через терминал в сочетании с WinSCP легко. Если кому нужен LUCI - можно доставить потом, уже на внешнюю флэшку.
Я понимаю так, чтобы не выдумывать свой интерфейс (и облегчить себе жизнь ) для упраления ардуино вы решили сделать его на базе LUI.
Может это и правильно. Не знаю, попробуйте, если получится пожалуйста напишите. Я пока еще плохо разбираюсь в Web технологиях, поэтому стараюсь изучать пока стандартные пути PHP, Java, CSS.


Цитата:
А для транка скомпилить, это разве проблема ?
Могу начинающим расписать процедуру ...
Не проблема, но лучше бинарники не выкладывать от др. версий OpenWrt т.к. могут быть проблемы при запуске. Тут и так люди мучуются устанавливают прошивку одну, а потом не могут установить программы от др. версии. Поэтому мы дружно решили сидеть на одной, уже проверенной версии прошивки и соответственно репозитории от неё.

Как компилировать напишите конечно и желательно с нуля (какие пакеты ставить, настройки компиляции и т.д и т.п.), именно под конкретный транк (r33482), будет очень полезно. Я думаю многие скажут спасибо. К тому же многие тут озадачены стыковкой роутера с ардуиной, а знаний не хватает. Многие линукса не знают, а тут такое непонятное кросскомпиляция
andr128 вне форума   Ответить с цитированием
Старый 20.12.2012, 14:44   #10
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
По умолчанию

Для тех кто хочет поуправлять ардуиной с Web сервера (без модбас) можно использовать шлюз server serial-tcp: ser2net (есть в репозитории) или suart.

Стучаться к нему соответственно через сокет (пример на PHP выше) указав порт TCP.

Пример html страницы. (Используется JQuery, JSON, AJAX - фоновое обновление параметров):
Код HTML:
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">  
    <script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div id="info">Загрузка...</div>

	<script>
		function json_example()
		{
			$.getJSON('client_socket.php', function(data) {
				s = "";
				$.each(data, function(key, val) {
					s= s + key+' = ' + val + '<br/>'
				});
				$("#out").html(s)
			});
		}

		setInterval(json_example, 1000); //вызывать скрипт через 1 с
//		json_example(); //вызвать 1 раз
	</script>

<div id="out"></div>

</body>
</html>

Пример вывода отдельных элементов массива текстовой структуры JSON

Код HTML:
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">  
    <script type="text/javascript" src="jquery.js"></script>
</head>
<body>

<div id="info"> Данные с сервера php </div>

<script>
	function json_example()
	{
	$.getJSON('client_socket.php', function(data) 
				{
	 			$("#out").html(" ID     : " +data.id+"<br>"+
                       			       " Server : " +data.server+"<br>"+
                       			       " Time   : " +data.time);
				} 
	);
	}

	setInterval(json_example, 1000); //вызывать скрипт через 1000 мс

</script>

<div id="out"></div> <!-- сюда будет выводится страница -->

</body>
</html>

Последний раз редактировалось andr128; 26.01.2013 в 08:21.
andr128 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 5 (пользователей: 0 , гостей: 5)
 

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

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

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


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


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