Просмотр полной версии : Адрес переменной modbus slave
83675
добрый день
подскажите не могу сообразить и понять в инструкции как это работает
создал в плк110[m02] модбас slave
переменные чтобы из другого устройства к ним обращаться
не могу понять какие у них адреса?
%QW6.5.0 это адрес? как его понять какой регистр?
От 0 по порядку. Один адрес - 2 байта.
Иногда (для REAL) срабатывает выравнивание на чётные адреса.
Об этом есть в одном из документов на страничке прибора и загрузки CoDeSys.
От 0 по порядку. Один адрес - 2 байта.
Иногда (для REAL) срабатывает выравнивание на чётные адреса.
Об этом есть в одном из документов на страничке прибора и загрузки CoDeSys.
можете объяснить я не могу понять. то есть первая переменная 0, вторая плюс два байта? а это значение что означает - QW6.5.0, если в ней тип word то это два байта, 5 регистр получается если по порядку ?
r_temp1 - адрес 0
r_temp2 - адрес 1
r_temp3 - адрес 2
и т.д.
QW6.5.0 - ещё один способ адресации из программы к этой области памяти.
Не стесняйтесь - читайте документацию к CoDeSys.
r_temp1 - адрес 0
r_temp2 - адрес 1
r_temp3 - адрес 2
и т.д.
QW6.5.0 - ещё один способ адресации из программы к этой области памяти.
Не стесняйтесь - читайте документацию к CoDeSys.
да я не стесняюсь, но или переработал или недоучился, читаю и понять не могу, спасибо за помощь, сейчас проверю
В ПЛК 110 адресуются либо регистры, либо биты. При этом адресные пространства накладываются друг на друга. В вашем случае все двухбайтовые переменные будут адресоваться как регистры, соответственно, 0,1,2,3,4
Найдите
Конфигурирование области ввода/вывода ПЛК Руководство пользователя
Там глава "Модуль Modbus (Slave)" - в ней и об адресации и о выравнивании.
Практическое применение адресов QW6.5.0 - для ускорения чтения из модуля - не по одному регистру, а сразу группу регистров.
sekerin
Мастер модбаса будет читать\писать регистры по порядковому номеру.
То есть, например мастер запрашивает регистр №0 устройства <ваш слейв>, в вашем примере это переменная r_temp1,
регистр №1 - r_temp2, и т. д.
Добрый день, подскажите у меня есть переменные word это один регистр, если добавляю float это два регистра. но в конфигурации плк в модбас slave, нумерация идет все равно 1,2,3,4,5 и тд у меня там около 40 сейчас переменных и пришлось адрес в ручную попробовал по регистрам посчитать, 85068
тут получается адрес 74
но я вручную посчитал что с учетом REAL выше еще значение адрес 79 и ссылаясь на него значение записывается.
но так в ручную считать неудобно и долго. или я не правильно смотрю адреса?
In_Da_Cher_A
30.07.2025, 09:34
про выранивание адресов в памяти читали?
..
в ручную? лови для самопроверок
еёный_num_reg := (adr(еёный) - adr(самая_первая_переменная_в_слейве)) / 2;
про выранивание адресов в памяти читали?
Конфигурирование области ввода/вывода ПЛК Руководство пользователя
Если уж тут программы народ начал писать, то ВОТ
85069 85070 85071 85072
в ручную? лови для самопроверок
еёный_num_reg := (adr(еёный) - adr(самая_первая_переменная_в_слейве)) / 2;
то есть нужно чтобы real адрес был кратный 4?
Если представить область памяти с возрастающими адресами (от 0 до
какого-либо числа) и расположить переменные, то, если идет первая
переменная типа «байт», то она будет расположена по адресу 0х00,
следующая – 0х01 и т.д. Если дальше идет 4-байтная переменная, она должна
располагаться по адресу 0х04, т.е., кратному 4
Очередность переменных нужно правильно выстраивать я правильно понял?
Если уж тут программы народ начал писать, то ВОТ
85069 85070 85071 85072
спасибо сейчас изучу
In_Da_Cher_A
30.07.2025, 10:02
Конфигурирование области ввода/вывода ПЛК Руководство пользователяда
и что там написано?
Автоматическая адресация переменных производится последовательно, начиная с нулевого адреса (как для битовых переменных, так и для переменных, передаваемых регистрами).
Таким образом, если в модуле используются переменные одного типа, то при запросе устройством – Мастером регистра с адресом «0», модуль считывает первые два байта, для регистра с адресом «1» – вторые два байта и так далее.
Если переменные имеют длину более двух байт, то при запросе регистра с адресом «0», модуль считывает первые два байта первой переменной, для регистра с адресом «1» – вторые два байта первой переменной и так далее.
Но если в модуле используются переменные разных типов (например, одновременно восьмибитный, двухбайтный и четырёхбайтный), то при распределении адресов ПО CoDeSys производит «выравнивание» адресов переменных – упорядо
чение адресов переменных в памяти модуля. Такое упорядочение заключается в организации памяти таким образом, что переменные размером 8 бит, 2 байта и 4 байта располагаются только по определенным адресам: четырёхбайтным переменным
присваиваются адреса, кратные 4; двухбайтным – кратные 2; однобайтным (или восьмибитным) –кратные 1. То есть, независимо от порядка задания переменных, выравнивание назначает переменным адреса, кратные их длине.
Таким образом, первая восьмибитная переменная будет расположена в 0… 7 битах памяти модуля, вторая – в 8… 15 и т.д. Если же вторая переменная двухбайтная, она будет располагаться в 16… 31 битах, т.е., по адресу, кратному 2, и т.д. Четырехбайтная переменная займет следующее свободное место, кратное 4.
Такой порядок размещения переменных в памяти модуля может образовать адресные пространства, не занятые переменными. Эти пространства не отображаются в области ввода/вывода, но они обязательно должны учитываться при организации опроса переменных; учитывать эту особенность следует еще на стадии задания переменных. переводя на русский - флоат всегда должен начинаться с чётного номера регистра (понятно?),
\ при этом занимает два номера (понятно?)
при этом - следим за руками - нечётный регистр флоата в адресном пространстве не отображается
понятно?85074
то есть нужно чтобы real адрес был кратный 4?
не "нужно", а будет автоматически в слейве КДС. С автовставляемыми неявными полями если нужно.
да
и что там написано?
переводя на русский - флоат всегда должен начинаться с чётного номера регистра (понятно?),
\ при этом занимает два номера (понятно?)
при этом - следим за руками - нечётный регистр флоата в адресном пространстве не отображается
понятно?85074
ну плюс минус да, сейчас по тыкаю руками чтобы понятнее стало
Вот ещё можно не переставлять всё в конфигурации, а сделать Slave через структуру: https://cs-cs.net/codesys-modbus-karta-registrov-struktury
Но выравнивание и там надо соблюдать
Вот ещё можно не переставлять всё в конфигурации, а сделать Slave через структуру: https://cs-cs.net/codesys-modbus-karta-registrov-struktury
Но выравнивание и там надо соблюдать
да спасибо сейчас читаю, надо разобраться с этим)
In_Da_Cher_A
30.07.2025, 10:41
ну плюс минус да, сейчас по тыкаю руками чтобы понятнее сталочего там тыкать, две страницы мусолим азбуку, что написано в руководстве
Вот ещё можно не переставлять всё в конфигурации, а сделать Slave через структуру: https://cs-cs.net/codesys-modbus-karta-registrov-struktury
Но выравнивание и там надо соблюдать
Правильно понял вы чтобы этим вычислением не заниматься в своем приложении реестр заводите переменных , и с него уже порядок переменных вводите в codesys ? пока в экселе думаю сделаю , потому что переменных в slave планируется много.
чего там тыкать, две страницы мусолим азбуку, что написано в руководстве
для я понял что там написано, просто в 3.5 кодесис если правильно помню не было такой задачи, вот и не сразу сообразил
Правильно понял вы чтобы этим вычислением не заниматься в своем приложении реестр заводите переменных , и с него уже порядок переменных вводите в codesys ? пока в экселе думаю сделаю , потому что переменных в slave планируется много.
АГА! Я решил, что сначала лучше отдельно рассчитать, а потом набивать рассчитанное.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot