50/50 - на многих не работает. Видимо зависит от свежести обновлений
50/50 - на многих не работает. Видимо зависит от свежести обновлений
Добрый день!
Подскажите, пожалуйста. При опросе MasterOPC (32 тега) модуля Seneca Z203-1 все переменные (то есть считанные из разных регистров) всегда принимают одинаковые значение: при int16 - 16191, при int32 - 1061109567, при float - 0,7... Связь с модулем есть, обмен есть, качество "ОК", но какой бы регистр я не прочитал всегда одно и тоже значение во всех. Остальные приборы работают нормально. В чём может быть причина? Перепробовал все возможные форматы данных, виды передачи битов - результат не меняется. Приложил скрин обмена и документацию на модуль. Спасибо.
Прибор так возвращает.
Попробуйте указать адрес на 40081, а просто 80. Тип данных - Float, чередование старшим словом вперед.
Спасибо большое! Помогло. Производитель модуля ответил тоже самое.
На всякий случай для последующих соискателей: из адреса, указанного в документации, нужно отнять 40001. Оставшаяся цифра и будет правильным адресом регистра. Например, вместо адреса 40095 нужно задавать 94. Тип данных указан в документации. Чередование битов принял заданное сервером по умолчанию.
Ответ производителя:
"Dear Sir, I think the problem is the address register you are trying to read.
For example if you want to read Voltage measure in Floaat swapped format (32 bit) you have to read the addresses 40081-40082; these are equivalent to Holding Registers 80-81 or 81-82 .
Note. When you indicate an Holding Register you have to substract an offset equal to 40000, for Base 1 Master (or equal to 40001 for Base 0 Master), to the address indicate in Z203 Modbus mapping.
if you want to read an Integer (16 bit ) Voltage you have to read the address 40095 that is equal to Holding Register 94 or 95."
Все описано здесь:
http://insat.ru/products/chasto-zada...?clear_cache=Y
Не могу удаленно найти OPC клиентом, Modbus Universal MasterOPC Server (установленный на вин2008сервер), с чем может быть связано? порты открыты.
В папке систем32 на вин2008 отсутствует OPCenum.exe,может быть связано с этим? на каком этапе учавствует OPCenum?
OPCEnum как раз используется при поиска ОРС сервера.
Нужно настраивать DCOM или использовать туннели.
Если используете MasterSCADA, то можно добавить ОРС сервер локально, а затем включить флаг "Удаленный ОРС сервер в режиме исполнения".
Т.е. если отсутствует OPCEnum на пк где стоит Modbus Universal MasterOPC Server я не найду его автоматически с удаленного ПК?
а где можно скачать OPCEnum?
Скачайте и установить OPC Core Components - в нем он есть.
После этого нужно будет настроить DCOM и для Enum и для Modbus OРС.
Инструкция по настройке прилагается к MasterSCADA:
c:\Program Files (x86)\InSAT\MasterSCADA\Doc\
Извините, а после установки Enum с ним никакой возни уже не будет? просто поставил, настроил DCOM для него и все должно заработать?
Да. Но настройка DCOM зачастую оказывается сложным действием
Вложение 29761
Добрый день! Прошу помощи в настройке светодиодного табло ELX.Sh060. Прикладываю фото из технической документации.
Хотелось бы подключить его к вашему OPC и потом уже к МастерСкаде.
Т.к. функции не стандартные, то пытаюсь отправить команду через скрипт
local send={0x01,0x06,0x00,0x02,0x00,0x0001};
local sendmask={"byte","byte","byte","byte","byte","byte "};
err, data1, data2, data3, data4=server.SendAndReceiveDataByMask(0,6,sendmask , send,nil,0);
Также пробовал такую команду
local send={0x01,0x10,0x00,0x01,0x00,0x02,0x04,0x00, 0x11, 0x00, 0x11};
local sendmask={"byte","byte","byte","byte","byte","byte ","byte","byte", "byte", "byte", "byte"};
Тег настроил как ServerOnly, тип данных int32, ReadWrite
Но в итоге даже не могу понять, устройство в сети или нет. Но команда уходит без ошибок (но она всегда уходит без ошибок, даже если выключить сеть)
В ОРС сервере посмотрите что происходит на вкладке "Запрос". Если уходящий запрос соответствует требованию документации, значит сделано все верно.
Если при этом устройство не отвечает, то нужно разбираться с ним - соединение, настройки и т.д. Возможна и ошибка в документации к прибору.
Здравствуйте.
Подскажите пожалуйста как в "Multi-Protocol MasterOPC" сервере реализовать свой протокол с использованием "User SCRIPT" плагина. На С++ все понятно (есть пдф-ка, и делая по ней все получилось), но нужно с использованием скриптов. На вашем сайте не смог найти документацию по этому вопросу.
Есть документация к Modbus Universal:
http://www.insat.ru/products/Univers...ver_API_UG.pdf
В Multi-Protocol все будет примерно тоже самое - там только нет функций из секции Modbus.
Спасибо за информацию.
Здравствуйте.
Подскажите, возможно ли настроить MasterOPC таким образом, чтобы данные с одного устройства передавать на другое?
(например тег Value 1 c PLC_1 передавать в тег Value 2 c PLC_2)
И если так можно делать, то где это настраивается в MasterOPC?
pic:
Через скрипты.
Функции ReadTag и WriteTag.
Добрый день!
Подскажите пожалуйста, как реализовать данную конструкцию:
возможно ли как то в скрипте реализовать такое?Код:1.2.8. Запись регистров для установки числовых переменных ПроТекст
Для изменения числовых переменных ПроТекст необходимо записать 4 регистра памяти с адресами, указанными в таблице 1.7.
Таблица 1.7 Адреса регистров для изменения числовых переменных ПроТекст.
Адрес регистра Размерность Тип данных Значение
0x2030 2 байта unsigned short Тип переменной ПроТекст
0x2031 2 байта unsigned short Номер переменной ПроТекст
0x2032 4 байта зависит от переменной Значение переменной
Запись значения из регистра в память ПроТекст-переменной производиться
по признаку записи данных по адресу 0х2032 при условии, что были записаны данные в регистры 0х2030 и 0х2031.
тип переменной к примеру в теле скрипта указать, а номер переменой = номеру тега...
Да, можно. С помощью функции SendAndReciveDataByMask.
Modbus Universal MasterOPC Server включен в работу (все нормально работает), но не видно обмена в поле "запросы".... как решить проблему?
А какой элемент выделяете? Попробуйте выделить узел.
При этом обмен идет? данные меняются?
Вы можете предоставить доступ к вашему компьютеру по TeamViewer?
Обмен идет, данные меняются, все работает, единственное не отображается обмен во вкладке "запросы". Предоставить доступ возможности к сожалению нет .
А на вкладке "Сообщения" что-то отображается?
Снимите тогда видео, для записи можно использовать
http://www.bbflashback.ru
Добрый день!
Подскажите, как реализовать следующее:
Необходимо из OPC-клиента включать реле в приборе. На каждое реле задействовать один тег в OPC сервере.
Использую скрипт для формирования команды на включение и выключение по нестандартному протоколу.
Делаю:
В устройстве устанавливаю период опроса 0 (включаю реле по команде из скада),
Тег - server-only, тип данных в сервере - bool, тип доступа - readwrite.
Как в скрипте перед записью определить команду от скады - true или false для
формирования соответствующих команд в прибор?
Функцией server.ReadCurrentTag - описание в справке
Спасибо, работает!
Добрый день! Подскажите как правильнее будет сделать. При наличии хотя бы одного тега с качеством BAD у устройства, изменялось значение тега. Необходимо функцией server.ReadTagByRelativeName опрашивать каждый тег ?
Либо так, либо функцией server.ReadTagByNumber( ).
Добрый день!
Не могу найти информацию, по тому, сколько можно подключить клиентов к ОПС-серверу.
Хочу попробовать такую схему:
Вложение 30738
Знаю, что правильнее было бы это реализовывать через OPC UA клиенты с помощью tunneler. Но интересует возможность такой работы по приведенной выше схемы
Количество клиентов подключаемых к ОРС серверу не ограничено.
Извиняюсь, на нашем форуме есть тема с вопросами по скриптам insat OPC? (не смог найти)
Отдельные темы с конкретными вопросами есть.
Видеопримеры по работе со скриптами тут:
http://insat.ru/products/?category=2114
Есть функции читающие количество тегов, а функции возвращающей false если хотя бы 1 тег имеет статус BAD?
Такой функции нет.
Добрый день !
Есть счётчик ПСЧ и пара модбас устройств , линия связи только одна.
Вариант1 - взять Modbus Universal MasterOPC Server реализовать протокол счётчика ПСЧ на скрипте.
А есть ещё варианты ?
вот есть Multi-Protocol MasterOPC Server с поддержкой драйвера счётчика ПСЧ, как-бы исхитриться и его задействовать...
[QUOTE=Николай НВ;246930]
Есть счётчик ПСЧ и пара модбас устройств , линия связи только одна.
Вариант1 - взять Modbus Universal MasterOPC Server реализовать протокол счётчика ПСЧ на скрипте.
А есть ещё варианты ?
/QUOTE]
Сделать две отдельных шины
Не получится. Когда добавляете порт он будет монопольно открыт одним драйвером, из того же скрипта в Multi-Protocol обратится не получится.
Описание объекта:
Есть прибор с стандартным протоколом Modbus + счетчик с модбасоподобным протоколом (для его опороса был написан скрипт).
Все это опрашивается через один GPRS модем.
После запуска OPC все работает отлично.
Спустя день (2 дня) происходит сбой скрипта опроса счетчика. При этом второй прибор опрашивается без проблем (прямые теги).
Перезапуск OPC сервера решает проблему. Но спустя день ошибка повторяется.
Реинициализация узла не помогает.
Как перезапустить скрипт при ошибке без перезапуска программы?
В скрипте в функции Get_Register() формируется запрос к счетчику, выполняется байтстаффинг массива запроса и отправляется в счетчик функцией server.SendAndReceiveDataByMask.
Функция server.SendAndReceiveDataByMask возвращает ответ, производится байтстаффинг, проверка контрольной суммы, обработка результата и передача требуемой переменной.
Скрипт работает, но после некоторого количества запросов прекращается получение данных от счетчика.
При запросе 1 раз в секунду скрипт выдавал ошибку примерно через 20 часов работы, при запросе раз в минуту - около 3-х дней.
При запуске скрипта происходит следующее:
В локальный массив Array[] помещаются байты запроса, вычисляется контрольная сумма и выполняется байтстаффинг.
Посылается запрос счетчику массива Array без вычисления контрольной суммы с предполагаемой длиной ответа до 80 байт.
err,Otvet_0,Len_0=server.SendAndReceiveDataByMask( 0,Lenght,SendMask,Array,ReceiveMask,80);
Эта функция возвращает в локальный массив Otvet_0[] ответ счетчика, который далее обрабатывается.
В какой-то момент времени функция server.SendAndReceiveDataByMask не может передать данные переменной Otvet_0[] и генерирует ошибку.
При этом идет полноценный обмен данными между сервером и счетчиком, в окне OPC сервера "Запросы" отображаются отправленные и принятые байты.
Часто (раз в 100...150 запросов) появляется сообщение о неверной контрольной сумме, хотя все запросы и ответы одинаковы побайтно.
Что может быть с переменными Otvet_0[] и Len_0(длина ответа) ???
Они же локальные и должны инициализироваться заново при каждом запросе.