Просмотр полной версии : Передача с 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. Как это можно сделать?
Здравствуйте уважаемые форумчане. Столкнулся с такой проблемой: в 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 у этих переменных старшим байтом вперед - измените в ОРС в настройках устройства.
Спасибо за предложенное решение, так и сделаю!
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot