PDA

Просмотр полной версии : Сброс значений INT в контроллере при запуске runtime MasterSCADA



kvibsv
26.01.2023, 14:30
Добрый день.

Задача читать Мастерскадой из контроллера значение переменной типа INT. При необходимости в Мастерскаде назначать этой переменной другое значение и передавать его в контроллер. По Modbus TCP.

В Мастерскаде добавил протокол Modbus TCP, в нем добавил Модуль Modbus TCP, в нем добавил базовый канал с доступом "InOut", типом значения "Целый" и типом ячейки "Регистр хранения", назначил каналу адрес ячейки.
В объекте добавил параметр типа Int (Параметр 1), связал его со входом канала и с объектом "Текст" на экране. Запустил Runtime Мастерскады: все ОК - в Мастерскаде отображается значение переменной из контроллера.
Добавляю в объект еще один параметр типа INT (Параметр 2), связываю его с выходом канала и с объектом "Текстовый ввод" на экране. Запускаю Runtime - переменная в контроллере обнуляется. Она обнуляется при старте runtime всегда, как только я свяжу любой из параметров (1 или 2) с выходом канала.

С типом Real такой проблемы нет: через Параметр 1 читаю из PLC, через Параметр 2 назначаю в PLC новое значение. При старте runtime Мастерскады переменная в PLC сохраняет свое значение.

Вопрос: как сделать, чтобы можно было из Мастерскады писать новое значение INT в PLC и чтобы при старте runtime Мастерскады значение переменной в контроллере не сбрасывалось?

PS. Я могу, конечно, посылать в контроллер булевые команды "Назначить INT 0/1/2". Но сделаю это только от безысходности. Хотелось бы назначать через параметр.
PS2. Версия Мастерскады: 1.2.18.29717

b_aleks2
26.01.2023, 15:07
Добрый день.

Задача читать Мастерскадой из контроллера значение переменной типа INT. При необходимости в Мастерскаде назначать этой переменной другое значение и передавать его в контроллер. По Modbus TCP.

В Мастерскаде добавил протокол Modbus TCP, в нем добавил Модуль Modbus TCP, в нем добавил базовый канал с доступом "InOut", типом значения "Целый" и типом ячейки "Регистр хранения", назначил каналу адрес ячейки.
В объекте добавил параметр типа Int (Параметр 1), связал его со входом канала и с объектом "Текст" на экране. Запустил Runtime Мастерскады: все ОК - в Мастерскаде отображается значение переменной из контроллера.
Добавляю в объект еще один параметр типа INT (Параметр 2), связываю его с выходом канала и с объектом "Текстовый ввод" на экране. Запускаю Runtime - переменная в контроллере обнуляется. Она обнуляется при старте runtime всегда, как только я свяжу любой из параметров (1 или 2) с выходом канала.

С типом Real такой проблемы нет: через Параметр 1 читаю из PLC, через Параметр 2 назначаю в PLC новое значение. При старте runtime Мастерскады переменная в PLC сохраняет свое значение.

Вопрос: как сделать, чтобы можно было из Мастерскады писать новое значение INT в PLC и чтобы при старте runtime Мастерскады значение переменной в контроллере не сбрасывалось?

PS. Я могу, конечно, посылать в контроллер булевые команды "Назначить INT 0/1/2". Но сделаю это только от безысходности. Хотелось бы назначать через параметр.
PS2. Версия Мастерскады: 1.2.18.29717

Попробуйте разнести чтение и запись по разным каналам. Способ записи оставьте "По изменению".

kvibsv
26.01.2023, 15:21
Попробуйте разнести чтение и запись по разным каналам. Способ записи оставьте "По изменению".

Как вариант, да. Но это:
1. дополнительные каналы/теги в Мастерскаде;
2. дополнительный код в ПЛК (принять значение из ячейки 2 в ячейку 1 при установленной команде "принять" типа Bool).
Хотелось бы обойтись одним каналом и без доп.кода в ПЛК.

Способ записи стоит "По изменению".
Все равно, спасибо за совет. Про такой способ не подумал.

kvibsv
30.01.2023, 14:08
Отвечу сам себе, картинкой. Сделал библиотечный объект ввода DINT:
65572
Очень удобно. Не, ну а чО? Не то что в каком-то там WinCC, где сделал тег, добавил на окно поле ввода, указал этому полю тег и все работает.

A.Sentsov
03.03.2023, 09:35
Добрый день. UP

Модель системы похожа:
В системе создан Сервер, с протоколом Modbus TCP, и соответствующий модуль Modbus TCP. В объекте создан тег. Предполагается использование шаблонов и библиотек для стандартизации и ускорения процесса разработки.

Протокол Modbus TCP имеет настройки:
- способ записи: по изменению;
- задержка записи при старте опроса (циклов): 20.

Модуль Modbus TCP имеет настройки:
- способ записи: по изменению.

Имеются взаимодействия:

Входные данные в скада-систему:
AIO.Вход (INT) -> ST программа конвертации (Способ исполнения: Периодический) -> Тег.Вход (REAL)
(Код ST программы: Tag_Вход := INT_TO_REAL(AIO_Вход) / 100;)

Исходящие данные из скада-системы:
Поле ввода значения (SYSTEM_REAL_PARAM) -> ST программа конвертации (Способ исполнения: По вызову) -> Тег.Выход (SYSTEM_INT_PARAM) -> AIO.Выход (INT)
(Код ST программы: Tag_Выход := INT_TO_SYSTEM_INT_PARAM(REAL_TO_INT(SYSTEM_REAL_PA RAM_TO_REAL(Текст) * 100));)


Данная схема работает, и сброс значения при перезапуске сервера не происходит.
Но, при изменении "Тег.Выход (SYSTEM_INT_PARAM)" на "Тег.Выход (INT)" работа нарушается и происходит "обнуление".

Если оставить мою модель без изменений (она не обнуляет параметры при старте), то всё равно при развёртывании нового сервера, при первом запуске исполнительной среды происходит "обнуление".

Вопрос: кто-нибудь смог победить данную проблему?

Юлия Лукина
06.03.2023, 09:06
Добрый день! Напишите, пожалуйста, нам на почту support@owen.ru и приложите свой проект.