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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.06.2014, 16:23   #31
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"

Нужно удалить и установить модуль заново. При возникновении проблем указывать версию модуля, которая находится на вкладке "О модуле". Также нужно приводить содержание журнала с вкладки "Отладка" и используемый скрипт.

Пока вместо остановки можно просто обновлять страничку (F5). Управлять поведением можно полностью при помощи скрипта, задавая временные промежутки.

setTimeout() делает отложенное выполнение функции, которая задаётся одним из аргументов. Это сделано специально, чтобы тестировать работу именно несколькими посылками. За время таймаута, учитывая период опроса, их и получается немного.
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 18.06.2014, 13:48   #32
Central30
Junior Member
 
Регистрация: 16.05.2014
Адрес: Баку
Сообщений: 18
Вес репутации: 0
Central30 is an unknown quantity at this point
По умолчанию Re: CyberWrt модуль "Modbus"

Здравствуйте Вячеслав,никак не получается изменить изменить регистр на единицу.Модуль удалял,заново ставил.Прилагаю лог сброса на ноль
Код:
2014.06.18 13:45:54 [INFO:30180] ( => ) 0x01_0x05_0x00_0x06_0x00_0x00_0x2D_0xCB
2014.06.18 13:45:55 [INFO:30180] ( <= ) 0x01_0x05_0x00_0x06_0x00_0x00_0x2D_0xCB
2014.06.18 13:45:55 [INFO:30244] ( => ) 0x01_0x05_0x00_0x06_0x00_0x00_0x2D_0xCB
2014.06.18 13:45:56 [INFO:30244] ( <= ) 0x01_0x05_0x00_0x06_0x00_0x00_0x2D_0xCB
2014.06.18 13:45:56 [INFO:30308] ( => ) 0x01_0x05_0x00_0x06_0x00_0x00_0x2D_0xCB
2014.06.18 13:45:57 [INFO:30308] ( <= ) 0x01_0x05_0x00_0x06_0x00_0x00_0x2D_0xCB
2014.06.18 13:45:57 [INFO:30372] ( => ) 0x01_0x05_0x00_0x06_0x00_0x00_0x2D_0xCB
2014.06.18 13:45:58 [INFO:30372] ( <= ) 0x01_0x05_0x00_0x06_0x00_0x00_0x2D_0xCB
А вот лог записи на единицу
Код:
2014.06.18 13:47:30 [INFO:30500] ( => ) 0x01_0x05_0x00_0x06_0x00_0x01_0xEC_0x0B
2014.06.18 13:47:30 [INFO:30500] ( <= ) 0x01_0x85_0x03_0x02_0x91
2014.06.18 13:47:31 [INFO:30564] ( => ) 0x01_0x05_0x00_0x06_0x00_0x01_0xEC_0x0B
2014.06.18 13:47:31 [INFO:30564] ( <= ) 0x01_0x85_0x03_0x02_0x91
2014.06.18 13:47:32 [INFO:30628] ( => ) 0x01_0x05_0x00_0x06_0x00_0x01_0xEC_0x0B
2014.06.18 13:47:32 [INFO:30628] ( <= ) 0x01_0x85_0x03_0x02_0x91
2014.06.18 13:47:33 [INFO:30692] ( => ) 0x01_0x05_0x00_0x06_0x00_0x01_0xEC_0x0B
2014.06.18 13:47:33 [INFO:30692] ( <= ) 0x01_0x85_0x03_0x02_0x91
Central30 вне форума   Ответить с цитированием
Старый 18.06.2014, 13:53   #33
Central30
Junior Member
 
Регистрация: 16.05.2014
Адрес: Баку
Сообщений: 18
Вес репутации: 0
Central30 is an unknown quantity at this point
По умолчанию Re: CyberWrt модуль "Modbus"

Прилагаю также скрипт

Код:
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/ttyUSB0',
    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.WriteSingleCoil( 1, 1, 6, 1, 1000 );
//modbus.ReadHoldingRegisters( 2, 1, 5, 1, 950 );
//modbus.ReadHoldingRegisters( 3, 1, 6, 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 );
Central30 вне форума   Ответить с цитированием
Старый 18.06.2014, 14:29   #34
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"

Код:
0x01_0x85_0x03_0x02_0x91
ExceptionCode = 3 означает, что данные не прошли проверку. Если прочитать документацию на функцию, которую я приводил в первом посте, то можно увидеть следующее описание:
Цитата:
6.5 05 (0x05) Write Single Coil
This function code is used to write a single output to either ON or OFF in a remote device.
The requested ON/OFF state is specified by a constant in the request data field. A value of FF
00 hex requests the output to be ON. A value of 00 00 requests it to be OFF. All other values
are illegal and will not affect the output.
The Request PDU specifies the address of the coil to be forced. Coils are addressed starting
at zero. Therefore coil numbered 1 is addressed as 0. The requested ON/OFF state is
specified by a constant in the Coil Value field. A value of 0XFF00 requests the coil to be ON.
A value of 0X0000 requests the coil to be off. All other values are illegal and will not affect the
coil.
Это означает, что включать нужно такой командой:
Код:
modbus.WriteSingleCoil( 1, 1, 6, 0xFF00, 1000 );
При этом ответ также должен продублироваться:
Код:
( => ) 0x01_0x05_0x00_0x06_0xFF_0x00_0x6C_0x3B
( <= ) 0x01_0x05_0x00_0x06_0xFF_0x00_0x6C_0x3B
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 18.06.2014, 14:43   #35
Central30
Junior Member
 
Регистрация: 16.05.2014
Адрес: Баку
Сообщений: 18
Вес репутации: 0
Central30 is an unknown quantity at this point
По умолчанию Re: CyberWrt модуль "Modbus"

Да ,спасибо.И правда.Сейчас все нормально.А теперь как сделать чтобы был постоянный опрос регистров?
Central30 вне форума   Ответить с цитированием
Старый 18.06.2014, 14:50   #36
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"

Чтобы был постоянный опрос нужно убрать команды его завершения:
Код:
setTimeout(

    function() {

        modbus.UpdateDisable(1);
       // modbus.UpdateDisable(2);
       // modbus.UpdateDisable(3);
        
    }, 5000 );
modbus.UpdateDisable(1); - отключает обновление задачи с handle = 1. Если этот кусок кода убрать и нажать на "Выполнить", то опрос будет осуществляться с заданным периодом постоянно. Остановить можно обновив страничку (F5).
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 18.06.2014, 15:09   #37
Central30
Junior Member
 
Регистрация: 16.05.2014
Адрес: Баку
Сообщений: 18
Вес репутации: 0
Central30 is an unknown quantity at this point
По умолчанию Re: CyberWrt модуль "Modbus"

Это тоже на ура.И еще вопросик,ваш скрипт который в модуле нужно вставлять в html?
Central30 вне форума   Ответить с цитированием
Старый 18.06.2014, 15:40   #38
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"

Скрипт, который в модуле, физически находится на флешке роутера. Скрипт для того и предназначен, чтобы быть частью html файла. Только, чтобы он заработал, нужно подключить файл modbus.js, а кроме того расположить html файл там же, где находится main.html, который мы видим. Иначе нужно поправлять пути.

В модуле modbus.js есть конструктор:
Код:
// Конструктор.
function Modbus() {

    // Свойства.

    // Путь к скрипту.
    this.Url = '/cgi-bin/modules/modbus/action.cgi';

    // Задержка между запросами.
    this.DelayBetweenPoll = 100;

    // Массив задач.
    this.Tasks = [];

    // Настройки последовательного порта.
    this.Serial = {

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

}
Относительный путь к скрипту должен быть верным. Также и в самом action.cgi нужно, чтобы были правильно заданы пути к необходимым файлам.

В общем, если применять modbus.js отдельно, то нужно разобраться как он работает с action.cgi. После этого вопросы сами собой должны отпасть.
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 18.06.2014, 15:46   #39
Central30
Junior Member
 
Регистрация: 16.05.2014
Адрес: Баку
Сообщений: 18
Вес репутации: 0
Central30 is an unknown quantity at this point
По умолчанию Re: CyberWrt модуль "Modbus"

Вот если бы вы приложили бы тут пример на html кнопку,как пример на ардуино здесь на форуме,то мне кажется вопросы многие отпали бы.Нажал кнопку вкл,регистр записал единицу,нажал откл,регистр сбросился
Central30 вне форума   Ответить с цитированием
Старый 18.06.2014, 16:06   #40
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"

Вот простой пример html странички с двумя кнопками. Её нужно поместить рядом с main.html в папке /www/modules/modbus/:

Код:
<html>
<title>Тест modbus</title>
<body>
<script src="/modules/modbus/modbus.js"></script>
<script language="JavaScript" type="text/javascript">

modbus = new Modbus();

modbus.OnFailure = function( handle, error ) { 

	alert( 'Ошибка: ' + error ); 
}

modbus.OnSuccess = function( handle ) {

	alert( 'Register( ' + handle + ', 0 ): ' + modbus.Register( handle, 0 ) );
}

modbus.Serial = {

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

function On() {
	
	modbus.WriteSingleCoil( 1, 1, 6, 0xFF00, 1000 );
	modbus.UpdateOnce(1);
}

function Off() {

	modbus.WriteSingleCoil( 1, 1, 6, 0x0000, 1000 );
	modbus.UpdateOnce(1);
}

</script>

<h4>Тестирование Modbus-RTU.</h4>

<button type="button" onclick="On();">Включить</button>
<button type="button" onclick="Off();">Выключить</button>
</body>
</html>
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Ответ

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


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

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

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

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


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


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