Показано с 1 по 10 из 1807

Тема: Вопросы по MasterSCADA 4D

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от RamesIV Посмотреть сообщение
    Здравствуйте,Коллеги!

    Подскажите, пожалуйста,как сделать чтение и запись регистра Modbus float в одном поле текстового ввода (или другом элементе).

    В контроллере существует регистр Modbus TCP (чтение и запись по одному адресу) необходимо осуществлять отображение значение регистра и его изменение в в одном поле текстового ввода (или другом элементе).
    Создаю в Системе протокол с базовым каналом с доступом InOut, в объектах параметр,привязываю его к полю ввода текста и к каналу. Привязывал к каналу в различных вариантах. Отображение в поле текстового ввода происходит нормально, запись регистра работает не стабильно, выглядит как конкуренция записи старого и нового значения.
    Q_MS4_1.jpg.
    В окне надо создать элемент инкремент

    На вход инкремента сделать связь с выходом регистра,
    выход инкремента со входом регистра

    upd, в регистре сделать запись по изменению
    Последний раз редактировалось VladGC; 08.11.2021 в 09:52.

  2. #2
    Пользователь
    Регистрация
    19.08.2014
    Адрес
    г. Саратов
    Сообщений
    69

    По умолчанию

    Спасибо, VladGC, b_aleks!

    С разделением входного и выходного параметра работает корректно, на данном этапе этого достаточно. Но остался вопрос. При применении текстового ввода при отображении значения можно задать формат (f3), при этом "дробный хвост" 4-х байтного float не отображается, в инкременте формата отображения нет. Есть какие-то пути решения с использованием инкремента (второй контрол для отображения использовать нельзя- нужно и ввод и отображение реализовать в 1-м элементе)?
    Q_MS4_2.1.jpg
    Q_MS4_2.2.jpg

  3. #3

    По умолчанию

    Цитата Сообщение от RamesIV Посмотреть сообщение
    Спасибо, VladGC, b_aleks!

    С разделением входного и выходного параметра работает корректно, на данном этапе этого достаточно. Но остался вопрос. При применении текстового ввода при отображении значения можно задать формат (f3), при этом "дробный хвост" 4-х байтного float не отображается, в инкременте формата отображения нет. Есть какие-то пути решения с использованием инкремента (второй контрол для отображения использовать нельзя- нужно и ввод и отображение реализовать в 1-м элементе)?
    Q_MS4_2.1.jpg
    Q_MS4_2.2.jpg
    Шаг инкримента указали правильный?

    Еще можно сделать промежуточную переменную, и округлять переменную.
    Сделать что то вроде такого:
    Создать программу, вход регистра связать с выходом программы
    Выход программы с входом регистра,
    Точно так же связать с инкриментом
    Округлять можно так

    FUNCTION funRound : LREAL
    VAR_INPUT
    IN: LREAL := 0;
    N: INT := 0;
    END_VAR

    VAR_OUTPUT
    EnO: BOOL := True;
    END_VAR

    VAR
    DECADES: ARRAY [0..8] OF LREAL := [1, 10, 100, 1000, 10000, 10000, 100000, 1000000, 10000000];
    X: LREAL := 0;
    END_VAR



    X := DECADES[LIMIT(0,N,8)];
    funRound:= DINT_TO_REAL(REAL_TO_DINT(in * X)) / X;

    END_FUNCTION

  4. #4
    Пользователь
    Регистрация
    19.08.2014
    Адрес
    г. Саратов
    Сообщений
    69

    По умолчанию

    Спасибо!

    Шаг инкремента я в общем-то не использовал... Можно попробовать округлить переменную на входе инкремента, тогда отображаться будет красиво но пока избыточных преобразований делать не очень хочу.
    Кстати при циклическом чтении регистра такое преобразование будет производиться постоянно, что наверное может отразиться на производительности при большом количестве переменных...
    А в чем криминал использования текстового ввода для ввода числовых значений (при при попытке ввода некорректного значения выдается convert warning)?

  5. #5

    По умолчанию

    Цитата Сообщение от RamesIV Посмотреть сообщение
    Спасибо!

    Шаг инкремента я в общем-то не использовал... Можно попробовать округлить переменную на входе инкремента, тогда отображаться будет красиво но пока избыточных преобразований делать не очень хочу.
    Кстати при циклическом чтении регистра такое преобразование будет производиться постоянно, что наверное может отразиться на производительности при большом количестве переменных...
    А в чем криминал использования текстового ввода для ввода числовых значений (при при попытке ввода некорректного значения выдается convert warning)?
    Не, ерунда, производительность на таких мелочах не просядет

    Как минимум в инкременте есть ограничение на ввод ( мин макс и шаг инкремента)

  6. #6
    Пользователь
    Регистрация
    19.08.2014
    Адрес
    г. Саратов
    Сообщений
    69

    По умолчанию

    Добрый день!

    Вопрос по групповой привязке регистров.Есть объект с определенным набором параметров, которые должны быть привязаны к регистрам Modbus TCP. Подскажите, пожалуйста, существует ли возможность групповой привязки регистров (каналов) к объекту? Логично бы выглядела привязка группы каналов к объекту...

  7. #7

    По умолчанию

    Цитата Сообщение от RamesIV Посмотреть сообщение
    Добрый день!

    Вопрос по групповой привязке регистров.Есть объект с определенным набором параметров, которые должны быть привязаны к регистрам Modbus TCP. Подскажите, пожалуйста, существует ли возможность групповой привязки регистров (каналов) к объекту? Логично бы выглядела привязка группы каналов к объекту...
    В программе упакуйте в массив, в массив структур или что то похожее

    Из этой программы передайте в глобальную переменную того же типа, далее обращайтесь к этой переменной из любого места
    На скриншоте нет связей на запись регистров, но посыл думаю понятен
    Screenshot_1.png

  8. #8

    По умолчанию

    Цитата Сообщение от RamesIV Посмотреть сообщение
    Спасибо, VladGC, b_aleks!

    С разделением входного и выходного параметра работает корректно, на данном этапе этого достаточно. Но остался вопрос. При применении текстового ввода при отображении значения можно задать формат (f3), при этом "дробный хвост" 4-х байтного float не отображается, в инкременте формата отображения нет. Есть какие-то пути решения с использованием инкремента (второй контрол для отображения использовать нельзя- нужно и ввод и отображение реализовать в 1-м элементе)?
    Q_MS4_2.1.jpg
    Q_MS4_2.2.jpg
    У вас InPar и OutPar какого типа? Если REAL, то в инкременте так и будет дробная часть отображаться. Измените тип на LREAL, тогда в инкременте будет отображаться 1.1

  9. #9
    Пользователь
    Регистрация
    19.08.2014
    Адрес
    г. Саратов
    Сообщений
    69

    По умолчанию

    У меня регистр Modbus - Real 4 байта. Ему точности для LReal не хватает. Таким образом хвост физически будет ( если его не округлить в скаде),как например, предложил VladGC.
    А InPar и OutPar у меня LReal.

Похожие темы

  1. Вопросы по СИ-8
    от aleksandr87 в разделе Эксплуатация
    Ответов: 2
    Последнее сообщение: 11.06.2016, 18:56
  2. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 14:39
  3. MasterScada v3.6 Основные вопросы
    от colorprint2008 в разделе Master SCADA 3
    Ответов: 7
    Последнее сообщение: 24.12.2013, 15:50
  4. конвертация проекта из Masterscada 3.5 в Masterscada 3.4
    от Сергей_SPB в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 01.04.2013, 16:56
  5. Вопросы по трендам MasterSCADA
    от 42ia в разделе Master SCADA 3
    Ответов: 9
    Последнее сообщение: 26.06.2012, 10:58

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •