Это старая версия документа.



Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/inc/parser/handler.php on line 1458

Warning: Declaration of syntax_plugin_tablecalc::handle($match, $state, $pos, &$handler) should be compatible with DokuWiki_Syntax_Plugin::handle($match, $state, $pos, Doku_Handler $handler) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/tablecalc/syntax.php on line 41

Warning: Declaration of syntax_plugin_tablecalc::render($mode, &$renderer, $data) should be compatible with DokuWiki_Syntax_Plugin::render($format, Doku_Renderer $renderer, $data) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/tablecalc/syntax.php on line 72

Warning: Declaration of syntax_plugin_offline::handle($match, $state, $pos, &$handler) should be compatible with DokuWiki_Syntax_Plugin::handle($match, $state, $pos, Doku_Handler $handler) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/offline/syntax.php on line 60

Warning: Declaration of syntax_plugin_offline::render($format, &$renderer, $data) should be compatible with DokuWiki_Syntax_Plugin::render($format, Doku_Renderer $renderer, $data) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/offline/syntax.php on line 67

Warning: preg_match(): Compilation failed: invalid range in character class at offset 3416 in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/inc/parser/lexer.php on line 118
A PCRE internal error occured. This might be caused by a faulty plugin

====== modbus ====== Универсальный модуль для устройств, работающих по протоколу ModbusRTU. Используемый протокол - MODBUS. [[http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf]] <code yaml> plugin.peripherial: enable: on module.modbus: netaddr: 1 portnum: 1 type: modbus enable: on maxWriteSizeInp: 64 maxWriteSizeReg: 6 tags: - name: inps type: uint16 region: inpreg address: 0 bits: idle: 1 walk: 2 run: 4 speed: 0b11110000 - name: outs type: uint16 region: hldreg access: wo address: 0 writeSingle: on writeMultiple: off - name: inp00 region: dscinp address: 0 - name: inp01 region: dscinp address: 1 inverted: on - name: out00 region: coil access: wo address: 0 - name: out01 region: coil access: wo address: 1 </code> ===== Параметры ===== Числовые значения во всех конфигурационных файлах jroboplc, в т.ч. и модуля modbus, задаются в десятичном виде. ^ Параметр ^ Умолчание ^ Описание ^ |**maxWriteSizeInp**| ''128'' |Максимальное количество регистров в запросе при множественной записи COIL | |**maxWriteSizeReg**| ''16'' |Максимальное количество регистров в запросе при множественной записи HLDREG | |**tags**| - |Список тегов. Количество тегов может быть любым. | ^ **tags** ^^^ |**name**| - |Имя тега | |**address**| ''0'' |Адрес регистра | |**region**| ''hldreg'' |Область регистра: | |:::|:::|''coil'' - дискретные выходы. Тип тега только ''bool''. | |:::|:::|''dscinp'' - дискретные входы. Тип тега - только ''bool''. Доступ - только чтение. | |:::|:::|''hldreg'' - аналоговые выходы. | |:::|:::|''inpreg'' - аналоговые входы. Доступ - только чтение. | |**access**| ''rw'' |Доступ: | |:::|:::|''ro'' - только чтение | |:::|:::|''wo'' - только запись | |:::|:::|''rw'' - чтение и запись | |**type**| ''uint16'' |Тип тега: | |:::|:::|''bool'' | |:::|:::|''int16'' | |:::|:::|''uint16'' | |:::|:::|''int32'' | |:::|:::|''float16'' | |:::|:::|''float32'' | |:::|:::|''string'' - только чтение | |**inverted**| ''off'' |Инверсия значения (только для типов тега ''bool''). | |**size**| ''1'' |Количество регистров (только для тегов типа ''string''). | |**readEnd**| ''off'' |Последний регистр в запросе чтения. | |**writeSingle**| ''on'' |Разрешение одиночной записи регистра. | |**writeMultiple**| ''on'' |Разрешение множественной записи регистра. | |**enable**| ''on'' |Разрешение чтения и записи тега. | |**tracktag**| '''' |Имя тега слежения для выполнения принудительной повторной записи. Предназначено для тегов с ''access=WO''. Тег слежения должен быть определен в этом же модуле. Запись инициируется, если последнее записанное значение отличается от значения, получаемого от тега слежения. | |**bits**| - |Карта дополнительных битовых тегов, где ключ - это имя тега (суффикс), а значение - битовая маска. Битовые теги доступны только для тегов типа ''uint16''. Формат имени битового тега: <code><name>.<суффикс></code> Все операции записи в битовые теги фактически являются записью в соответствующие биты основного тега. При изменении значения основного тега в результате операции чтения также изменяются соответствующие битовые теги. | ===== Порядок выполнения запросов ===== - Запись HLDREG - множественная запись (команда 16) - одиночная запись (команда 6) - Запись COIL - множественная запись (команда 15) - одиночная запись (команда 5) - Чтение HLDREG (команда 3) - Чтение INPREG (команда 4) - Чтение COIL (команда 1) - Чтение DSCINP (команда 2) ===== Запись регистров ===== Команды записи посылаются только для тех регистров, в теги которых были записаны значения, при этом значение может не отличаться от предыдущего. Сначала список регистров просматривается на возможность посылки команды множественной записи - если есть два и более регистра для записи со смежными адресами и у них есть разрешение на множественную запись, то данные регистры записываются командой 16 или 15. Если количество регистров для записи превышает установленный лимит, либо имеется несколько смежных адресов, между которыми есть разрыв, то команда множественной записи посылается необходимое количество раз. Далее командой одиночной записи (6 или 5) записываются регистры, имеющие разрешение на одиночную запись и не попавшие в под множественную запись. Для одного тега посылается как минимум одна команда одиночной записи. Две команды для одного тега посылается в случае, если тег имеет тип ''int32'' или ''float32'', т.е. состоит из двух регистров. ===== Чтение регистров ===== Команды чтения выполняются не все, а только необходимые для соответствующих областей регистров. Это значит, что имея в списке тегов только HLDREG-теги, запросы чтения будут только для HLDREG-регистров (команда 3). Количество запрашиваемых регистров определяется разностью самого старшего и самого младшего адресов. Например, имеем два HLDREG-тега в модуле с сетевым адресом 1: <code> - name: tag1 type: uint16 address: 3 - name: tag2 type: int32 address: 7 </code> В этом случае будет послана команда 3 на чтение шести(а не пяти, т.к. tag2 займет два регистра) регистров начиная с 3-го адреса: 01 03 0003 0006 crc16 В случае большого разрыва между считываемыми регистрами команда чтения разбивается на несколько при помощи параметра тега ''readEnd'': <code> - name: tag1 type: uint16 address: 3 - name: tag2 type: int32 address: 7 readEnd: on - name: tag3 type: int32 address: 255 </code> Чтение регистров будет состоять из двух запросов: 01 03 0003 0006 crc16 01 03 00FF 0001 crc16 ===== Ответ с ошибкой ===== Только для версии 1.3.7 и старше. Если опрашиваемое устройство отвечает на запрос чтения данных ошибкой, т.е. в ответе у байта кода команды взведен старший бит, то возникает ошибка связи. Узнать, какая именно команда вызывает ошибку можно при помощи консольной команды логирования ошибок: ''<имя_модуля>:logerror 10'' Ошибочный ответ игнорируется при запросе записи данных, и ошибки связи при этом не возникает. ===== Типовые конфигурации ===== * [[doc:jroboplc:modules:peripherial:modbus_kippribor_afd]] * [[doc:jroboplc:modules:peripherial:modbus_owen_pvch2]] * [[doc:jroboplc:modules:peripherial:modbus_danfoss_fc200]] * [[doc:jroboplc:modules:peripherial:modbus_iek_control_a310]] * [[doc:jroboplc:modules:peripherial:modbus_akkont_w1]] * [[doc:jroboplc:modules:peripherial:modbus_vzlet]] * [[doc:jroboplc:modules:peripherial:modbus_owen_trm202]]

doc/jroboplc/modules/peripherial/modbus.1644229176.txt.gz · Последние изменения: 2022/02/07 13:19 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0