Просмотр полной версии : Использование одного регистра для чтения и записи по Modbus TCP
Добрый день. Вопрос про асинхронность чтения/записи в Masterscada 4d.
Когда требуется отправлять команды/менять уставки в контроллере только из Masterscada, проблем особо нет, создал внутренние переменные на вход и выход и привязал их на вход/выход необходимого регистра. На мнемосхеме так же правильно подвязал их на числовой ввод и все работает.
Вопросы начинаются, если этот регистр могут поменять из другого места (скады/контролоера/hmi- панели), ведь при изменении оттуда у нас в Masterscada обновится вход, но не выход. И при следующей команде/изменении уставки из Masterscada мы затрем предыдущее значение, особенно это чревато при использовании битовой маски и записи через Setbit конкретного бита. Приходится использовать костыли типа сравнения входа и выхода и перезаписи значений по условию.
Не нашёл как это победить в документации. Поделитесь опытом, как с этим боритесь?
МихаилГл
21.10.2025, 19:48
Добрый день. Вопрос про асинхронность чтения/записи в Masterscada 4d.
Когда требуется отправлять команды/менять уставки в контроллере только из Masterscada, проблем особо нет, создал внутренние переменные на вход и выход и привязал их на вход/выход необходимого регистра. На мнемосхеме так же правильно подвязал их на числовой ввод и все работает.
Вопросы начинаются, если этот регистр могут поменять из другого места (скады/контролоера/hmi- панели), ведь при изменении оттуда у нас в Masterscada обновится вход, но не выход. И при следующей команде/изменении уставки из Masterscada мы затрем предыдущее значение, особенно это чревато при использовании битовой маски и записи через Setbit конкретного бита. Приходится использовать костыли типа сравнения входа и выхода и перезаписи значений по условию.
Не нашёл как это победить в документации. Поделитесь опытом, как с этим боритесь?
Ну я также использую костыли на st...
Присоединяюсь к вопросу, а можно ли как то проСЧе!?
Хотя судя по их последнему вебинару, они считают нормой что переменные для работы надо громадным списком на st присваивать... Хотя вроде сделали возможность это автоматизировать скриптом на с#... Одни мучения с этой скадой...
Добрый день. Вопрос про асинхронность чтения/записи в Masterscada 4d.
Когда требуется отправлять команды/менять уставки в контроллере только из Masterscada, проблем особо нет, создал внутренние переменные на вход и выход и привязал их на вход/выход необходимого регистра. На мнемосхеме так же правильно подвязал их на числовой ввод и все работает.
Вопросы начинаются, если этот регистр могут поменять из другого места (скады/контролоера/hmi- панели), ведь при изменении оттуда у нас в Masterscada обновится вход, но не выход. И при следующей команде/изменении уставки из Masterscada мы затрем предыдущее значение, особенно это чревато при использовании битовой маски и записи через Setbit конкретного бита. Приходится использовать костыли типа сравнения входа и выхода и перезаписи значений по условию.
Не нашёл как это победить в документации. Поделитесь опытом, как с этим боритесь?
При использовании программной распаковки-упаковки бит - нормального решения нет (точнее я не нашёл).
Если есть возможность использовать битовые теги - используйте их, с ними проблем нет.
Также в настройках протокола есть параметр, отвечающий за порядок отправки команд записи. По умолчанию стоит "по изменению значения" - в некоторых случаях бывает полезно сделать "по изменению метки времени". Т.е. если выход имеет значение 16 (а на входе этого тега значение может быть и не 16) и вы записали опять 16 - в первом случае отправки команды записи не будет, а во втором - будет
МихаилГл
22.10.2025, 07:23
При использовании программной распаковки-упаковки бит - нормального решения нет (точнее я не нашёл).
Если есть возможность использовать битовые теги - используйте их, с ними проблем нет.
Также в настройках протокола есть параметр, отвечающий за порядок отправки команд записи. По умолчанию стоит "по изменению значения" - в некоторых случаях бывает полезно сделать "по изменению метки времени". Т.е. если выход имеет значение 16 (а на входе этого тега значение может быть и не 16) и вы записали опять 16 - в первом случае отправки команды записи не будет, а во втором - будет
Тут вопрос для меня по одной штуке. В нормальных скадах (роквелл, сименс, хотя сименс я не считаю за нормальную, но...) я могу слать тег (бит, не важно) как "установить в 1". При этом я повторно его так же могу послать, и контроллер (при условии, что он сам сбросит этот тег) заново примет эту 1 снова, а тут надо не только в плк его сбросить, но и отработать обнуление в самой скаде. Эти костыли замучали. Или тут тоже все проще можно реализовать? Тут скада сможет "по изменению метки времени" понять, что надо на старую 1 послать новую 1...? В плк то уже есть 1 и ему пофиг на время... Или нет?
Тут вопрос для меня по одной штуке. В нормальных скадах (роквелл, сименс, хотя сименс я не считаю за нормальную, но...) я могу слать тег (бит, не важно) как "установить в 1". При этом я повторно его так же могу послать, и контроллер (при условии, что он сам сбросит этот тег) заново примет эту 1 снова, а тут надо не только в плк его сбросить, но и отработать обнуление в самой скаде. Эти костыли замучали. Или тут тоже все проще можно реализовать? Тут скада сможет "по изменению метки времени" понять, что надо на старую 1 послать новую 1...? В плк то уже есть 1 и ему пофиг на время... Или нет?
Способ записи (https://support.mps-soft.ru/Help-web/index.html?sv_zadacha_protokolov.html)
stanislavpotapchenko
30.10.2025, 01:27
Здравствуйте! Делаю проект в MasterScada 4d, также столкнулся с такой проблемой, что бы использовать один регистр, нашел способ решения.
У меня связь по Modbus TCP.
1. Создаете свой тег Inout
2. В объекте создаете не параметр, а вещественный тег.
3. Перетащите тег из Объектов на тег в Системе.
4. Перетащите тег из Системы на тег в Объектах.
5 При этом Вход и Выход не трогаете.
86480
Простите, и так каждый раз таскать?
Вот просто, есть понятия RO, RW, W везде и всюду. Пользователь просто должен выбрать из 3-х для 1-го, нескольких тегов. А не заниматься перетаскиванием, особенно когда там несколько тысяч или сот тысяч, и 30% с записью.
Простите, и так каждый раз таскать?
Вот просто, есть понятия RO, RW, W везде и всюду. Пользователь просто должен выбрать из 3-х для 1-го, нескольких тегов. А не заниматься перетаскиванием, особенно когда там несколько тысяч или сот тысяч, и 30% с записью.
Есть теги в устройстве, а есть переменные в скаде - вот между ними один раз нужно установить нужные связи (в произвольный момент разработки).
А внутри скады используются только переменные скады.
нашел способ решения.
Это, извините, не решение, а больше на пляски с бубном похоже.
stanislavpotapchenko
30.10.2025, 10:17
Простите, и так каждый раз таскать?
Вот просто, есть понятия RO, RW, W везде и всюду. Пользователь просто должен выбрать из 3-х для 1-го, нескольких тегов. А не заниматься перетаскиванием, особенно когда там несколько тысяч или сот тысяч, и 30% с записью.
Это нужно сделать один раз с вашим тэгом.
stanislavpotapchenko
30.10.2025, 10:20
Это, извините, не решение, а больше на пляски с бубном похоже.
Ну это легче чем каждый раз, делать скрипт на тэг, один раз связь сделал и забыл. Я сам конечно с таким первый раз столкнулся, с таким подходом в MasterScada 4d, в других скада системах работал намного все проще было. Я сам начал только изучать masterscada и думаю что еще много интересного обнаружу для...
kondor3000
30.10.2025, 11:05
Здравствуйте! Делаю проект в MasterScada 4d, также столкнулся с такой проблемой, что бы использовать один регистр, нашел способ решения.
У меня связь по Modbus TCP.
1. Создаете свой тег Inout
2. В объекте создаете не параметр, а вещественный тег.
3. Перетащите тег из Объектов на тег в Системе.
4. Перетащите тег из Системы на тег в Объектах.
5 При этом Вход и Выход не трогаете.
Проверил, не работает это вообще, так же как и всё тут через то место 86487
у вас какой то сбой просто, или подаёте целое число, вместо REAL
Простейшая скада передаёт всё без вопросов, только не эта
Не поделитесь своим костылём?)
Вчера обнаружил на объекте, что при обновлении проекта и включении рантайма, я затираю в 0 все уставки, выставленные с панели hmi. Видимо при инициализации приравнивание выходов к входам приводит к тому, что еще не считав значение Мастерскада уже шлет свой 0.
МихаилГл
10.11.2025, 10:16
Не поделитесь своим костылём?)
Вчера обнаружил на объекте, что при обновлении проекта и включении рантайма, я затираю в 0 все уставки, выставленные с панели hmi. Видимо при инициализации приравнивание выходов к входам приводит к тому, что еще не считав значение Мастерскада уже шлет свой 0.
Точно затираете? У меня, например, по протоколу opc ua, при изменении в проекте и перезапуске среды тоже по 0 всё, но в контроллере нормально, просто тэги не обновляются, приходится перезапускать контроллер и всё тогда нормально становится, появляются числа. Много чего в настройках протокола перепробовал, но так и не нашёл как тэги при переподключении обновить полностью. Контроллер плк210 игнорит все настройки среды. Только перезапуск плк.
Точно затираете? У меня, например, по протоколу opc ua, при изменении в проекте и перезапуске среды тоже по 0 всё, но в контроллере нормально, просто тэги не обновляются, приходится перезапускать контроллер и всё тогда нормально становится, появляются числа. Много чего в настройках протокола перепробовал, но так и не нашёл как тэги при переподключении обновить полностью. Контроллер плк210 игнорит все настройки среды. Только перезапуск плк.
Да, полностью затираю, к контроллеру по Modbus TCP обращаюсь, дальше он по RTU остальным контроллерам шлёт 0 от меня. Пока скадой не цепляюсь к нему всё в порядке.
86674
Я подумал может этот параметр исправит ситуацию? И раздать всем тегам read/write параметр сохранять, чтоб при инициализации они брали предыдущее значение. На объекте пока не пробовал так
МихаилГл
10.11.2025, 12:57
Я думаю ваша ошибка в том, что у вас hmi тоже хранит настройки. У меня всё в плк, например. Хотя эта скада такой негатив вызывает, но приходится работать. Много непоняток как обмениваться данными, у большинства юзеров...
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot