Help. Modbus транзакторы.
В Modbus ESP имеется 10
транзакторов. Они предназначены для посылки команд и приема сообщений по шине RS-485. Работают только в режиме master. В них задается какие данные из ячеек буфера Modbus ESP отослать и/или куда прочитать. Их обслуживание производится по таймеру в 50 мсек. Более старший номер транзактора имеет меньший приоритет (обрабатывается последним в группе). Транзакторы расположены сразу за буфером Modbus ESP, с адреса ячеек 1000. Каждый транзактор имеет и занимает 10 ячеек.
Запись и запуск из web транзактора осуществляется командой
mdbtN=id,command,number,extaddress,intaddress,timer,errors[,fifo,tcnt] - где:
N - номер транзактора; ID - номер устройства на шине Modbus; Command - номер команды Modbus; Number - кол-во передаваемых ячеек; ExtAddress - номер ячейки у внешнего устройства; IntAddress - внутренний адрес Modbus ESP; Timer - делитель таймера; Error - счетчик ошибок приема/передачи транзактора. Если какой-то параметр пропущен (задано ",,"), то прошлое значение не меняется. Кол-во параметров может быть больше или меньше. Но не желательно затирать внутренние счетчики fifo и tcnt. Указывая error нулем, сбрасываем счет ошибок.
Одиночный запуск уже назначенного транзактора можно сделать командой записи ячейки "mdbw1010=1", где 1010 - это ячейка startflag у транзактора с номером 1. Адрес вычисляется как 1000 + 10*номер транзактора. Можно и запросить у web для javascript адрес начала блока транзакторов ~mdb_trna~ и их кол-во ~mdb_trns~.
Для примера отсылки строки "Hello!"внешнему контроллеру из web, можно воспользоваться такой командой "
http://aesp8266/web.cgi?mdba123=Hello!&mdbt0=1,16,4,123,0,0,0".
TrnN - N номер транзактора;
StartFlag - ячейка, при записи в которую любого отличного от нуля числа вызывает одиночную транзакцию. Опрос по таймеру в 50 ms. При обработке запроса (засылке в fifo) сбрасывается в нуль.
ID - номер устройства на шине Modbus.
Command - номер команды Modbus. Из стандартных пока поддерживаются команды с номерами 3, 4, 6, 16. Для других номеров запрос будет составлен как id,cmd,x0,x1,... где xn - данные из ячейки с номером в IntAddr, кол-во n указывается в Number.
Number - кол-во передаваемых ячеек.
ExtAddr - номер ячейки у внешнего устройства.
IntAddr - внутренний адрес ячейки в Modbus ESP.
Timer - делитель таймера повтора транзакции. Если = 0 - одноразовая транзакция. Учитывает fifo - если сообщение ещё сидит в fifo (не отработано), то счет таймера стоит.
Error - счетчик ошибок приема/передачи транзактора. В основном указывает кол-во не полученных ответов из-за тайм-аута.
FifoCount - кол-во сообщений от данного транзактора находящихся в fifo. Равен кол-ву ещё не отработанных транзакций.
TimerCount - это внутренний счетчик делителя таймера (на странице не отображен).
Отладка и просмотр транзакторов на Web в реал-тайм находится в
http://aesp8266/protect/mdbtrn.htm (есть ссылка из страницы
Debug and Test). На странице, кликание мышью на позиции в строке SartFlag вызывают одиночное срабатывание транзактора (=1), на позиции в строке Timer - останов таймера (=0), на позиции в строке Erros - сброс счетчика ошибок (=0). Ниже таблицы на странице дан пример записи транзактора.
Транзакторы к картинке заданы такой строкой "
http://aesp8266/web.cgi?mdbt0=1,4,10,0,0,1,0&mdbt1=1,16,20,10,10,1,0". Шина RS-485 никуда не включена - от этого одни ошибки транзакций... Примеры с рабочими устройствами
уже давались и ещё будут...
Пока в Help всё ещё не дописано - на сегодня хватит - лень, буду дописывать позже.