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

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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.06.2014, 09:33   #11
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: CyberWrt модуль "Modbus"

Обновлён. Версия 0.1.5276.20347.

Убрал зависимость от jQuery. Пришлось переделать shell-скрипт, отвечающий за разбор параметров. Размер архива уменьшился почти в 4 раза.

Теперь скрипт запроса должен выглядеть вот так:
Код:
modbus.OnFailure = function( handle, error ) { 

    document.getElementById( 'console' ).value += '\nОшибка: ' + error; 
}

modbus.OnSuccess = function( handle ) {

    document.getElementById( 'console' ).value += '\nRegister( ' + handle + ', 0 ): ' + modbus.Register( handle, 0 );
}

modbus.Serial = {

    Name: '/dev/ttyATH0',
    BaudRate: EnModbusBaudRate.mbBaudRate9600,
    DataBits: EnModbusDataBits.mbDataBits8Bits,
    Parity: EnModbusParity.mbParityNone,
    StopBits: EnModbusStopBits.mbStopBitsOne,
    Timeout: 100
};

// ReadHoldingRegisters( handle, slaveid, address, quantity, updaterate )
// Starting Address: 0x0000 to 0xFFFF.
// Quantity of Inputs: 1 to 125 (0x7D).

modbus.ReadHoldingRegisters( 1, 0, 0, 1, 1000 );
modbus.ReadHoldingRegisters( 2, 0, 1, 1, 950 );
modbus.ReadHoldingRegisters( 3, 0, 2, 1, 750 );

modbus.DelayBetweenPoll = 200;

modbus.UpdateEnable(1);
modbus.UpdateEnable(2);
modbus.UpdateEnable(3);

setTimeout(

    function() {

        modbus.UpdateDisable(1);
        modbus.UpdateDisable(2);
        modbus.UpdateDisable(3);
        
    }, 5000 );
Мой вариант замены для функции post выглядит так:
Код:
ajax: function( request ) {

    var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function() {

        if ( this.readyState == 4 && this.status == 200 ) {

            request.success( xhr.responseText );
        }

    };

    xhr.open( request.type, request.url, request.async );

    xhr.send( JSON.stringify( request.data ) );
},
В общем, стандартная такая функция, но она у меня есть в двух вариантах. Одна в классе Modbus, другая в Query. Они отличаются только при приёме данных. Modbus.ajax() делает приведение к json, а Query.ajax() нет. Это связано с тем, что чаще я получаю ответ в виде простой строки и только для modbus мне нужно принять массив байт.

jQuery я убрал, но добавил json.cgi - это парсер JSON формата. Он позволяет делать разбор принимаемых данных, которые я передаю всегда в json-формате. Довольно удобно и места он занимает не много ~4 Кб.

Сейчас я в коде везде использую синхронные запросы, т.к. пока не знаю как решить проблему параллельного запуска скриптов в случае асинхронных post запросов. Минусом является то, что страничка слегка "подтормаживает" при отображении принимаемых данных.
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
 

Метки
modbus, modbus-rtu, скрипт, модуль


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

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

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

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


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


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