1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

WEINTEK MT8102E и функция 02h (ModBUS)

Модераторы: Глоб.модераторы, специалисты Weintek

Ответить
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

Доброе время!

Имею панельку MT8102E. Обмен данными чрез ethernet ModBUS-TCP (zero-based adress). Функцией 02h читаю д.входы устройства. Требуется прочитать 45 соседних входов. Делаю в макросе запрос вида:

Код: Выделить всё

  GetData(di501A[0], "501A", 1x, 22500, 45)
  SetData(di501A[0], "LocalHMI", LB, 3000, 45)
И такое впечатление что уходит не один запрос на 45 бит, а 45 запросов по 1 биту, потому что именно в этом месте кода возникает приличная задержка.

Может быть надо где-то включить агрегацию запросов?

Заранее благодарен
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2471
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2121 раз
Поблагодарили: 208 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение keysansa »

2 проекта на Weintek - всегда упаковывал биты в слова перед отправкой. Все работает. Упаковка времени не занимает.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

keysansa писал(а): 06 апр 2019, 12:25 Упаковка времени не занимает.
Это если есть чем упаковывать. Вы же не знаете что у меня за устройства на другом конце провода. А мои устройства упаковывать не умеют. Поэтому вопрос актуален (а что паковать в слова можно - это я знаю, естественно сделал бы уже давно если б можно было).
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2471
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2121 раз
Поблагодарили: 208 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение keysansa »

Раз вы себе можете позволить 45 читать, думаю, есть теперь варианты )

Отправлено спустя 1 минуту 33 секунды:
Производитель отдает только в битах?
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

keysansa писал(а): 06 апр 2019, 15:28 Раз вы себе можете позволить 45 читать, думаю, есть теперь варианты )
Например какие? :)
keysansa писал(а): 06 апр 2019, 15:28 Производитель отдает только в битах?
Да. Нужное только битами.
По вопросам работы Форума можно обратиться по этим контактам.

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Madwolf »

А что хотели тогда? На один запрос - один бит. Панель тут не причем.
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

Madwolf писал(а): 07 апр 2019, 21:08 А что хотели тогда? На один запрос - один бит. Панель тут не причем.
Э, что?
Вообще-то мы проверили. ЗАпрос делался на адрес 22500 на чтение 45 бит подряд, запрос один, ответ один, но панель шлёт запрос не на адрес 22500 а на адрес 22496, и бит просит не 45 бит а 60, но в ответе на запрос возвращает только запрошенные 45 бит. Логов модбас-пула нет под рукой - это программисты в офисе проверили, а я на площадке. Так что косячок-то в панели есть, ибо "лишние" адреса - не существующие, панель тратит время на обработку ошибочных ответов, и данных по интерфейсу летает больше чем положено.
Вышел из положения чтением меньшего кол-ва бит разными запросами.
По вопросам работы Форума можно обратиться по этим контактам.

VanMo
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 120
Зарегистрирован: 05 фев 2014, 12:22
Имя: Иван Николаевич
Поблагодарили: 21 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение VanMo »

Добрый день.
По умолчанию, при использовании типов регистра 0x/1x панель запрашивает минимум по 16 бит, адрес при этом тоже кратный 16-ти.
Тип регистра 1(0)x_single_bit позволяет читать по одному биту.
В Вашем случае лучше указать диапазон используемых битовых адресов. Делается это в системных настройках, в параметрах устройства кнопка "Добавить диапазон адресов", укажите все используемые диапазоны.
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

VanMo писал(а): 08 апр 2019, 14:54 По умолчанию, при использовании типов регистра 0x/1x панель запрашивает минимум по 16 бит, адрес при этом тоже кратный 16-ти.
То есть запрашивать даже 1 бит бессмысленно? Всё равно по порту пролетят все 16?
VanMo писал(а): 08 апр 2019, 14:54 В Вашем случае лучше указать диапазон используемых битовых адресов. Делается это в системных настройках, в параметрах устройства кнопка "Добавить диапазон адресов", укажите все используемые диапазоны.
Вот это ценно. В свете Ваших объяснений, я наконец понял, зачем нужна эта настройка. В моём случае, если у меня диапазон адресов 22500....22596 (для 01h), то указав явно этот диапазон, я предотвращу запросы от панели к области несуществующих адресов (всё что меньше 22500 в моём случае). Верно?

Ещё, у меня сложилось мнение (точнее - впечатление, чётко обосновать пока не могу), что не все настройки в части обмена данными по интерфейсам, одинаково работают для разных вещей проекта. То есть формы на экранах, к которым непосредственно привязано чтение данных - на них распространяется, а на операции чтения/записи в макросах - нет. Это так? У меня весь обмен данными сделан через макросы.
По вопросам работы Форума можно обратиться по этим контактам.

VanMo
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 120
Зарегистрирован: 05 фев 2014, 12:22
Имя: Иван Николаевич
Поблагодарили: 21 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение VanMo »

Jackson писал(а): 08 апр 2019, 21:02 То есть запрашивать даже 1 бит бессмысленно? Всё равно по порту пролетят все 16?
Да, все 16, если они попадают в разрешенный диапазон.
Jackson писал(а): 08 апр 2019, 21:02 если у меня диапазон адресов 22500....22596 (для 01h), то указав явно этот диапазон, я предотвращу запросы от панели к области несуществующих адресов (всё что меньше 22500 в моём случае). Верно?
Да
Jackson писал(а): 08 апр 2019, 21:02 не все настройки в части обмена данными по интерфейсам, одинаково работают для разных вещей проекта. То есть формы на экранах, к которым непосредственно привязано чтение данных - на них распространяется, а на операции чтения/записи в макросах - нет. Это так?
Некоторые различия имеются. Например, ошибки в запросах интерфейсных объектов(видимых) приводят к появлению окна "PLC no response". Ошибки обмена в макросах это окно не вызывают.
Еще, запросы данных для интерфейсных объектов панель стремится оптимизировать. То есть, уменьшить количество запросов путем объединения необходимых регистров в один запрос, даже если для этого придется запросить ненужные регистры. Это регулируется настройкой "Интервал блоков(слов)". По сути, это разрешение панели запрашивать лишние регистры.
В макросах запросы отправляются как есть, без дополнительной оптимизации.
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

VanMo писал(а): 09 апр 2019, 11:23 Некоторые различия имеются. Например, ошибки в запросах интерфейсных объектов(видимых) приводят к появлению окна "PLC no response". Ошибки обмена в макросах это окно не вызывают.
Вот, да. Но по идее эти ошибки можно прочесть из системных переменных.
VanMo писал(а): 09 апр 2019, 11:23 В макросах запросы отправляются как есть, без дополнительной оптимизации.
Может быть, но приведённый мною пример говорит об обратном как раз. У меня в проекте всё через макросы (как раз для этой цели - сам оптимизирую), и однако ж панель читает больше чем её попросили.

Диапазон адресов меня не спасает. Я сегодня попробовал определить его для функции 01h. Это можно сделать только один раз, один диапазон указать. А если у устройства есть "дырки" в нём (а они есть, я знаю) то логично было бы определить два диапазона, или сколько надо, чтобы обойти эти "дырки" и не слать по ним запросы. Но в настройке панели для каждой функции можно определить только один диапазон. :( А я-то вчера уже обрадовался, что вот оно счастье...
По вопросам работы Форума можно обратиться по этим контактам.

VanMo
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 120
Зарегистрирован: 05 фев 2014, 12:22
Имя: Иван Николаевич
Поблагодарили: 21 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение VanMo »

Jackson писал(а): 09 апр 2019, 11:39 однако ж панель читает больше чем её попросили.
В макросах никогда с этим не сталкивался, за исключением битовых запросов - 0x/1x.
Jackson писал(а): 09 апр 2019, 11:39 Я сегодня попробовал определить его для функции 01h
Панель не оперирует функциями, то есть, пользователь не оперирует. Поэтому, может возникнуть путаница. Диапазон задается для типов регистров. Есть только типы регистров: 0x(Coil),1x(Input status),3x(Input register),4x(Holding) и их производные. Modbus функция 01H - это чтение регистра 0x.
Jackson писал(а): 09 апр 2019, 11:39 Это можно сделать только один раз, один диапазон указать. А если у устройства есть "дырки" в нём (а они есть, я знаю) то логично было бы определить два диапазона, или сколько надо, чтобы обойти эти "дырки" и не слать по ним запросы. Но в настройке панели для каждой функции можно определить только один диапазон. :( А я-то вчера уже обрадовался, что вот оно счастье...
Чтобы определить несколько диапазонов, используйте названия регистров с доп. индексом, например - 0x_1, 0x_2. Эти индексы только для обозначения разных диапазонов, реально они будут ссылаться на 0x. Так что, счастье есть ))
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

Не устаю благодарить Вас!

То есть эти диапазоны адресов в настройках (для битовых данных) всё-ж таки будут выполняться при чтении из макросов или нет?.

И другой вопрос. Мне нужен один бит из диапазона 22500...22515. Как я понимаю, без разницы, запрашивать один бит или 16 - панель запросит 16. Сейчас я запрашиваю бит 22506 и вижу, что панель шлёт запрос со стартовым адресом 22496, то есть начиная с пустых адресов, а может и отсутствующих (их нет в описании от производителя). Если я сделаю запрос на 16 бит начиная с 22500, то панель так и исполнит это или всё равно оптимизирует запрос по каким-то своим правилам и пошлёт запрос аж на 32 бита начиная с того же 22496 (или какого-то другого)? Не сталкивались с таким?

Собственно, причина моих разбирательств - панель тормозит с обменом данных, по видимым признакам не должна (подключения все по Ethernet, всё должна успевать, устройства данные отдают исправно). Грешу на то что панель делает запросы на несуществующие адреса, пока проверил только с этим адресом. А поскольку опрос через макросы, то сообщений об ошибках я просто не вижу.
По вопросам работы Форума можно обратиться по этим контактам.

VanMo
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 120
Зарегистрирован: 05 фев 2014, 12:22
Имя: Иван Николаевич
Поблагодарили: 21 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение VanMo »

При запросе несуществующего адреса, или пула адресов, часть из которых отсутствует, контроллер обычно отвечает ошибкой. Это, соответственно, влияет и на актуальные адреса этого пула - панель с них не получает данные. Но такие запросы обычно не тормозят обмен, так как панель получает ответ оперативно и продолжает выполнять очередь запросов. Тормоза начинаются когда панель не получает ответ. Она ждет в течение отведенного на ответ времени(Время ожидания). Пока она ждет, другие запросы тоже ждут. Лучше всего проверить обмен с помощью утилиты EasyDiagnoser, она покажет запросы, которые завершаются ошибкой.

Если нужно запросить один бит, можно не заморачиваться с диапазоном и использовать тип регистра 0(1)x_single_bit. В этом случае панель принудительно запрашивает только один бит. В случае с обычным 0(1)x, панель запросит 16, даже если команда пользователя на запрос одного. Это если нет исключающего правила в диапазонах.

Да, диапазоны должны работать в макросах тоже, правда я не проверял. Настроенный диапазон, по идее, запрещает панели своевольничать и запрашивать биты вне диапазона.
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

VanMo писал(а): 09 апр 2019, 18:05 Это если нет исключающего правила в диапазонах.

Да, диапазоны должны работать в макросах тоже, правда я не проверял. Настроенный диапазон, по идее, запрещает панели своевольничать и запрашивать биты вне диапазона.
Понятно. Спасибо Вам огромное за ответы.
Подумаю как сделать лучше. Данные-то в итоге все приходят, просто коммуникации почему-то тормозят, в особенности это началось когда начал пользоваться функцией 1x (читаю входы). Всё что можно запрашивается словами (функции 3х и 4х), но вот состояния входов в моих контроллерах в слова не упаковать.
Есть вариант что контроллер просто не отдаёт данные так быстро как его спрашивают. Или наоборот, панель выдерживает большие паузы между запросами.

Чтоб представлять, на скриншоте вся система.
screen_16.png
Одна панель опрашивает 7 контроллеров Данные складываются во внутреннюю память, вся визуализация привязана к ней. Для каждого окна написан свой макрос вычитки данных, данные по функциям 3х в контроллерах сгруппированы так что их получаю одним запросом. Вычислений практически нет, данные в основном надо просто отобразить. Но не всё можно прочитать с помощью 3х/4х. Макрос каждого окна выполняется циклически (задан в настройках окна). Есть ещё две асинхронные задачи:
1. Проверка связи с устройствами, отдельным макросом 1 раз в секунду. Чтение сервисного регистра в каждом контроллере, значение регистра <> 0 когда он исправен и данные достоверны. Если признака связи с устройством нет, то во всех макросах обмен с этим устройством не выполняется.
2. Статусная строка вверху. Тоже 1 раз в секунду отдельным макросом, в нём чтение данных из одного устройства (8 регистров) и их разбор для показа текстовых строк из библиотек строк.

Всё это неплохо работало, пока не понадобилось читать битовые переменные. :( Ищу причину задержек. Связь всегда стабильна, устройства работают исправно. Особенно заметно торможение при рестарте панели. Видимо когда запускается макрос окна плюс два фоновых одновременно.

P.S. По подключениям Ethernet физически всё чуть не так как показано. Часть устройств в одном свиче, часть в другом, просто на сервисном экране не стал вырисовывать подключения с точностью до порта. Всё находится внутри одного шкафа (кроме двигателя конечно).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

Наш программист в офисе (я на площадке) по моей просьбе поставил эксперимент:
макрос:

Код: Выделить всё

macro_command main()
short di501A[16]
GetData(di501A[0], "DEV", 1x, 22500, 16)
SetData(di501A[0], "Local HMI", LB, 3000, 16)

end macro_command
скриншот во вложении trafic.png - читает с адреса 0x57E0 (22496) - 0x20 (32) входов
если поставить ограничения на диапазон адресов, что 1x функция имеет границы 22500..22600, (range_limits.png)
то в запросе будет стартовый адрес 0x57E3 (22499) - 0x1D (29) входов (trafic2.png)
Вложить картинки сейчас не могу со смартфона, но там всё так и есть. Всё-таки есть глючок в панели: при ограничении адресов снизу 22500 улетает запрос на 22499. Хоть и правда всё по 1x_bit читать.

Ну куда мне 32 бита, когда надо всего по 1-3? Можно было б одной посылкой сразу всё запрашивать и раскладывать, раз столько данных летит за раз. Проблема в том что в адресном пространстве сидят все возможные модули входов, а физически есть не все (данные по отсутствующим есть, там нули).
По вопросам работы Форума можно обратиться по этим контактам.

VanMo
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 120
Зарегистрирован: 05 фев 2014, 12:22
Имя: Иван Николаевич
Поблагодарили: 21 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение VanMo »

В модбасе есть неприятная особенность - существуют номера регистров и адреса регистров. Классический модбас не оперирует понятием "адрес", он оперирует понятием "номер". То есть, сам протокол то работает с адресами, но пользователь указывает номер регистра. Номера начинаются с 1, а адреса с 0. Говорим номер 1, подразумеваем адрес 0. Из этого получается, что номер всегда больше адреса на 1. В разных драйверах/устройствах/документации эти понятия(номер и адрес) иногда либо путают, либо оставляют в умолчаниях и непонятно номер это, или адрес. В EasyBuilder для этого сделали даже разные модификации драйвера: обычный и zero-based addressing. Zero-based означает, что номера регистров начинаются с 0, а по сути что номера соответствуют адресам.
Думаю, что путаница с адресами 22500, 22499 того же рода. Если вы используете обычный драйвер, то указывая регистр 22500, его адрес будет 22499.

А в чем необходимость использовать макросы для обмена данными, почему не привязать объекты к регистрам контроллеров?
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

VanMo писал(а): 10 апр 2019, 10:42 А в чем необходимость использовать макросы для обмена данными, почему не привязать объекты к регистрам контроллеров?
Адски тормозит отрисовка, если так сделать. Особенно когда связь с одним из устройств теряется.

Отправлено спустя 2 минуты 40 секунд:
Про адресацию регистров Вы уже писали. Дело не в этом. Zero-based драйвер всё нумерует с нуля, такая же нумерация в документации и в самом устройстве. Если бы была ошибка на 1 адрес - панель получала бы неверные данные, но данные все корректны. Нулевые адреса я тоже читаю - они же не могут иметь адрес «-1», правда?
По вопросам работы Форума можно обратиться по этим контактам.

VanMo
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 120
Зарегистрирован: 05 фев 2014, 12:22
Имя: Иван Николаевич
Поблагодарили: 21 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение VanMo »

Адреса, конечно же, беззнаковые всегда.
Если Вы используете драйвер zero-based, тогда не понятно почему адрес диапазона смещён на 1, возможно ошибка драйвера.
Аватара пользователя

Автор темы
Jackson
администратор
администратор
Сообщения: 18758
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1854 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Jackson »

VanMo писал(а): 15 апр 2019, 09:34 Если Вы используете драйвер zero-based, тогда не понятно почему адрес диапазона смещён на 1, возможно ошибка драйвера.
Да, я как раз об этом же. Возможно глючок в драйвере.

Отправлено спустя 2 минуты 30 секунд:
Вот настройки устройства в панели
EDG communication.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
По вопросам работы Форума можно обратиться по этим контактам.

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Madwolf »

Насколько я понимаю (недавно начал вообще заниматься), физически невозможно считать один бит из слова, все равно на машинном уровне читается все слово из памяти, далее путем сдвигов определяется значение конкретного бита. Таким образом, еще не факт, что чтение одного бита принесет какой-то выигрыш в производительности по сравнению с одним словом.

По поводу адресации заметил следующие глюки: например modbus pull программа неправильно указывает адрес, если изначально указано неправильное смещение (не кратное fH), также недавно коннектили по модбасу наши древние контроллеры с сименсом, там оказалось необходимым пресловутое смещение адреса на 1, тогда как у нас адресация на 100% для других ПЛК (в т.ч. Weintek) совпадает.
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2471
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2121 раз
Поблагодарили: 208 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение keysansa »

Madwolf писал(а): 16 апр 2019, 12:14 Насколько я понимаю (недавно начал вообще заниматься), физически невозможно считать один бит из слова, все равно на машинном уровне читается все слово из памяти, далее путем сдвигов определяется значение конкретного бита.
Согласно спецификации Modbus - вполне возможно. Но не бит из слова, а просто бит (relay).
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение Madwolf »

Я так понимаю, что в процессоре (том, который стоит в любом устройстве поддерживающем протокол Modbus), как это не парадоксально, нет адресации к "просто биту". Есть только к слову. Чтобы определить конкретное значение бита, нужно загрузить слово из памяти в регистр и, используя операцию побитового смещения, сравнить его с 0 или 1.
В любом случае, если даже модбас позволяет это сделать (послать по сети один бит), то:
1. Это из разряда стрельбы по воробьям (учитывая данные адреса, команды и CRC, т.е выигрыш по скорости по сравнению с отправкой целого слова составит в лучшем случае 25%).
2. Процессор должен еще этот бит получить (см. рассуждения выше), т.к. будет доп. задержка на вычисления, пусть даже это и мизер.
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2471
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2121 раз
Поблагодарили: 208 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение keysansa »

Madwolf писал(а): 16 апр 2019, 18:34 Я так понимаю, что в процессоре, как это не парадоксально, нет адресации к "просто биту". Есть только к слову.
Прочитайте выше. Есть обращение к биту. Есть обращение к группе битов.
Так же есть обращение к слову, но это предполагает упаковку на стороне ПЛК, что по условиям - нежелательно.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.

VanMo
специалист по WEINTEK
специалист по WEINTEK
Сообщения: 120
Зарегистрирован: 05 фев 2014, 12:22
Имя: Иван Николаевич
Поблагодарили: 21 раз

WEINTEK MT8102E и функция 02h (ModBUS)

Сообщение VanMo »

В модбасе есть 4 типа регистров. 2 из них относятся к битовым типам. То есть, каждый регистр этого типа имеет размер 1 бит, и соответственно, каждый регистр имеет свой адрес. Запросить можно и один бит, сервер должен его выдать. Другое дело, что этот бит будет размещен минимум в одном байте. Битовые регистры введены не для увеличения скорости обмена, а для удобства конечного пользователя протоколом Модбас. Различные вычисления, вычленения битов, или расчет контрольной суммы(это еще более затратная операция) в расчет обычно не берутся, так как сам обмен данными на скорости, допустим, 115200 бод - значительно более узкое место, то есть более затратный по времени процесс.
Ответить

Вернуться в «WEINTEK (операторские панели)»