Записать в теги?
Можно - функцией WriteTag, WriteTagByRelativeName, WriteTagByNumber
Записать в теги?
Можно - функцией WriteTag, WriteTagByRelativeName, WriteTagByNumber
Это нужно прописывать в скрипте узла? И тогда получается в скрипте тега ничего прописывать не нужно?
Да, все верно.
При опросе ничего не происходит, в логе это
20-02-2018 11:51:33.300 SCRIPT.script:plugin :read
20-02-2018 11:51:32.300 SCRIPT.script:plugin :read
20-02-2018 11:51:31.300 SCRIPT.script:plugin :read
20-02-2018 11:51:31.205 SCRIPT.script:plugin :init
Может все-таки в скрипте тега что-то нужно?
Да ничего не нужно. ПРиложите вашу конфигурацию.
Конфигурацию прилагаю
Так а функцию Query у вас кто вызывает? Никто.
У вас вообще ничего не работает.
RES, dest, LEN = server.SendAndReceiveDataByMask(0, #send, sendMask, send, destMask, 200);
И ответ нужно контролировать - проверять код ошибок, что dest не nil и содержин нужное количество элементов, контрольную сумму считать.
Так у вас при первой же ошибке запроса скрипт повалится.
А в какой из функции надо выполнять запрос? OnInit, OnClose, OnBeforeReading, OnAfterReading?
Функцию Query создал, т.к., если выполнять запрос в одной из выше перечисленных функциях сообщается ошибка
SCRIPT:SendAndReceiveDataByMask : функция доджна быть вызвана в контексте устройства
Но ведь в MPS нет возможности записи скрипта в устройство.
Судя по всему это ошибка. Мы с ней разберемся.
Пока сделайте на уровне тега. Потом перенесете.
На уровне тега уже сделано. Т.е. в каждом теге находится запрос под определенный адрес для вывода значения. Но т.к. память устройства считывается по маленьким кускам, то опрос происходит долго. Из-за этого было решено считывать память не по маленьким кусочкам, а по 256 байт и выводить нужные значения по тегам. И судя по логике этот запрос должен находиться в скрипте узла (уже устройства). Можно ли как-то еще реализовать задачу?
Как вариант - сделать один тег, в нем выполнять запросы, а затем раскладывать значения по другим тегам с помощью WriteTagByRelaitveName.
То есть скрипт будет только в одном теге, а осталные только для записи в них значений
А что не работает? Нужно еще контролировать первый параметры который возвращается sendandrecive - там код ошибки или количество принятых байт.
Посмотрите описание функции в справке (там есть примеры) и эту документацию:
https://insat.ru/products/Universal_...ver_API_UG.pdf
Добрый день. При запуске опроса устройства, качество тегов меняется только после того, как полностью прочитается скрипт. В скрипте 8 запросов. Например, если во 2 из 8 запросов качество тега изменилось на BAD, то MPC изменит качество с GOOD на BAD только после завершения чтения скрипта. Как сделать, так чтобы после завершения 2 запроса, если он BAD, качество поменялось сразу, а не после чтения остальных запросов?
Не совсем понятно что вы имеете ввиду.
У вас есть один скрипт и в нем 8 запросов? Так если один из них был неуспешным, сразу прерывайте скрипт, записываете BAD в теги
После прерывания скрипта запросы остановятся? Или вы имеете ввиду при неудачном запросе записывать BAD и продолжать остальные запросы? И как прервать ?
После каждого запроса сделал return, когда тег Bad, то запрос зацикливается и не переходит на следующий запрос, надо, если один из запросов Bad, то переходим к следующему
Ну значит не return, а через if.
Если нет ответа - сразу тег в Bad, и опрашивать следующий.
Здравствуйте. В описании к протоколу прибора есть описание адресов. Скриншот приложил. Для 0300 lvolume F[6] это так реализовывается? local destMask = {"float:6:3210"} Без учета контрольной суммы и остальных байт, только адрес 0300.
Float - 4 байтовое число. Поэтому не ясно что тут имеется ввиду. Лушче уточнить у разработчика прибора
Доброго дня!
Имеем Modbus Universal MasterOPC Server, версия 4.2.9 которым надо по Modbus TCP опросить 5 параметров с регистратора многоканального технологического РМТ 59L, версия ПО 2237 от 12.08.2015 с 24 аналоговыми входами, описание адресов параметров при опрсое по команде 03 [0х03] начиная со страницы 142 руководства по эксплуатации РМТ 59L НКГЖ.411124.004РЭ. В OPC сервере указываю IP адрес регистратора РМТ 59L, 502 порт и убираю перестановку байтов в самих тегах. Могу только опросить, например версию ПО, дату выпуска ПО, серийный номер, кол-во устройств ввода-вывода. Для того чтобы опросить текущие значения 24-х каналов, какие адреса надо опрашивать? Спасибо.
Лучше уточнить у производителя
Как мы понимаем, адрес формируется из номера пера + константа.
Здравствуйте. Есть вопрос относительно функции server.SetDeviceToOnOff
В справке, в примере
val,q=server.ReadCurrentTag(); --получаем значение тега
if val==true then --если значение "true"
server.SetDeviceToOnOff (true); --запускаем опрос устройства
else
server.SetDeviceToOnOff (false); --иначе останавливаем
end;
Как сработает server.SetDeviceToOnOff (true), если к этому моменту при проверки значения тега устройство из опроса будет исключено?
Допустим есть 2 прибора, 1 выключили, 2 работает. После проверки качества тега на BAD исключаем устройство из опроса, которое отключено. После включения устройства как снова начать опрос? Ведь качество тега при исключенном опросе не узнать.
Если разместить скрипт в скрипте записи то он отрабатывается даже при выключенном узле
Подскажите пожалуйста, а в Modbus Universal MasterOPC Server версии 4.2.9, как из прибора РМТ 59L можно прочитать 4-х байтовое float значение пера 1 по адресу 0500 и 0501?
Описание адресов на станице 140 и начиная со страницы 142 в РЭ РМТ 59L.
Добавляете тег, указываете у него адрес 500, тип в устройстве - float
Что-то не получается - ошибка "OUT OF SERVICE":Вложение 36322
Смотрите на вкладку "Запросы". Скорее всего устройство не отвечает или отвечает с ошибкой.
Пока что опроса у вас вообще нет - все в BAD
Прибор возвращает код ошибки:
30-03-2018 14:20:40.840 OMH::1:(IP адрес:502) Rx: [0009] CC 05 00 00 00 03 01 83 04
Но часть параметров опрашивается:
30-03-2018 14:19:09.965 OMH::1:(IP адрес:502) Tx: [0012] 75 05 00 00 00 06 01 03 00 33 00 01
30-03-2018 14:19:09.959 OMH::1:(IP адрес:502) Rx: [0021] 74 05 00 00 00 0F 01 03 0C 50 65 E3 E8 63 F2 70 61 F2 6F 70 00
83 04.
Общее описание:
http://www.modbus.org/docs/Modbus_Ap...col_V1_1b3.pdf
страница 48. Что означает у конкретного устройства - лучше уточнить у производителя.
Скорее всего не в тот адрес обращаетесь.
Без разницы. Скрипт записи отрабатывается всегда.
Только сделайте тег типа Program, и у него включайте скрипт записи.
Multi-Protocol? А какой плагин?
Да, Multi-Protocol, плагин script