Здравствуйте. Стоит задача передача значений давления по протоколу ModBus TCP в контроллер. Не могу понять, как передать несколько значений давления (аварийные границы, смещение, значение при имитации и т д.) с помощью только одного компонента? У каждого значения имеется свой адрес.
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Использовать групповую запись. В этом случае используется 1 компонент Источников/приемников на несколько параметров подряд. На нашем сайте есть видеоуроки по работе с протоколом Modbus, в т.ч. по групповым запросам:
Спасибо, подскажите еще как работать в TM6 со словами памяти %MW?
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Если в устройстве есть возможность обратиться к этой области по Modbus, то стандартно как к любому другому регистру в зависимости от поддерживаемой функции. Обратитесь к документации на устройство, где должна быть карта соответствия адресов данных слов с номерами регистров Modbus.
Posted by Yurchik1 (Участник № / Member № 8907) on :
Если работать с регистрами, для каждой переменной свой адрес, то использовать групповую запись не получается, так как адрес пишется именно для компонента в источниках/приемниках. Как тогда быть в этой ситуации? Есть другой вариант?
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Если адреса разные и в промежуток между ними нельзя писать, то остается работать с одиночным запросами, один адрес - один источник - один канал.
Posted by Yurchik1 (Участник № / Member № 8907) on :
как произвести распаковку слов побитно?
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
В каналах класса HEX в атрибутах 10..25 уже есть значения отдельных битов. См. справку: каналы и системные переменные TRACE MODE - Числовые каналы - канал класса HEX.
Можно выполнить распаковку с помощью программы. Например в языке FBD встроены блоки для распаковки слов/байтов/битов в разделе Побитовые.
Posted by Yurchik1 (Участник № / Member № 8907) on :
То есть, если я запишу значение в атрибут к примеру бит 4, то при передачи в контроллер слова памяти (16 бит) значение запишется именно в 4 бит данного слова?
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Да, запись значений в эти атрибуты равнозначна изменению соответствующих битов/байтов входного значения канала.
Posted by Yurchik1 (Участник № / Member № 8907) on :
Каналы типа Float разбить на биты можно только программно? Как в таких каналах данные передаются в контроллер?
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Уточните какую задачу Вы планируете решить.
Если есть необходимость работать с битами, то удобнее использовать канал Hex16.
Posted by Yurchik1 (Участник № / Member № 8907) on :
у менять есть переменные типа bool, int, dint, real. Работаю с протоколом Modbus TCP. Для экономии точек ввода/вывода нужно использовать одну точку на несколько переменных, если это возможно. С типом bool я так поняла можно использовать атрибуты канала HEX16 для распаковки слова на биты, и использовать 16 бит на 16 переменных. А вот как быть с другими типами данных?
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Если кратко, согласно протоколу ModBus, под разные типы регистров заложены разные modbus-функции (команды опроса/записи). Принципиально нельзя регистр с данными типа bool и регистр с типом данных real считывать одной функцией.
Для экономии точек ввода/вывода можете использовать групповые запросы Пример групповых запросов по 3 и 4 функциям https://youtu.be/_2jF515uuPQ Posted by Yurchik1 (Участник № / Member № 8907) on :
То есть, у меня стоит задача выводить значения переменных разных типов. У каждой переменной свой адрес (к примеру %MW101). И если у каждой переменной, свой адрес, то я не могу использовать групповой запрос. Следовательно, у каждой переменной должен быть свой тег. И экономить теги не получится? Помогите понять как читать и передавать значения переменных по адресам слов %MW? Нигде не могу найти информацию или примеры.
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Если адреса разнесены и групповой запрос исключен, используйте одиночные запросы. Если не хватает мощности Инструментальной среды обратитесь в отдел продаж за апгрейдом, контакты: http://www.adastra.ru/about/howtofind/
Найдите соответствие адреса этих слов функциям и адресам Modbus TCP для данного устройства. У нас есть видеоурок по настройке контроллера ПЛК 160, где есть описание настройки контроллера как Modbus Slave устройства с упоминанием внутренней адресации: https://youtu.be/cmUQDohX_ms Posted by Yurchik1 (Участник № / Member № 8907) on :
Не получается читать биты из контроллера. Создаю компонент, ввожу адрес, канал, тип вызова, IP контроллера. Переношу группу Modbus в узел RTM. Аргумент экрана привязываю к биту канала. Но значение не считывается. В чем ошибка?
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Канал при это достоверен? В реальном его значении появились данные, если смотреть в дереве проекта в Панеле МРВ? Если недостоверен, что в его 240 атрибуте?
Posted by Yurchik1 (Участник № / Member № 8907) on :
240 атрибут же для канала Call. У меня канал HEX16. В атрибуте 4 (достоверность) пишет _Т, значит достоверен. В реальном значении данных нет
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Если атрибут Достоверность _T, то канал достоверен и нет ошибок обмена.
Скорее всего Вы считываете не тот регистр.
Пришлите на электронный адрес технической поддержки (адрес указан в Личном Кабинете в разделе "Получить техническую поддержку") проект, папку проекта и описание какой регистр Вы пытаетесь считать.
Posted by Yurchik1 (Участник № / Member № 8907) on :
Поняла в чем проблема. Но теперь не понимаю другое. У меня переменная типа bool изменяет значение каждую секунду на 0 и 1. В профайлере меняется значение и 1 бита (атрибут 10) и 1 байта (атрибут 100) и 0-3 битов (атрибут 104) тоже. Как это понять?
Posted by Yurchik1 (Участник № / Member № 8907) on :
помогите разобраться. не могу передать значение канала в контроллер. Создаю компонент W_Word. Задаю значения адреса, канала, типа, ip контроллера. Привязываю канал к данному компоненту. Но ничего не происходит. Значение в профайлере меняется, а значение в контроллере нет
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Данные атрибуты специфические для каналов HEX и содержат значения соответствующих битов/групп битов Реального значения канала. В справке описано в разделе Каналы и системные переменные - Числовые каналы - Канал класса HEX.
Источник/приемник и канал должны быть направления OUT, после записи значения в канал анализируйте его достоверность. Если недостоверен, то стандартно отлаживать обмен.