PDA

Просмотр полной версии : Передача с OPC в MasterScada 3.12



Bobensky
07.09.2023, 17:25
Здравствуйте уважаемые форумчане. Столкнулся с такой проблемой: в Codesys имеется массив типа WORD. В ячейки записываются параметры уставок REAL_TO_INT. Затем через OPC значения попадают в Скаду.
Например в Codesys уставка = 6.00. В OPC = 600. Я хочу записать в MasterScada значение 550, что бы в Codesys пришло 5.5. Как это можно сделать?

1exan
07.09.2023, 18:15
Здравствуйте уважаемые форумчане. Столкнулся с такой проблемой: в Codesys имеется массив типа WORD. В ячейки записываются параметры уставок REAL_TO_INT. Затем через OPC значения попадают в Скаду.
Например в Codesys уставка = 6.00. В OPC = 600. Я хочу записать в MasterScada значение 550, что бы в Codesys пришло 5.5. Как это можно сделать?

Modbus OPС того же инсата умеет в масштабирование, достаточно указать коэффициент в теге. С теми OPC, что не умеют - придётся выкручиваться в MasterScada, что кстати очень неудобно.

Bobensky
07.09.2023, 18:22
Modbus OPС того же инсата умеет в масштабирование, достаточно указать коэффициент в теге. С теми OPC, что не умеют - придётся выкручиваться в MasterScada, что кстати очень неудобно.

Загвостка еще в том, что он обнуляет значение, если вводить 550, то все равно будет 500. Масштабирование прописано в самом Codesys

SCADAMaster
07.09.2023, 19:24
Какая у вас версия ОРС? Была ошибка, но мы ее поправили.

Bobensky
07.09.2023, 19:25
Для ясности картины: записываем в скаду через OPC значение:
MdbWrt[600] := REAL_TO_INT(GVLP.PT1N1_MIN * 100);
Если есть управление со скады, то через OPC мы должны передать новое значение в контроллер:
IF ScadaCtrl.Bits.Enable THEN
GVLP.PT1N1_MIN := INT_TO_REAL(MdbWrt[600] / 100);

SCADAMaster
07.09.2023, 19:25
И зачем 500 писать? Вам нужно в поле A прописать 0.01

Bobensky
07.09.2023, 19:26
Какая у вас версия ОРС? Была ошибка, но мы ее поправили.

Master OPC Universal Modbus Server 5.0.20

Bobensky
07.09.2023, 19:27
И зачем 500 писать? Вам нужно в поле A прописать 0.01

Дело в том, что в ПЛК переменная типа REAL, мы же переводим ее в INT что бы значение занимало 1 регистр, после чего должны записать новое значение со скады, перевести INT_TO_REAL.
Если задаем уставку 613 в скаде, в ПЛК должно прийти 6.13

Bobensky
07.09.2023, 19:33
REAL_TO_WORD2 не желательно использовать

SCADAMaster
07.09.2023, 19:42
Это все ясно. 500 то зачем? Просто коэффициент А ввести и все.
Сейчас 5.0.26 - проверьте на ней.

Bobensky
07.09.2023, 20:05
Это все ясно. 500 то зачем? Просто коэффициент А ввести и все.
Сейчас 5.0.26 - проверьте на ней.

Спасибо большое! Лед тронулся, но еще не совсем то, что хотелось. В OPC коэффициент А = 0.01, в скаде записываем 155, 155 и приходит. После перевода должно получится 15.5, но если делить на 1000, а не 100, то значение прыгает

Bobensky
07.09.2023, 20:08
Либо же, можно как-нибудь передавать в скаду значение 155, а скада в поле значение добавляла точку после крайнего правого символа, к примеру 15.5

kondor3000
07.09.2023, 20:23
Спасибо большое! Лед тронулся, но еще не совсем то, что хотелось. В OPC коэффициент А = 0.01, в скаде записываем 155, 155 и приходит. После перевода должно получится 15.5, но если делить на 1000, а не 100, то значение прыгает

Чтобы из 155 получить 15.5, надо перевести в REAL и разделить на 10.

Bobensky
07.09.2023, 20:25
Чтобы из 155 получить 15.5, надо делить на 10.

У меня в чтении умножается на 100, поэтому делил на 1000. На новой версии OPC значение корректно отображается, но предел в 37.7, так как INT

kondor3000
07.09.2023, 20:27
У меня в чтении умножается на 100, поэтому делил на 1000. На новой версии OPC значение корректно отображается, но предел в 37.7, так как INT

Тогда только уменьшить кол-во знаков после запятой или перейти на FLOAT.

SCADAMaster
07.09.2023, 20:27
А почему сразу Float не использовать? Зачем эти преобразования?

Bobensky
07.09.2023, 20:34
А почему сразу Float не использовать? Зачем эти преобразования?

Хотелось ограничится меньшим количеством тегов

SCADAMaster
07.09.2023, 20:40
А причем здесь количество тегов? У вас в обоих случаях это будет один тег.

Bobensky
07.09.2023, 20:48
А причем здесь количество тегов? У вас в обоих случаях это будет один тег.

То есть вы для датчиков предлагаете создать отдельный массив типа REAL и выполнять с ним манипуляции (чтение/запись) безо всяких преобразований? Так все равно в контроллер по modebus идет типа WORD, нужно будет переделывать REAL_TO_WORD2, а это 2 тэга вместо одного

SCADAMaster
07.09.2023, 21:00
Зачем что-то переделывать?
Какой у вас контроллер? Если ОВЕН, то просто добавляете в PLC Configuration переменную типа REAL и все. С ней и работаете.
Только чередование у Codesys 2 у этих переменных старшим байтом вперед - измените в ОРС в настройках устройства.

Bobensky
08.09.2023, 16:37
Зачем что-то переделывать?
Какой у вас контроллер? Если ОВЕН, то просто добавляете в PLC Configuration переменную типа REAL и все. С ней и работаете.
Только чередование у Codesys 2 у этих переменных старшим байтом вперед - измените в ОРС в настройках устройства.

Спасибо за предложенное решение, так и сделаю!