Здравствуйте! Подскажите пожалуйста, есть ли возможность опрашивать тег не циклически а по команде из скады однократно в нужный момент? или в зависимости от состояния другого тега?
Здравствуйте! Подскажите пожалуйста, есть ли возможность опрашивать тег не циклически а по команде из скады однократно в нужный момент? или в зависимости от состояния другого тега?
Можно положить его в подустройство, установить у устройства период опроса 0, а затем используя скрипт - функцию server.PollCurrentSubDevice( ) вызывать его опрос.
Совсем не разбираюсь в Lua, но подозреваю что скрипт должен быть не сложным. Может быть напишите как это должно выглядеть?
Заранее спасибо!
Добавляете тег типа Server_Only. Включаете у него исполнение скрипта после чтения, в функции Read пишете:
function OnRead()
val=server.ReadCurrentTag();
if (val==true) then
server.PollCurrentSubDevice( );
end;
end
Только что скачал бесплатную версию сервера.
При установке выскакивает сообщение "Точка входа не найдена" и соответственно сервер не запускается. ОС - WinXP.
Вчем причина?
А вы какой ОРС сервер скачали - Modbus или Multi-Protocol?
Приложите скриншот ошибки.
К сожалению сейчас не могу приложить скриншот ошибки, на прилагаю скриншот места скачки.Вложение 20377
В приложении dll библиотека в архиве. Замените этой библиотекой ту что в папке
c:\Program Files\InSAT\MasterOPC Universal Modbus Server\
Спасибо заработало!!
Спасибо! Заработало!
Добрый день, скажите а есть возможность в ходе опроса изменять номер порта, скорость, данные?
Нет, в режиме исполнения так делать нельзя.
Добрый день.
MasterOPC Universal Modbus server.
Требуется настроить запись в Modbus RTU устройство функцией 06. Т.е. запрос должен быть вида : 02 06 "адрес регистра" "данные" "кс". Как ни крутил Holding Registers и другие параметры, ОРС шлёт запросы с функцией 0х10 и никак не удаётся отправить запрос с функцией 0х06.
Подскажите как решить эту проблему?
С чтением данных проблем пока нет. Командой 0х03 всё необходимое читается.
PS. Нашёл, что надо выбрать пункт "принудительная запись командой 06"
Можно еще на уровне устройства - настройка "Не использовать команду Write Single Register"
Добрый день.
Где-то месяца 4 назад установил Modbus Universal MasterOPC Server, наладил, все работает нормально, но примерно раз в месяц ОРС сервер зависает, по всем тэгам показывает бэды.
Перезапускаю его прямо не отключая основной программы и опять все работает. Оборудование которым управляет программа достаточно серьезное и поэтому чувствую себя не комфортно.
Раньше в комплексе с программой управления работал овеновский ОРС, таких сбоев не было. Может быть есть какие-то советы, буду признателен.
Скорее всего зависает СОМ порт.
Попробуйте в настройках устройств включить "Реинициализация узла при ошибке".
Если это не поможет, то можно будет делать перезапуск ОРС сервера средствами MasterSCADA.
Спасибо. Ваш совет выполню. Может быть подскажете сразу решение проблемы средствами MasterSCADA.
Спасибо.
В приложении пример такого скрипта с обвязкой - ОРС сервер опрашивается только когда нажата кнопка на мнемосхеме. Проект можно легко переделать - сделать чтобы процесс закрывался при нарушении признака качества например.
Имя OPC процесса ОРС сервера задается в коде скрипта.
После того процесс будет убит, спустя несколько секунд нужно выполнить переподключение к ОРС серверу (поле на вкладке "Опрос"), чтобы скада снова подписалась на изменения ОРС
Большое спасибо! Разбираюсь.
Добрый день! используем Master OPC universal modbus Подскажите пож-та!! принимаю последовательность - BF ED 58 60 13 66 0E 52 --ЧТО соответствует числу -0.917038!!! т.е если указать тип данных double -- должно само преобразовывать к читаемому виду!!! но на деле выдаёт совсем не то!!! что делать подскажите плз??
Правильное ли чередование байт вы задаете?
Для Double чисел обычно "Старшим двойным словом вперед".
а как поменять на уровне скрипта - допустим - прибор отвечает 52 0E 66 13 60 58 ED BF а нужно наоборот??
Какой функцией скрипта вы ведет опрос?
Приведите этот кусок кода.
local destmask={"byte","byte","byte","byte","byte","byte ","byte","byte",
"byte","byte","byte","byte","double:3:?????"}
local err,len;
local n=0;
err,dest,len=server.SendAndReceiveDataByMask(0,35, sendmask,send,destmask,200);
я должен принять 3 числа по 8 байт в формате double
Ну вот вам нужно в маске и указать чередование байт:
local destmask={"byte","byte","byte","byte","byte","byte ","byte","byte","byte","byte","byte","byte","doubl e:3:76543210"}
Возможно будет другое чередование - надо проверять, тогда чередование будет другое.
т.е я принимаю 12 байт всякого мусора ненужного и 3 числа в формате double по 8 байт каждое!! Так от прибора и приходит!!! как в маске перевернуть очерёдность байтов???
спасибо - пытался - не помогает! есть кусок рабочего кода конвертера 32бит в флоат!!! поможет ли переделка на 64 бита или OPC не поддерживает 64 бита!! делал так(например) - а=0x520E66136058EDBF после server.WriteCurrentTag(a,OPC_G_G) - выдаёт число - но только на 32 бита и усё - больше нельзя получается!!!!
Очередность байт?
Если у вас другая, пишите так например:
local destmask={"byte","byte","byte","byte","byte","byte ","byte","byte","byte","byte","byte","byte","doubl e:3:01234567"}
опс !!! Извините - пошли данные!!! "double:3:01234567" - помогло - странно - два дня комбинации перебирал - походу в отпуск пора!!!
Добрый день! Я правильно понимаю, что пункт настройки коммуникационного узла "Modbus поверх TCP" нужно использовать в случаях, если используется связь с ПЛК наподобие удаленных модемов с режимом прозрачной передачи данных. То есть по TCP устанавливается связь с удаленным оборудованием, коммуникационной оборудование (например GPRS-терминал) устанавливает режим прозрачной передачи данных с ПЛК и OPC уже опрашивает плк по modbus rtu/ascii?
Да, это для оборудования которое конвертирует Ethernet в COM - Moxa Port и подобные. GPRS модемы также можно сюда отнести.
Спасибо за информацию
не получается настроить opc-сервер на работу с ПР110 через пр-ми485, вот настройки: Вложение 22101 Вложение 22102
в настройках OPC видно МВ110 и ТРМ, они нормально опрашиваются.
Добрый день! Успешно по вашей документации читаю файлы вашим ОПС с ПЛК1хх. При том, что файлы создаю не штатным архиватором в конфигурации, а через библиотеку, но содержание в принципе выглядит аналогично, в скрипте практически ничего менять не пришлось. Теперь же пытаюсь считать файл с СПК1хх. Также создаю файл через библиотеку такого же содержания как и в ПЛК1хх. Для обмена с сервером использую библиотеку от ОВЕН modbusTCPslave. Данные передаются без проблем, но как передать файл не могу понять. Данная библиотека поддерживает передачу файлов, и что самое интересное, когда у меня был неправильно в конце строки сформирован разделитель (перепутал местами /R и /N) скрипт об этом сообщил. То есть по идее ОПС видит файл, и при этом, когда он к нему обращается, на выходе блока видно, что файл становится занят. Но при этом в ОПС висит статус COMM_FAILURE и данных нет. Видимо, что-то я не правильно делаю, но что? Может что-то в скрипте изменить нужно?
Может быть и нужно.
Сначала нужно посмотреть что происходить в логе обмена - есть ли ответы от контроллера.
Снял лог, вроде как от контроллера какой то ответ есть:
Скрытый текст:
В последнем варианте, который пробовал, уже под файл выделил отдельный блок
Вложение 22263
Сначала файл заводил в тот же блок, что и буфер с данными