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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.06.2014, 09:33   #21
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 вне форума   Ответить с цитированием
Старый 12.06.2014, 11:00   #22
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"

Admin, вот этот архив можно добавить в комплект для тестирования.
Вложения
Тип файла: zip modbus.zip (27.7 Кб, 215 просмотров)
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 12.06.2014, 11:29   #23
Central30
Junior Member
 
Регистрация: 16.05.2014
Адрес: Баку
Сообщений: 18
Вес репутации: 0
Central30 is an unknown quantity at this point
По умолчанию Re: CyberWrt модуль "Modbus"

Вячеслав,все операции так же проводить через модуль?Или же уже можно запрашивать через браузер?
Central30 вне форума   Ответить с цитированием
Старый 12.06.2014, 13:05   #24
lvovitch
Senior Member
 
Регистрация: 14.04.2010
Сообщений: 239
Вес репутации: 0
lvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond repute
По умолчанию Re: CyberWrt модуль "Modbus"

Цитата:
Сообщение от uni Посмотреть сообщение
Admin, вот этот архив можно добавить в комплект для тестирования.
Правильно я понял, что нужно было заменить?
lvovitch вне форума   Ответить с цитированием
Старый 12.06.2014, 13:45   #25
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"

Я раньше не добавлял модули в CyberWrt. Единственный мой модуль добавил Admin, поэтому я не знаю как это делается. В архиве modbus.zip я добавил картинок, согласно описанию и последние версии скриптов.

Этот архив меньшего размера, чем предыдущие, так как я убрал зависимость от jQuery. Сам скрипт modbus.js теперь можно использовать и отдельно в своих разработках. Он самодостаточен.
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 12.06.2014, 15:05   #26
lvovitch
Senior Member
 
Регистрация: 14.04.2010
Сообщений: 239
Вес репутации: 0
lvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond repute
По умолчанию Re: CyberWrt модуль "Modbus"

ок. новую версию залил
lvovitch вне форума   Ответить с цитированием
Старый 12.06.2014, 15:05   #27
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"

На всякий случай поясняю, что func.txt содержит текст запроса в кодировке Base64. В роутере есть специальная команда для кодирования и декодирования таких строк: base64.
Не рекомендую декодировать и править этот файл вручную. Это связано с переносами строк. Кодирование позволяет сохранить оригинальную бинарную копию файла. Разные редакторы по-разному интерпретируют переносы. Из-за этого может нарушиться отображение скрипта в браузере. Я пока не нашел более удобного и безопасного в этом смысле способа работы с текстом.
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 12.06.2014, 15:07   #28
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"

Цитата:
Сообщение от lvovitch Посмотреть сообщение
ок. новую версию залил
Ой, а я и не понял, что модуль там находится Думал в тестах он будет. Спасибо, не обратил внимания на прошлый пост по этому поводу. Потестирую.
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 12.06.2014, 15:23   #29
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"

Цитата:
Сообщение от Central30 Посмотреть сообщение
Вячеслав,все операции так же проводить через модуль?Или же уже можно запрашивать через браузер?
Работа по протоколу должна быть оформлена как html страничка и находиться физически в роутере, там же должен находиться ответный shell скрипт с установленными правами на исполнение. Html страничка сама по себе не может связаться с устройством по протоколу.

К примеру, чтобы сделать Конфигутатор какого-то устройства или HMI, нужно графическую часть написать на html, а всё взаимодействие будет идти через http-сервер, который работает в роутере. Страничка обращается с запросом к серверу, тот запускает локальный скрипт, этот скрипт обращается к последовательному порту и потом всё в обратном порядке. Так это работает.
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 16.06.2014, 15:37   #30
Central30
Junior Member
 
Регистрация: 16.05.2014
Адрес: Баку
Сообщений: 18
Вес репутации: 0
Central30 is an unknown quantity at this point
По умолчанию Re: CyberWrt модуль "Modbus"

Советую добавить еще одну кнопку "стоп" в модуль и сделать постоянный опрос регистров.А то всего 4 раза опрашивает.И также выдает ошибку -3 при записи регистра 0х05 write single coil.В нулевое состояние записывается без проблем
Central30 вне форума   Ответить с цитированием
Ответ

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


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

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

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

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

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


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


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