PDA

Просмотр полной версии : Modbus Universal MasterOPC Server новый OPC сервер от компании ИнСАТ



Страницы : 1 2 3 [4] 5

SCADAMaster
03.07.2018, 10:49
Да. Можете качать текущую версию и пробовать на ней

amikhailov
03.07.2018, 13:01
Да. Можете качать текущую версию и пробовать на нейСкачал. Вижу все 126 регистров предопределены сразу. Работает. Спасибо.

deniska13
16.07.2018, 11:51
Мы выпустили видеопример в котором рассматривается создание конфигурации для прибора ОВЕН МДВВ для OPC сервера Modbus Universal MasterOPC.
Видеопример можно скачать с нашего сайта или просмотреть on-line на Youtube.
http://www.masteropc.ru/prices/info.php?pid=6944
Надеемся, что данный пример окажется вам полезным.

Добрый день!
Подскажите как читать данные при помощи вашего ОРС сервера с виртуального СОМ порта, причем к порту подключены устройства передающие данные в виде FF FF 75 2A 4B 9C

SCADAMaster
16.07.2018, 12:07
Виртуальный порт или реальный - роли не играет.
У вас собственный протокол? Тогда посмотрите вот этот документ:
https://insat.ru/products/Universal_MasterOPC/MU_MasterOPC_Server_API_UG.pdf

deniska13
17.07.2018, 11:17
Виртуальный порт или реальный - роли не играет.
У вас собственный протокол? Тогда посмотрите вот этот документ:
https://insat.ru/products/Universal_MasterOPC/MU_MasterOPC_Server_API_UG.pdf

Добрый день!
У меня стоит задача прочитать данные из СОМ порта и передать их в ПЛК в потоковом режиме, циклично, все остальные операции по обработке полученных данных я буду реализовывать в самом ПЛК. Может есть какая-то одна функция? Из документации я нашел только то что есть способы чтения данных из других, готовых протоколов имеющих свои, присущие всем протоколам, функции и свойства. В моем случае ничего этого нет. Есть поток данных в СОМ порте, и их нужно транслировать в ПЛК.

SCADAMaster
17.07.2018, 12:48
Все почти тоже самое что в документации, отличия только в то, что у вас нет запросов - только на прием.
Все что у вас меняется - несколько меняется вызов функции sendandrecivedatabymask. Для того чтобы она работала только на прием нужно вторым ее аргументом передать 0, и соотвественно передать пустые таблицы масок и данных.
Что-то вроде:
local send={};
local sendmask={};
local dest={};
local destmask={"byte","byte","byte","int16:2:10"}; --прописываете маску ваших данных

local err,len;

err,dest,len=server.SendAndReceiveDataByMask(0,0,s endmask,send,destmask,200);

Hemann
18.07.2018, 16:29
Коллеги, добрый день!

Столкнулись с проблемой при работе ОРС-сервера. Биты, прописанные в конфигурации ПЛК, читаются четко, а вот записать не получается. Прошу помощи.
В прикрепленном архиве приведен соответствующий проект ОРС-сервера, файл экспорта конфигурации области ввода-вывода ОВЕН ПЛК110-220.60.Р-М[M02] из CoDeSys 2.3 и лог обмена ОРС-сервера с ПЛК для тэга, в котором возникает ошибка. Еще для удобства привожу скриншоты соответствующих узлов области ввода-вывода ПЛК и ошибочного тэга ОРС-сервера.
Заранее спасибо.

SCADAMaster
18.07.2018, 16:39
У вас контроллер отвечает ошибкой:
18-07-2018 15:44:53.435 Node1::Device1:(10.0.6.10:502) Rx: [0009] 00 00 00 00 00 03 01 8F 02
18-07-2018 15:44:53.426 Node1::Device1:(10.0.6.10:502) Tx: [0014] 00 00 00 00 00 08 01 0F 00 4F 00 01 01 00
Возможно не поддерживается множественная запись.
Попробуйте в ОРС в настройках устройства выключить настройку "Не использовать команду WriteSingleCoils"

Hemann
18.07.2018, 16:53
Возможно не поддерживается множественная запись.
Попробуйте в ОРС в настройках устройства выключить настройку "Не использовать команду WriteSingleCoils"

Да, так и есть. Спасибо большое!

BiancoBovino
25.07.2018, 11:19
Добрый день.
Существует ли какая-то стандартная поддержка признака качества на трендах или стандартных контролах? Поставил галочку и при условии отличия качества от хорошего как-то меняется вид.
Не могу найти.

SCADAMaster
25.07.2018, 12:43
Если меняется признак качества, то на тренде он будет рисоваться пунктиром, а в контролах значение подчеркивается или заменяется знаками вопросам.

BiancoBovino
26.07.2018, 18:23
Спасибо. Все так.

SCADAMaster
06.08.2018, 09:30
Если вы выставите тип данных в устройстве Int32 (uint32), то так и будет.

Фирст
06.08.2018, 17:41
Здравствуйте!

Можно ли собрать данные с нескольких реле ПР200 в один проект Master SCADA?

SCADAMaster
06.08.2018, 18:12
Да, используя Modbus Universal MasterOPC сервер.

Hemann
07.08.2018, 13:20
Коллеги, добрый день!

Для целей тестирования проекта я пользовался старым ОРС-сервером на 32 точки, все работало. Сегодня пришел лицензионный ОРС-сервер (билд 4.2.14, номер ключа 30010561) - и ничего не работает. Я поставил свежие Core OPC-components - все равно не работает. У нас Windows 7. В прикреплении скриншот ОРС-сервера, на нем видно что он не шлет запросы в ПЛК. Также в прикреплении сама конфигурация сервера. Прошу помощи.

BiancoBovino
22.08.2018, 22:36
Добрый день.
Такая проблема.
при помощи modbus.ReadCoils удается читать состояние дискретных выходов.
Код Lua

function OnBeforeReading()
local w={}
err, w = modbus.ReadCoils( 0,4);
if err then
server.Message("Не читается", err)
else
server.Message("Читается", w[1],w[2],w[3],w[4])
end
end

При помощи команды записи записать не удается
Код Lua

function OnInit()
local w={}
w[1] = true; w[2] = false
err = modbus.WriteCoils( 0,2,w)
end
При этом если сделать тэг, привязать его к дискретному выходу и затем записать в него командой
код:

function OnInit()

server.WriteTagByRelativeNameToDevice( "Grow_relay", false);

end
То все проходит.
Помогите, отчего не работает?

Алекс123
08.11.2018, 16:51
39711
вопрос следующего характера. Имеется считыватель который посылает данные как на фото. необходимо считать эти данные через ops. работает через RS485. задача принимать и отправлять в мастер скаду.

SCADAMaster
08.11.2018, 17:12
Посмотрите документацию:
https://insat.ru/products/Universal_MasterOPC/MU_MasterOPC_Server_API_UG.pdf

Hemann
08.11.2018, 19:08
Коллеги, приветствую! Подскажите, пожалуйста, есть ли какая-то возможность сохранять значения переменных, введенных пользователем во время работы? Т.е. ОРС-сервер работает, оператор через СКАДА-систему вводит какие-то значения. Потом, например, компьютер перезагрузили, ОРС-сервер перезапустился, и ранее введенные значения вернулись на свои места. Если можно, буду признателен за подробное объяснение что и как для этого делать

SCADAMaster
09.11.2018, 09:12
Это в любом случае не задача ОРС сервера.
Как правило сохранение значений производится в приборе, иногда - самой скадой.

Hemann
09.11.2018, 16:01
Понял, спасибо!

Hemann
12.11.2018, 22:40
Коллеги, добрый вечер!

У нашего заказчика почему-то не всегда при запуске ОРС-сервера выполняется скрипт OnInit. Сервер лицензионный, на 500 точек. Компьютер, правда, старенький, WinXP SP3, но в остальном сервер работает. Что может мешать выполнению этого скрипта? На всякий случай - конфигурация в прикреплении.

SCADAMaster
13.11.2018, 07:34
Укажите путь к данному скрипту

Hemann
13.11.2018, 08:01
Server->Программные->OnInit

Алекс123
14.11.2018, 14:35
Есть код на си для подсчета контрольной суммы
word CountCS(byte *Buff, byte Cnt)
{
dword cs1, cs2, m;
byte k;
k = 0;
cs1 = 0;
cs2 = 0;
while (Cnt){
m = *Buff;
cs1 += m;
m ^= 0x5A;
if (k) m = (m » k)|(m « (8-k));
k = (k+1) & 0x07;
cs2 += m;
Buff++;
Cnt--;
}
return (cs2 « 8)|(cs1 & 0xFF);
}
В си особо не шарю. Помогите преобразовать этот код в Lua
function CRCsum(SFrame,Length)
CS1=1
CS2=0
DAT=0
k = 0
Frame = server.StringToTable(SFrame);
for i =1,Length,1 do
DAT = Frame[i];
CS1=bit.BitAnd(CS1,DAT);
DAT=bit.BitXor(DAT,0x5A);
if k~=0 then
DAT=bit.BitOr(bit.BitRshift(DAT,k),bit.BitLshift(D AT,8-k));
else
k=bit.BitAnd(k+1,0x07);
CS2=bit.BitAnd(CS2,DAT);
end
end;
CS1 = bit.BitAnd(CS1,0xFF);
return CS1;
end
вот примерно что у меня получилось

Hemann
15.11.2018, 15:40
Коллеги, добрый день!

Конечно, я понимаю что не очень корректно так делать, но прошу еще раз обратить внимание на посты #785-#787 текущей ветки форума. Хотелось бы получить ответ. А если я не правильно понял пост #786, то прошу разъяснить что значит "Укажите путь к данному скрипту"

binocl88
15.11.2018, 16:31
Добрый вечер. Куплен новый пк, в связи с этим переношу opc server на него, возник вопрос по работе функции sleep.
Other.sleep(2000); на новом пк с той же ос(win7) вместо 2с, выполняется 32с, откуда могла появится задержка в 30с?

SCADAMaster
16.11.2018, 08:41
Server->Программные->OnInit
Как вы определяете что он не выполняется.
Добавьте в начале и конце скрипта диагностическое сообщение - server.Message и смотрите в логе есть ли данные сообщения. Если есть - значит все выполняется.

SCADAMaster
16.11.2018, 08:50
Есть код на си для подсчета контрольной суммы

Почему += вы представляете как AND?
И посмотрите раздел справки по Lua в ОРС:
Руководство по языку Lua 5.1 > Библиотеки функций > Библиотека BIT >Особенности использования битовых операций

SCADAMaster
16.11.2018, 08:51
Добрый вечер. Куплен новый пк, в связи с этим переношу opc server на него, возник вопрос по работе функции sleep.
Other.sleep(2000); на новом пк с той же ос(win7) вместо 2с, выполняется 32с, откуда могла появится задержка в 30с?
Приложите конфигурацию и укажите путь к данному скрипту.

Hemann
16.11.2018, 10:51
Как вы определяете что он не выполняется.
Добавьте в начале и конце скрипта диагностическое сообщение - server.Message и смотрите в логе есть ли данные сообщения. Если есть - значит все выполняется.

Понял, спасибо. Но дело в том, что там просто идет инициализация тэгов из узла "Программные", как Вы могли видеть. Так вот, периодически тэги не становятся в состояние False, как должно быть после выполнения скрипта, а остаются в состоянии EMPTY. Поэтому я пришел к выводу что скрипт не выполняется. Или могут быть другие причины для такого поведения тэгов?

SCADAMaster
16.11.2018, 11:43
Перенесите инициализацию тегjdа в сам тегb (см. скриншот).
У устройства скрипт выключите
И что это здесь написано:
bdat,qual=server.ReadCurrentTag();

if bdat==true then
val=1000;
else
val=0;
end
У вас тип тега - bool

Hemann
16.11.2018, 15:56
Вы смотрите не тот скрипт. Я писал путь Server->Программные->Скрипт OnInit. Скриншот прилагаю

SCADAMaster
16.11.2018, 16:04
Именно на него мы и смотрели.
Выключит его. Инициалиацию сделайте как мы показали на скриншоте. Все будет работать.
Ну и ошибки в коде исправьте

Hemann
17.11.2018, 13:12
Ну и ошибки в коде исправьте

Спасибо! Только ошибки в коде нет. Текущий тэг действительно bool, но в зависимости от его состояния 0 или 1000 пишется в тэг типа int, и эта часть как раз претензий не вызывает

Relaymen
17.01.2019, 12:01
Ни у кого нет кода расчета CRC modbas на Lia, который использует сам Modbus Universal MasterOPC Server?? Так как то что можно нарыть в интернете выдает совсем не то что должно быть

IVM
17.01.2019, 13:05
Ни у кого нет кода расчета CRC modbas на Lia, который использует сам Modbus Universal MasterOPC Server?? Так как то что можно нарыть в интернете выдает совсем не то что должно быть

А зачем это нужно ?

Relaymen
17.01.2019, 13:28
А зачем это нужно ?

Для написания модбас подобного протокола

Relaymen
17.01.2019, 13:30
вся беда в том что у него как и у dcon после контрольной суммы идет стоповый байт, а CRC модбас

SCADAMaster
17.01.2019, 14:11
В справке:
Руководство по языку Lua 5.1 > Примеры и полезности > Примеры расчета контрольных сумм >CRC-CCITT

IVM
17.01.2019, 14:19
Руководство по языку Lua 5.1

Неужто в Master SCADA в качестве внутреннего языка используется Lua ?

SCADAMaster
17.01.2019, 14:30
Вопрос был про OPC сервер - в нем скриптовый язык на Lua.

Relaymen
17.01.2019, 15:23
Спасибо за подсказку

alss
29.01.2019, 06:38
Столкнулся с проблемой! Есть программа написанная на Qt. Она взаимодействует с Modbus Universal MasterOPC по протоколу TCP. В одном из тегов реализованная следующая функция:
function OnWrite()
local srcdata = {0}
local srcmask = {"int16:10"}
local srclen = 1;
local dstdata = {}
local dstmask = {"byte", "uint32:1:3210", "float:1:3210", "float:1:3210", "float:1:3210"};--количество элементов – 5, чередование старшим байтов вперед
err, dstdata, dstlen = modbus.ExtFunction(68, srclen, srcmask, srcdata, dstmask);
-- dstlen = dstlen - 1;
server.Message( "dstlen = ", dstlen, " err = ", err, " ", dstdata[1], dstdata[2], dstdata[3]);
end
Осуществляю запрос в прибор. Приходит запрос в программу правильно. Ответ от программы приходит тоже правильный заданной длинны и правильного содержания. Тем не менее функция ExtFunction не может в принятой последовательности выделить 5 значений. Отправленная и принятая последовательности приведены ниже:
29-01-2019 11:35:55.047 modbus::modbus_miko:(10.10.10.97:2323) Rx: [0025] 00 00 00 00 00 13 0A 44 01 00 00 00 00 41 25 A5 BA 40 A9 6D FF 00 00 00 00 - строка ответ содержащее 5 значений
29-01-2019 11:35:55.047 modbus::modbus_miko:(10.10.10.97:2323) Tx: [0010] 00 00 00 00 00 04 0A 44 00 00 - строка запроса, содержащая в качестве передаваемого параметра - 0, размерность два байта

alss
29.01.2019, 06:40
Точнее она не определяет ни одного значения

SCADAMaster
29.01.2019, 11:51
Точнее она не определяет ни одного значения
А что именно происходит?
Вообще как вы написали делать не правильно - где контроль err? Нужно сперва убедится что нет ошибки приема, убедится что в dstdata достаточно элементов таблицы (функция table.maxn), и только потом уже обращаться к элементам таблицы

alss
29.01.2019, 13:21
После запуска скрипта в Modbus Universal MasterOPC, отправляю следующий запрос:
Tx: [0010] 00 00 00 00 00 04 0A 44 00 00. Клиент принимает данный запрос обрабатывает и отправляет ответ. В информационном окне в Modbus Universal MasterOPC ответ отображается (и он является верным) и выделен зеленным цветом:
Rx: [0025] 00 00 00 00 00 13 0A 44 01 00 00 00 00 41 25 A5 BA 40 A9 6D FF 00 00 00 00.
согласно заданному шаблону dstmask = {"byte", "uint32:1:3210", "float:1:3210", "float:1:3210", "float:1:3210"}, Modbus Universal MasterOPC должен после последовательности 00 00 00 00 00 13 0A 44 выделить в полученном ответе 5 элементов. Тем не менее
modbus.ExtFunction возвращает нулевую ошибку, длину равную 1 и пустой dstdata. Вопрос заключается в том, почему Modbus Universal MasterOPC принимает ответ (и отображает его верное), но при этом dstdata пустой.
Скрипт писался согласно примерам приведенным в Помощи к программе.

SCADAMaster
29.01.2019, 13:33
Пришлите лог обмена с устройством. Для этого в свойствах сервера включите запись журнала и всех его событий размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\ProgramData\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам, также пришлите вашу конфигурацию ОРС сервера.

alss
30.01.2019, 07:20
Пришлите лог обмена с устройством. Для этого в свойствах сервера включите запись журнала и всех его событий размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\ProgramData\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам, также пришлите вашу конфигурацию ОРС сервера.

Оправил Лог и картинку с настройками OPC сервера
40989

SCADAMaster
30.01.2019, 09:25
Приложите также вашу конфигурацию ОРС

alss
30.01.2019, 10:41
Файл конфигурации

SCADAMaster
30.01.2019, 12:18
А почему версия такая старая? Попробуйте на текущей:
https://insat.ru/products/?category=1666

alss
31.01.2019, 03:34
Установил в место 4.2.7 новую версию 4.2.27, результат тот же!

SCADAMaster
31.01.2019, 09:17
Снимите также с ней лог.

Hemann
26.02.2019, 08:18
Коллеги, приветствую!

Подскажите,пожалуйста, допустима ли адресация узла как указана на прикрепленной картинке? 41427

SCADAMaster
26.02.2019, 09:34
Да, можно.
Только версию скачайте текущую - у вас совсем древняя
https://insat.ru/products/?category=1666

Makc
01.03.2019, 05:31
Доброго времени суток!
1) Есть ли возможность из SQL обращаться к HDA архиву или напрямую к тегам?
2) В документации приведен пример записи значений из HDA архива в SQL, а есть данные о том какое максимальное количество значений ежесекундно можно писать в базу? на тысячи значений в секунду насколько стабильно будет работать?

SCADAMaster
01.03.2019, 09:12
Доброго времени суток!
1) Есть ли возможность из SQL обращаться к HDA архиву или напрямую к тегам?

Как вы себе это представляете?



2) В документации приведен пример записи значений из HDA архива в SQL, а есть данные о том какое максимальное количество значений ежесекундно можно писать в базу? на тысячи значений в секунду насколько стабильно будет работать?
Таких данных нет.
Тут еще зависит от самого кода скрипта. Можно писать по одной записи за запрос, а можно писать помногу. Можно писать каждый так опроса, а можно писать раз в 10 секунд, накопив базу в HDA

Алекс123
05.03.2019, 17:16
ДОбрый день, кто нибудь работал с Json массивами получаемыми с Ip порта ? Программа авион от тензо М. Необходимо через опс получать показания весов.

senat892
10.03.2019, 10:54
Добрый день!
Есть задача ускорить опрос OPC сервером контроллера S7 1200 по ModbusTCP.
Есть две конфигурации 89 (readwrite) и 175 (readonly-70% и writeonly-30%) тэгов.
Скорость опроса в первом случае составляет 200-300мс, во втором 450-550мс. Это просто чтение, без учета записи.
При этом настройки S7 1200 одинаковы и его внутренний цикл 10мс.
На другом конце MS 3.9.
Эти цифры практически неизменны и если в первом случае приемлемы, то во-втором случае визуализация очень заметно подтормаживает в части отображения аналоговых величин.
Хотелось бы услышать рекомендации по организации связи, группировки тэгов и т.д. и т.п....
Заранее спасибо!

SCADAMaster
10.03.2019, 20:04
Пришлите лог обмена с устройством (когда тегов 175). Для этого в свойствах сервера включите запись журнала и всех его событий размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\ProgramData\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам, также пришлите вашу конфигурацию ОРС сервера.

senat892
11.03.2019, 11:41
Как назло под рукой нет ни одного исправного 1200-го...(
Сделаю как приедет.
Только подскажите, куда слать?
Спасибо за оперативный ответ!

SCADAMaster
11.03.2019, 13:28
support(собка)insat.ru
Можете для начала прислать только конфигурацию - без лога.

BiancoBovino
14.03.2019, 18:03
Добрый день!
Подскажите, поддерживает ли встроенный в MasterOPC интерпретатор модульную систему? Мне нужно выполнить из тела скрипта http post запрос
Попытался выполнить для начала код

http = require("socket.http")


При переходе в режим исполнения появилось сообщение о невозможности найти модуль socket.http , из чего я сделал вывод, что в принципе require работает. Более того, в перечне констант Lua, доступном из окна редактирования скрипта в MasterOPC, были обнаружены переменные LUA_MODULES и C_MODULES.
После того, как в директорию, на которую указывает LUA_MODULES, были помещены lua-модули библиотеки socket, стал ругаться уже сам модуль socket.http, сообщая, что не находит core.lua. После установки в C_MODULES C-модулей этой библиотеки, ругаться перестал, однако скрипт молча падает, не выводя никаких сообщений в консоль. Вывод о падении был сделан потому, что код:

a = require("socket.http")
server.Message ("working")


Не выводит ничего
Попытка поймать какую-то ошибку кодом вида:

a,b = pcall(require,"socket.http")
server.Message (a)

тоже ничего не дала.
Все приседания совершались в тестовой версии MasterOPC Universal Modbus Server.
Я бы вообще этим не стал заниматься, думая изначально, что модульную систему сервер вообще не поддерживает, однако, читая Help на Multiprotocol SDK MasterOPC Server, увидел там описание модульной системы, из чего сделал вывод, что возможно она и поддерживается.
Помогите прояснить ситуацию. Возможно ли использование модульной системы? Конкретно - нужно выполнить из тела скрипта post запрос.

SCADAMaster
14.03.2019, 18:57
А причем здесь Multi-Protocol?
В Modbus Universal теоретически можно подключать сторонние LUA библиотеки, однако библиотеки должны поддерживать асинхронный режим, иначе просто повиснет сервер.

BiancoBovino
14.03.2019, 20:33
Большое спасибо за ответ. Я в этом плохо понимаю. Как я узнаю, поддерживает библиотека асинхронный режим или нет? И почему повиснет сервер? И почему в моем случае он виснет без обращения к функциям библиотеки? Я всего лишь выполнил функцию require. Не могли бы вы пояснить.

SCADAMaster
15.03.2019, 09:34
К сожалению не могли бы.
Мы с данной библиотекой не работали и как она реализована нам не известно.
Тем более описываемые вами вещи - это не штатный функционал ОРС сервера.
Если вам требуется реализовать указанную вами задачу, то вы можете сделать ее на C++ в Multi-Protocol в плагине User Script. Там у вас будет весь функционал C++ и возможность отладки в Visual Studio

ASG
15.03.2019, 12:31
День добрый,

Из старинной переписки о функции OnServerError()


При работе с реальным COM портом такая ситуация возникнуть не должна.


Мы планируем добавить такую функцию в третью версию ОРС сервера.
Но эта функция нужна в первую очередь при работе по Ethernet - там при обрыве связи функции скрипта действительно перестают вызываться


Да, нужно устанавливать признак качества при записи значений в тег.

В Версии 4 такой функции не обнаружл. Планы изменились или не там ищу?

SCADAMaster
15.03.2019, 13:20
В Версии 4 такой функции не обнаружл. Планы изменились или не там ищу?
К сожалению так и не реализовали еще.

ASG
15.03.2019, 13:51
К сожалению так и не реализовали еще.

Жаль...но, может подскажите, начинающему.
У меня в проекте несколько десятков TCP/IP узлов. Хочу контролировать Езернет-соединения.
Сделал объекты не уровне Скады на базе ФБ Ping с периодическим опросом.. но это решение мне не очень нравится.
Думаю в сторону скриптов в Скаде или в OPC (поэтому и заинтересовался функцией OnServerError) но пока ничего путного не придумывается.
К слову, как в OPC (или Скаде) получить строку с адресом узла для использования в скрипте...?

SCADAMaster
15.03.2019, 14:23
Контролировать с какой целью?
И чем ФБ Пинг не устраивает?

ASG
15.03.2019, 15:24
Контролировать с какой целью?
И чем ФБ Пинг не устраивает?

С целью оперативного выявления и устранения неисправностей... (электричество отключили или в сети легло что-нибудь ...).
"Громоздко" поучилось у меня: отделенный объект с Пингом на каждый узел + тег с адресом, к тому же периодический опрос (раз 30-60 мин) дает задержку в реакции.
В принципе работает конечно... просто ищу более лаконичное решение.

SCADAMaster
15.03.2019, 18:21
"Громоздко" поучилось у меня: отделенный объект с Пингом на каждый узел + тег с адресом, к тому же периодический опрос (раз 30-60 мин) дает задержку в реакции.

Почему периодически опрос 30-60 минут?

ASG
18.03.2019, 10:33
Почему периодически опрос 30-60 минут?

Чаше особого смысла нет + трафик какой-никакой но лишний.

SCADAMaster
18.03.2019, 11:07
Все равно лучше оставить опрос в 1000 мс, главное чтобы он был по изменению.

Rake Runner
19.03.2019, 08:10
Modbus Universal MasterOPC Server в режиме Modbus RTU Slave, версия 4.2.28, идет отладка проекта.

На сервер приходит запрос на чтение нулевого холдинг регистра. Сервер возращает корректный ответ, в котором значение регистра = 0.
Но при этом в слэйве такого регистра вообще нет, добавленные теги начинаются с адреса 500.
Ожидалось, что сервер в ответе вернет код ошибки 02 (Illegal Data Address).
Это баг или поведение в таких ситуациях определяет какая-то настройка?

41792

SCADAMaster
20.03.2019, 13:29
В сервере не реализован ответ на отсутствие адреса - они в памяти всегда выделены

Rake Runner
20.03.2019, 13:37
В сервере не реализован ответ на отсутствие адреса - они в памяти всегда выделены

Рассмотрите как пожелание? Я понимаю, что в рабочем режиме это вряд ли кого-то волнует, но в процессе отладки (а я, например, постоянно использую Insat OPC в качестве виртуального слэйва) - было бы здорово, если бы подобные ситуации обрабатывались (т.е. адреса выделялись бы только для добавленных тегов).

SCADAMaster
20.03.2019, 13:52
Скорее всего нет.

za9c
30.03.2019, 08:27
Подскажите пож-та!

Допустим в OPC есть устройство(тип programm) с 20 тегами(тип programm)! период опроса 1сек, время ответа 100млсек, повторов при ошибке 3, повторное соединение через 60 сек!

Так вот. если хоть один тег, из этих 20 не опросится(помеха или ещё какая беда) - запустится таймаут(повторное соединение через 60 сек) и всё устройство будет молчать 60 сек!
Повторов при ошибке больше ставить тоже смысла нет - а если устройтво(а) не в сети(20тегов*3*100млсек) - вообще завал!

так вот сам вопрос - есть ли возможность использовать команды server.SendAndReceiveDataByMask() или server.SendAndReceiveData()(или возможно есть другие) так, чтоб они не выдавали автоматом ошибку (server.GetCurrentDeviceError( ) равную true) в теге типа PROGRAMM и не запускали интервал ошибки автоматом - а только по моей команде!
Ведь в programm я сам контролирую достоверность приёма!

SCADAMaster
30.03.2019, 10:28
Так сделать нельзя.
Вы можете задать количество повторов с запасом - 1000.
Сделаю через дополнительные свойства свою настройку количества повторов и проверять. Достигло ее количество - выходите из опроса этого и идете дальше.
Но хотим отметить, что в наших ОРС серверах принято что если хотя бы один тег не был опрошен, то все теги принимают качество BAD. Иначе может получиться непонятная ситуация в скаде.

za9c
30.03.2019, 10:50
Но хотим отметить, что в наших ОРС серверах принято что если хотя бы один тег не был опрошен, то все теги принимают качество BAD.

Это правило работает если использовать тип устройства(modbus) - из-за этого непонятного свойства мы и отказались использовать стандартное устройство(MODBUS) в OPC.

Вы можете задать количество повторов с запасом - 1000
если я такое сделаю - после команды server.SendAndReceiveDataByMask() или server.SendAndReceiveData() - сервер будет долбить 1000 раз в устройство пока не получит ответ(и в этот момент я ничем ОПРОС не остановлю - код крутится в функции SendAndReceiveDataByMask) - и когда не получит ответ в тысячный раз - начнёт отсчитывать задержку ошибки!
Беда - ладно - я в принципе решил этот вопрос(создал таблицу в скрипте устройства и оттуда опрашиваю - распихивая по тегам) - просто долго и муторно - но работает!

krollcbas
30.03.2019, 10:53
SCADAMaster, мне конечно понятно кто владеет монополией, того и правила.

НО!!!
"Но хотим отметить, что в наших ОРС серверах принято что если хотя бы один тег не был опрошен, то все теги принимают качество BAD. Иначе может получиться непонятная ситуация в скаде."
Звучит как полное непонимание требований рынка автоматизации. Просто палки вставляете в колеса всем интеграторам одновременно и себе черную метку на карму.
Ну вот к примеру, я (или такой как я), готовлю программу для какого-то объекта. Меня туда пустят в самом конце и то на короткий срок. В итоге вынужден изголяться и обходить данные "дурацкие" выдуманные на ровном месте правила. Ну сделайте это настраиваемым, хочу использую, хочу не использую. С Модбасом еще прокатывает, есть имитаторы. А с другими протоколами?

SCADAMaster
30.03.2019, 13:14
В итоге вынужден изголяться и обходить данные "дурацкие" выдуманные на ровном месте правила.
А зачем их обходить? В каких конкретно случаях нужно чтобы от устройства половина тегов пришло с нормальным признаком, а другая половина - с недостоверным?

krollcbas
30.03.2019, 13:54
То, что Вы слышите, это хорошо, но смешиваете понятия, к сожалению плохо.
Вот к примеру, у меня сложная многоуровневая задача. Мир не идеален и Вы это сами знаете по своему опыту.
Что-нибудь отвалилось и что терять все остальное? Остановили работу участка до устранения "недочета"?
Такая идиология?
Но Вы же не студенты близорукие...
OPC - это вообще костыль. В нормальных системах его не должно быть.
SCADA за рубежом строятся по принципу - основа встроенные драйвера, а если что-то пришлое, то пожалуйста, через OPC
Здесь, в данном Вашем мире он нормально, вполне гармонично так встроился.
Вполне удобное средство Universal OPC, сам им пользуюсь активно, если нужно писать драйверы на нестандартном протоколе.
Если обыкновенный Modbus - Овен ОПС. Отлично работает на живом объекте, денег не стоил.

А Ваши обновления. Что это такое? Два исправили, одно то что было хорошо - сломали. Хорошо ли это?
То что Мастерскада перестала отображать значения при потере качества - полный и надеюсь сокрушимый БРЕД.
Вы должны отдать интегратору признак качества по тэгу. Пусть сам решает что с этим делать.
Перечеркнуть ли значение, скрыть ли значений, привести ли его к максимуму.

SCADAMaster
30.03.2019, 18:25
То, что Вы слышите, это хорошо, но смешиваете понятия, к сожалению плохо.
Вот к примеру, у меня сложная многоуровневая задача. Мир не идеален и Вы это сами знаете по своему опыту.
Что-нибудь отвалилось и что терять все остальное? Остановили работу участка до устранения "недочета"?
Такая идиология?

Так что же у вас за такая сложная многоуровневая задача, при которой:
1. Опрашивается устройство.
2. В процессе опроса опросилась только половина тегов устройства.
3. Это нормально и нужно как то с половиной данных продолжать работу.
Что же это за "идиология" такая?

Хотим подчернуть если "отвалилось" одно устройство, то опросу другого устройства этого никак не мешает.


OPC - это вообще костыль. В нормальных системах его не должно быть.
SCADA за рубежом строятся по принципу - основа встроенные драйвера, а если что-то пришлое, то пожалуйста, через OPC

Потрясающее заявление. Как вы считаете ОРС - это российская разработка? Может центральный офис OPC Foundation - находится в Саратове? Kepware, Matrikon, Unified Automation - российские компании?
И что понимать под "пришлым"?
Насчет драйверов, в том же Trace Mode 1500 заявленных драйверов, однако в очень многих проектах даже для Modbus почему то наш ОРС используются. Странно да?



Если обыкновенный Modbus - Овен ОПС. Отлично работает на живом объекте, денег не стоил.

Если говорить про новый ОВЕН ОРС, то он достаточно грубая копия Modbus Universal, даже названия настроек совпадают.
Ну а копируют, как известно, лучшее.
Правда вот его работоспособность на большом количестве тегов вызывает проблемы.



А Ваши обновления. Что это такое? Два исправили, одно то что было хорошо - сломали. Хорошо ли это?
То что Мастерскада перестала отображать значения при потере качества - полный и надеюсь сокрушимый БРЕД.

Про что речь?
Кстати в 3.10 реализована настройка отображения значений признака качества - теперь можно текст замещающий делать, а можно оформление менять.

krollcbas
30.03.2019, 19:19
SCADAMaster,


2. В процессе опроса опросилась только половина тегов устройства.
3. Это нормально и нужно как то с половиной данных продолжать работу.
Что же это за "идиология" такая?
Хотим подчернуть если "отвалилось" одно устройство, то опросу другого устройства этого никак не мешает.

Если мы можем читать - то должны читать!
Как бы не работать с полученными данными, а хотя бы их видеть.
Видеть значения тех тэгов, с которых еще идут данные. Никак не логично отказывать в просмотре.
Ну в чем тогда логика? Modbus Pool считать данные может, а Мастерскадой уже нет.
Это зачем так делаете?

То что не Вы придумали OPC - верно, это открытый стандарт. Речь же не о том была. Зачем вообще нужен этот шлюз?
Если цель экономическая - принимаю. Если так лучше для дела, простите - нет.

Вы ответите в контраргумент что так работают все отечественные SCADA, причем часто сами покупают Ваш Universal OPC.
Ну да, все верно. Вы молодцы выпустили работающий продукт. А почему так происходит? Причины?

Хотелось бы подчеркнуть, что нахожусь на Вашей стороне и использую Ваши решения в тех проектах, которые реализую.
Вступая в эти дебаты мной двигает стремление улучшить существующую картину, а не привыкать к не очевидному.

SCADAMaster
30.03.2019, 19:31
Если мы можем читать - то должны читать!
Как бы не работать с полученными данными, а хотя бы их видеть.
Видеть значения тех тэгов, с которых еще идут данные. Никак не логично отказывать в просмотре.
Ну в чем тогда логика? Modbus Pool считать данные может, а Мастерскадой уже нет.
Это зачем так делаете?

Вы уходите от темы. Во первых Modbus Pool - это тестовая утилита, никакого отношения к опросу в работе реальных процессов не имеет.
Во вторых, мы вам задали простой вопрос - опишите задачу, при которой требуется, чтобы если пропала связь с частью тегов одного устройства остальные теги должны получить достоверный признак качества. Вы готовы описать данную задачу?
И хотим подчеркнуть - количество нормально считанных тегов в одном устройстве может быть разным - может быть только один тег считается, а может и 2/3.



То что не Вы придумали OPC - верно, это открытый стандарт. Речь же не о том была. Зачем вообще нужен этот шлюз?
Если цель экономическая - принимаю. Если так лучше для дела, простите - нет.

Потому что протоколов много, скад - много. И тянуть такое количество протоколов - очень тяжело. Пример Trace Mode кстати очень показателен, на бумаге 1500 драйверов, а на деле даже для Modbus они сами (!) рекомендуют ОРС использовать.
Ну а новый стандарт OPC UA - это вообще путь в светлое будущее.



Вы ответите в контраргумент что так работают все отечественные SCADA, причем часто сами покупают Ваш Universal OPC.
Ну да, все верно. Вы молодцы выпустили работающий продукт. А почему так происходит? Причины?

Не только отечественные. Откроем страшную тайну - наш ОРС сервер продается в том числе и на мировом рынке.
Под причинами что имеете ввиду? Почему его покупают? Да по той же причине по которой ОВЕН его "обводил" - потому что это лучшее решение на рынке.

krollcbas
30.03.2019, 20:00
Постараюсь не уходить с темы:
1. Мне как интегратору важно иметь возможность удаленно отлаживать систему визуализации, даже если физических устройств нет. Только на программных компонентах.
Используя по возможности даже реальный ключ и реальный дистрибутив, чтоб исключить любые оказии при вводе софта в эксплуатацию реального объекта.
В прежних версиях Мастерскада данные с плохим качеством не скрывала и я имел возможность задать любые удобные мне числа, конечно при наличии связи с ОПС.
Теперь это не так. Приходится выкручиваться, ругаясь громко в слух.
2. Давлеет на мою подкорку опыт работы на крупных, достаточно серьезных объектах атомной энергетики.
Там тоже встречались данные с плохим признаком качества Q. Причем никто их и не задумывался скрывать от наладчиков или КИПовцев, наоборот. Мы их индицировали на экране зачеркнутыми.
С таким подходом как у Вас нас бы выкинули, а в руки бы дали коробочку синего цвета.

SCADAMaster
30.03.2019, 20:27
Вы вообще внимательно читали про что речь идет?
Вопрос про ОРС сервер, и ситуацию когда опрос одного устройства не завершается до конца (условно половина тегов прочиталась, а на другой половине связь пропала) - в каких случаях такое поведение является некорректным (ответа мы так и не услышали)?

Какие еще скада скрывает данные? Вы вообще про что? Недостоверные значения скада ранее либо подчеркивала, либо замещала на знаки вопроса (если признак качества Uncertain). В 3.10 мы сделали гибкую кастомизацию для каждого из признаков качества
https://drive.google.com/uc?export=download&id=1-zcOAB3o0itRSepATbQiKqNt5xnvjxGy
Вот только никакого отношения к ОРС это вообще не имеет.

ASo
30.03.2019, 22:21
1. Ну рассматривайте вариант, что ОРС == драйвер. Что не так? Механизм передачи информации через СОМ? Вы уверены, что в других драйверах других СКАДА он не используется?
2. Ну ТМ заявила встроенный драйвера для огромного количества контроллеров. И в каком виде это сейчас? Куча уже по сути не поддерживаются - по политическим и экономическим причинам. И в чем преимущество?
3. Вот приведите пример, чтобы с одного устройства часть тэгов отпросилась, а часть нет. Я вот в программах для ПЛК при ручном опросе через библиотеки при не ответе на это - сразу перехожу к следующему устройству - зачем стучаться в закрытую дверь.

SCADAMaster
30.03.2019, 22:38
1. Ну рассматривайте вариант, что ОРС == драйвер. Что не так? Механизм передачи информации через СОМ? Вы уверены, что в других драйверах других СКАДА он не используется?
2. Ну ТМ заявила встроенный драйвера для огромного количества контроллеров. И в каком виде это сейчас? Куча уже по сути не поддерживаются - по политическим и экономическим причинам. И в чем преимущество?
3. Вот приведите пример, чтобы с одного устройства часть тэгов отпросилась, а часть нет. Я вот в программах для ПЛК при ручном опросе через библиотеки при не ответе на это - сразу перехожу к следующему устройству - зачем стучаться в закрытую дверь.
Сам фюрер не сказал бы лучше... ©

Сергей0308
31.03.2019, 03:39
Сам фюрер не сказал бы лучше... ©

Наверно всё-таки сам Геббельс? Ну и сравнения!

krollcbas
31.03.2019, 08:30
Относительно моего заявления, что данные с признаками BAD или OUT_OF_SERVICE исчезают на Мастерскаде 3.10 - не подтверждаются. Они остаются связанными с ОПС. В данном конкретном примере все корректно. Был не прав.
Однако это в моем сознании осталось и "пропадание данных" было взято из реальной жизни из реального объекта, там было такое поведение - знаки вопросов. Тут нет.
41998
Далее...
Провел эксперимент (даю картинки). Когда в случае, если OPC пытается опросить 6 переменных, а на деле их нет (убрал), то все остальные тэги становятся BAD, причем в связанном подчиненном устройстве прекращается запись и данные обнуляются.
Считаю что это не хорошо, так как если Вы работаете на крупном и ответственном объекте, как всегда в России, если техническое задание рождается по принципу "а вот добавьте мне тут это", то вероятность допущения ошибки будет высокая, влечет к потере данных от объекта на какое-то время. Пока все не восстановите.
Да, мне понятно, что если действовать по последовательности подумал-скорректировал интерфейс ПЛК, далее скорректировал интерфейс OPC, далее скорректировал привязки к Мастерскаде - потери будут меньшими.
Они бы были еще меньше, если бы Мастер ОПС продолжал бы опрос существующих по привязкам тэгов.
4199942000420014200242003

Хотя бы на аргументах объясните зачем так сделано?
Ведь можно так не делать.
Или проще так рубануть и все?

Aso, прав. Если мы пишем драйвер к устройству, например из ПЛК по портам и какие-то регистры у устройств заблокированы или отсутствуют, то и все устройство неисправно. Но это касаемо аппаратных связей между железом. Это меняется один раз в жизни при конфигурировании, все остальное время служит.

Здесь то другое немного. Софтовый сервис от ПК и для ПК. Можно все сделать в разы гибче.
Вообще мне показалось что наш диалог шел по пути "один похабный товарищ нас очерняет, а мы себя обелим".
Нет!!!
Вы хорошие ребята и я стараюсь дать Вам внятную и понятную обратную связь.

SCADAMaster
31.03.2019, 09:41
Наверно всё-таки сам Геббельс? Ну и сравнения!
"Бесславные ублюдки" Тарантино - очень рекомендую



Однако это в моем сознании осталось и "пропадание данных" было взято из реальной жизни из реального объекта, там было такое поведение - знаки вопросов. Тут нет.

Такое происходит если от ОРС сервера приходит признак качества Uncertain (Не определено) и это правильно - раз значение не определено, то и демонстрировать его не зачем. Но в 3.10 мы сделали это поведение настраиваемым.



Провел эксперимент (даю картинки). Когда в случае, если OPC пытается опросить 6 переменных, а на деле их нет (убрал), то все остальные тэги становятся BAD, причем в связанном подчиненном устройстве прекращается запись и данные обнуляются.

А знаете почему?
Посмотрите на лог запросов в устройстве ОРС, вы увидите что устройство на подобные запросы возвращает код ошибки (0x93). На что ОРС сервер пытается еще 3 раза опросить это устройство, в надежде все же получить так нужные ему данные.
Допустим мы бы проигнорировали эту ситуацию, и выдавали бы у тегов хороший признак. К чему бы это привело? Во первых - снижение скорости опроса, во-вторых, абсолютно непонятная ситуация - вроде бы как связь есть, но в тот же момент ее и нет. Ну и в третьих, самое плохое, существует вероятность что подобная ошибка будет пропущена и этот не опрашиваемый тег вылезет в какой нибудь не подходящий момент (когда пуско-наладка уже закончится).
Наша позиция - ошибочных тегов в конфигурации быть не должно, нужно сразу диагностировать эту проблему (чему выставление плохого признака способствует) и зачистить ее. Для этого мы даже выпустили специальную инструкцию (пункт 5В)
https://insat.ru/products/chasto-zadavaemye-vopros-po-modbus-opc.php?clear_cache=Y

И кстати в Multi-Protocol в ряде драйверов (Profinet, IEC-104) есть отдельный выход наличия связи, вот в таком случае как бы с ним нужно было поступить? Связь есть? Вроде бы как и есть, но часть то тегов не опрошена, поэтому выходит что связи нет. Получается какой-то "тег Шредингера". А так все четно и ясно - если хотя бы часть данных не пришла, то весь пакет данных не достоверен и обрабатывать его нужно как недостоверный.



Считаю что это не хорошо, так как если Вы работаете на крупном и ответственном объекте, как всегда в России, если техническое задание рождается по принципу "а вот добавьте мне тут это", то вероятность допущения ошибки будет высокая, влечет к потере данных от объекта на какое-то время. Пока все не восстановите.

И в чем проблема? Добавил тег, запустил сервер (а мы рекомендуем всегда сначала проверять связь, и только потом переходить к скаде). Увидел что признаки все в BAD, проверил по логу что происходит, поправил - все. Тем более система логирования в нашем ОРС - превосходная.
На то она и пуско-наладка и предназначена чтобы ошибки обнаруживать и исправлять.

ASo
01.04.2019, 20:16
Подправьте работу в режиме конфигурации!
Через групповые изменения ввожу коэффициенты масштабирования. Изменяю, применяю. Проверил в конфигурации - изменились. Проверил при опросе из ОРС - применились. При этом пункт сохранить не был активирован - обоснованно предположил, что сохранение произведено. Но этого не было, при закрытии настройки сбросились.

SCADAMaster
02.04.2019, 15:39
Проблема проявилась - мы ее исправим.
Пока что можете после данной операции сделать Сохранить как с таким же именем.

alss
12.04.2019, 04:54
Вопрос по OPC Server! Не работает WriteTagByRelativeName!
12-04-2019 09:20:06.543 Получить данные сигнализации:modbus TCP.device_monitor.сигнализация.Получить данные сигнализации >> stack traceback:
[C]: at 0x00642884
[C]: in function 'WriteTagByRelativeName'
[string "--[[(W)modbus TCP.device_monitor.сигнализация..."]:53: in function <[string "--[[(W)modbus TCP.device_monitor.сигнализация..."]:8>
12-04-2019 09:20:06.543 modbus TCP.device_monitor.сигнализация.Получить данные сигнализации:Команда выполнена без ошибок

SCADAMaster
12.04.2019, 08:46
Проверяйте - значит что-то не то прописали. Имя некорректное (нужен короткий путь) или тега не существует. Посмотрите справку к данной функции

Kostya Egorov
05.06.2019, 05:55
Здравствуйте!
Задача следующая необходимо опросить ТРМ 132 м, а именно тег Режим работы (Адрес{166...173}, тип string). Остальные теги опрашиваются корректно.
Опрос проходит нормально качество GOOD, но вместо показания НАГРЕВ ГВС приходит АНРГВЕГ СВ.
Побывал различные чередования вообще нечего не меняется.
Есть какой нибудь способ решения проблемы заранее спасибо!!!

подскажите какой функцией это возможно сделать!

SCADAMaster
05.06.2019, 09:25
У нас механизм перестановки байт позволяет поменять местами 8 байт, а строка в Modbus может быть вплоть до 250 символов - и как ее переставлять?
Можно решить задачу с помощью скриптов - запрашивать строку, а затем менять в ней чередование как вам надо.

melky
05.06.2019, 09:55
По записи видно что перестановка по два символа строго идет. Вообще странно для строк....

SCADAMaster
05.06.2019, 10:11
Это ОВЕН так передает. Вообще положено передавать в том виде в каком идет строка

Kostya Egorov
05.06.2019, 23:16
У нас механизм перестановки байт позволяет поменять местами 8 байт, а строка в Modbus может быть вплоть до 250 символов - и как ее переставлять?
Можно решить задачу с помощью скриптов - запрашивать строку, а затем менять в ней чередование как вам надо.

какой функцией это делать. опыта маловато(

Kostya Egorov
05.06.2019, 23:17
Или это можно сделать средствами MasterSCADA?

SCADAMaster
06.06.2019, 10:43
Пример в приложении.
Он меняет строки в обратном порядке (на самом деле это можно сделать проще, но вам нужно не просто в обратном порядке).
Меняется здесь:
local StNew=StArray[6]..StArray[5]..StArray[4]..StArray[3]..StArray[2]..StArray[1];

VladGC
11.07.2019, 14:41
Подскажите пожалуйста, извлечение бита выполняется за один запрос?
Адрес один, извлекаю 10 бит, это 10 запросов для извлечения каждого или сервер видит что 10 одинаковых адресов один раз опрашивает и затем уже извлекает?

SCADAMaster
11.07.2019, 15:30
В ОРС сервере? За один запрос.

M14
11.07.2019, 18:55
Подскажите, пожалуйста, с настройкой ODBC для соединения с MS Access. Согласно HELP для настройки ODBC на OPC сервере, необходимо конфигурировать с помощью 32-битной версии драйвера/драйверов. Но эти версии драйверов в Windows не работают с современными версиями файлов типа accdb, xlsx. С современными версиями файлов типа accdb работают только 64-битные версии драйверов.
Как можно или наиболее предпочтительно выполнять соединение с файлом Access в версии *.accdb?

SCADAMaster
11.07.2019, 19:28
OPC работает только с 32 битными драйверами (так как приложение 32-битное).
Если ПО не имеет таких драйверов - значит подключить не получится.
Лучше поискать решения по подключению ODBC данной базы в интернете.

krollcbas
21.07.2019, 03:10
Продукт (Мастерскада 3.10 + Универсал Мастер ОПС) купил неделю тому назад 15 июля 2019года.
Заметил следующее при экспорт/импорте Универсал Мастер ОПС слетает или не наследуется одна из настроек тэгов.
"Использовать перестановку байтов устройства"
Выставил к программе, далее нажал на экспорт, далее поработал в экселе и все вернул в программу.
Обеспечен ручной монотонный труд.
Несмотря на то, что в таблице CSV все верно указано при импорте переходит к дефолту.

SCADAMaster
22.07.2019, 09:10
Вы в Excel меняете чередование байт? Зачем?
Оставляйте настройки тегов по умолчанию, и меняйте настройки на уровне устройства.
Чтобы выставить нужно чередование или включить наследование от устройства - используйте групповые операции, в них есть такая функция.

krollcbas
22.07.2019, 11:56
Затем, что мне в экселе это сделать одно движение, а в Мастер ОПС - 500 (не нашел групповых операций).
Да и ошибки при ручном вводе никто не отменял.
Вы смотрю так довольно часто так отвечаете, "незачем вам это, делайте так-то".
Ребят, ну доработать функцию импорта/экспорта и продукт станет более взрослым.

Делаю один тэг, выгоняю в эксель. Далее в экселе добавляю по аналогии 499 и возвращаю.
Это в принципе работает и сейчас.
Однако - признак этот ставит по умолчанию. Это скверно. Уверен что не большой труд по коду это исправить.
Будет полезно

SCADAMaster
22.07.2019, 12:22
Затем, что мне в экселе это сделать одно движение, а в Мастер ОПС - 500.

Какие 500? У вас что у всех пятиста тегов разное чередование байт?
Не может такого быть. Максимум что будет - это разное чередование байт у 2 байтовых и 4-байтовых чисел.
Выставляете настройки на уровне устройства, а у тегов включаете наследование от устройства (если теги уже добавлены, можно быстро включить у всех тегов через групповые операции). Специально так в 4 версии сделали.

krollcbas
22.07.2019, 12:55
У меня, если быть точным 412 тэгов. Все к одному устройству. WORD мне не нужно переставлять, DWORD и REAL нужно.
Если это сделано специально, ну что тут скажешь. Мне бы было удобнее, если бы мне дали возможность избежать монотонного ручного труда.
Как выставил в экселе, так и должно наследовать (ИМХО). Просто иначе Вы придумываете правила, а пользователи их обходят. Для чего могут быть полезны эти танцы?
43705
Это сам файл проекта:
https://yadi.sk/d/vwV-AKQ2fs8WlA

Заинтересован в том, чтоб продукт Ваш становился удобнее, гибче

SCADAMaster
22.07.2019, 13:13
Если это сделано специально, ну что тут скажешь. Мне бы было удобнее, если бы мне дали возможность избежать монотонного ручного труда.
Как выставил в экселе, так и должно наследовать (ИМХО). Просто иначе Вы придумываете правила, а пользователи их обходят. Для чего могут быть полезны эти танцы?

Судя по всему ваше жизненное кредо "простых путей мы не ищем".
Посмотрите видео по ссылке
https://yadi.sk/d/bV8YVPGmuNiJBw

Rake Runner
23.07.2019, 08:57
Поясните, пожалуйста, про MQTT.

Тут написано, что он доступен в безлимитной версии Modbus Master Universal MasterOPC Server:
https://insat.ru/prices/info.php?pid=49684

Чем тогда отличается вот этот сервер, который стоит в 3 раза дороже:
https://insat.ru/prices/info.php?pid=68334

В списке поддерживаемых плагинов для Multi-Protocol MasterOPC Server не нахожу MQTT, но в триальной версии он там есть. Можно ли его лицензировать для этого сервера?
https://insat.ru/products/?category=400

SCADAMaster
23.07.2019, 11:42
Поясните, пожалуйста, про MQTT.

Тут написано, что он доступен в безлимитной версии Modbus Master Universal MasterOPC Server:
https://insat.ru/prices/info.php?pid=49684

Чем тогда отличается вот этот сервер, который стоит в 3 раза дороже:
https://insat.ru/prices/info.php?pid=68334

В списке поддерживаемых плагинов для Multi-Protocol MasterOPC Server не нахожу MQTT, но в триальной версии он там есть. Можно ли его лицензировать для этого сервера?
https://insat.ru/products/?category=400
В Modbus он входит в безлимитную версию, а в Multi-Protocol - опция
https://insat.ru/prices/info.php?pid=68334

Rake Runner
23.07.2019, 11:53
Спасибо, остался только один вопрос: в чем тогда преимущество IIOT MASTEROPC SERVER по сравнению с безлимитной версий Modbus и Multiptocol?
В чем его особенности?

SCADAMaster
23.07.2019, 12:43
Вы не поняли.
В Modbus - безлимитной версии достаточно. В Multi-Protocol нужна эта опция.

Rake Runner
23.07.2019, 12:51
Теперь понял, спасибо!

ryuraa
02.08.2019, 08:53
Добрый день
возможно ли вытянуть в Masterscada из MasterOPC Universal Modbus Server IP адрес Узла настройки TCP/IP
(у нас он меняется в ручную с обоих сторон, резервный канал не подходит связь отвратная, а в скаде удаленная перезагрузка модема и номера разные)

заранее спасибо

SCADAMaster
02.08.2019, 09:29
Сейчас такого механизма нет.
Можно как вариант, сделать тег типа Server_only - string и при смене IP записывать в него скриптов новое значение IP адреса.
Только зачем нужен IP адрес в скаде?

ryuraa
02.08.2019, 09:39
просто нужен признак ip 111,111,111,2 или 111,111,222,2 прописан

SCADAMaster
02.08.2019, 10:06
Пока что вариант - только через тег как мы описали в прошлом сообщении

ryuraa
02.08.2019, 10:10
спасибо за ответ

Ваган
05.08.2019, 16:55
Подскажите формат таблицы для импорта тегов из TIA Portal v15.1. Какие столбцы должны быть в файле. Сейчас TIA Portal много столбцов генерирует и нет возможности импорта.

SCADAMaster
05.08.2019, 17:06
Пример в приложении

SlavikP
27.08.2019, 09:22
Добрый день!
Есть Modbus устройство, которое выдает дискретные значения через Input Registers в int16, таким образом, что значение False выдает, как 1, а True, как 0.
Что мне надо сделать в мастерOPC, чтоб сконвертировать это представление в переменную bool, так , чтоб на выходе получить 1=false, a 0=true?
Чтото по всякому экспериментирую - никак не могу сделать такую инверсию.

SCADAMaster
27.08.2019, 18:41
А зачем?
Сделайте в скаде эту обработку.
В ОРС - если только скриптами.

SlavikP
28.08.2019, 00:40
А зачем?
Сделайте в скаде эту обработку.
В ОРС - если только скриптами.

А можно пример, как скриптом? Никогда скриптами не делал в OPC ничего, хоть посмотрю на степень загрузки компа.

SCADAMaster
28.08.2019, 15:55
Пример в приложении

SlavikP
29.08.2019, 09:24
Пример в приложении
Проверил. Или я чтото не понимаю, или одно из двух :)
Ожидалось, что OPC считает из устройства регистр и если значение int#0 то отдаст его в скаду, как bool#true, а если значение int#1, то отдаст в скаду, как bool#false.
Вместо этого имеем то, что имеем.

SCADAMaster
29.08.2019, 09:42
Пример в приложении

SlavikP
30.08.2019, 07:30
Спасибо огромное, этот вариант рабочий :)

Адлан
13.09.2019, 16:59
Здравствуйте!
Пытаюсь привязать к MasterSCADA вентустановку VTS. В карте регистров есть Coil, DiskreteInput, HoldingRegister и InputRegister. В ПЛК Овен, например, можно прочитать регистр, а потом разложить его на биты (другого опыта у меня нет). Можно ли то же самое сделать с Coil и DiskreteInput, И по каким адресам к ним надо обращаться ( если это можно, конечно)?

SCADAMaster
13.09.2019, 18:45
Coils разложить на биты нельзя - это уже бит.
DiscreteInput можно разложить.
По каким адресам обращаться - нужно смотреть в документации к прибору.

lenusan
16.12.2019, 12:32
Здравствуйте, SCADAMaster.
Подскажите пожалуйста как сделать так, чтобы если устройство в обрыве (т. е. приходит качество BAD) значения тэгов обнулялись??? Сейчас же если приходит качество BAD то в тэгах остаются последние значения и получается что в БД пишутся нормальные значения, хотя прибор в обрыве.

capzap
16.12.2019, 13:00
Здравствуйте, SCADAMaster.
Подскажите пожалуйста как сделать так, чтобы если устройство в обрыве (т. е. приходит качество BAD) значения тэгов обнулялись??? Сейчас же если приходит качество BAD то в тэгах остаются последние значения и получается что в БД пишутся нормальные значения, хотя прибор в обрыве.

такой ответ (https://owen.ru/forum/showthread.php?t=32311&p=320881&viewfull=1#post320881) не подходит?

lenusan
16.12.2019, 14:43
такой ответ (https://owen.ru/forum/showthread.php?t=32311&p=320881&viewfull=1#post320881) не подходит?

Т.е. никак?! )) В саппорте Скады ссылаются на OPC, в OPC ссылаются на Скаду)

SCADAMaster
16.12.2019, 14:55
OPC поддерживает Lua скрипты. Анализируйте качество переменных и в зависимости от качества проставляйте им нужные параметры.
Как работать с Lua описано в справке. Примеры скриптов можете посмотреть тут https://insat.ru/products/?category=2114

capzap
16.12.2019, 15:11
вообще не заметил каких либо проблем, по справке накидал пример и всё работает


TV,TQ,TS = server.ReadTag("Node.Device.Group.Tag") ;
if TQ == OPC_QUALITY_BAD then
server.WriteTag("Node.Device.Group.Tag",-1,TQ);
end
если пришел BAD меняет любое значение на -1

Bigcrash
16.01.2020, 15:25
Добрый день.
Подскажите, как передавать данные из OPC в Excel. Нашел скудную статью (http://portalnp.ru/wp-content/uploads/2013/08/13.05_Excel-OPC-client_Ed_31.pdf), но код не работает. Не все моменты там объяснены, что откуда берется. Может кто пример кинет, для любого тэга из симулятора. Спасибо.

krollcbas
16.01.2020, 15:34
Как то разбирался, сделал статью

(http://lapshinvr.ru/articals/opc-v-excel.html?sphrase_id=558527)Но нужно хорошо понимать зачем именно OPC?
Ведь если есть протокол Modbus то существует множество способов заполнить данные в эксель

Bigcrash
17.01.2020, 12:37
Cпасибо за статью. Но использование ПО, которое нужно перезагружать раз в час... Не подойдет.



Но нужно хорошо понимать зачем именно OPC?
У нас на самом деле не только ModBus, но его 90%. Хотел начать с него. И как я думал это тривиальная задача, как оказалось нет. Почему именно ОРС - да просто удобно, когда номенклатура различных контроллеров и прочих MB устройств исчисляется не одним десятком, использование Вашего способа не очень удобно и трудоемко. Охото получить стандартизованный тег независимо от устройства и дальше его обрабатывать.

melky
17.01.2020, 13:12
Bigcrash у вас везде ОРС ? может поставить рядышком ПК с другой Scada и все перегонять в любую БД ? А уж из БД в Exel думаю куда проще передавать получится...

Bigcrash
17.01.2020, 14:24
Bigcrash у вас везде ОРС ? может поставить рядышком ПК с другой Scada и все перегонять в любую БД ? А уж из БД в Exel думаю куда проще передавать получится...
Это у меня крайний вариант, если не получится по простому. Но ведь должно работать, есть же механизмы, неужели все с SQL/Access и т.п. тянут данные... Мой мир никогда уже не будет прежним :rolleyes:

krollcbas
17.01.2020, 17:54
Bigcrash (https://owen.ru/forum/member.php?u=80740), "неужели все с SQL/Access и т.п. тянут данные"

Нет. Вы скриптами должны формировать запись по изменению в SQL, а потом с этими свободными данными делайте то, что хотите

Алексей Дяченко
04.04.2020, 20:40
Здравствуйте! В АСУ ТП я новичек. Имеется прибор, который выдает уровень по двум адресам в стандарте IEEE754. Как мне его "перевести" в ОРС сервер, чтобы он выводил корректно уровень. Найденная мною информация по этому поводу не помогла, потому как я не силен в скриптах. Может, поможете?

SCADAMaster
05.04.2020, 09:58
IEEE754 это стандарт чисел с плавающей запятой - float и double.
Указываете тип данных Float у устройства и сервера - и все. Может потребоваться чередование.

Алексей Дяченко
10.04.2020, 06:38
Спасибо за ответ. О результатах отпишусь позже.

Алексей Дяченко
10.04.2020, 08:55
Спасибо еще раз. В регистре данных с четным адресом как раз то, что мне нужно. Меня смутила инструкция к прибору (Гамма-10 от "Альбатроса"), а именно-"Регистр данных с четным адресом содержит в старшем байте байт порядка и знака мантиссы параметра, а в младшем байте - старший байт мантиссы параметра. Регистр данных с нечетным адресом содержит в старшем байте байт средний байт мантиссы параметра и в младшем байте - младший байт мантиссы параметра."
Еще раз огромное спасибо!

Алексей Дяченко
10.04.2020, 08:56
Чередование не потребовалось.

za9c
12.06.2020, 13:13
Подскажите, как сделать так, что бы при выходе из режима исполнения Мастерскады_3 - MasterOPC Server продолжил свою работу!

SCADAMaster
12.06.2020, 13:51
Запускать его отдельно от скады.
В справке к ОРС есть раздел Режимы работы - посмотрите его.

Makc
18.09.2020, 10:33
Здравствуйте! Как на Lua в Modbus Universal MasterOPC Server создать массив размерностью 0-255 с типами переменных 4х байтовое целое? в старом visual basic тип называется integer:(Содержит 32-разрядные (4-байтовые) целые числа со знаком в диапазоне от -2 147 483 648 до 2 147 483 647)
как делать логические or, and с HEX числами?

например: bit.BitXor(CRC,F12A); - где CRC переменная, а F12A - число в 16тиричной системе

необходимо для подсчета контрольной суммы протокола опроса контроллеров mitsubishi A2 по ком порту

SCADAMaster
18.09.2020, 12:00
В Lua нет целых чисел, там есть тип number, который представляет собой double число.
Поэтому просто делайте table с обычными числами.
Для работы с битами, используйте функции раздела bit. Описание функций есть в справке.

Makc
18.09.2020, 13:04
А есть возможность записи чисел hex ? Как указать тип переменных масива?

SCADAMaster
18.09.2020, 13:24
Что подразумевается под записью? HEX числа у нас вводятся как 0xAB
Тип данных в LUA не указывается - у него динамическая типизация

Makc
19.09.2020, 09:46
Запись, т.е. присвоение числа переменной, записать в переменную.... это я имел ввиду. Т.е. local var1=0xB14C это и будет запись 16ти ричного числа в переменную? Спасибо

SCADAMaster
19.09.2020, 10:34
Да...........

Makc
19.09.2020, 11:04
51094 Я еще раз извиняюсь, можете подсказать почему не проходит компиляция?

SCADAMaster
19.09.2020, 11:04
Lua чувствителен к регистру. then и if нужно с маленькой писать.

Makc
19.09.2020, 11:07
Lua чувствителен к регистру. then и if нужно с маленькой писать.

Спасибо все сработало!!!! Инсат рулит!

Makc
19.09.2020, 13:36
А если тип данных не указывается, как тогда создать массив байт?

SCADAMaster
19.09.2020, 19:55
Создаете массив чисел. В чем именно проблема?
double число явно больше по размерности чем байт.

Makc
21.09.2020, 03:54
Создаете массив чисел. В чем именно проблема?
double число явно больше по размерности чем байт.

Так мне нужно массив байт на порт отправлять, а не массив 4х байтовых чисел :(

SCADAMaster
21.09.2020, 09:06
Посмотрите описание функции SendAndReciveDataByMask

Kit123
14.10.2020, 14:00
Подскажите пожалуйста не срабатывает патч для Windows XP. Версия Master OPC 5.0.4 Выполнено все по инструкции. При первой установке патч находит файл говорит что пропатчено, но ошибка при попытке запуска не уходит. Может нужно версию предыдущую установить попробовать? Но где ее взять?
Ps windows xp SP3

SCADAMaster
14.10.2020, 14:15
В ряде случае патч может уже и не работать.
Переходите на более новые ОС.

Kit123
14.10.2020, 14:29
К сожалению это невозможно. т.к. на компе стоит intouch 9.5 с проектом, который выше XP не работает. Есть ли надежда что патч сработает с предыдущей версией?

SCADAMaster
14.10.2020, 14:40
Можете попробовать. Но старые версии мы не собираем.

Kit123
14.10.2020, 14:54
Может у кого-то из присутствующих сохранилась предыдущая версия? Напишите пожалуйста.

SCADAMaster
14.10.2020, 15:04
Вам нужна ключевая версия или на 32 тега?

Kit123
14.10.2020, 15:21
Нужна на 32 тэга

Kit123
15.10.2020, 11:45
На версии 4 патч работает.

oleg1821
10.02.2021, 11:02
Добрый день. Есть ли у вас пример получения значения из базы ms sql и формирования тега с этим значением?

SCADAMaster
10.02.2021, 12:51
В поставку ОРС входят два конфигурации с примерами Demo_ODBC и ODBCExample
Первый пример - получение текущих данных.
https://insat.ru/blog/odbc-klient-novaya-funktsionalnost-masteropc/
а также в справке к скриптам.

oleg1821
12.02.2021, 05:33
--Attention please
--This script works in unlimited and trial versions only
--initialize
function OnInit()
host = "energy1"
login ="ecl_admin"
password = "q1w2"
env = odbc.env_create();
CONN,s = odbc.env_connect(env,host,login,password);
if(CONN==nil) then
server.Message(s);
end

end
-- deinitialize
function OnClose()
odbc.conn_close(CONN);
odbc.env_close(env);
end
-- handling
function OnBeforeReading()
cur,s = odbc.conn_execute(CONN,"SELECT name from people_2");
if cur==nil then --если запрос не удалось выполнить
server.Message("s"); --вывод сообщения с ошибкой
end
server.WriteTagByRelativeName("Name",cur,OPC_QUALITY_GOOD);

end;

-- handling
function OnAfterReading()

end

Не работает.
12-02-2021 07:31:49.371 script:stack traceback:
[C]: at 0x00449b20
[C]: in function 'WriteTagByRelativeName'
[string "--[[(I)SCRIPT.script]]--Attention please..."]:26: in function <[string "--[[(I)SCRIPT.script]]--Attention please..."]:21>

SCADAMaster
12.02.2021, 09:32
Что-то не так в WriteTagByRelativeName. Есть ли тег Name в данном устройстве?

oleg1821
12.02.2021, 10:29
Переименовал тег в Name_3 тот же результат.

SCADAMaster
12.02.2021, 11:49
Пришлите лог обмена с устройством.*Для этого в свойствах сервера включите запись журнала и всех его событий размер лога задайте равным 10000. Начиная с версии 4.2.24 у каждого устройства добавлена настройка "Журнал" - включите запись у проблемного устройства, и также включите запись всех действий.*Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:c:\ProgramData\InSAT\MasterOPC*Universal*Mod bus*Server\SERVERLOGS\
Лог заархивируйте и вышлите нам, также пришлите вашу конфигурацию ОРС сервера.

Вообще рекомендуется делать отдельный узел типа Program для работы с ODBC и весь код размещать там (обращаться к тегам через server.ReadTag). Иначе при проблемах с базой данных (отсутствием связи) будет тормозить весь поток опроса устройства

Andrei1401
15.02.2021, 09:35
Здравствуйте. Сталкнулся с такой проблемой. Перенес ОРС server на новую машину с Wndows 10 и теперь он перестал опрашивать теги. К самому контроллеру пишет что подключился, а вот сами теги не хочет опрашивать. Подскажите можно ли решить данную проблему?

SCADAMaster
15.02.2021, 12:42
Здравствуйте. Сталкнулся с такой проблемой. Перенес ОРС server на новую машину с Wndows 10 и теперь он перестал опрашивать теги. К самому контроллеру пишет что подключился, а вот сами теги не хочет опрашивать. Подскажите можно ли решить данную проблему?
Смотрите что происходит в логах обмена в данный момент.

oleg1821
17.02.2021, 08:10
разобрался. Работает на демо версии 64 бита.
У нас opc сервер на 32 бита 2500 точек, а windows 64 бита, будет ли работать скрипт в этом случае?

SCADAMaster
17.02.2021, 17:31
Да, будет.

oleg1821
17.02.2021, 19:03
Спасибо, попробую.

oleg1821
18.02.2021, 09:56
Добрый день,
Как извлечь в masterscada метку времени из тега и признак качества?

oleg1821
24.02.2021, 10:01
Да, будет.
Добрый день, в безлимитной демо версии OPC работает, а на рабочей на 2500 точек 32 бита нет. Сообщение об ошибке
24-02-2021 11:11:51.088 Q_GVS_Tekon:SCRIPT.Mira39.Q_GVS_Tekon >> [string "--[[(R)SCRIPT.Mira39.Q_GVS_Tekon]]-- Initiali..."]:6: attempt to index global 'odbc' (a nil value)

-- Initialization
function OnInit()
host = "energy1"
login ="ecl_admin"
password = "q1w2"
env = odbc.env_create();
CONN,s = odbc.env_connect(env,host,login,password);
if(CONN==nil) then
server.Message(s);
end
end

SCADAMaster
24.02.2021, 10:25
Про какой ОРС сервер идет речь?
Если вы работаете с ODBC, то в Modbus UNiversal данный функционал доступен в версиях от 10 тысяч тегов, в Multi-Protocol если приобретен плагин User Script также от 10 тысяч точек.

SCADAMaster
24.02.2021, 10:26
Добрый день,
Как извлечь в masterscada метку времени из тега и признак качества?
Можно использовать модуль Расчет - у него функция OPCQuality и TimeStamp
Описание функций есть в справке

slim57
07.06.2021, 17:17
Добрый день!
Подскажите, как в OPC сервере получить данные из устройства по протоколу ASCII.
При условии, что через терминал данные выводятся командой "%001".
55477
Спасибо!

SCADAMaster
07.06.2021, 19:22
Он постоянно выдает в порт данные, или же нужно делать запрос чтобы их получить?

slim57
07.06.2021, 21:33
Нет, только по запросу. Запрос "%001" такого типа.

SCADAMaster
08.06.2021, 09:23
У нас на сайте есть документация по разработке протоколов:
https://insat.ru/products/?category=2111
Посмотрите ее.

Александер2008
09.06.2021, 16:41
Добрый день! раньше ОПС сервер сам запускался при запуске мастерскады, а теперь нет ОПС 64 бит modbus universal demo 5.0.10

SCADAMaster
09.06.2021, 17:12
Имеется ввиду сразу в режиме исполнения?
Нет, Демо версия (на 1 час) никогда сама не запускалась - это ее ограничение.

alexx751
21.07.2021, 12:32
Добрый день.
Возникла проблема.
Нужно отправить в прибор запрос с помощью SendAndReceiveDataByMask.
Имеется таблица Send.
Если указываешь в явно виде например Send[6]=0x15 (и остальные элементы таким же способом), то запрос уходит, ответ возвращается все ок.
Если же сделать через преобразование например десятичное 21 в hex получается просто 15 без приставки 0х, так не работает.
Все известные мне способы преобразовать через например string.format или tonumber не помогают. посоветуйте способ.

SCADAMaster
21.07.2021, 16:03
Если же сделать через преобразование например десятичное 21 в hex получается просто 15 без приставки 0х, так не работает.

Зачем это делать? Отправляйте число 21 и все.

alexx751
21.07.2021, 17:18
Уже так делал. Не работает.
На "лету" же не преобразуется? Маска для Send "byte" для всех символов.

alexx751
22.07.2021, 07:55
Заработало если просто отправить 21. Хотя точно помню что так делал. Где-то ошибка была у меня наверное.
Вопрос исчерпан.

za9c
01.09.2021, 11:18
Здравтвуйте! Поскажите пож-та.
Получаю время в timestamp!
server.Message(time.TimeStampToTime(time.TimeStamp Now()));
пишет число 1630483364305 (в миллесекундах как надо)
пишу
local TData = time.TimeStampToTime(time.TimeStampNow());
server.Message(TData);
получаю число 1630483364 (в секундах как не надо)

как получить TData в миллисекундах?? Спасибо!

SCADAMaster
01.09.2021, 13:48
Умножить на 1000 количество секунд.
Только зачем вам это?

za9c
01.09.2021, 14:10
Умножить на 1000 количество секунд.
Только зачем вам это?

Запись в БД.

допустим высокоскоростной процесс записать:
1630483364305
1630483364615
1630483364720
за секунду до 20 выборок
если на 1000 умножу не получу N выборок на секунду!

Просто интересовал вопрос почему когда пишу server.Message(time.TimeStampToTime(time.TimeStamp Now())); в консоле выводит правильно в миллисек!
а когда присваиваю переменной time.TimeStampToTime(time.TimeStamp Now()) выводит в сек!

za9c
01.09.2021, 16:12
Решил пока так!


function unpackTime(TData)

local year = string.sub(TData, 0, 4);
local month = string.sub(TData, 6, 7);
local day = string.sub(TData, 9, 10);
local hour = string.sub(TData, 12, 13);
local min = string.sub(TData, 15, 16);
local sec = string.sub(TData, 18, 19);
local ms = string.format("%.3f", string.sub(TData, string.len(TData)-3, string.len(TData)));

return {year=year, month=month, day=day, hour=hour, min=min, sec=sec}, ms;
end

local Data, QData, TData = server.ReadTag("Node1.Device1.Tag1");

local tabTime, ms = unpackTime(TData)
local timeMs = (os.time(tabTime) + ms)*1000;

server.Message("метка = ",timeMs);

Р.Александр
13.09.2021, 10:07
Добрый день. Вопрос, конечно, идиотский, но при подключении к MasterScada оборудования обнаружилось, что один из счетчиков СИ-8 не заменили на СИ-30. На SCADA универсальный МОДБАС ОРС на 500 тегов, протокола Овен, по которому работает СИ8, нет, ставить из-за одного счетчика еще один ОРС как то несерьезно. Кто нибудь выходил из такого положения ?
Счетчик заменят, но только после Нового года, работать нужно сейчас. Спрашиваю на всякий случай, так как временная альтернатива есть - поставить пока имеющийся в наличии модуль ввода со счетчиками, использовав один вход, но не будет индикации на месте.

Алексеев Савр
13.09.2021, 10:17
Добрый день. Вопрос, конечно, идиотский, но при подключении к MasterScada оборудования обнаружилось, что один из счетчиков СИ-8 не заменили на СИ-30. На SCADA универсальный МОДБАС ОРС на 500 тегов, протокола Овен, по которому работает СИ8, нет, ставить из-за одного счетчика еще один ОРС как то несерьезно. Кто нибудь выходил из такого положения ?
Счетчик заменят, но только после Нового года, работать нужно сейчас. Спрашиваю на всякий случай, так как временная альтернатива есть - поставить пока имеющийся в наличии модуль ввода со счетчиками, использовав один вход, но не будет индикации на месте.

Добрый день!
Можете временно использовать Owen OPC Server:
https://owen.ru/product/new_opc_server

Р.Александр
13.09.2021, 16:53
Да можно, конечно. Хотелось бы оставить один ОРС, но тогда нужно все теги снова связывать, а это много и долго. Но все таки придется вставлять сервер на один прибор. Все равно, спасибо за ответ.

Makc
28.10.2021, 07:57
Как выделить байт из 4х байтовой переменной, есть функция выделения байта у встроенного языка lua?

SCADAMaster
28.10.2021, 09:31
В разделе функций есть функции работы с битами.
Как выделить - зависит от того какой именно, младший, старший, средний. Делаете сдвиг вправо и маску 0xFF, либо только маску 0xFF если это младший байт

Makc
28.10.2021, 09:38
В разделе функций есть функции работы с битами.
Как выделить - зависит от того какой именно, младший, старший, средний. Делаете сдвиг вправо и маску 0xFF, либо только маску 0xFF если это младший байт

Подскажите а как сделать маску?

SCADAMaster
28.10.2021, 10:01
Маскированием битов называются обычный оператор Логическое И.
https://ru.wikipedia.org/wiki/Битовая_маска

Ильнур
23.11.2021, 14:40
Добрый день!
При экспорте тэгов, не экспортируется свойство "Использовать перестановку байтов устройства" в csv. Соответственно нет возможности поменять в excel и при импорте свойство "Использовать перестановку байтов устройства" принимает значение TRUE. Приходится вручную менять на fasle и выбирать перестановку байтов в значении. Возможно ли вообще поменять это свойство через excel при импорте?

Ильнур
23.11.2021, 16:14
Как у группы тэгов можно поменять свойство? В каждый тэг заходить и менять?

Ильнур
23.11.2021, 16:18
Как у группы тэгов можно поменять свойство? В каждый тэг заходить и менять?

Все разобрался

Ильнур
24.11.2021, 14:14
Добрый день!
Возник вопрос по передаче числа с 7 числами после запятой. Как лучше передавать такие переменные?
На данный момент округляет число. Тип переменной float.

SCADAMaster
24.11.2021, 14:29
В новых версиях ОРС сервера в корневом элементе ОРС есть настройка точности

Alexusaty
30.11.2021, 01:36
Здравствуйте. Помогите пожалуйста с моей проблемой.
Есть два устройства: Овен ТРМ200 и китайский мультиметр для трехфазной сети электропитания, измеряющий много показателей этой самой сети. Нужно собирать с них данные. Оба настроены на работу по протоколу Modbus RTU (с протоколом Овен не стал связываться пока). Так вот проблема в том, что будучи подключенными через usb свисток-преобразователь в RS-485 они замечательно работают с МастерОРС и данные передают. Даже без терминатора на том конце линии, а находятся они в соседнем помещении подключенные кабелем метров 10. Обычная витая пара ethernet.
Есть в наличии еще и преобразователь от Новатек-электро ET-485. Через него, создавая коммуникационный узел в ОРС типа ТСР/ІР и включая опцию Modbus over TCP оба прибора не отвечают. Выпадает "ошибка выполнения команды 3 превышение таймаута при опросе устройства". Если же выключить Modbus over TCP, то ТРМ200 опрашивается и отвечает (он дальний по топологии от преобразователя), а мультиметр (он ближе) так же не отвечает.
Я понимаю что самый логичный ответ это перенаправить меня к производителю преобразователя. Я с ними уже пытаюсь найти контакты. Но на их сайте все как-то грустно. Форума и обратной связи нет. Пишу им письма и пока в ответ - тишина. Может быть кто-то сталкивался с подобной проблемой?

SCADAMaster
30.11.2021, 09:29
С такими устройствами работа всегда идет в режиме "Modbus поверх TCP".
Что касается проблемы, тот она полностью на стороне железа - ОРС посылает запрос и ждет ответ.
Для начала можно попробовать оставлять по одному устройству на линии. Проверить что каждое устройство отвечает когда оно одно на линии

Alexusaty
30.11.2021, 11:58
Спасибо, разобрался. Дело было в прошивке ЕТ-485. Обновил прошивку и все поехало. Правда в режиме Modbus over TCP - false. Мне не совсем понятно почему так, но работает и пусть себе работает.

ЗЫ: Специально еще раз перепроверил. При Modbus over TCP - true не работает. Устройства не отвечают. При Modbus over TCP - false все устройства отвечают. Склоняюсь все же к мысли, что проблема в особенностях прошивки конвертера от Новатек-Электро.

Еще раз спасибо за ответ.

SCADAMaster
30.11.2021, 13:55
Значит у вас конвертер из Modbus TCP в Modbus RTU

Ильнур
01.12.2021, 16:39
Добрый день!
Возник вопрос по передаче между ПЛК и MasterOPC. При передачи значений REAL, почему то совпадают цифры до запятой и 3 цифры после запятой (например на ПЛК записываю число 45,4987 в OPC получается 45,49869919)
Почему такое может происходить?

SCADAMaster
01.12.2021, 19:37
Это особенность работы плавающих чисел на компьютере. С этим ничего сделать нельзя.

Ильнур
03.12.2021, 17:33
Возможно ли в Masterscada создать сообщения с привязкой к биту? Обязательно создавать элемент Событие для сообщения?

SCADAMaster
03.12.2021, 18:47
Или через событие или через ФБ "Скрипт C#"

Ильнур
06.12.2021, 17:27
Добрый день!
При открытии окна не опрашиваются переменные, у которых опрос по изменению. Т.е. на мнемосхеме есть элемент "Поля выбора", которая привязана к переменной с восстановлением при рестарте. При новой загрузке проекта, галочки пропадают, хотя переменная имеет значение ИСТИНА. Какую настройку я пропустил?

SCADAMaster
06.12.2021, 19:36
Нужно закольцевать - выход динамизации и вход динамизации завязать на одну и ту же команду

Alexusaty
08.12.2021, 23:16
Подскажите пожалуйста такой момент. Скачал бесплатный MasterOPC Universal Modbus Server Demo Build 5.0.14 с ограничением в 32 тэга и Master scada 3.12.0.21813 3.12(RT32ReleaseMax)_21_03_24_21_01.
Создал opc сервер данные, приходящие с датчиков, в нем видны. Использовано тэгов - 30.
В мастерскада создаю проект. В окне Система создан Компьютер1, в нем opc сервер. Все переменные импортировал. В окне объектов у корневого объекта четыре дочерние и в каждом несколько значений. Связал переменные OPC сервера со значениями объектов. Создал мнемосхему, на которой разместил 28 стрелочных индикатора и четыре текстовых. Создал параметры и шкалы и присвоил их перменным.
Запускаю проект в дереве системы вижу значения переменных, импортированных из OPC. На мнемосхеме все шкалы и текстовые значения перечеркнуты красным крестом и в журнале сообщений куча строчек с ошибкой "Использование мнемосхем других компьютеров недоступно в данной версии".
Все делал согласно видео на канале. Конкретно: Пример работы со SCADA-системой MasterSCADA. Часть 1. Вот сслыка: https://www.youtube.com/watch?v=4jTdZ6u8Nx4

Вопрос: из-за чего ошибка и что я сделал неправильно? Нигде в описаниях об ограничениях на использование мнемосхем в бесплатных версиях не встречал.
Архивы с конфигурацией OPC и проектом MasterScada в приложении.

LordMazy
09.12.2021, 05:01
что я сделал неправильно? В дереве объектов: объект - общие - компьютер, в выпадающей вкладке, выбери "компьютер 1" :cool:

Ильнур
16.12.2021, 16:37
Добрый день!
Возможно ли как-то через файл сделать привязки? Иногда приходится группы изменять и привязки слетают.

SCADAMaster
16.12.2021, 18:07
Не понятен вопрос. Опишите задачу подробнее

Ильнур
17.12.2021, 09:05
Не понятен вопрос. Опишите задачу подробнее

В процессе разработки верхнего уровня, добавляются новые переменные в OPC и MasterScada. Соответственно могут быть перегруппировки или переназначение адресов в OPC. Когда пытаешься добавить уже добавленную переменную в OPC в SCADA (например переменная была в одной группе, потом переместили в другую группу), то привязка слетает т.е. необходимо заново привязывать. Возможно ли как то автоматизировать создание привязки (например где то сначала прописать в каком-нибудь файле или отредактировать, сохранить, а потом просто этот файл подгружать)?

SCADAMaster
17.12.2021, 10:58
Вы можете включить сервис внешних связей у объекта, делаете экспорт, правите в Excel, делаете импорт

Makc
11.01.2022, 11:06
Здравствуйте!
Где можно взять полную документацию на использование ODBC-клиента который поддерживается в insat modbus server , а так же в multiprotocol opc server?

SCADAMaster
11.01.2022, 12:02
Посмотрите статью:
https://insat.ru/blog/odbc-klient-novaya-funktsionalnost-masteropc/
В поставку сервера входят две конфигурации - ODBC_Example и Demo_ODBC.
Посмотрите их.
Также есть описание в справке к скриптам - в разделе Примеры и полезности

Makc
12.01.2022, 12:13
2022-01-12 16:11:18.230 SCRIPT.script:[string "--Attention please..."]:33: bad argument #3 to 'format' (no value)
Как это расшифровать?

melky
12.01.2022, 12:35
может что-то вроде string {"--Attention please..."}

Makc
12.01.2022, 12:54
может что-то вроде string {"--Attention please..."}
"Attention please" - это очень хорошо. но отладкчика нет встроенного.
Как я должен понять что ему не нравится? bad argument #3 to 'format' (no value)

melky
12.01.2022, 13:27
Makc ну у третьего аргумента отсутствует поле значение или что-то вроде того. Почему отсутствует? возможно синтаксис...
з.ы. чисто мое предположение ,я не знаю, как правильно в данном конкретном случае. Еще на 'format' ругается, опять же, почему? нет значения - нечего форматировать или надо что-то вроде string.Format( ну и ты ды что там положено)

SCADAMaster
12.01.2022, 13:39
Так что у вас в 33 строчке?
Судя по всему нет значения.

Makc
13.01.2022, 04:22
Так что у вас в 33 строчке?
Судя по всему нет значения.

33 строка выглядет так:
server.Message(string.format("Value", row.ValueKmp))

SCADAMaster
13.01.2022, 09:34
Так у вас в row.ValueKmp есть значение? Нужно проверить на nil перед записью.
Да и вообще строка какая то странная. Format применяют если нужно вывести значение в каком то виде, например число. Если просто хотите склеить две строки, то формат вам вообще не нужен, просто:
server.Message("Value", row.ValueKmp)
Посмотрите описание функции в справке

melky
13.01.2022, 09:46
server.Message(string.format("Value", row.ValueKmp)) - если не ошибаюсь, то должно быть что-то вроде

string.format("Value {0}", row.ValueKmp)

Думаю вся проблема в синтаксисе и правильности записи "формулы"

Makc
13.01.2022, 11:19
Разобрался с проблемой. Все заработало, данные из SQL получал, успешно записывал в тэг.

Скопировал код перенес на рабочий ОРС Multi-prtocol Master OPC Server.

Получаю ошибку:
13-01-2022 15:14:05.908 script:[string "--Attention please..."]:11: attempt to index global 'odbc' (a nil value)
Строка 11 : env = odbc.env_create();


:(

SCADAMaster
13.01.2022, 11:30
ODBC в Multi-Protocol работает только при покупке User Script на 10К точек:
https://insat.ru/products/?category=1274

Makc
13.01.2022, 11:44
ODBC в Multi-Protocol работает только при покупке User Script на 10К точек:
https://insat.ru/products/?category=1274

А в MasterOPC Universal ModBus версии 3.2.14 на 60к точек будет работать?

LordMazy
13.01.2022, 13:29
Как это расшифровать?
В функцию format передаются значения (аргументы), как минимум три, так вот третий аргумент не имеет значения/не передаётся вызывающим кодом... Вот и вся расшифровка. Как вызывается функция в программе?

SCADAMaster
13.01.2022, 14:02
А в MasterOPC Universal ModBus версии 3.2.14 на 60к точек будет работать?
Это старая версия - там еще не было ODBC.
Если обновите до актуальной версии - будет.

Alexusaty
06.02.2022, 00:34
Подскажите пожалуйста.

Поместил на мнемосхему тренд. Перетащил туда значения объектов. Как мне теперь открыть список источников данных для этого тренда чтобы их редактировать? Ну то есть добавить я могу перетаскиванием. А удалить как или связи изменить?