Онитекс
Описание протокола Modbus
- Описание Modbus
- Пример применения
- Описание программы Onitex Modbus Terminal
Основные принципы Modbus
Modbus — коммуникационный протокол, основанный на клиент-серверной архитектуре. В данной статье мы рассмотрим основы протокола и базовые принципы работы. Кроме того, вы можете ознакомиться с конкретными примерами работы протокола Modbus, изучив описания контроллеров, использующих этот протокол, к примеру, OSM-17RA, а так же скачав программу Modbus Terminal, позволяющую удобно работать с различными регистрами Modbus.
Протокол Modbus разработан для использования в программируемых логических контроллерах, таких, как управление электроприводом. В настоящее время является очень распространенным протоколом, используемых в различных промышленных системах. К примеру, данный протокол используется в контроллерах шаговых двигателей Онитекс. Широко используется для передачи данных последовательные линии связи, основанных на интерфейсах RS-485, RS-422, RS-232. В начале развития применялся интерфейс RS-232, как один из наиболее простых промышленных интерфейсов для последовательной передачи данных. В настоящее время протокол часто используется поверх интерфейса RS-485, что позволяет добиться высокой скорости передачи, больших расстояний и объединения нескольких устройств в единую сеть, тем более что протокол Modbus поддерживает адресацию. Широкая распространенность протокола Modbus, обусловленная его простотой и надежностью, позволяет легко интегрировать устройства, поддерживающие Modbus, в единую сеть.
Основной особенностью протокола является наличие в сети одного ведущего устройства — master. Только ведущее устройство может опрашивать остальные устройства сети, которые являются ведомыми (slave). Подчиненное устройство не может самостоятельно инициировать передачу данных или запрашивать какие-либо данные у других устройств, работа сети строится только по принципу «запрос-ответ». Мастер может так же выдать широковещательный запрос, адресованный всем устройствам в сети, в таком случае ответное сообщение не посылается.
Существует три типа протокола Modbus: Modbus ASCII, Modbus RTU и Modbus TCP. Устройства Onitex поддерживают протокол Modbus RTU, поэтому мы в дальнейшем будем иметь в виду прежде всего этот протокол.
Пакет данных в Modbus выглядит следующим образом:
Адрес | Код функции | Данные | Контрольная сумма.
Адрес — это поле, содержащее номер устройства, которому адресован запрос. Каждое устройство в сети должно иметь уникальный адрес. Устройство отвечает только на те запросы, которые поступают по его адресу, во избежание конфликтов. При этом, ведомое устройство в своем ответе так же посылает поле Адрес, кроме широковещательного запроса (когда ответа от ведомого быть вообще не должно).
Код функции содержит номер функции модбаса (о функциях будет сказано ниже). Функция может запрашивать данные или давать команду на определенные действия. Коды функций являются числами в диапазоне от 1 до 127. Функции с номерами от 128 до являются зарезервированными для пересылки в ответном сообщении информации об ошибках.
В поле Данные содержится информация, которую передает мастер слэйву, либо наоборот в случае ответного сообщения. Длина этого поля зависит от типа передаваемых данных.
Поле Контрольная сумма является важным элементом протокола: в нем содержится информация, необходимая для проверки целостности сообщения и отсутствия ошибок передачи.
Максимальный размер пакета для сетей RS232/RS485 — 256 байт, для сетей TCP — 260 байт.
Существует три типа функций:
- Стандартные . Описание этих функций опубликовано и утверждено Modbus-IDA. Эта категория включает в себя как опубликованные, так и свободные в настоящее время коды.
- Пользовательские . Два диапазона кодов (от 65 до 72 и от 100 до 110), для которых пользователь может создать произвольную функцию.
- Зарезервированные . В эту категорию входят коды функций, не являющиеся стандартными, но уже используемые в устройствах, производимых различными компаниями. К этим кодам относятся 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 и 127.
Modbus RTU
При использовании режима Modbus RTU сообщение начинается с так называемого интервала тишины, равного времени передачи 3.5 символов, при заданной скорости обмена. Первым полем передается адрес устройства. Вслед за последним передаваемым символом также следует интервал тишины продолжительностью не менее 3.5 символов. Новое сообщение может начинаться после этого интервала. Фрейм сообщения передаётся непрерывно. Если интервал тишины продолжительностью 1.5 возник во время передачи фрейма, принимающее устройство должно игнорировать этот фрейм как неполный. Если новое сообщение начнется раньше интервала 3.5 символа, принимающее устройство воспримет его как продолжение предыдущего сообщения. В этом случае устанавливается ошибка CRC (несовпадение контрольной суммы).
Типы данных и стандартные функции Modbus.
Типы данных протокола Modbus представлены в таблице:
Тип данных | Тип доступа | |
Дискретные входы (Discrete Inputs) | один бит | только чтение |
Регистры флагов (Coils) | один бит | чтение и запись |
Регистры ввода (Input Registers) | 16-битное слово | только чтение |
Регистры хранения (Holding Registers) | 16-битное слово | чтение и запись |
Для чтения значений из этих выше таблиц данных используются функции с кодами 1—4 (0x01—0x04):
1 (0x01) — чтение значений из нескольких регистров флагов (Read Coil Status)
2 (0x02) — чтение значений из нескольких дискретных входов (Read Discrete Inputs)
3 (0x03) — чтение значений из нескольких регистров хранения (Read Holding Registers)
4 (0x04) — чтение значений из нескольких регистров ввода (Read Input Registers)
Запрос состоит из адреса первого элемента таблицы, значение которого требуется прочитать, и количества считываемых элементов. Адрес и количество данных задаются 16-битными числами, старший байт каждого из них передается первым.
В ответе передаются запрошенные данные. Количество байт данных зависит от количества запрошенных элементов. Перед данными передается один байт, значение которого равно количеству байт данных.
Запись одного значения происходит при помощи следующих функций:
5 (0x05) — запись значения одного флага (Force Single Coil)
6 (0x06) — запись значения в один регистр хранения (Preset Single Register)
Команда состоит из адреса элемента (2 байта) и устанавливаемого значения (2 байта). Если команда выполнена успешно, ведомое устройство возвращает копию запроса.
Запись нескольких значений задается функциями:
15 (0x0F) — запись значений в несколько регистров флагов (Force Multiple Coils)
16 (0x10) — запись значений в несколько регистров хранения (Preset Multiple Registers)
Команда состоит из адреса элемента, количества изменяемых элементов, количества передаваемых байт устанавливаемых значений и самих устанавливаемых значений. В ответе ведомый передает начальный адрес и количество изменённых элементов.
Пример устройства Modbus
Рассмотрим работу протокола на примере контроллера шагового двигателя. В документации на контроллер описано назначение регистров Modbus, которые в нем использованы. Для управления двигателем необходимо задать параметры контроллера, параметры вращения и непосредственно команду. Вся работа с контроллером при использовании протокола Модбас сводится к работе с регистрами, то есть чтению и записи. Наш контроллер имеет всего один тип регистров: Holding Registers. Этот тип регистров предназначен как для чтения, так и для записи параметров. В контроллере использовано три типа регистров: 8, 16 и 32 бита. Таким образом, для работы с ним нам понадобится использование всего лишь нескольких функций: Read Holding Registers для чтения, Preset Single Register для записи регистров размерностью 8 и 16 бит, и Preset Multiple Registers для записи дначений в регистры длиной 32 бита.
Для начала работы с контроллером необходимо установить параметры контроллера и вращения. Делается это последовательной записью нужных параметров в регистры согласно документации, используя необходимые функции. При этом, каждая запись параметра вызывает соответствующий обработчик в контроллере, который по необходимости проверяет диапазоны значений или проводит другие необходимые действия. По сути, контроллер производит прерывание по изменению значения в регистре. Такая возможность существенно расширяет возможности применения протокола Modbus.
После записи всех параметров производится запись самой команды в соответствующий регистр. Такая организация работы с протоколом Modbus весьма удобна для практического применения, так как позволяет обходиться всего лишь тремя стандартными функциями. Во время выполнения команды доступ во все регистры сохраняется, в частности, мы можем прочитать значение счетчика позиции, при необходимости обнулить его, изменить скорость, либо задать новую команду, не дожидаясь выполнения старой. Еще одной особенностью применения протокола Modbus является то, что все регистры сохраняют свои значения до их перезаписи, поэтому, если нам необходимо повторить движение с теми же параметрами, мы протсо записываем команду движения в регистр команд и двигатель повторяет прошлое задание. Это не только упрощает управление, но и уменьшает траффик между контроллером двигателя и управляющим устройством.
Таким образом, использование протокола Modbus позволило сделать управление шаговым двигателем очень простым, качественным и надежным.
Для отладки устройств с протоколом Modbus нами разработана программа OSM Modbus Terminal. Данная программа позволяет быстро освоить основные принципы управления устройствами OSM MB по протоколу Modbus RTU, проверить корректную работу устройства и быстрее написать собственное программное обеспечение. Скачать программу можно в разделе Программное обеспечение на нашем сайте.
Программа представляет собой карту регистров, каждому из которых можно задать адрес, тип значения и название. В каждом регистре имеется возможность чтения и записи значения. В окне «LogOut» можно наблюдать вывод лога по результатам каждого действия, в т. ч. и возникшие ошибки.
Для начала работы с программой необходимо установить адрес порта ПК и адрес устройства, и нажать кнопку «Connect». После этого можно производить чтение и запись в требуемые регистры. При необходимости можно сохранить названия и адреса используемых регистров кнопкой «Save». Программа написана с использованием OsmModbusDriver_SDK и может служить примером использования SDK.
Все права защищены. Перепечатка материалов с сайта возможно только с разрешения администрации
Как общаются машины: протокол Modbus
Протокол Modbus — самый распространенный промышленный протокол для M2M -взаимодействия. Является стандартом де-факто и поддерживается почти всеми производителями промышленного оборудования.
Благодаря универсальности и открытости, стандарт позволяет интегрировать оборудование разных производителей. Modbus используется для сбора показания с датчиков, управления реле и контроллерами, мониторинга, и т.д.
В статье разберем реализации протокола Modbus, форматы данных, программное обеспечение для работы с протоколом. Попробуем на практике прочитать данные из устройства.
История Modbus
Modbus был представлен в 1979 году компанией Modicon (ныне Schneider Electric). Это был открытый стандарт, работающий по интерфейсу RS-232. Позже появилась реализации протокола для интерфейсов RS-485 и Modbus TCP. Протокол быстро набрал популярность, и многие производители стали внедрять его в своих устройствах.
Позже права на протокол были переданы некоммерческой организации Modbus Organization, которая до сегодняшнего дня владеет стандартом.
В описании стандарта Modbus используются терминология, унаследованная от языков релейной логики. Так, например, некоторые регистры называются катушками (англ. coil).
Физический уровень
- RS-232/422/485 — последовательные интерфейсы, широко распространенные в промышленности. Интерфейсы RS-422/485 обеспечивают дальность сигнала до 1200 метров. Используются протоколы Modbus RTU/ASCII
- Сети TCP/IP — физическим каналом передачи данных могут любые ethernet-интерфейсы. Используется протокол Modbus TCP
Логический уровень
Различия протоколов Modbus
Modbus ASCII
Данные кодируются символами из таблицы ASCII и передаются в шестнадцатеричном формате. Начало каждого пакета обозначается символом двоеточия, а конец — символами возврата каретки и переноса строки. Это позволяет использовать протокол на линиях с большими задержками и оборудовании с менее точными таймерами.
Modbus RTU
В протоколе Modbus RTU данные кодируются в двоичный формат, и разделителем пакетов служит временной интервал. Этот протокол критичен к задержкам и не может работать, например, на модемных линиях. При этом, накладные расходы на передачу данных меньше, чем в Modbus ASCII, так как длина сообщений меньше.
Modbus TCP
Структура пакетов схожа с Modbus RTU, данные также кодируются в двоичный формат, и упаковываются в обычный TCP-пакет, для передачи по IP-сетям. Проверка целостности, используемая в Modbus RTU, не применяется, так как TCP уже имеет собственный механизм контроля целостности.
Формат пакета
Форматы пакета разных реализаций Modbus
Все устройства Modbus взаимодействуют, следуя модели master-slave. Запросы может инициировать только master-устройство, slave-устройства могут только отвечать на запросы, и не могут самостоятельно начинать передачу данных. В зависимости от реализации протокола, заголовки пакета различаются. Вот основные составляющие пакета, которые важно знать:
ADU (Application Data Unit) — пакет Modbus целиком, со всеми заголовками, PDU, контрольной суммой, адресом и маркерами. Отличается, в зависимости от реализации протокола.
PDU (protocol data unit) — основная часть пакета, одинаковая для всех реализаций протокола. Содержит сам payload.
Адрес устройства — адрес получателя, то есть slave-устройства. В одном сегменте Modbus-сети могут находится до 247 устройств. Только slave-устройства имеют различающиеся адреса, master-устройство не имеет адреса. Адрес «0» используется для широковещательных запросов от master, при этом, slave-устройства не могут отвечать на эти широковещательные пакеты.
Контрольная сумма — алгоритмы проверки целостности пакетов. В Мodbus RTU и ASCII используется 2 байта контрольной суммы. В Modbus RTU применяется алгоритм CRC16, в Modbus ASCII — более простой и менее надежный LRC8. В Modbus TCP контрольная сумма не добавляется в ADU, так как целостность проверяется на уровне TCP.
Мы не будем разбирать дополнительные заголовки, специфичные для каждой отдельной реализации протокола, так как это не имеет существенного значения при работе с протоколом на прикладном уровне.
Регистры и функции Modbus
В упрощенном виде, структура запросов Modbus состоит из кода функции (чтение/запись), и данных, которые нужно считать или записать. При этом, коды функции различаются для разных типов данных. Разберем, какие бывают регистры, и функции для работы с ними.
- Discrete Inputs — дискретные входы устройства, доступны только для чтения. Диапазон адресов регистров: с 10001 по 19999. Имеют функцию «02» — чтение группы регистров
- Coils — дискретные выходы устройства, или внутренние значения. Доступны для чтения и записи. Диапазон адресов регистров: с 20001 по 29999. Имеет функции: «01» — чтения группы регистров, «05» — запись одного регистра, «15» — запись группы регистров
- Input Registers — 16-битные входы устройства. Доступны только для чтения. Диапазон адресов регистров: с 30001 по 39999. Имеют функцию: «04» — чтение группы регистров
- Holding Registers — 16-битные выходы устройства, либо внутренние значения. Доступны для чтения и записи. Диапазон адресов регистров: с 40001 по 49999. Имеют
Примеры работы
Для примера работы с протоколом Modbus TCP воспользуемся максимально простой консольной утилитой modbus-cli, написанной на языке Ruby. Она позволяет легко читать и писать данные в регистры Modbus.
Попробуем прочесть состояние счетчиков переданных пакетов на промышленном коммутаторе Advantech EKI-5524SSI. Для начала необходимо определить адреса регистров, хранящие нужную информацию, для этого заглянем в документацию устройства. Описание регистров находятся в разделе «Modbus Mapping Table»:
Описание значений регистров в документации коммутаторов EKI
Видно, что значение переданных пакетов для одного порта хранится в четырех регистрах, и для первого порта это регистры с 38193 по 38197. Также дано описание формата хранения данных, из которого следует, что целое число переданных пакетов хранится шестнадцатеричном формате, и значение 11223344 пакетов будет записано как 0xAB4130, справа налево.
$ modbus read 192.168.0.17 38193 4 38193 0x0000 38194 0x0000 38195 0x0000 38196 0x3459
read — команда чтения. Программа сама понимает, какую конкретно команду чтения использовать в зависимости от адреса регистра, в нашем случае будет использована команда «04», для чтения 16-битных регистров.
192.168.0.17 — IP-адрес устройства.
38193 — начальный адрес регистра.
4 — смещение относительно начального адреса. Мы читаем четыре регистра для порта 1, как следует из даташита.
Получаем ответ, содержащий значения четырех регистров. Видим, что число пакетов невелико: 0x3459, то есть 13401, — коммутатор был включен недавно.
Недостатки протокола Modbus
Справедливости ради, стоит упомянуть и о недостатках протокола. Так как он разрабатывался более 40 лет назад, когда производительность процессоров была существенно ниже и протоколы разрабатывались без учета защиты данных, он имеет рад минусов:
- Протокол не предусматривает аутентификацию и шифрование передаваемых данных. Поэтому, при использовании Modbus TCP необходимо использовать дополнительные VPN-тоннели.
- Slave-устройство не может инициировать передачу данных, поэтому master должен постоянно опрашивать ведомые устройства
- Slave-устройство не может обнаружить потерю связи с Master. Эта проблема напрямую следует из предыдущей.
Оборудование с поддержкой Modbus
Advantech предлагает широкий спектр промышленного оборудования с поддержкой протокола Modbus для любых задач: автоматизации, управления, сбора и передачи данных.
ADAM-6000 и WISE-4000 — модули удаленного ввода-вывода
Модули серии ADAM-6000 и WISE-4000 позволяют удаленно управлять цифровыми и аналоговыми входами/выходами по протоколу Modbus TCP. Используются для управления периферийными устройствами и сбора данных в режиме slave. Могут работать в паре с программируемым логическим контроллером, или подключаться напрямую к SCADA-серверу.⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
EKI-1200 — Modbus-шлюзы для преобразования интерфейсов
Для преобразования протоколов Modbus RTU/ASCII в Modbus TCP, используются Modbus шлюзы. Устройства серии EKI-1200 имеют на борту до четырех последовательных интерфейсов RS-232/422/485, и два Ethernet-порта. Они позволяют объединить в одну сеть устройства с разными протоколами. Например, подключить slave устройство, поддерживающее только Modbus RTU, по интерфейсу RS-485 к сегменту сети Modbus TCP.
APAX-5000, ADAM-3600, WISE-5000 — контроллеры автоматизации
Контроллеры поддерживают функции Modbus RTU в качестве slave/master и клиента/сервера Modbus TCP.
Примеры применения
Система мониторинга теплиц
Решение Advantech для мониторинга интегрирует устройства TPC-1070H, ADAM-6024, ADAM-6050, ADAM-6060 и программное обеспечение WebAccess в машинном шкафу рядом с сельскохозяйственными угодьями. Соединяясь с различными чувствительными устройствами, модули ADAM-6000 могут в режиме реального времени получать данные об окружающей среде и контролировать переключение оборудования, чтобы гарантировать, что теплица находится в оптимальной среде для роста растений. Благодаря особой функции Advantech — графической логике условий (GCL), пользователи могут определять свои собственные правила логики управления и загружать эти правила в модули ввода / вывода Ethernet ADAM-6000, а затем модули автоматически выполняют логические правила, как автономные модули. контроллер. Еще одна особенность — Peer-to-Peer (P2P) использует наиболее открытую и гибкую сеть Ethernet, чтобы не только упростить процесс внедрения без контроллера, но и сэкономить затраты на аппаратное оборудование.
Все полученные данные затем передаются через Ethernet на компьютер с сенсорной панелью TPC-1070H. Благодаря системе охлаждения без вентилятора и передней панели, соответствующей стандарту IP65, TPC-1070H представляет собой прочную и компактную конструкцию, подходящую для изменяемой операционной среды, а его мощные вычислительные возможности способны обрабатывать большие объемы данных. Для управления устройствами Advantech WebAccess позволяет инженерам или менеджерам просматривать, контролировать и настраивать систему мониторинга через интрасеть или Интернет с помощью обычного веб-браузера с любого устройства, включая планшеты и смартфоны.
Мониторинг системы нагрева воды солнечной энергией
Инжиниринговая компания должна была иметь возможность контролировать количество солнечной энергии, температуры и расход воды в системе нагрева воды на солнечной энергии для бассейна олимпийских размеров, обеспечиваемого их недавно разработанной солнечной панелью. Они также должны были иметь возможность непосредственно отслеживать эти значения и их аварийные сигналы на ЖК-панелях и сохранять эти значения для дальнейшего использования.
Модули Adam от Advantech предоставили заказчику решение, в котором использовались модули сбора данных, подключенные через RS485, и двухпроводная шина для передачи данных со всех датчиков. Эта системная архитектура имеет два основных преимущества: во-первых, она позволяет в любое время добавлять в систему большее количество датчиков модулей сбора данных, и, во-вторых, очень легко добавлять дополнительные метки в программное обеспечение для мониторинга и записи этих значений на ПК.
- Блог компании Advantech IIoT
- Промышленное программирование
Просто о Modbus RTU с подробным описанием и примерами
04.07.2016 Modbus — коммуникационный протокол, основан на архитектуре ведущий-ведомый (master-slave). Использует для передачи данных интерфейсы RS-485, RS-422, RS-232, а также Ethernet сети TCP/IP (протокол Modbus TCP).
Сообщение Modbus RTU состоит из адреса устройства SlaveID, кода функции, специальных данных в зависимости от кода функции и CRC контрольной суммы.
Если отбросить SlaveID адрес и CRC контрольную сумму, то получится PDU, Protocol Data Unit.
SlaveID – это адрес устройства, может принимать значение от 0 до 247, адреса с 248 до 255 зарезервированы.
Данные в модуле хранятся в 4 таблицах.
Две таблицы доступны только для чтения и две для чтения-записи.
В каждой таблице помещается 9999 значений.
В сообщении Modbus используется адрес регистра.
Например, первый регистр AO Holding Register, имеет номер 40001, но его адрес равен 0000.
Разница между этими двумя величинами есть смещение offset.
Каждая таблица имеет свое смещение, соответственно: 1, 10001, 30001 и 40001.
Ниже приведен пример запроса Modbus RTU для получения значения AI аналогового выхода (holding registers) из регистров от #40108 до 40110 с адресом устройства 17.
11 03 006B 0003 7687
В ответе от Modbus RTU Slave устройства мы получим:
11 03 06 AE41 5652 4340 49AD
Где:
Регистр аналогового выхода AO0 имеет значение AE 41 HEX или 44609 в десятичной системе.
Регистр аналогового выхода AO1 имеет значение 56 52 HEX или 22098 в десятичной системе.
Регистр аналогового выхода AO2 имеет значение 43 40 HEX или 17216 в десятичной системе.
Значение AE 41 HEX — это 16 бит 1010 1110 0100 0001, может принимать различное значение, в зависимости от типа представления.
Значение регистра 40108 при комбинации с регистром 40109 дает 32 бит значение.
Пример представления.
Продолжение.
Компания IPC2U
Реклама. АО «КОМПЭЛ» ИНН 7713005406 LjN8JvfND
Примеры взаимодействия с переменными Modbus
Coil Register — регистры флагов, содержание значение в один бит. Регистры Coil доступны для чтения и записи данных.
Для отправки данных в регистры Coil могут быть использованы команды (Commands), созданные на выходе драйвера Modbus, инициация отправки команд производится графическими элементами, к котором привязаны команды. Данные, полученные от контроллера, могут влиять на параметры графических элементов, в том числе на значения, отправку которых инициирует элемент. Отдельные типы графических элементов для работы используют одновременно канал записи значения и канал чтения состояния переменной (Trigger Button, Up/Down Button).
Графические элементы, которые могут быть использованы для управления регистром Coil драйвера Modbus:
- Кнопка (Button) — отправка фиксированного значения регистру (0 или 1); отображение состояния регистра сменой состояния кнопки или вывод значения регистра на элемент в виде текста
- Триггер (Trigger Button) — переключение между двумя состояниями Coil регистра (0 и 1). Для работы триггера необходим канал чтения текущего состояния управляемого регистра. В зависимости от текущего состояния, элемент выбирает значение, которое будет отправлено контроллеру при очередном нажатии на элемент (значение 0 или 1).
Запись значения в регистр Coil с помощью кнопки
1. Создайте команду отправки значения в регистр Coil
команда создается в дереве устройств проекта и адаптируется для работы с выбранным типом регистра:
Name | имя команды (произвольно) |
Device ID | адрес подчиненного устройства, контроллера (Slave ID) |
Type | тип регистра, к которому обращена команда (Coil Register) |
Address | адрес управляемого Coil регистра |
2. Создайте графический элемент — кнопку для отправки значения регистру
Элемент будет инициировать отправку значения регистру, само значение выбирается при натаскивании команды на графический элемент. Для выбора фиксированного значения, при привязке команды выбираем событие «Send Number»
Type | тип графического элемента — кнопка (Button). Кнопка используется для отправки фиксированного значения в регистр |
Feedback | тип обратной связи для элемента — Momentary. Элемент будет менять состояние при нажатии, но полученные от контроллера данные не повлияют на его состояние |
Hit | восприимчивость элемента к нажатию — Active Touch. Активной для нажатия будет вся непрозрачная часть графического элемента |
3. Привяжите команду к графическому элементу
Привязка команды осуществляется методом Drag&Drop — перетаскивание. В процессе привязки указывается тип отправляемых данных и событие, при котором они должны быть отправлены контроллеру:
Выпадающий список действий при натаскивании команды на элемент: | |
Send Number | отправить регистру фиксированное целое число в десятичном формате. Значение указывается в диалоговом окне при выборе этого типа отправки данных. Команда Send Number всегда используется при работе с обычными кнопками (Button). |
Диалоговое окно события Send Number: | |
Value | Поле ввода значения (целого десятичного числа), которое будет отправлено регистру. Для регистров Coil это всегда 0 или 1 |
Event for Action | Событие, при котором выбранное значение Value будет отправлено регистру (Press — при нажатии на элемент, Release — при отпускании элемента, другое для кнопки обычно не используется) |
Когда вышеуказанные действия выполнены, можно запустить Эмуляцию работы проекта. При наличии лицензии Эмулятор iRidium подключится к управляемому контроллеру и при каждом нажатии на настроенную в этом пункте инструкции кнопку будет отправлять единицу на Coil регистр с указанным при настройке адресом.
Так же можно настроить отправку значения 0 этому регистру (например, для реализации раздельных элементов Вкл и Выкл).
Запись значения в регистр Coil с помощью триггера
1. Создайте команду отправки значения в регистр Coil
команда создается в дереве устройств проекта и адаптируется для работы с выбранным типом регистра:
Name | имя команды (произвольно) |
Device ID | адрес подчиненного устройства, контроллера (Slave ID) |
Type | тип регистра, к которому обращена команда (Coil Register) |
Address | адрес управляемого Coil регистра |
2. Создайте графический элемент — триггер для переключения состояния регистра
Элемент при каждом нажатии будет инициировать переключение между двумя состояниями Coil регистра (0 и 1). Для работы триггера необходим канал чтения текущего состояния управляемого регистра. В зависимости от текущего состояния, триггер выбирает значение, которое будет отправлено контроллеру при очередном нажатии на элемент (значение 0 или 1). Также канал чтения состояния регистра необходим для инициализации триггера при старте проекта iRidium.
Type | тип графического элемента — кнопка триггер (Trigger Button). Используется для переключения регистра в значение, противоположное текущему |
Feedback | тип обратной связи для элемента — Channel. Элемент будет менять свое состояние в зависимости от текущего действительного значения управляемого регистра, это необходимо для инициализации триггера и корректного отображения его текущего состояния (при помощи канала чтения статуса регистра) |
Hit | восприимчивость элемента к нажатию — Active Touch. Активной для нажатия будет вся непрозрачная часть графического элемента |
Trigger Value 1 Trigger Value 2 |
два возможных состояния триггера (обычно активное и неактивное). Для регистра Coil это всегда значения 0 и 1. Единица соответствует второму (активному) состоянию триггера |
* States | для корректной работы, триггер всегда должен иметь 2 состояния (State 1 и State 2), настраивающихся во вкладке States параметров графического элемента |
3. Привяжите команду к графическому элементу
Привязка команды осуществляется методом Drag&Drop — перетаскивание. В процессе привязки указывается тип отправляемых данных и событие, при котором они должны быть отправлены контроллеру:
Выпадающий список действий при натаскивании команды на элемент: | |
Send Token | это команда для отправки регистру одного из возможных значений триггера (Trigger Value 1 и Trigger Value 2). Текущее состояние триггера определяется параметром Value элемента. На его основе триггер формирует следующее значение для отправки регистру. Команду Send Token выбираем, когда элемент должен отправить не фиксированное число, а переменную, зависящую от действий пользователя или состояния элемента. Т.е. при работе с уровнями, триггерами, кнопками прирост/убывание всегда используется команда Send Token |
Диалоговое окно события Send Token: | |
Token | Параметр Value определяет текущее состояние триггера (Trigger Value 1 или Trigger Value 2), поэтому при выборе источника отправляемого значения указываем именно Value элемента. Этот параметр будет выбран в диалоговом окне по умолчанию, оставляем его в исходном виде и переходим к следующей настройке |
Event for Action | Событие, при котором выбранное значение Value будет отправлено регистру (Press — при нажатии на элемент, Release — при отпускании элемента, другое для триггера не используется) |
Create a feedback channel | команда автоматического создания канала для получения статуса регистра. Канал создается на основе привязываемой к элементу команды, имеет то же имя и свойства. Создание канала обратной связи (с помощью этой опции или вручную) является обязательным при работе с триггером. В отсутствие канала, триггер не будет знать текущее состояние регистра для выбора значения, противоположного текущему. |
Feedback: In Value |
настройка, определяющая параметр элемента, на который будет влиять созданный канала чтения статуса. Для работы триггера, полученное значение должно влиять на Value (состояние) элемента, поэтому выбираем событие In Value |
Когда вышеуказанные действия выполнены, можно запустить Эмуляцию работы проекта. При наличии лицензии Эмулятор iRidium подключится к управляемому контроллеру и при каждом нажатии на настроенный в этом пункте инструкции триггер будет считывать текущее состояние управляемого Coil регистра. На основе текущего состояния регистра, полученного каналом, триггер выбирает и отправляет ему значение, противоположное текущему.
Кнопка триггер является удобной заменой раздельным элементам управления Coil регистром, один из которых устанавливает значение в единицу, другой — в ноль.
Запись данных в Holding Registers
Holding Registers — регистры хранения, содержащие (в стандартном протоколе Modbus) 16-битные значения. Регистры Holding доступны для чтения и записи данных.
Для отправки данных в регистры Holding используются команды (Commands), созданные на выходе драйвера Modbus, инициация отправки команд производится графическими элементами, к котором привязаны команды. Данные, полученные от контроллера, могут влиять на параметры графических элементов, в том числе на значения, отправку которых инициирует элемент. Отдельные типы графических элементов для работы используют одновременно канал записи значения и канал чтения состояния переменной (Trigger Button, Up/Down Button, Level).
Графические элементы, которые могут быть использованы для управления регистром Holding драйвера Modbus:
- Кнопка (Button) — отправка фиксированного значения регистру (в диапазоне 16 бит — знаковые или беззнаковые значения); отображение состояния регистра за счет вывода его текущего значения в текстовое поле элемента
- Уровень (Level) — установка значения переменной в диапазоне, определяемом пределами уровня; вывод полученного состояния регистра на уровень
- Триггер (Trigger Button) — переключение между двумя произвольными состояниями Holding регистра (например, 0 и 65535). Для работы триггера необходим канал чтения текущего состояния управляемого регистра. В зависимости от текущего состояния, элемент выбирает значение, которое будет отправлено контроллеру при очередном нажатии на элемент (значение 0 или 65535)
- Прирост/убывание (Up/Down Button) — увеличение или уменьшение текущего значения регистра на заданную величину относительно текущего значения. Пределы и шаг прироста/убывания задаются при настройке элемента
Запись значения в регистр Holding с помощью кнопки
1. Создайте команду отправки значения в регистр Holding
команда создается в дереве устройств проекта и адаптируется для работы с выбранным типом регистра:
Name | имя команды (произвольно) |
Device ID | адрес подчиненного устройства, контроллера (Slave ID) |
Type | тип регистра, к которому обращена команда (Holding Register) |
Address | адрес управляемого Holding регистра |
Word Size | Размер слова Holding регистра. Word (16-bit) для стандартного протокола Modbus |
Content Type | последовательность записи байтов регистра. Low Endian для стандартного протокола Modbus |
2. Создайте графический элемент — кнопку для отправки значения регистру
Элемент будет инициировать отправку значения регистру, само значение выбирается при натаскивании команды на графический элемент. Для выбора фиксированного значения, при привязке команды выбираем событие «Send Number»
Type | тип графического элемента — кнопка (Button). Кнопка используется для отправки фиксированного значения в регистр |
Feedback | тип обратной связи для элемента — Momentary. Элемент будет менять состояние при нажатии, но полученные от контроллера данные не повлияют на его состояние |
Hit | восприимчивость элемента к нажатию — Active Touch. Активной для нажатия будет вся непрозрачная часть графического элемента |
3. Привяжите команду к графическому элементу
Привязка команды осуществляется методом Drag&Drop — перетаскивание. В процессе привязки указывается тип отправляемых данных и событие, при котором они должны быть отправлены контроллеру:
Выпадающий список действий при натаскивании команды на элемент: | |
Send Number | отправить регистру фиксированное целое число в десятичном формате. Значение указывается в диалоговом окне при выборе этого типа отправки данных. Команда Send Number всегда используется при работе с обычными кнопками (Button). |
Диалоговое окно события Send Number: | |
Value | Поле ввода значения (целого десятичного числа), которое будет отправлено регистру. Для регистров Holding это любое значение в диапазоне 16 бит |
Event for Action | Событие, при котором выбранное значение Value будет отправлено регистру (Press — при нажатии на элемент, Release — при отпускании элемента, другое для кнопки обычно не используется) |
Когда вышеуказанные действия выполнены, можно запустить Эмуляцию работы проекта. При наличии лицензии Эмулятор iRidium подключится к управляемому контроллеру и при каждом нажатии на настроенную в этом пункте инструкции кнопку будет отправлять значение в Holding регистр с указанным при настройке адресом.
Запись значения в регистр Holding с помощью уровня
1. Создайте команду отправки значения в регистр Holding
команда создается в дереве устройств проекта и адаптируется для работы с выбранным типом регистра:
Name | имя команды (произвольно) |
Device ID | адрес подчиненного устройства, контроллера (Slave ID) |
Type | тип регистра, к которому обращена команда (Holding Register) |
Address | адрес управляемого Holding регистра |
Word Size | Размер слова Holding регистра. Word (16-bit) для стандартного протокола Modbus |
Content Type | последовательность записи байтов регистра. Low Endian для стандартного протокола Modbus |
2. Создайте графический элемент — уровень для управления занчением
При нажатию на какую-либо зону уровня, в регистр будет отправлено значение, соовтетствующее этой зоне. Пределы регулирования указываются при настройке уровня. Элемент всегда должен иметь 2 состояния, может работать как с каналом обратной связи, так и без него.
Type | тип графического элемента — уровень (Level). Используется для установки значения регистра в указанном диапазоне |
Feedback | тип обратной связи для элемента — Channel. При нажатии уровень перейдет в указанное значение, но при получении от контроллера данных об изменении значения в регистре, ползунок перейдет в новое положение |
Hit | восприимчивость элемента к нажатию — Active Touch. Активной для нажатия будет вся непрозрачная часть графического элемента |
Min Max |
минимальное и максимальное значения уровня, которые он не может превысить при регулировании |
Direction | ориентация уровня в пространстве — горизонтальная или вертикальная |
Range Type | тип данных, которым оперирует уровень. Integer — целочисленные значения, Float — числа с плавающей запятой |
* States | для корректной работы, уровень всегда должен иметь 2 состояния (State 1 и State 2), настраивающихся во вкладке States параметров графического элемента |
3. Привяжите команду к графическому элементу
Привязка команды осуществляется методом Drag&Drop — перетаскивание. В процессе привязки указывается тип отправляемых данных и событие, при котором они должны быть отправлены контроллеру:
Выпадающий список действий при натаскивании команды на элемент: | |
Send Token | это команда отправки регистру одного из доступных значений уровня. Текущее значение уровня определяется параметром Value элемента. Команду Send Token выбираем, когда элемент должен отправить не фиксированное число, а переменную, зависящую от действий пользователя или состояния элемента. Т.е. при работе с уровнями, триггерами, кнопками прирост/убывание всегда используется команда Send Token |
Диалоговое окно события Send Token: | |
Token | Параметр Value определяет текущее положение ползунка уровня, поэтому при выборе источника отправляемого значения указываем именно Value элемента. Этот параметр будет выбран в диалоговом окне по умолчанию, оставляем его в исходном виде и переходим к следующей настройке |
Event for Action | Событие, при котором выбранное значение Value будет отправлено регистру (Press — при нажатии на элемент, Release — при отпускании элемента, Move — при движении ползунка уровня будут отправляться все принятые им промежуточные значения, до момента отпускания). Рекомендуется привязывать команду сразу на 2 события — Press и Release при работе с уровнем. Событие Move может создать излишнюю нагрузку на контроллер из-за большого объема передаваемых данных |
Когда вышеуказанные действия выполнены, можно запустить Эмуляцию работы проекта. При наличии лицензии, Эмулятор iRidium подключится к управляемому контроллеру и при каждом нажатии на настроенный уровень будет отправлять в регистр соответствующее выбранной зоне уровня значение.
Запись значения в регистр Holding с помощью триггера
1. Создайте команду отправки значения в регистр Holding
команда создается в дереве устройств проекта и адаптируется для работы с выбранным типом регистра:
Name | имя команды (произвольно) |
Device ID | адрес подчиненного устройства, контроллера (Slave ID) |
Type | тип регистра, к которому обращена команда (Holding Register) |
Address | адрес управляемого Holding регистра |
Word Size | Размер слова Holding регистра. Word (16-bit) для стандартного протокола Modbus |
Content Type | последовательность записи байтов регистра. Low Endian для стандартного протокола Modbus |
2. Создайте графический элемент — триггер для переключения состояния регистра
Элемент при каждом нажатии будет инициировать переключение между двумя состояниями Holding регистра (к примеру, 0 и 65535). Для работы триггера необходим канал чтения текущего состояния управляемого регистра. В зависимости от текущего состояния, триггер выбирает значение, которое будет отправлено контроллеру при очередном нажатии на элемент. Также канал чтения состояния регистра необходим для инициализации триггера при старте проекта iRidium.
Type | тип графического элемента — кнопка триггер (Trigger Button). Используется для переключения регистра в значение, противоположное текущему |
Feedback | тип обратной связи для элемента — Channel. Элемент будет менять свое состояние в зависимости от текущего действительного значения управляемого регистра, это необходимо для инициализации триггера и корректного отображения его текущего состояния (при помощи канала чтения статуса регистра) |
Hit | восприимчивость элемента к нажатию — Active Touch. Активной для нажатия будет вся непрозрачная часть графического элемента |
Trigger Value 1 Trigger Value 2 |
два возможных состояния триггера (обычно активное и неактивное). Для регистра Holding это могут быть любые 2 значения из диапазона 16 бит. |
* States | для корректной работы, триггер всегда должен иметь 2 состояния (State 1 и State 2), настраивающихся во вкладке States параметров графического элемента |
- если реальное значение в регистре не совпадает ни с одним из двух значений, указанных для триггера, то при очередном нажатии на триггер регистру отправится значение, указанное в поле Trigger Value 2
3. Привяжите команду к графическому элементу
Привязка команды осуществляется методом Drag&Drop — перетаскивание. В процессе привязки указывается тип отправляемых данных и событие, при котором они должны быть отправлены контроллеру:
Выпадающий список действий при натаскивании команды на элемент: | |
Send Token | это команда для отправки регистру одного из возможных значений триггера (Trigger Value 1 и Trigger Value 2). Текущее состояние триггера определяется параметром Value элемента. На его основе триггер формирует следующее значение для отправки регистру. Команду Send Token выбираем, когда элемент должен отправить не фиксированное число, а переменную, зависящую от действий пользователя или состояния элемента. Т.е. при работе с уровнями, триггерами, кнопками прирост/убывание всегда используется команда Send Token |
Диалоговое окно события Send Token: | |
Token | Параметр Value определяет текущее состояние триггера (Trigger Value 1 или Trigger Value 2), поэтому при выборе источника отправляемого значения указываем именно Value элемента. Этот параметр будет выбран в диалоговом окне по умолчанию, оставляем его в исходном виде и переходим к следующей настройке |
Event for Action | Событие, при котором выбранное значение Value будет отправлено регистру (Press — при нажатии на элемент, Release — при отпускании элемента, другое для триггера не используется) |
Create a feedback channel | команда автоматического создания канала для получения статуса регистра. Канал создается на основе привязываемой к элементу команды, имеет то же имя и свойства. Создание канала обратной связи (с помощью этой опции или вручную) является обязательным при работе с триггером. В отсутствие канала, триггер не будет знать текущее состояние регистра для выбора значения, противоположного текущему. |
Feedback: In Value |
настройка, определяющая параметр элемента, на который будет влиять созданный канала чтения статуса. Для работы триггера, полученное значение должно влиять на Value (состояние) элемента, поэтому выбираем событие In Value |
Когда вышеуказанные действия выполнены, можно запустить Эмуляцию работы проекта. При наличии лицензии Эмулятор iRidium подключится к управляемому контроллеру и при каждом нажатии на настроенный в этом пункте инструкции триггер будет считывать текущее состояние управляемого Holding регистра. На основе текущего состояния регистра, полученного каналом, триггер выбирает и отправляет ему значение, противоположное текущему.
Запись значения в регистр Holding с помощью кнопок Up/Down
1. Создайте команду отправки значения в регистр Holding
команда создается в дереве устройств проекта и адаптируется для работы с выбранным типом регистра:
Name | имя команды (произвольно) |
Device ID | адрес подчиненного устройства, контроллера (Slave ID) |
Type | тип регистра, к которому обращена команда (Holding Register) |
Address | адрес управляемого Holding регистра |
Word Size | Размер слова Holding регистра. Word (16-bit) для стандартного протокола Modbus |
Content Type | последовательность записи байтов регистра. Low Endian для стандартного протокола Modbus |
2. Создайте графический элемент — кнопку прирост/убывание (Up/Down Button)
Элемент при каждом нажатии будет обращаться к управляемому регистру, читать его текущее значение и прибавив к нему указанную величину отправлять регистру в качестве новой уставки. Применяется для точного регулирования температуры или др. величин относительно текущего значения. Для работы Up/Down Button необходим канал чтения текущего состояния регистра.
Type | тип графического элемента — кнопка прирост/убывание (Up/Down Button). Применяется для точного регулирования величин относительно текущего значения. |
Feedback | тип обратной связи для элемента — Momentary. Элемент будет менять состояние при нажатии для визуальной фиксации, на вычисление прирощенного значения тип обратной связи не влияет |
Hit | восприимчивость элемента к нажатию — Active Touch. Активной для нажатия будет вся непрозрачная часть графического элемента |
Up/Down Value | величина, на которую необходимо прирастить текущее значение управляемого регистра (целое число), может быть положительной («1») или отрицательной («-1») |
Min/Max Value | предел приращения, величина, больше которой прирост осуществляться не должен. Для положительного значения прироста (Up/Down Value > 0) — верхний предел приращения, для отрицательного значения прироста (Up/Down Value < 0) - нижний предел приращения. |
3. Привяжите команду к графическому элементу
Привязка команды осуществляется методом Drag&Drop — перетаскивание. В процессе привязки указывается тип отправляемых данных и событие, при котором они должны быть отправлены контроллеру:
Выпадающий список действий при натаскивании команды на элемент: | |
Send Token | это команда для отправки регистру приращенного значения. Текущее состояние Up/Down Button определяется параметром Value элемента. На его основе триггер формирует приращенное значение для отправки регистру. Команду Send Token выбираем, когда элемент должен отправить не фиксированное число, а переменную, зависящую от действий пользователя или состояния элемента. Т.е. при работе с уровнями, триггерами, кнопками прирост/убывание всегда используется команда Send Token |
Диалоговое окно события Send Token: | |
Token | Параметр Value хранит текущее и формирует приращенное значение для отправки, поэтому при выборе источника отправляемого значения указываем именно Value элемента. Этот параметр будет выбран в диалоговом окне по умолчанию, оставляем его в исходном виде и переходим к следующей настройке |
Event for Action | Событие, при котором значение Value будет отправлено регистру (Press — при нажатии на элемент, Release — при отпускании элемента, другое для этого элемента не используется) |
Create a feedback channel | Команда автоматического создания канала для получения статуса регистра. Канал создается на основе привязываемой к элементу команды, имеет то же имя и свойства. Создание канала обратной связи (с помощью этой опции или вручную) является обязательным при работе с элементами Up/Down. В отсутствие канала, Up/Down Button не будет знать текущее состояние регистра для формирования и отправки приращенного значения. |
Feedback: In Value |
Настройка, определяющая параметр элемента, на который будет влиять созданный канал чтения статуса. Для работы кнопки Up/Down, полученное значение должно влиять на Value (состояние) элемента, поэтому выбираем событие In Value |
Когда вышеуказанные действия выполнены, можно запустить Эмуляцию работы проекта. При наличии лицензии Эмулятор iRidium подключится к управляемому контроллеру и при каждом нажатии на настроенный в этом пункте инструкции элемент будет считывать текущее состояние управляемого Holding регистра. На основе текущего состояния регистра, полученного каналом, кнопка Up/Down выбирает и отправляет приращенное значение регистра.
Чтение данных о состоянии регистров
В соответствии со стандартами протокола Modbus, iRidium может обратиться для получения данных к следующим типам регистров — Type:
- Coil Register — регистры флагов, один бит, чтение и запись данных
- Holding Register — регистры хранения, 16-битное слово, чтение и запись данных
- Discret Inputs — дискретные входы, один бит, только чтение данных
- Input Register — регистры ввода, 16-битное слово, только чтение данных
Для получения данных о состоянии регистров iRidium использует каналы обратной связи (Feedbacks), в которых указываются параметры регистра, статус которого необходимо получить. Каналы создаются во вкладке Feedbacks драйвера Modbus в дереве устройств проекта.
Получение данных о состоянии переменных производится драйвером на основе списка имеющихся у него каналов. Отображение полученных данных осуществляется за счет графических элементов, к которым привязываются команды. Данные, полученные от контроллера, могут отображаться в текстовом поле графического элемента или влиять на его текущее состояние.
Настройка каналов для получения данных о состоянии регистров
Как ранее упоминалось, iRidium может получать данные о состоянии 4х типов регистров: Coil Register, Holding Register, Discret Inputs, Input Register. Все эти типы регистров настраиваются в дереве устройств проекта, параметры каналов имеют вид:
Name | имя канала (произвольно) |
Device ID | адрес подчиненного устройства, контроллера (Slave ID) |
Type | тип регистра, данные от которого получаем |
Address | адрес регистра, данные от которого получаем |
Word Size | Размер слова регистра. Word (16-bit) для стандартного протокола Modbus |
Content Type | последовательность записи байтов регистра. Low Endian для стандартного протокола Modbus |
Созданные каналы могут влиять на различные параметры графических элементов — состояние, внешний вид, активность, могут отображать данные о текущем значении регистра в текстовое поле элемента. Для привязки канала к графическому элементу используется метод Drag&Drop, в процессе привязки выбирается параметр элемента, на который будет воздействовать выбранный канал:
Наиболее часто используемые способы воздействия каналов на графические элементы:
- In Value — канал влияет на парметр Value — состояние графического элемента. При переходе регистра в любое ненулевое значение, в случае использования кнопки, графический элемент сменит свое состояние на активное (от State 1 до State 2); в случае использования уровня элемент изменит положение ползунка.
Также In Value используется для работы со сложными графическими элементами — Trigger Button, Up/Down Button и участвует в вычислении значений, которые будут отправлять эти элементы в регистр.
In Value используется при работе с шаблонами обработки и отображения входящих данных на элемент ($V, $P, $F1, . ) - In Text — канал записывает значение, полученное от регистра в текстовое поле элемента, заменяя имеющийся в нем текст. Записывается абсолютное значение без преобразования, поэтому этот тип привязки НЕ используется при работе с шаблонами обработки и отображения входящих данных
- More. — при необходимости настраиваются более сложные способы воздействия канала на параметры графического элемента. Например, значение регистра может изменять координату или степень прозрачности элемента, делать его неактивным для нажатия или невидимым.
Изменение состояния элемента при смене значения регистра
Для изменения состояния элемента при изменении состояния регистра, необходимо привязать канал статуса регистра к графическому элемент с использованием функции In Value — т.е. создать связь для воздействия канала на параметр Value (состояние, значение) графического элемента.
- изменение состояния кнопки (Button) или анимированной кнопки при получении ненулевого значения от регистра любого типа
- изменение положения ползунка уровня (Level) или анимированного уровня при получении значения от Holding или Inpit Register (в диапазоне 16 бит)
- работа с элементами Trigger Button и Up/Down Button, для которых наличие каналов получения статуса регистра обязательно.
Настройки графических элементов для отображения статуса регистра:
1. Кнопка, меняющая состояние при переходе регистра в ненулевое значение:
Type | тип графического элемента — кнопка с двумя состояниями (Button) |
Feedback | тип обратной связи графического элемента. Для возможности отображения полученного состояния регистра всегда выбираем Channel |
Hit | реакция элемента на нажатия пользователя. Если элемент служит только для отображения статуса переменной и не должен отправлять команд, выбираем Pass Through. Если элемент должен отправлять команды и получать данные, выбираем Active Touch. |
2. Уровень, меняющий положение ползунка при изменении значения регистра
Уровень применяется при работе с регистрами, статус которых может меняться в широком диапазоне, поэтому подходит для получения статуса Holding или Inpit Register (диапазон 16 или 32 бита).
Type | тип графического элемента — уровень (Level) |
Feedback | тип обратной связи графического элемента. Для возможности отображения полученного состояния регистра всегда выбираем Channel |
Hit | реакция элемента на нажатия пользователя. Если элемент служит только для отображения статуса переменной и не должен отправлять команд, выбираем Display Only. Если элемент должен отправлять команды и получать данные, выбираем Active. |
3. Канала обратной связи обязательно должен привязываться к элементам Trigger Button и Up/Down Button совместно с командой установки значения регистра. Команда и канал должны иметь одинаковые настройки (обращаться к одному и тому же регистру) для правильной работы этих элементов.
Отображение текущего значения регистра в текстовом поле элемента
Применения (вывод полученного из канала значения в текст возможен двумя способами):
- Отображение абсолютного значения, полученного каналом от регистра, в текстовом поле элемента
- Получение и отображение состояния любого регистра в текстовом поле элемента, когда значение должно быть предварительно преобразовано одним из шаблонов обработки и отображения входящих данных ($V, $P, $F1, . )
Настройки графических элементов:
1. Вывести значение регистра в текстовое поле элемента без преобразования
Для ввода значения в текстовое поле (с заменой ранее внесенных туда данных) используется команда «In Text» при натаскивании канала на графический элемент. Может использоваться для любого типа графического элемента, заменяет текст во всех состояниях элемента.
Type | тип графического элемента — кнопка (Button) или любой другой элемент |
Feedback | тип обратной связи графического элемента. Тип обратной связи не влияет на вывод значения в текстовое поле элемента, поэтому можно указать любой тип |
Hit | реакция элемента на нажатия пользователя. Если элемент служит только для отображения статуса переменной и не должен отправлять команд, выбираем Pass Through. Если элемент должен отправлять команды и получать данные, выбираем Active Touch. |
2. Дисплей с шаблоном обработки и вывода значения в текст элемента
Это элемент, в текстовое поле которого введен шаблон обработки и вывода значения на графические элементы, преобразующий полученное значение регистра в нужный формат:
команда (шаблон) обработки и отображения входящих данных вносится в текстовое поле графического элемента и может быть совмещен с другим текстом и символами (комментариями, единицами измерения)
Type | тип графического элемента — кнопка (Button) с одним состоянием (State 1) |
Feedback | тип обратной связи графического элемента. Работа шаблона ($V, $P, $S, . ) не зависит от Feedback, можно выбрать любой тип обратной связи в зависимости от свойств элемента, с которым используется шаблон. |
Hit | реакция элемента на нажатия пользователя. Если элемент служит только для отображения статуса переменной и не должен отправлять команд, выбираем Pass Through. Если элемент должен отправлять команды и получать данные, выбираем Active Touch. |
Особенности Modbus контроллеров
Insyte Spyder II
Убедитесь, что на контроллер Spyder II установлена прошивка 1.40 или старше, иначе возможны существенные задержки связи с контроллером и проблемы при работе с регистрами Coil.
Для работы с контроллером Insyte по протоколу Modbus TCP, активируйте возможность работы по этому протоколу в сетевых настройках контроллера, вкладка Ethernet. Пример конфигурации:
При создании команды управления регистром сдвигайте адресацию на «-1» относительно Insyte:.
У контроллера Insyte адреса регистров начинаются с 1, а в iRidium — с нуля.
Для обращения к ПЕРЕМЕННЫМ Insyte, используйте формулу:
Address = 1000 + [номер слота]*2
Номер слота есть у каждой переменной, он будет виден, если навести курсор мыши на переменную. Для отправки команды переменной используется тип данных Type: Holding Register и Word Size: Dword(32-bit).
Для отправки ИК команды через Insyte:
Address = адрес ИК эмиттера, с которого уходят команды Номер ИК команды = параметр Value (число) при натаскивании команды на графический элемент.
Команда на элемент натаскивается с указанием события Send Number.
Пример управления контроллером Insyte Spyder II по Modbus TCP (проект), 0.8 Мб |
Beckhoff
Beckhoff CX8090. Карта памяти Modbus/ADS:
Modbus areas | Modbus address (HEX) | Modbus address (DEC) | ADS area | |
---|---|---|---|---|
Digital inputs | 0x0000 — 0x7FFF | 0 — 32767 | Index group: 0xF021 — process image of physical inputs (bit access) |
Index offset: 0x0 |
0x8000 — 0x80FF | 32768 — 33023 | Name of the variables in PLC program: .mb_Input_Coils |
Data type: ARRAY [0..255] OF BOOL |
|
Digital outputs (coils) | 0x0000 — 0x7FFF | 0 — 32767 | Index group: 0xF031 — process image of physical outputs (bit access) |
Index offset: 0x0 |
0x8000 — 0x80FF | 32768 — 33023 | Name of the variables in PLC program: .mb_Output_Coils |
Data type: ARRAY [0..255] OF BOOL |
|
Input registers | 0x0000 — 0x7FFF | 0 — 32767 | Index group: 0xF020 — process image of physical inputs |
Index offset: 0x0 |
0x8000 — 0x80FF | 32768 — 33023 | Name of the variables in PLC program: .mb_Input_Registers |
Data type: ARRAY [0..255] OF WORD |
|
Output registers | 0x0000 — 0x2FFF | 0 — 12287 | Index group: 0xF030 — process image of physical outputs |
Index offset: 0x0 |
0x3000 — 0x5FFF | 12288 — 24575 | 0x4020 — PLC memory area | 0x0 | |
0x6000 — 0x7FFF | 24576 — 32767 | 0x4040 — PLC data area | 0x0 | |
0x8000 — 0x80FF | 32768 — 33023 | Name of the variables in PLC program: .mb_Output_Registers |
Data type: ARRAY [0..255] OF WORD |
Read/Write Holding Registers.
iPad1 AT %MB0 : WORD; (*адрес 12288*) iPad2 AT %MB1 : WORD; (*адрес 12289*)
Read/Write Coils. Необходимо создать в global_var массив mb_Output_Coils. Например:
mb_Output_Coils AT %QB1000 : ARRAY[0..255] OF BOOL; Создаем переменные: iPad1 AT %QX1000.0 : BOOL; (*адрес 32768*) iPad2 AT %QX1001.0 : BOOL; (*адрес 32769*) iPad3 AT %QB1002 : ARRAY[0..5] OF BOOL; (*адрес 32770-32775*) iPad3 AT %QB1007 : ARRAY[0..5] OF BOOL; (*адрес 32775-32780*)
Beckhoff BC9хх0. Карта памяти Modbus/ADS:
Вычисление Modbus адреса Read/Write Holding Registers производится по формуле:
Address = 16384 + 12 - 1 = 16395
16384 — начало области %MB (0x4000-0x47FF)
12 – индекс переменной (можно посмотреть в свойствах переменной)
1 – учитывает отсчет с нуля
ОВЕН
При настройке контроллера, в параметр FIX необходимо добавить ТСР Port подключения к контроллеру. По умолчанию — 502.
Один порт держит одно подключение ТСР мастера (клиента iRidium)
Номера регистров Modbus можно смотреть по адресам типа %QB7.1.5:
Address = %QB7.1.5 - 1 = 5 - 1 = 4
Последняя цифра адреса минус один — это номер регистра, который будет указываться в iRidium.
Выравнивание переменных CoDeSys при размещении в области памяти Modbus:
переменные размером 8 бит, 2 байта и 4 байта должны располагаться только по определенным адресам. Адрес 4-байтной переменной кратен 4, 2-байтной – кратен 2, а 1-байтной – кратен 1 и может находиться в любой точке пространства памяти. Т.е. если идет первая переменная типа «байт», то она будет расположена по адресу 0х00, следующая – 0х01 и т.д. Если дальше идет 4-байтная переменная, она должна располагаться по адресу 0х04 и т.д. При этом, если однобайтная переменная заняла место, кратное четырем, следующая 4-байтная переменная занимает следующее кратное 4 место. Порядок задания переменных может быть произвольным, выравнивание же ставит переменные на кратные их длине адреса. Соответственно, возникают не занятые пространства памяти, которые должны учитываться пользователем: когда производится опрос прибора. Учет производится на стадии задания переменных.
Управление RGB светодиодами с помощью объекта Color Picker
правление RGB светодиодами (DMX контроллером) в осуществляется iRidium с помощью специализированного модуля, преобразующего цвет, выбранный на палитре в команды установки значения в три Holding регистра Modbus, соответствующие уставкам на красный, синий и зеленый цвета светодиодной ленты.
Отдельно отправляется значение в регистр, управляющий яркостью светодиодной ленты. В качестве Color Picker’a может использоваться палитра любого вида.
Создание графических элементов для управления RGB светодиодной лентой:
1. Color Picker — палитра выбора цвета
Color Picker — графический элемент типа «Joystick», в поле Image которого выбрано изображение — цветовая палитра. Джойстик определяет цвет под курсором, который нужно разложить на составляющие RGB палитры, при этом сам курсор джойстика может быть невидим.
Для управления светодиодной лентой, в настройках джойстика важно указать диапазон от 0 до 100 для осей Х и Y, настройки формируйте, как на изображении.
2. Элемент-дисплей для отображения цвета и управления яркостью
Кнопка-триггер с 2 состояниями (Trigger Button), которая будет включать-выключать ленту и показывать цвет под курсором Color Picker’а, если лента включена.
Формирование списка команд для управления светодиодной лентой
В дереве устройств Modbus создайте 4 адреса для управления регистрами «Type: Holding».
Команды должны быть связаны с номерами регистров, регулирующими составляющие цвета светодиодной ленты и ее яркость.
Добавление скрипта управления Color Picker в проект
Скрипт для управления Color Picker нужно скопировать в окно Script Editor редактора GUI Editor или импортировать туда как файл в формате *.js.
Откройте окно редактирования скриптов проекта и используйте один из методов добавления скрипта: добавить из файла или создать новый скрипт.
При создании нового скрипта, укажите его имя (не должно содержать только цифры) и вставьте приложенный код модуля управления Color Picker:
function work_pick_color(in_color_picker, in_color_resipient, in_sRed, in_sGreen, in_sBlue) < var device = IR.GetDevice("ModBus TCP"); // ModBus TCP Driver in your Project Device Tree var color = in_color_picker.PickColor; var red = (color >> 24) & 0xFF; var green = (color >> 16) & 0xFF; var blue = (color >> 8) & 0xFF; in_color_resipient.GetState(1).FillColor = color; device.Set(in_sRed, red); device.Set(in_sGreen, green); device.Set(in_sBlue, blue); > // Обработчик "DMX 1". Скопируйте этот модуль, чтобы управлять еще одним ColourPicker: IR.AddListener(IR.EVENT_ITEM_RELEASE, IR.GetItem("Page_ColorPicker").GetItem("Item Color Picker 1"), // Color Picker (Page.Item) function() < work_pick_color( IR.GetItem("Page_ColorPicker").GetItem("Item Color Picker 1"), // Color Picker (Page.Item) IR.GetItem("Page_ColorPicker").GetItem("Item Display Color 1"), // Display Colour Item (Page.Item) "R", // Red Channel "G", // Green Channel "B"); // Blue Channel >);
В настройках скрипта указываем (в строках, где имеются соответствующие комментарии):
- имя Modbus драйвера в дереве проекта
- Color Picker — имя страницы и элемента-палитры RGB на этой странице
- Display — имя кнопки-дисплея для отображения цвета и управления яркостью
- Red, Green, Blue — имена каналов в дереве проекта Modbus, куда должны записываться составляющие цвета в диапазоне от 0 до 255.
К графическому элементу — триггеру для управления яркостью светодиодной ленты, привязываем команду, отвечающую за регулирование яркости. Команду привязываем на событие интерфейса — «Press», активируем галочку настроек «Add a Feedback Channel» в том же диалоговом окне.
После этого модуль полностью готов к работе.