====== jrbustcp ====== Плагин ''jrbustcp'' добавляет функции клиента и сервера для взаимодействия с внешними устройствами по протоколу [[doc:jroboplc:modules:jrbustcp-protocol|jrbustcp]]. Для проверки соединения и просмотра данных можно использовать ''jrviewer'' в качестве простого клиента. Скачать можно здесь: [[http://prom-auto.ru/download/jroboplc/jrviewer_win-x32.zip|jrviewer_win-x32]], [[http://prom-auto.ru/download/jroboplc/jrviewer_linux-x64.tar.gz|jrviewer_linux-x64]]. ===== Сервер ===== plugin.jrbustcp: module.jrsvr: type: server port: 30000 hidden: off idleTimeout_s: 180 logging: off compress: gzip ssl: off auth: off ipfilter: - 192.168.1.101 deny - 192.168.1.0/24 accept - deny ^ Параметр ^ Умолчание ^ Описание ^ |**type** | ''-'' | Для работы в режиме сервера равно ''server'' | |**port** | ''-'' | Номер tcp порта, доступный для прослушивания (см.также [[doc:jroboplc:tcp_port_select_guide]]) | |**idleTimeout_s**| ''180'' | Тайм-аут бездействия клиента в секундах, после чего соединение разрывается | |**logging** | ''off'' | Логирование трафика и вывод отладочных сообщение netty | |**compress** | ''off'' | Использование сжатия. ''off'' - не использовать, ''gzip'' - формат сжатия [[https://en.wikipedia.org/wiki/Gzip|Gzip]] | |**ssl** | ''off'' | Шифрование трафика | |**auth** | ''off'' | Использование аутентификации | |**ipfilter** | '''' | Фильтр входящих подключений по ip адресу. Состоит из списка правил следующего формата: [ip_addr[/cidr]] type ip_addr - адрес в формате xxx.xxx.xxx.xxx
cidr - целое число (если не указано, то 32)
type - accept или deny

Правила сканируются сверху вниз по списку до первого попадания.

Последнее в списке правило может не содержать ip-адрес и будет распространятся на всех остальных, не попадающих в предыдущие правила. По умолчанию - accept. | ^alarm.values ^^^ |**tag** | ''.*'' |regex-шаблон имен тегов | |**value** | - |аварийное значение в строковом виде | Примечания: - Для работы данного модуля в режиме сервера не требуется никаких дополнительных модулей и включения в задачу. - Все теги с флагом EXTERNAL, т.е. импортируемые извне, передаются клиенту без имени импортировавшего их модуля. ===== Клиент ===== plugin.jrbustcp: module.jrcl: type: client host: localhost port: 30000 descr: арм_оператора_N1 tagdescr: off filter: (W\S*|TRM\d*)\..* recon_s: 5 timeout_ms: 3000 ssl: off compress: gzip logging: off auth: off alarm.values: - tag: .*\.SYSTEM\.ErrorFlag value: "on" ^ Параметр ^ Умолчание ^ Описание ^ |**type** | ''-'' | Для работы в режиме клиента равно ''client'' | |**host** | ''localhost'' | Имя или адрес сервера, доступный для подключения по протоколу ''jrbustcp'' | |**port** | ''-'' | Номер tcp порта, прослушиваемого сервером (см.также [[doc:jroboplc:tcp_port_select_guide]]) | |**descr** | ''имя модуля'' | Короткое описание клиента, которое можно будет увидеть на сервере при просмотре списка подключенных клиентов | |**recon_s** | ''5'' | Время переподключения при разъединении, секунды | |**timeout_ms** | ''3000'' | Тайм-аут ожидания ответа от сервера, мс | |**writeDelay_s** | ''0'' | Задержка команды записи (передачи измененных значений на сервер) после подключения, секунды | |**logging** | ''off'' | Логирование трафика и вывод отладочных сообщение netty | |**compress** | ''off'' | Использование сжатия. ''off'' - не использовать, ''gzip'' - формат сжатия [[https://en.wikipedia.org/wiki/Gzip|Gzip]] | |**setHidden** | ''off'' | Установка флага ''hidden'' всем импортируемым тегам | |**ssl** | ''off'' | Шифрование трафика | |**auth** | ''off'' | Использование аутентификации. Если аутентификация включена на сервере, то на клиенте также необходимо включить | |**authKey** | '''' | Имя приватного ключа, наличие которого необходимо, если включена аутентификация. Также необходимо разместить на сервере публичный ключ. Если приватный ключ не указан явно, и в каталоге хранения ключей будет всего лишь один приватный ключ, то будет использоваться данный ключ. Создание пары ключей можно выполнить командой ''keygen''. Каталог с ключами определяется [[doc:jroboplc:conf:about#глобальные_параметры|глобальным параметром]] ''keys.dir'' | ^ Параметры фильтрации ^^^ |**filter** | ''.*'' | Regex-выражение для отбора тегов на стороне сервера | |**excludeExternal** | ''off'' | Запрет импорта тегов, которые на стороне сервера имеют флаг ''external'' | |**includeHidden** | ''off'' | Разрешение импорта тегов, которые на стороне сервера имеют флаг ''hidden'' | ^ Channel Watchdog ^^^ |**chWdtEnable** | ''off'' | Включение режима ''Channel Watchdog'' | |**chWdtDelay_s** | ''0'' | Задержка выполнения обнуления тегов после потери связи с сервером | ^ В разработке ^^^ |**tagdescr** | ''off'' | Позволяет отключить передачу сервером описаний тегов, что может сократить сетевой трафик в процессе подключения | ==== Channel Watchdog ==== Данный режим позволяет автоматически обнулять теги, адресуемые [[doc:jroboplc:terminology#канал|каналами]] удаленного jrobo-приложения, при потере связи с данным приложением. Далее приводится описание работы режима на примере конфигураций двух jrobo-приложений. Первое приложение ''jrobo1'' только опрашивает один модуль ввода-вывода ''pdio1'' и раздает свои теги модулем ''jrsvr''. Также импортируются теги при помощи модуля ''jrcl1'' с удаленного приложения ''jrobo2'' (об этом подробнее ниже). # jrobo1 - поставщик адресов plugin.jrbustcp: module.jrsvr: type: server port: 30000 module.jrcl1: type: client port: 30001 filter: .*Ch.* # нужны только каналы chWdtEnable: on # включаем Channel Watchdog chWdtDelay_s: 5 # с задержкой срабатывания в 5 секунд excludeExternal: on # исключаем циклический setHidden: on # кросс-импорт между jrobo1 и jrobo2 plugin.peripherial: module.pdio1: portnum: 1 netaddr: 3 type: promauto.pdio Второе приложение ''jrobo2'' выполняет roboplant-логику в модуле ''prj1'' и импортирует модулем ''jrcl2'' теги приложения ''jrobo1'' для использования в качестве [[doc:jroboplc:terminology#адрес|адресов]] в [[doc:jroboplc:terminology#канал|каналах]] ''prj1''. Свои теги раздаются модулем ''jrsvr'' всем желающим (например, hmi-клиентам, архиваторам и т.д.), в том числе и приложению ''jrobo1''. # jrobo2 - получатель адресов plugin.jrbustcp: module.jrsvr: type: server port: 30001 module.jrcl2: type: client port: 30000 filter: .* plugin.roboplant: module.prj1: project: projects/prj1.rpp Предположим, что модуль ''prj1'' содержит блок MCHB с именем тега [[doc:jroboplc:terminology#канал|канала]] управления ''prj1.MCHB_001_Channel1'', имеющего строковое значение ''pdio1.out00'' в качестве [[doc:jroboplc:terminology#адрес|адреса]]. Далее происходит следующее: - MCHB подается команда старт, и в тег ''pdio1.out00'' приложения ''jrobo1'' устанавливается значение 1. Происходит запуск физического оборудования. - Происходит сбой в локальной сети, и связь между приложениями ''jrobo1'' и ''jrobo2'' теряется. - Оборудование продолжает работать, т.к. в ''pdio1.out00'' осталось значение 1, но работает оборудование уже бесконтрольно. - Если связь не восстанавливается в течение 5 секунд, то в модуле ''jrcl1'' срабатывает ''Channel Watchdog''. При этом выполняется следующее: модуль находит среди собственных импортированных тегов [[doc:jroboplc:terminology#канал|каналы]], [[doc:jroboplc:terminology#адрес|адресами]] которых являются теги приложения ''jrobo1'', и устанавливает им значение 0. - Физическое оборудование останавливается. ==== Теги ==== ^ Имя тега ^ Тип ^ Описание ^ |**client.connected** | ''boolean'' | Состояние подключения к серверу | |**client.reconnect.cnt** | ''int'' | Количество попыток переподключения после разрыва соединения | |**client.disconnect.cnt** | ''int'' | Количество разрывов соединения | |**client.last.error** | ''string'' | Описание последней произошедшей ошибки соединения |