Просмотр полной версии : МСД-200, чтение оперативных данных каналов по Mobus RTU
Помогите разобраться, читаю документацию и ни фига не понимаю. Самого устройства пока в наличии нет, т.ч. проверить на железе не могу пока.
Читаю раздел "Протокол конфигуратора МСД-200 (Modbus RTU)", таблица "Параметры команд чтения оперативных данных каналов архивирования:"
Команда чтения оперативных данных каналов архивирования (Чтение, количество регистров - 3 * 64
= 192).
Допускается считывание одной командой от 1 до 40 каналов расположенных последовательно.
Что 192, если далее сказано "от 1 до 40 каналов"?
Далее, "Адрес регистра":
Рассчиты-
ваются по
формуле:
0x2000 + K* 3
—
0x20BF
, где K– канал
архивирова-
ния 0…63
Допустим, адрес регистра 0x2000 + K* 3, а 0x20BF - это вообще о чём?
Я вообще правильно понимаю, что тут подразумевается функция чтения holding-регистров (3) ?
Прошу прощения, если не в том разделе форума тему создал, но ничего более подходящего не нашёл.
Помогите разобраться, читаю документацию и ни фига не понимаю. Самого устройства пока в наличии нет, т.ч. проверить на железе не могу пока.
Читаю раздел "Протокол конфигуратора МСД-200 (Modbus RTU)", таблица "Параметры команд чтения оперативных данных каналов архивирования:"
Команда чтения оперативных данных каналов архивирования (Чтение, количество регистров - 3 * 64
= 192).
Допускается считывание одной командой от 1 до 40 каналов расположенных последовательно.
Что 192, если далее сказано "от 1 до 40 каналов"?
Далее, "Адрес регистра":
Рассчиты-
ваются по
формуле:
0x2000 + K* 3
—
0x20BF
, где K– канал
архивирова-
ния 0…63
Допустим, адрес регистра 0x2000 + K* 3, а 0x20BF - это вообще о чём?
Я вообще правильно понимаю, что тут подразумевается функция чтения holding-регистров (3) ?
Прошу прощения, если не в том разделе форума тему создал, но ничего более подходящего не нашёл.
Я бы понял так:
Всего 64 канала (192 регистра с данными), но прочитать одним запросом можно только 40 последовательно расположенных каналов (т.е 40*3 = 120 регистров).
0x20BF - это последний адрес диапазона, а вместо "—" там следовало поставить многоточие
kondor3000
06.08.2025, 10:43
0x20BF - 0x2000 = 8383 -8192 = 191 + нулевой, всего 192 регистра
Да я верю, что 192. 64 х 3. При чем тут 0x20BF, если адрес регистра для последнего канала будет 0х20BD, если просто по формуле 0x2000 + K*3 посчитать? Зачем вообще его было указывать, да ещё в такой странной (мягко говоря) нотации?
И ещё вопрос: данные канала нужно строго по 3 регистра читать или можно отдельно статус и собственно измеренные данные?
И ещё вопрос: данные канала нужно строго по 3 регистра читать или можно отдельно статус и собственно измеренные данные?
3 регистра это и есть СТАТУС + ЗНАЧЕНИЕ:
WORD - 1 канал статус/формат;
FLOAT32/DWORD - 1 канал данные;
WORD - 2 канал статус/формат;
FLOAT32/DWORD - 2 канал данные;
... и т.д.
3 регистра это и есть СТАТУС + ЗНАЧЕНИЕ:
Ну, спасибо. Я не об этом спрашивал, это и так понятно.
Ну, спасибо. Я не об этом спрашивал, это и так понятно.
Скорее всего можно и отдельно прочитать - только смысл?
Скорее всего можно и отдельно прочитать - только смысл?
Вы теоретик, как и я пока что? Про смысл я поясню (все адреса чисто от балды).
Допустим, в некоей SCADA определены 3 тег-переменные, привязанные с модбас-тэгам:
1. UINT/WORD - модбас-адрес 100
2. FLOAT32/DWORD - модбас-адрес 101
Т.е. в итоге имеем ссылки на 3 подряд расположенных регистра. Я вот так сходу не могу чисто умозрительно сказать - как поведёт себя оптимизатор запросов в SCADA? Одним запросом на 3 регистра начиная со 100 будет читать или последовательными 2-мя с 100 и 101.
Если предположить, что статус и данные можно читать раздельно - то пофиг. А если нет - вовсе уже не пофиг, придётся извращаться.
Вы теоретик, как и я пока что? Про смысл я поясню (все адреса чисто от балды).
Допустим, в некоей SCADA определены 3 тег-переменные, привязанные с модбас-тэгам:
1. UINT/WORD - модбас-адрес 100
2. FLOAT32/DWORD - модбас-адрес 101
Т.е. в итоге имеем ссылки на 3 подряд расположенных регистра. Я вот так сходу не могу чисто умозрительно сказать - как поведёт себя оптимизатор запросов в SCADA? Одним запросом на 3 регистра начиная со 100 будет читать или последовательными 2-мя с 100 и 101.
Если предположить, что статус и данные можно читать раздельно - то пофиг. А если нет - вовсе уже не пофиг, придётся извращаться.
Здравый смысл говорит, что при одинаковом периоде опроса тегов и отсутствии пропусков должен создаваться один запрос.
Кстати если будет опрашиваться больше 40 каналов - придется принудительно разбить запросы.
В мастерскаде, например, для этого можно отметить что "вот этот регистр - последний в запросе"
Здравый смысл говорит, что при одинаковом периоде опроса тегов и отсутствии пропусков должен создаваться один запрос.
Кстати если будет опрашиваться больше 40 каналов - придется принудительно разбить запросы.
В мастерскаде, например, для этого можно отметить что "вот этот регистр - последний в запросе"
Тот же здравый смысл и нечётное кол-во регистров в структуре канала подсказывают, что оптимизатор может и нарваться, что называется. 40 каналов - это и так практически на пределе верхней границы PDU.
В той, что я работаю, есть префикс адреса, указывающий, что данные с этого адреса должны читаться индивидуально. Однако, из известных мне стандартных типов данных 6-ибайтовый размер имеет разве что STRING(6).
Тот же здравый смысл и нечётное кол-во регистров в структуре канала подсказывают, что оптимизатор может и нарваться, что называется. 40 каналов - это и так практически на пределе верхней границы PDU.
В той, что я работаю, есть префикс адреса, указывающий, что данные с этого адреса должны читаться индивидуально. Однако, из известных мне стандартных типов данных 6-ибайтовый размер имеет разве что STRING(6).
А как нечётное количество регистров может стать проблемой?
А как нечётное количество регистров может стать проблемой?
Это всё к предположению, что читать можно только кратное 3-м. Ладно, оставим до натурного эксперимента.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot