Если меняется признак качества, то на тренде он будет рисоваться пунктиром, а в контролах значение подчеркивается или заменяется знаками вопросам.
Если меняется признак качества, то на тренде он будет рисоваться пунктиром, а в контролах значение подчеркивается или заменяется знаками вопросам.
Спасибо. Все так.
Если вы выставите тип данных в устройстве Int32 (uint32), то так и будет.
Здравствуйте!
Можно ли собрать данные с нескольких реле ПР200 в один проект Master SCADA?
Да, используя Modbus Universal MasterOPC сервер.
Коллеги, добрый день!
Для целей тестирования проекта я пользовался старым ОРС-сервером на 32 точки, все работало. Сегодня пришел лицензионный ОРС-сервер (билд 4.2.14, номер ключа 30010561) - и ничего не работает. Я поставил свежие Core OPC-components - все равно не работает. У нас Windows 7. В прикреплении скриншот ОРС-сервера, на нем видно что он не шлет запросы в ПЛК. Также в прикреплении сама конфигурация сервера. Прошу помощи.
Добрый день.
Такая проблема.
при помощи 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
Помогите, отчего не работает?
Вложение 39711
вопрос следующего характера. Имеется считыватель который посылает данные как на фото. необходимо считать эти данные через ops. работает через RS485. задача принимать и отправлять в мастер скаду.
Посмотрите документацию:
https://insat.ru/products/Universal_...ver_API_UG.pdf
Коллеги, приветствую! Подскажите, пожалуйста, есть ли какая-то возможность сохранять значения переменных, введенных пользователем во время работы? Т.е. ОРС-сервер работает, оператор через СКАДА-систему вводит какие-то значения. Потом, например, компьютер перезагрузили, ОРС-сервер перезапустился, и ранее введенные значения вернулись на свои места. Если можно, буду признателен за подробное объяснение что и как для этого делать
Это в любом случае не задача ОРС сервера.
Как правило сохранение значений производится в приборе, иногда - самой скадой.
Понял, спасибо!
Коллеги, добрый вечер!
У нашего заказчика почему-то не всегда при запуске ОРС-сервера выполняется скрипт OnInit. Сервер лицензионный, на 500 точек. Компьютер, правда, старенький, WinXP SP3, но в остальном сервер работает. Что может мешать выполнению этого скрипта? На всякий случай - конфигурация в прикреплении.
Укажите путь к данному скрипту
Server->Программные->OnInit
Есть код на си для подсчета контрольной суммы
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
вот примерно что у меня получилось
Коллеги, добрый день!
Конечно, я понимаю что не очень корректно так делать, но прошу еще раз обратить внимание на посты #785-#787 текущей ветки форума. Хотелось бы получить ответ. А если я не правильно понял пост #786, то прошу разъяснить что значит "Укажите путь к данному скрипту"
Добрый вечер. Куплен новый пк, в связи с этим переношу opc server на него, возник вопрос по работе функции sleep.
Other.sleep(2000); на новом пк с той же ос(win7) вместо 2с, выполняется 32с, откуда могла появится задержка в 30с?
Понял, спасибо. Но дело в том, что там просто идет инициализация тэгов из узла "Программные", как Вы могли видеть. Так вот, периодически тэги не становятся в состояние False, как должно быть после выполнения скрипта, а остаются в состоянии EMPTY. Поэтому я пришел к выводу что скрипт не выполняется. Или могут быть другие причины для такого поведения тэгов?
Перенесите инициализацию тегjdа в сам тегb (см. скриншот).
У устройства скрипт выключите
И что это здесь написано:
bdat,qual=server.ReadCurrentTag();
if bdat==true then
val=1000;
else
val=0;
end
У вас тип тега - bool
Вы смотрите не тот скрипт. Я писал путь Server->Программные->Скрипт OnInit. Скриншот прилагаю
Именно на него мы и смотрели.
Выключит его. Инициалиацию сделайте как мы показали на скриншоте. Все будет работать.
Ну и ошибки в коде исправьте
Ни у кого нет кода расчета CRC modbas на Lia, который использует сам Modbus Universal MasterOPC Server?? Так как то что можно нарыть в интернете выдает совсем не то что должно быть
вся беда в том что у него как и у dcon после контрольной суммы идет стоповый байт, а CRC модбас
В справке:
Руководство по языку Lua 5.1 > Примеры и полезности > Примеры расчета контрольных сумм >CRC-CCITT
Вопрос был про OPC сервер - в нем скриптовый язык на Lua.
Спасибо за подсказку
Столкнулся с проблемой! Есть программа написанная на 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, размерность два байта
Точнее она не определяет ни одного значения
После запуска скрипта в 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 пустой.
Скрипт писался согласно примерам приведенным в Помощи к программе.
Пришлите лог обмена с устройством. Для этого в свойствах сервера включите запись журнала и всех его событий размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\ProgramData\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам, также пришлите вашу конфигурацию ОРС сервера.
Оправил Лог и картинку с настройками OPC сервера
Вложение 40989