В ряде случае патч может уже и не работать.
Переходите на более новые ОС.
В ряде случае патч может уже и не работать.
Переходите на более новые ОС.
К сожалению это невозможно. т.к. на компе стоит intouch 9.5 с проектом, который выше XP не работает. Есть ли надежда что патч сработает с предыдущей версией?
Можете попробовать. Но старые версии мы не собираем.
Может у кого-то из присутствующих сохранилась предыдущая версия? Напишите пожалуйста.
Вам нужна ключевая версия или на 32 тега?
Нужна на 32 тэга
На версии 4 патч работает.
Добрый день. Есть ли у вас пример получения значения из базы ms sql и формирования тега с этим значением?
В поставку ОРС входят два конфигурации с примерами Demo_ODBC и ODBCExample
Первый пример - получение текущих данных.
https://insat.ru/blog/odbc-klient-no...ost-masteropc/
а также в справке к скриптам.
--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_QUALI TY_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>
Что-то не так в WriteTagByRelativeName. Есть ли тег Name в данном устройстве?
Переименовал тег в Name_3 тот же результат.
Пришлите лог обмена с устройством.*Для этого в свойствах сервера включите запись журнала и всех его событий размер лога задайте равным 10000. Начиная с версии 4.2.24 у каждого устройства добавлена настройка "Журнал" - включите запись у проблемного устройства, и также включите запись всех действий.*Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:c:\ProgramData\InSAT\MasterOPC*Universal*Mod bus*Server\SERVERLOGS\
Лог заархивируйте и вышлите нам, также пришлите вашу конфигурацию ОРС сервера.
Вообще рекомендуется делать отдельный узел типа Program для работы с ODBC и весь код размещать там (обращаться к тегам через server.ReadTag). Иначе при проблемах с базой данных (отсутствием связи) будет тормозить весь поток опроса устройства
Здравствуйте. Сталкнулся с такой проблемой. Перенес ОРС server на новую машину с Wndows 10 и теперь он перестал опрашивать теги. К самому контроллеру пишет что подключился, а вот сами теги не хочет опрашивать. Подскажите можно ли решить данную проблему?
разобрался. Работает на демо версии 64 бита.
У нас opc сервер на 32 бита 2500 точек, а windows 64 бита, будет ли работать скрипт в этом случае?
Да, будет.
Спасибо, попробую.
Добрый день,
Как извлечь в masterscada метку времени из тега и признак качества?
Добрый день, в безлимитной демо версии 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
Про какой ОРС сервер идет речь?
Если вы работаете с ODBC, то в Modbus UNiversal данный функционал доступен в версиях от 10 тысяч тегов, в Multi-Protocol если приобретен плагин User Script также от 10 тысяч точек.
Добрый день!
Подскажите, как в OPC сервере получить данные из устройства по протоколу ASCII.
При условии, что через терминал данные выводятся командой "%001".
Вложение 55477
Спасибо!
Он постоянно выдает в порт данные, или же нужно делать запрос чтобы их получить?
Нет, только по запросу. Запрос "%001" такого типа.
У нас на сайте есть документация по разработке протоколов:
https://insat.ru/products/?category=2111
Посмотрите ее.
Добрый день! раньше ОПС сервер сам запускался при запуске мастерскады, а теперь нет ОПС 64 бит modbus universal demo 5.0.10
Имеется ввиду сразу в режиме исполнения?
Нет, Демо версия (на 1 час) никогда сама не запускалась - это ее ограничение.
Добрый день.
Возникла проблема.
Нужно отправить в прибор запрос с помощью SendAndReceiveDataByMask.
Имеется таблица Send.
Если указываешь в явно виде например Send[6]=0x15 (и остальные элементы таким же способом), то запрос уходит, ответ возвращается все ок.
Если же сделать через преобразование например десятичное 21 в hex получается просто 15 без приставки 0х, так не работает.
Все известные мне способы преобразовать через например string.format или tonumber не помогают. посоветуйте способ.
Уже так делал. Не работает.
На "лету" же не преобразуется? Маска для Send "byte" для всех символов.
Заработало если просто отправить 21. Хотя точно помню что так делал. Где-то ошибка была у меня наверное.
Вопрос исчерпан.
Здравтвуйте! Поскажите пож-та.
Получаю время в timestamp!
server.Message(time.TimeStampToTime(time.TimeStamp Now()));
пишет число 1630483364305 (в миллесекундах как надо)
пишу
local TData = time.TimeStampToTime(time.TimeStampNow());
server.Message(TData);
получаю число 1630483364 (в секундах как не надо)
как получить TData в миллисекундах?? Спасибо!
Умножить на 1000 количество секунд.
Только зачем вам это?
Запись в БД.
допустим высокоскоростной процесс записать:
1630483364305
1630483364615
1630483364720
за секунду до 20 выборок
если на 1000 умножу не получу N выборок на секунду!
Просто интересовал вопрос почему когда пишу server.Message(time.TimeStampToTime(time.TimeStamp Now())); в консоле выводит правильно в миллисек!
а когда присваиваю переменной time.TimeStampToTime(time.TimeStamp Now()) выводит в сек!
Решил пока так!
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);
Добрый день. Вопрос, конечно, идиотский, но при подключении к MasterScada оборудования обнаружилось, что один из счетчиков СИ-8 не заменили на СИ-30. На SCADA универсальный МОДБАС ОРС на 500 тегов, протокола Овен, по которому работает СИ8, нет, ставить из-за одного счетчика еще один ОРС как то несерьезно. Кто нибудь выходил из такого положения ?
Счетчик заменят, но только после Нового года, работать нужно сейчас. Спрашиваю на всякий случай, так как временная альтернатива есть - поставить пока имеющийся в наличии модуль ввода со счетчиками, использовав один вход, но не будет индикации на месте.
Добрый день!
Можете временно использовать Owen OPC Server:
https://owen.ru/product/new_opc_server
Да можно, конечно. Хотелось бы оставить один ОРС, но тогда нужно все теги снова связывать, а это много и долго. Но все таки придется вставлять сервер на один прибор. Все равно, спасибо за ответ.
Как выделить байт из 4х байтовой переменной, есть функция выделения байта у встроенного языка lua?