PDA

Просмотр полной версии : Modbus Universal MasterOPC Server новый OPC сервер от компании ИнСАТ



Страницы : [1] 2 3 4 5

SCADAMaster
16.08.2011, 16:09
Компания ИНСАТ выводит на рынок новый OPC сервер на протокол Modbus - Modbus Universal MasterOPC Server. Данный ОРС сервер сочетает в себе возможности OPC сервера наиболее распространенного промышленного протокола передачи Modbus RTU/ASCII/TCP, а также инструментария для разработки новых ОРС серверов, как на базе Modbus, так и на базе других протоколов.
OPC сервер способен работать в двух режимах – DA (Data Access – текущие данные) и HDA (Historical Data Access – архивные данные). Для организации хранения OPC использует встроенный SQL сервер.
OPC имеет в своем составе поддержку простого скриптового языка, что позволяет проводить обработку полученных данных (перевод в реальные единицы измерения, вычисление признака качества и т.д.).
Для облегчения тиражирования OPC также поддерживает возможность экспорта и импорта конфигураций устройств. В поставку OPC включены все приборы фирм ОВЕН и ICP DAS работающие по протоколу Modbus.
OPC также поддерживает работу по каналам GSM, что позволяет использовать его в системах диспетчеризации и удаленного сбора данных.
OPC распространяется в 4 редакциях отличающихся количеством доступных тэгов – 32, 500, 2500, безлимитная. Версия на 32 точки распространяется бесплатно.
Подробнее про Modbus Universal MasterOPC Server можно узнать здесь
http://www.masteropc.ru/products/?category=399
Скачать бесплатную версию на 32 точки:
http://www.masteropc.ru/prices/info.php?pid=6944

BETEP
16.08.2011, 20:08
ОРС v2, должен поддерживать передачу массивов между клиентом и сервером.
модбас пакетный протокол, реализовано ли в Вашем ОРС сервере возможность пакетного запроса к регистрам, и передача клиенту данных нескольких регистров как массива?

ну если по русски, есть ли возможность указать в ОРС количество данных в каком либо формате, и отдать клиенту всю пачку в один тег, объявленный в скаде как массив?

Зачем нужно? существуют скады которые ОРС v2 поддерживают полностью и дружат с массивами, бывают и самописные проги, и скорость обмена может возрасти в очень много раз.

Вопрос не праздный, стандарт есть, но практически нет ОРС серверов которые дружат с массивами.

SCADAMaster
17.08.2011, 08:08
Передача массивов в нашем ОРС не реализована, так как это маловостребованная функция. Существует мало клиентов и серверов которые бы с ней работали.
Для передачи массивов эффективнее использовать HDA, который в нашем ОРС поддержан.

BETEP
17.08.2011, 11:45
на сколько я понимаю через HDA возможно только чтение клиентом.

SCADAMaster
17.08.2011, 11:56
на сколько я понимаю через HDA возможно только чтение клиентом.
Через HDA также возможна запись.

smk1635
05.09.2011, 20:19
Для облегчения тиражирования OPC также поддерживает возможность экспорта и импорта конфигураций устройств. В поставку OPC включены все приборы фирм ОВЕН и ICP DAS работающие по протоколу Modbus.


Приобрели OPC сервер на 500 точек. В проекте используются несколько ПЛК154, МДВВ, МВА8. Из Овеновских приборов нашли только ПЛК 100. Или плохо смотрели ? Серийный № 20002660_5153.

ASo
05.09.2011, 20:24
Ээээ...
А как можно включить в поставку ОРС ПЛК??? Разве что только его фиксированные регистры, но кому это нужно?

smk1635
05.09.2011, 20:43
Ээээ...
А как можно включить в поставку ОРС ПЛК??? Разве что только его фиксированные регистры, но кому это нужно?

Просто заявление что есть все приборы Овена работающие по Модбасу заинтересовала. Хотя допустим новичку готовые шаблоны шибко жизнь могут облегчить. Меня продукция Инста в свое время тем и подкупила, что я без особых знаний программирования смог реализовать достаточно сложный проект. В этом плане они конешно молодцы.

SCADAMaster
05.09.2011, 20:46
Из Овеновских приборов нашли только ПЛК 100. Или плохо смотрели ? Серийный № 20002660_5153.
Чтобы добавить приборы их нужно импортировать. В приложении скриншот
Конфигурации хранятся в папке:
\Documents and Settings\All Users\Application Data\Insat\MasterOPC Universal Modbus Server\SERVEREXPORT\DEVICE_LIBRARY\
Указанные вами приборы (МВА и МДВВ) поддержаны и протестированы.

smk1635
05.09.2011, 20:49
Чтобы добавить приборы их нужно импортировать. В приложении скриншот
Конфигурации хранятся в папке:
\Documents and Settings\All Users\Application Data\Insat\MasterOPC Universal Modbus Server\SERVEREXPORT\DEVICE_LIBRARY\
Указанные вами приборы (МВА и МДВВ) поддержаны и протестированы.




Пусто в папке. Первым делом просмотрел.

smk1635
05.09.2011, 20:52
Перезагрузились. Все появилось. Действительно очень обширный список. Спасибо. Не ожидал.

SCADAMaster
05.09.2011, 21:05
Кстати, обратите внимание что у МВА8 признак качества тега "Значение" рассчитывается на основании тега "Статус", при помощи скрипта. Он формирует признаки качества - Ошибка датчика (16), ошибка устройства (12) и значение не определено (64). Функция вычисляющая номер признака находится в скрипте устройства. Таким образом вы можете упростить создание сообщений в SCADA системе, и облегчить обработку сигнала - теперь в случае обрыва датчика или отказа устройства, в скаду придет значение с плохим признаком.
Аналогично сделано и у других приборов с аналоговым входом.

smk1635
05.09.2011, 21:08
Кстати, обратите внимание что у МВА8 признак качества тега "Значение" рассчитывается на основании тега "Статус", при помощи скрипта. Он формирует признаки качества - Ошибка датчика (16), ошибка устройства (12) и значение не определено (64). Таким образом вы можете упростить создание сообщений в SCADA системе. Функция вычисляющая номер признака находится в скрипте устройства.
Аналогично сделано и у других приборов с аналоговым входом.

Спасибо. Обязательно посморю. Для диспечеризации очень полезная штука.

SCADAMaster
16.09.2011, 21:05
Мы выпустили видеопример в котором рассматривается создание конфигурации для прибора ОВЕН МДВВ для OPC сервера Modbus Universal MasterOPC.
Видеопример можно скачать с нашего сайта или просмотреть on-line на Youtube.
http://www.masteropc.ru/prices/info.php?pid=6944
Надеемся, что данный пример окажется вам полезным.

drvlas
09.08.2012, 20:56
Думаю, и здесь можно задать вопросы начинающего. Они относятся как раз к ОРС-серверу.

1) Создавая ОРС-сервер, не могу понять, как можно организовать опрос значения параметра по команде оператора. Есть ряд параметров (регистров), которые в нормальной работе мне не нужны, создают ненужный траффик. Но иногда их значения нужно получить. Делать это путем установления большого периода опроса - не хорошо, ибо обновление значения этого регистра на экране компа может сильно запаздывать.

2) Можно ли организовать разовую запись значения в регистр? Сейчас получается, что если я поставил регистр с признаком WriteOnly, то заданное мною значение пишется в него постоянно. А мне нужно, чтобы раз прописалось - и все.

Спасибо!

SCADAMaster
09.08.2012, 21:10
1) Создавая ОРС-сервер, не могу понять, как можно организовать опрос значения параметра по команде оператора. Есть ряд параметров (регистров), которые в нормальной работе мне не нужны, создают ненужный траффик. Но иногда их значения нужно получить. Делать это путем установления большого периода опроса - не хорошо, ибо обновление значения этого регистра на экране компа может сильно запаздывать.

То есть некоторые регистры устройства нужно опрашивать по команде или целое устройство по команде?
Отдельные регистры пока что нельзя. В следующей версии мы добавим функцию в скрипты для остановки опроса подустройства. Теги можно будет положить в отдельное подустройство и запускать по мере необходимости.



2) Можно ли организовать разовую запись значения в регистр? Сейчас получается, что если я поставил регистр с признаком WriteOnly, то заданное мною значение пишется в него постоянно. А мне нужно, чтобы раз прописалось - и все.

Вот сейчас как раз такая запись и есть. Посылается запрос, если устройство ответило, что запись произведена запросы записи больше не посылаются. Вот если ошибка записи будет - то да, ОРС будет снова посылать запросы. Или если у вас в скаде стоит периодическая запись значений.

drvlas
09.08.2012, 21:40
Уважаемый, Вы отдыхаете когда-нибудь? Или вас там легион?
Оперативность поддержки приятно удивляет :)


То есть некоторые регистры устройства нужно опрашивать по команде или целое устройство по команде
Именно отдельные регистры. У меня в устройстве такая структура регистров, что часть из них RO, часть WO, часть RW. Кроме того, те, что читаются. могут быть разово читаемыми (например, версия фирмвара, контрольная сумма метрологической защиты), часть - читаемыми по некоторому событию, а точнее - по команде оператора, часть читается часто-часто (это результат измерения и качество результата).
Я разбил устройство на подустройства. Но те регистры, что нет смысла читать очень часто и недопустимо читать редко - вот они и представляют головняк. Пока обойдусь тем, что увеличу траффик, пусть вычитываются.



Посылается запрос, если устройство ответило, что запись произведена запросы записи больше не посылаются. Вот если ошибка записи будет - то да, ОРС будет снова посылать запросы. Или если у вас в скаде стоит периодическая запись значений.
Ну, я сейчас не о СКАДЕ. Я переделываю модель своего модуля, которая через ОРС-сервер пойдет в СКАДу. Поэтому все, что я сейчас здесь спрашиваю, относится к настройке ОРС-сервера.
Ну и смотрим: есть подустройство, которое, когда создается, не имеет признаков ReadOnly, WriteOnly или иных. В его общих свойствах есть "Период опроса". Как этот период опроса используется программой, если внутри устройства ТОЛЬКО регистры WriteOnly?

Добавлю: для нормальных подустройств ReadOnly - как влияет "Период опроса" устройства на период опроса подустройств, если у них в свойствах свои "Периоды опроса"?

SCADAMaster
09.08.2012, 21:48
В его общих свойствах есть "Период опроса". Как этот период опроса используется программой, если внутри устройства ТОЛЬКО регистры WriteOnly?

Для WriteOnly период опроса не используется. Запись во WriteOnly (а также во ReadWrite) осуществляется только при команде записи со стороны ОРС клиента.



Добавлю: для нормальных подустройств ReadOnly - как влияет "Период опроса" устройства на период опроса подустройств, если у них в свойствах свои "Периоды опроса"?
Никак. Подустройства имеют собственные периоды опроса, на которые период опроса устройства не влияют.

drvlas
09.08.2012, 21:53
Если среди регистров, которые ОРС-сервер будет вычитывать, найдутся несколько с прилегающими адресами, то соберет ли команда чтения (03) эти регистры в один запрос? Я вижу такой параметр, как Максимально допустимый разрыв адресов в запросе чтения - его нужно оставить 0, ятобы такое сработало? Или это не из той оперы?
Такое объединение может сильно уменьшить траффик...

И еще раз спасибо за ответы!

SCADAMaster
09.08.2012, 21:59
Если среди регистров, которые ОРС-сервер будет вычитывать, найдутся несколько с прилегающими адресами, то соберет ли команда чтения (03) эти регистры в один запрос?
Да соберет.
Ограничить количество запрашиваемых регистров можно в настройках устройства, или включив у нужного тега "Последний тег в групповом запросе".


Я вижу такой параметр, как Максимально допустимый разрыв адресов в запросе чтения - его нужно оставить 0, ятобы такое сработало? Или это не из той оперы?

Это из этой оперы, но его предназначение несколько другое.
Например может быть такая ситуация, в устройстве (и в ОРС конфигурации) есть регистры с такими номерами:
0, 1, 2, 4, 5, 6
Если мы установим значение данной настройки 0, то будет выполнено два запроса - сначала опросятся регистры 0-2, а затем 4-6. Если же установить максимально допустимый разрыв адрес 1 (или более), то эти регистры будут опрошены за один запрос.

drvlas
09.08.2012, 22:04
Если же установить максимально допустимый разрыв адрес 1 (или более), то эти регистры будут опрошены за один запрос.
Конечно же! Это на круг меньше траффика! Понял :)

Lamo
19.08.2012, 18:30
...В поставку OPC включены все приборы фирм ОВЕН и ICP DAS работающие по протоколу Modbus.
А когда появится СИ-30? Ни как не получается его настроить :confused:

SCADAMaster
19.08.2012, 19:40
Экспортированная конфигурация в приложении.
Из описания не совсем ясно, как представляется посчитанное значение - оно представляется как умноженное и преобразованное или его нужно поделить на что-то.
Просим сообщить о результате тестирования конфигурации.

Lamo
21.08.2012, 11:38
Экспортированная конфигурация в приложении.
Из описания не совсем ясно, как представляется посчитанное значение - оно представляется как умноженное и преобразованное или его нужно поделить на что-то.
Просим сообщить о результате тестирования конфигурации.

Работает отлично, спасибо!!! :)
Текущее значение(физвеличина) преобразуется в приборе.

dll
06.09.2012, 08:32
Здравствуйте. Имеется MasterOPC c поддержкой GSM, два модема ПМ01 и ПЛК 150. Необходимо установить передачу данных с плк на OPC сервер по CSD каналу. ПЛК мастер, OPC сервер - слэйв. Передачу данных плк-пм01-пм01 настроена (проверял через HyperTerminal), интересует настройка OPC сервера. Необходимо ли использовать режим модем в OPC сервере, как настроить слэйв подключение.

SCADAMaster
06.09.2012, 14:40
В нашем ОРС работа с модемом в Slave режиме невозможна

S.A.D.
26.09.2012, 10:12
здравствуйте. Как настроить переодический обзвон двух устройств посредством Universal MasterOPC? настроек для модема как-то вообще не видно. Использую бесплатный на 32 тега.

SCADAMaster
26.09.2012, 10:37
В версии на 32 точки поддержка модема отсутствует.

S.A.D.
26.09.2012, 10:40
В версии на 32 точки поддержка модема отсутствует.

понял, спасибо

S.A.D.
26.09.2012, 10:45
а в полнофункциональной версии можно реализовать периодический обзвон нескольких удаленных объектов через один модем, соответственно создав 2 узла с разными номерами дозвона?

SCADAMaster
26.09.2012, 11:38
Да можете, но нужно приобретать ОРС с опцией GSM-модема.
Создаете два узла, у одного указываете один номер телефона, на другом - другой

S.A.D.
25.10.2012, 14:52
доброго времени суток. Заметил в MasterOPC возможность работать с устройствами посредством скриптов. Необходимо "вытаскивать" из сим-карты установленной в GSM-модеме подключенном к MasterOPC смс-сообщения. Можно ли это реализовать и если можно, то в какую сторону рыть в плане кода скрипта. Я в С не очень силен, так только основы, а практического опыта нет.

SCADAMaster
25.10.2012, 15:12
Функции чтения СМС нет, только отправка.

S.A.D.
26.10.2012, 14:25
то есть посредством самописного скрипта для узла нельзя вытащить СМС из модема?

SCADAMaster
26.10.2012, 14:42
то есть посредством самописного скрипта для узла нельзя вытащить СМС из модема?
Нет, нельзя

SCADAMaster
26.10.2012, 15:28
Но можно использовать MasterSCADA - в ней есть ФБ для приема и отправки SMS (находятся в разделе "Служебные").

S.A.D.
26.10.2012, 18:04
Но можно использовать MasterSCADA - в ней есть ФБ для приема и отправки SMS (находятся в разделе "Служебные").

спасибо за подсказку, только что-то неполучается ни отправлять ни принимать. Порт указан верно, модем в компьюетере создан (правда на указаные там настройки скада не реагирует. поставил скорость 9600 а она все равно на 19200 порт открывает при запуске исполнения)

Grey-bred
26.10.2012, 20:14
Здравствуйте.

Не подскажете, где можно найти подробное описание всех встроенных функций, которые можно использовать в скриптах.

Заранее благодарен.

SCADAMaster
27.10.2012, 15:56
Не подскажете, где можно найти подробное описание всех встроенных функций, которые можно использовать в скриптах.

В справке есть подробное описание всех функций.
Нажмите F1 когда открыт редактор скрипта.

SCADAMaster
27.10.2012, 15:59
спасибо за подсказку, только что-то неполучается ни отправлять ни принимать. Порт указан верно, модем в компьюетере создан (правда на указаные там настройки скада не реагирует. поставил скорость 9600 а она все равно на 19200 порт открывает при запуске исполнения)
У вас Demo версия?
Скорость модема должна быть настроена на 19200 - это описано в документации к ФБ "Отправка SMS".
Попробуйте проверить на другом модеме (допускается использовать USB модемов).

приборист
13.11.2012, 14:56
среди добавляемых приборов не увидел ТРМ-132м

liga_blunt
29.11.2012, 22:00
А когда появится конфигурации для ПР110 с ПР-МИ485

SCADAMaster
29.11.2012, 22:33
Для ПР сделать универсальную конфигурацию нельзя - у него конфигурируемые адреса.
Вы можете сделать конфигурацию самостоятельно - просто добавив необходимые теги.
Посмотрите видео на странице загрузки, и все станет понятно:
http://www.masteropc.ru/prices/info.php?pid=6944

Мамонов Михаил
15.12.2012, 16:35
А как можно задать IP-адрес для ModbusTCP, если он в виде символьного имени?
У меня контроллер имеет динамический IP, и подключаюсь к нему с помощью DynDNS - т.е. обратиться надо к устройству по адресу вида myhost.dyndns.org порт 502.
Пробовал вбить символьное имя вместо цифр IP в настройках узла - не работает..

SCADAMaster
15.12.2012, 17:03
Такой режим в MasterOPC пока что не поддержан.

Мамонов Михаил
15.12.2012, 17:09
Очень жаль.. Не всегда хочется у оператора GSM заключать контракт на статический IP, а динамический на любом тарифе поднимается - удобно, если надо по-быстрому подключиться.

Мамонов Михаил
15.12.2012, 22:46
честно говоря, никогда с прокси дела не имел. если не сложно - можете подсказать что-то из бесплатных?
если рассматривать платный вариант, то все проще - Lectus OPC прекрасно с символьными адресами работает, но платить 4500 за то, чтоб передать десяток регистров - это как-то перебор.. Да и очень понравились возможности MasterOPC в плане скриптов.

Мамонов Михаил
15.12.2012, 23:20
понятно.. попытался тоже пока почитать - сходу технологию прокси не понял, буду пытаться изучать дальше. под винду вроде рекомендуют 3proxy..
а может все-таки дождусь поддержки символьных адресов от MasterOPC, т.к. очень бы не хотелось на клиентском компе в чужой сети огород городить, а потом ездить за тридевять земель поднимать это, если вдруг чего рухнет..
Да еще и для всех остальных прог этого компа доступ в интернет должен остаться как был, через прокси только OPC-сервер посадить надо.

Мамонов Михаил
17.12.2012, 02:15
а MasterOPC умеет работать через прокси? Насколько я понимаю, где-то в его настройках надо указать, что работать через прокси ну и там тип прокси и т.п. Вроде такого не нашел..

SCADAMaster
17.12.2012, 08:02
Пока нет.
Мы обсудим с программистом возможность реализации такой задачи.
Однако нам она не видится очень актуальной - правильнее и безопаснее создавать VPN соединение.

Мамонов Михаил
17.12.2012, 23:40
VPN на контроллере ПЛК100 и модеме ПМ01? А это вообще реально?

А тогда вдогонку - а средствами скриптов нельзя получить IP адрес из символьного адреса? Или, например, я легко могу получить IP адрес от DynDNS и положить его, например, в текстовый файл на компе. А нельзя ли его потом скриптом считать и использовать?

xatuman
13.01.2013, 13:25
Подскажите как в скрипте обработать ситуацию потери связи (физический обрыв линии)? В такой ситуации значения тегов замораживаются с признаком качества "Ок" (пробовал на эмуляторе com0com), что неприемлимо. Последняя выполняемая функция в скриптах function OnBeforeReading(), дальше тишина...Напрашивается обработчик ошибки сервера?

SCADAMaster
13.01.2013, 13:28
А как именно вы имитируете разрыв связи?
Если вы используете ModRSSim, то там может проявляться такая проблема. На реальных устройствах такой проблемы нет - при разрыве связи, ОРС переменные получают признак качества BAD.

xatuman
14.01.2013, 05:04
Да, пробовал именно в связке с ModRSSIM просто его закрывая...Но обработчик ошибки сервера всё равно хочу :) Это возможно?

SCADAMaster
14.01.2013, 08:03
Ну мы вам написали, что при закрытии ModRSSim происходит подвисание виртуальных портов, и ОРС это никак обработать не может.
С реальными портами такого происходить не будет.

Какой обработчик ошибок вам нужен? Изменение признака качества вас не устраивает?

xatuman
14.01.2013, 09:13
Скажу сразу, что пытаюсь использовать ОРС сервер извращённым способом:) В скрипте Устройства читаю регистры Modbus

function OnAfterReading()
local w={}
local err
err,w = modbus.ReadInputRegistersAsInt16(0,12,true,"10325476" );
local Address = server.GetCurrentDeviceAddress( );
server.RunFunctionFromNode("SetData",0,w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],Address,err);
end
и затем переписываю эти значения в теги Сервера.
В Устройствах никаких тегов нет. Получается этакий мультиплексор. Используя 13 тегов (12 значений и номер устройства), я опрашиваю 12 устройств по 12 каналов в каждом. При таком способе признак качества я должен формировать сам, а отследить потерю связи невозможно. Функция OnAfterReading() при обрыве связи вызываться перестаёт.
Для контроля такой ситуации подошло бы что-то типа OnServerError(), тем более, что продукт позиционируется как платформа для разработки сервера с поддержкой разработки протоколов связи с разными устройствами. При таком подходе значения ОРС тегов придётся формировать программно, включая признак качества. Или я не прав?
p.s. Надеюсь, попытка использовать 144 канала, вместо максимальных 32 бесплатных, в данном случае не криминал :)

SCADAMaster
14.01.2013, 09:21
Функция OnAfterReading() при обрыве связи вызываться перестаёт.

При работе с реальным COM портом такая ситуация возникнуть не должна.



Для контроля такой ситуации подошло бы что-то типа OnServerError(), тем более, что продукт позиционируется как платформа для разработки сервера с поддержкой разработки протоколов связи с разными устройствами.
Мы планируем добавить такую функцию в третью версию ОРС сервера.
Но эта функция нужна в первую очередь при работе по Ethernet - там при обрыве связи функции скрипта действительно перестают вызываться


При таком подходе значения ОРС тегов придётся формировать программно, включая признак качества.
Да, нужно устанавливать признак качества при записи значений в тег.

xatuman
07.02.2013, 07:43
Потерял полдня:( , пытаясь запустить OPC-сервер на другой (не своей) машине. Получаю "Access violation at address 004ABD2B in module 'modbusopcserver.exe'. Read of address F4F7FFF4". Много чего перекопал, много кого вспомнил...:) Оказалось, виной тому - отключенная в биосе сетевая карта! При включении всё заработало. Отключение сетевухи в Диспетчере устройств приводит к аналогичному результату-Access violation...Уважаемые разработчики, обработайте ошибку!Спасибо.

SCADAMaster
07.02.2013, 08:03
Эту ошибку мы уже исправили.

CamAvt
06.03.2013, 09:21
Доброе утро!
Вопрос начинающего:
Через dcon от счётчика импульсов поступают значения в 16тиричном виде.
Пример: 000002FE = 766.
Перевожу функцией string.format ("%08d", 2FE) -- например.
получаю 441.
Как правильно перевести из hex в dec?

SCADAMaster
06.03.2013, 13:42
Воспользуйтесь функцией tonumber. Такой код преобразует 16-ричное число в 10-чное:
val = tonumber(100, 16)
Подробное описание этой функции вы можете прочитать в справке (воспользуйтесь поиском).

Если вы занимаетесь поддержкой протокола, то мы можем дать специальную документацию по разработке протоколов (официально пока не опубликована) - обратитесь в техническую поддержку.

CamAvt
06.03.2013, 16:31
Спасибо, за подсказку.
Пробую в ближайшее время. За основу взял реализованный для I-7017.

CamAvt
19.03.2013, 12:49
Функция работает как нужно. Документацию по разработке скачивал.

kao
04.06.2013, 12:10
Добрый день.
При установке и запуске OPC сервера появляется ошибка (см. вложение). ОС - Windows 2000. Kernel32.dll в системе присутствует.

SCADAMaster
04.06.2013, 12:41
ОС - Windows 2000
Есть возможность работать с ОС начиная с XP ? На 2000 возможны проблемы.

kao
04.06.2013, 13:25
Есть возможность работать с ОС начиная с XP ?
Понимаю, что стоит переходить на более свежую систему. Но в данный момент нужно добить тему с 2000. Если проблемы решатся установкой обновлений и пр., то останется как есть.

На 2000 возможны проблемы.
Будут проблемы во время работы OPC, или только при установке?

SCADAMaster
04.06.2013, 13:49
Проблемы во время работы. Данная ОС полноценно не поддерживается. Рекомендуем использовать Windows XP SP3 или Windows 7

ASo
04.06.2013, 17:20
Если брать Windows 7 - то что нужно прописать?
Matricon видит OPC сервер, но не соединяется.

SCADAMaster
05.06.2013, 13:02
А сам сервер запущен? Или находится в режиме редактирования?

ASo
05.06.2013, 15:04
При запущенном сервере - не подключается.
Если закрыть сервер - то автоматически запускается в режиме работы.

Не критично, но всеже :(

SCADAMaster
09.06.2013, 18:29
Сейчас, если сервер находится в режиме разработки, то в режим исполнения при подключении клиента он не запускается.

S.A.D.
02.08.2013, 11:24
Можно ли использовать одновременно 2 орс? То есть есть 2 орс на 2500 тегов с юсб ключами. Устанавливаются оба, но при добавлении в проект мастерскады виден только один и у того содержимого как будто нет. Можно ли использовать 2 орс на одной машине?

SCADAMaster
02.08.2013, 15:41
На одной машине нельзя.
А зачем вам нужно два ОРС на одной машине?

S.A.D.
13.08.2013, 12:08
На одной машине нельзя.
А зачем вам нужно два ОРС на одной машине?
2,5k мало, а анлим много))

SCADAMaster
13.08.2013, 13:10
Так не получится. Приобретайте Unl версию - у них не настолько большая по цене разница.

Yerabdi
22.09.2013, 10:57
орс не считывает передаваемые с плк данные в виде бульевского и uint значения наоборот с мастерскадой через орс можно передать любые значения в плк у меня демо версия на 32 точек

SCADAMaster
22.09.2013, 13:24
Не совсем понятно что именно у вас не считывается. Посмотрите вот эту тему:
http://www.owen.ru/forum/showthread.php?t=15679&highlight=Modbus%28Slave%29

Сергей1978
31.10.2013, 20:52
Здравствуйте Скадамастер. Есть вопрос. Используем на работе Universal MasterOPC Server 32 тега. Читаем им данные из ТРМ202, и далее передаем в Мастерскаду. Проблема заключается в том, что сервер не видит запятой в данных. ТРМ показывает значение 4,5 , а сервере 45. Если сделать пересчет, например на 0,1, то сервер обрезает цифру после запятой и показывает 4. Помогите, пожалуйста, где искать причину.

SCADAMaster
01.11.2013, 10:53
Сервер работает как с целочисленными переменными (int, uint), так и с переменными с плавающей точкой (float, double). Вы используете правильный тип переменной ?
Так же у нас уже добавлено устройство ТРМ202 в список импортируемых устройств (у узла через контекстное меню выбрать "Импортировать устройств"). Почему не использовать его?

Сергей1978
02.11.2013, 15:15
Скадамастер, большое спасибо. Разобрались, появилась запитая.

S.A.D.
08.01.2014, 21:25
доброго времени суток. есть узел опрашиваемый по IP адресу. На том конце GPRS коммуникатор на sim900 модуле в режиме сервера подключенный к MODBUS slave устройству. Коммуникатор образует прозрачный канал. Мне нужно в узел ОРС сервера, для которого задан IP адрес и порт перед каждым опросом посылать слово CONNECT. Обратился к скриптам и стал копаться в этом деле. В итоге не нашел ничего подходящего применительно к IP подключению. Все что нашел, это функции "server.RunFunctionFromNode" и "server.RunFunctionFromNodeByName". Прошу хэлпа))

SCADAMaster
08.01.2014, 22:41
Для этого вам нужно использовать функцию server.SendAndReceiveDataByMask.
Примеры ее использования есть у нас в документации:
http://www.insat.ru/products/Universal_MasterOPC/MU_MasterOPC_Server_API_UG.pdf
Функцию нужно вызывать в скрипте устройства - в теле функции OnBeforeReading.

Версию нужно использовать последнюю - ранее с TCP узлами данная функция не работала.

S.A.D.
09.01.2014, 13:59
Для этого вам нужно использовать функцию server.SendAndReceiveDataByMask.
Примеры ее использования есть у нас в документации:
http://www.insat.ru/products/Universal_MasterOPC/MU_MasterOPC_Server_API_UG.pdf
Функцию нужно вызывать в скрипте устройства - в теле функции OnBeforeReading.

Версию нужно использовать последнюю - ранее с TCP узлами данная функция не работала.
спасибо большое.
вот вроде написал, но не отправляет ничего. Билд сервера 2,0,0,16

- инициализация
function OnInit()
end
-- деинициализация
function OnClose()
end
-- функция,выполняющаяся перед чтением тегов
function OnBeforeReading()
function Query()
local send={0x43,0x4F,0x4E,0x4E,0x45,0x43,0x54,0x20,0x4F ,0x4B}; -- CONNECT OK в hex
local sendmask={"byte","byte","byte","byte","byte","byte","byte","byte","byte","byte"}; --маска отправляемого запроса
local err;
local n=0;
repeat
--посылка и получение запроса в устройство
err=server.SendAndReceiveDataByMask(0,10,sendmask, send,nil,0);
n=n+1;
--условие выхода - корректный ответ или превышение запросов
until err>=0 or n>=server.GetCurrentDeviceRetry()
--обрабатываем полученные данные
if err>=0 then
--запрос выполнен корректно
return true,1, server.Message("CONNECT OK отправлен"); --возвращаем флаг что запрос корректен и третий элемент массива – значение
else
return false,0, server.Message("CONNECT OK НЕ отправлен"); --запрос некорректен, возвращаем соответствующий флаг
end;
end;
end
-- функция,выполняющаяся после чтения тегов
function OnAfterReading()
end

SCADAMaster
09.01.2014, 14:49
function OnBeforeReading()
function Query()
local send={0x43,0x4F,0x4E,0x4E,0x45,0x43,0x54,0x20,0x4F ,0x4B}; -- CONNECT OK в hex
local sendmask={"byte","byte","byte","byte","byte","byte","byte","byte","byte","byte"}; --маска отправляемого запроса
local err;
local n=0;
repeat


function Query - зачем это?
И return вам не нужен - вы же не вызываете эту функцию откуда-то.
Просто:
function OnBeforeReading()
local send={0x43,0x4F,0x4E,0x4E,0x45,0x43,0x54,0x20,0x4F ,0x4B}; -- CONNECT OK в hex
local sendmask={"byte","byte","byte","byte","byte","byte","byte","byte","byte","byte"}; --маска отправляемого запроса
local err;
local n=0;
repeat
--посылка и получение запроса в устройство
err=server.SendAndReceiveDataByMask(0,10,sendmask, send,nil,0);
n=n+1;
--условие выхода - корректный ответ или превышение запросов
until err>=0 or n>=server.GetCurrentDeviceRetry()
--обрабатываем полученные данные
if err>=0 then
--запрос выполнен корректно
server.Message("CONNECT OK отправлен"); --возвращаем флаг что запрос корректен и третий элемент массива – значение
else
server.Message("CONNECT OK НЕ отправлен"); --запрос некорректен, возвращаем соответствующий флаг
end;
end


Либо тогда делайте функцию Query, добавляйте в нее код и вызывайте из основной функции

S.A.D.
09.01.2014, 14:56
точно! Спасибо большое! Работает!

Сергей Мих
10.01.2014, 23:16
Добрый день, вечер. Прошу объяснить что это за ответ модема < ATI > ? Суть такая. Используем ОРС сервер, по последовательному RS232 подключен ПМ01, опрашиваем несколько плк тоже с ПМ01, по CSD. Опрашиваем на скорости 9600. У всех модемов таймеры перезагрузки отключены (SETTM 0), (на объектах ПЛК свой модем выключает/включает после каждого опроса). Так вот иногда модем сервера получает ответ < 41 54 49 0D 0A > и виснет, пока его не перезапустишь выкл/вкл.
ЧТО ЭТО за ATI и как с ним бороться?
Фрагмент из запросов сервера:

31-12-2013 08:50:06.206 RS232_2::насосная1:(COM4) Rx: [0085] 0A 03 50 10 E7 00 56 01 68 0B 6A 00 28 02 5E 00 00 00 00 47 04 40 BD FA B0 40 92 FA B0 40 92 56 15 40 9D 00 01 00 00 13 A3 00 00 00 00 00 10 00 22 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 41 E7 00 00 00 00 00 00 07 DD 00 0C 00 1F 00 08 00 1D 5E E5
31-12-2013 08:50:04.246 RS232_2::насосная1:(COM4) Tx: [0008] 0A 03 00 00 00 28 44 AF
31-12-2013 08:40:56.000 RS232_2::насосная1:(COM4) Rx: [0010] 41 54 49 0D 0A 41 54 49 0D 0A
31-12-2013 08:40:55.192 RS232_2::насосная1:(COM4) Tx: [0008] 0A 03 00 00 00 28 44 AF

SCADAMaster
11.01.2014, 11:15
Уточните данный вопрос у техподдержки ОВЕН - задайте вопрос в разделе "Эксплуатация".

Сергей Мих
13.01.2014, 21:14
В этой ветке я хотел узнать, как средствами ОРС-сервера ,на уровне тега или устройства отследить появление строки < 41 54 49 0D 0A> . Управлять питанием модема с помощью другого СОМ порта мы можем.



Спасибо.

SCADAMaster
14.01.2014, 08:16
После того как приходит эта строчка, модем зависает? То есть значения поступают перестают?
Признак качества при этом меняется? Если признак качества переменной меняется, то проще отследить его.

Сергей Мих
14.01.2014, 12:51
После получения. 41 54 49 0D 0A, значения не изменяются, качество - BAD и далее ни каких соединений ее получается. С мобильного тел. набираешь номер сервера, там короткие гудки, трубка не положена.
модем выкл/вкл, приводит все в порядок.

SCADAMaster
14.01.2014, 13:11
качество - BAD
Проще будет как раз анализировать признак качества.
Анализировать признак качества можно например при помощи функции
val,qual=server.ReadCurrentTag();
qual - это будет признак качества.
Если нужно анализировать качество другого тега, то используйте функцию ReadTag().
Описание функций с примерами есть в справке.

Сергей Мих
15.01.2014, 18:54
После того как приходит эта строчка, модем зависает? То есть значения поступают перестают?
Признак качества при этом меняется? Если признак качества переменной меняется, то проще отследить его.


Мы так и делаем, только когда у всех выбранных тегов появляются Бады, отдельным узлом на уровне тега , скриптом , отслеживаем состояние одного тега в каждом устройстве и управляем другим СОМ портом для управления релюшкой, вкл/выкл питание модема.
Вот есть вопрос, как можно определить получение в ответе, к примеру, комбинации< 41 54 49 0D 0A> при приходе такого ответа модем сервера "зависает" и далее неуправляем- соединение не рвет и висит на линии.



Спасибо.

SCADAMaster
15.01.2014, 19:36
А зачем вам тогда еще и отслеживать приход ответа?
Если вы работаете с Modbus стандартными средствами сервера (не скриптами), то отследить конкретный ответ нельзя.

Сергей Мих
15.01.2014, 22:50
Именно требуется узнать о приходе в ответе такой последовательности.

Спасибо.

SCADAMaster
16.01.2014, 08:19
Если работать с Modbus стандартными средствами, то это не возможно.

S.A.D.
22.01.2014, 16:54
написал небольшой скрипт для того чтобы перед опросом устройства ему отправлялся определенный набор байт. Отправлять нужно 5 раз с периодичностью в 1-2 секунды. Отправка работает, но проблема в том что не могу найти чем организовать паузу. перерыл всю справку но не нашел какого либо таймера или ещё чего. Можно ли решить эту проблему?
Текст скрипта:

function OnBeforeReading()
local send={0x43,0x4F,0x4E,0x4E,0x45,0x43,0x54,0x20,0x4F ,0x4B}; --массив отправляемых чисел
local sendmask={"byte","byte","byte","byte","byte","byte","byte","byte","byte","byte"}; --маска отправляемого запроса
local err;
local n=0;

repeat
err=server.SendAndReceiveDataByMask(0,10,sendmask, send,nil,0);
-- здесь должна быть пауза
n=n+1
until n>=5
end

SCADAMaster
22.01.2014, 17:50
перерыл всю справку но не нашел какого либо таймера или ещё чего.
server.Sleep(1000); --ожидание на заданное время

S.A.D.
22.01.2014, 18:20
server.Sleep(1000); --ожидание на заданное время

спасибо!!!

Сергей Мих
24.01.2014, 22:27
server.Sleep(1000); --ожидание на заданное время

1000 = 1 секунда.

SCADAMaster
25.01.2014, 09:52
Если это был вопрос - да, время задается в миллисекундах.

_Pavel_
27.02.2014, 08:20
Здравствуйте!
Посоветуйте где бы почитать про возможность "передачи данных в любой SQL сервер" с помощью Вашего продукта. Бесплатная версия на 32 тега это умеет?
Хотелось бы реализовать примерно следующее: сразу после чтения тэга по MODBUS записывать его в базу MS SQL EXPRESS. В лектусе получилось без проблем.

SCADAMaster
27.02.2014, 09:15
На данный момент наш OPC записывает только в базу данных SQLite.

_Pavel_
05.03.2014, 12:04
Подскажите, пожалуйста, я правильно понимаю:
Допустим я включаю в параметрах тега "HDA доступ" - истина, сервер начинает записывать значения данного тэга во встроенную базу формата SQLite (т.е. фактически просто в файл), а я в свою очередь могу параллельно читать данные сторонней программой из этого файла?

SCADAMaster
05.03.2014, 14:10
Не совсем. При включении HDA доступа, все значения действительно записываются в базу SQLite, но эта база данных не доступна пользователю - она развернута в оперативной памяти.
Для получения архива данных нужно использовать стандартный интерфейс OPC HDA - то есть клиент с поддержкой OPC HDA (например MasterSCADA).

Для записи в SQLite доступную из других программ нужно использовать скрипты - у нас есть специальные функции по работе с SQLite. В поставку ОРС также входит пример работы с ней.

aleksandrborodin
25.03.2014, 08:35
Как записать значения в внешнюю базу sql ???

SCADAMaster
25.03.2014, 11:19
В OPC поддержана работа с SQLite3, работа с ним расписана в справке.

Terminat
25.03.2014, 17:09
Похоже на ошибку.
Win 7 Pro, MasterOPC Universal Modbus Server, версия 2.0.0.16 на 32 тега. Тип узла - TCP/IP. Клиенты - разные.
Значения групп тегов (имеется ввиду групповой запрос modbus) 'сдвигаются' вниз на одну группу, значение последней группы становится значением первой. Ошибка, соответственно, отсутствует, если используется только одна группа (или один тег).
Что характерно, ошибка не проявляется, если предварительно запустить сервер на опрос. Т.е. запускаем опрос из сервера - все нормально, запускаем опрос из сервера, затем подключаемся клиентом - тоже нормально, подключаемся клиентом - ошибка.
В любом случае информация в клиенте и сервере совпадает, верная она или нет.
Верно (уставка = 20): 12376 Ошибка: 12377

SCADAMaster
26.03.2014, 09:27
Попробуйте в настройках узла включить настройку "Отслеживать Transaction ID".

Terminat
26.03.2014, 12:15
C отслеживанием все работает как часы, спасибо.
Если есть возможность, хорошо бы в следующих версиях по умолчанию устанавливать 'Отслеживать Transaction ID' в Истину, ибо эффект от его отключения сногсшибательный.

leszkin
26.03.2014, 14:14
Подскажите, а нет ли возможности приобрести ОЕМ-лицензию на ваш ОРС? По примеру другого известного сервера.

Имею ввиду вот это:

Приглашаем к сотрудничеству производителей Modbus устройств и системных интеграторов. Для Вас есть OEM лицензия. В этом случае можно менять параметры программы: название программы, логотип, описание сервера, Email, сайт и др. Для неограниченного кол-ва копий можно также, на основе выданного ключа генерировать свои ключи для конечных пользователей.

SCADAMaster
26.03.2014, 16:02
Подскажите, а нет ли возможности приобрести ОЕМ-лицензию на ваш ОРС?
Пишите на support(собка)insat.ru

dspinreg
17.04.2014, 10:31
Скажите, а планируется ли добавить функционал для работы с внешними СУБД? Если да, то когда этого можно ждать?

SCADAMaster
17.04.2014, 16:34
После выхода 3 версии это будет возможно.

DENIS_NAUM
18.04.2014, 17:03
Добрые люди, помогите разобраться.
Пытаюсь настроить МастерОПС для работы с ТРМ202. При использовании ОПС Овен все работает без проблем.
Верны ли настройки??? Где я что упустил??? АС4 висит на СОМ3 скорость 9600. Адрес прибора 1.
12652
12653

SCADAMaster
18.04.2014, 17:46
Время ответа мало (20 мс) - на скорости 9600 устройство может не успеть ответить. Повысьте до 1000 мс.
Также нужно помнить, что после смены сетевых настроек в устройстве его нужно перезагрузить (выключить и включить снова).

DENIS_NAUM
21.04.2014, 08:29
Повысьте до 1000 мс.
Повысил. Результат тот же.
12674
Вот настройки COM3
12675

P.S.: Версия прибора 20-я.

SCADAMaster
21.04.2014, 09:20
Приложите конфигурацию OPC сервера.

DENIS_NAUM
21.04.2014, 09:31
Приложите конфигурацию OPC сервера.
Вроде прикрепил.

SCADAMaster
21.04.2014, 10:03
АС4 висит на СОМ3 скорость 9600. Адрес прибора 1.

А у вас в конфигурации скорость стоит 115200 (см. приложение).
Скорость нужно задавать не в "Диспетчер устройств" а у приложения - то есть в данном случае у ОРС сервера.

DENIS_NAUM
21.04.2014, 10:05
Это уже мои сегодняшние эксперименты. До это стояла скорость 9600 и в приборе, и в диспетчере, и в ОПСе. Сейчас сменил на 115200 везде. Ошибка не в этом. И еще один нюанс. Прибор 2005 г.в. может он только по Овен протоколу работает?

SCADAMaster
21.04.2014, 10:36
А в настройках устройства присутствует режим Modbus?
Вам лучше уточнить этот вопрос в техподдержке ОВЕН.

DENIS_NAUM
21.04.2014, 11:37
Короче разобрался. Извиняюсь за то, что отнял у Вас время. Нету в нем Модбаса. Подключил 210-й 2013г.в. заработал сразу без проблем.

imaks
17.06.2014, 09:31
Добрый день!

Подскажите такой вопрос - имеется сервер ОРС на 500 точек, установлен на компьютере, где расположена основная мастерскада - с обменом и работой все отлично.
Теперь возникла необходимость подключить к данному ОРС серверу еще один клиент мастерскады, но на другом компьютере. Связь по сети имеется, но при выборе ОРС сервера в новой мастерскаде пишет, что отказано в доступе.
Как можно решить это проблему, и подключить к серверу еще один клиент мастерскады?

SCADAMaster
17.06.2014, 11:39
Для работы с удаленным OPC нужно настраивать DCOM. Инструкция по настройке идет в комплекте с MasterSCADA (Пуск->MasterSCADA->Документация). Она проверялась на только что установленных ОС.

ЕвгенийТ
03.07.2014, 11:25
Добрый день!

Есть задача создать систему удаленной диспетчеризации. Имеется около 3000 счетчиков 60 различных моделей. Некоторые счетчики имеют протокол Modbus, но у большинства свой протокол обмена. Возможно ли при помощи GSM-модемов, данного OPC-сервера и Masterscada организовать данную систему? До этого с подобного рода задачами не сталкивался.

SCADAMaster
03.07.2014, 11:54
Можно, но нестандартные протоколы обмена нужно реализовывать самостоятельно через скрипты. Документация по разработке собственных протоколов есть на странице загрузки ОРС сервера:
http://insat.ru/prices/info.php?pid=6944
http://www.insat.ru/products/Universal_MasterOPC/MU_MasterOPC_Server_API_UG.pdf
Также можно сначала проверить - возможно у отдельных счетчиков есть уже готовые ОРС серверы.

dspinreg
09.07.2014, 14:03
Скажите, а планируется ли добавить функционал для работы с внешними СУБД? Если да, то когда этого можно ждать?


После выхода 3 версии это будет возможно.


Добрый день.
Вышла 3 версия, по-прежнему, работа только с SQLite3.
Видимо придется ждать следующей версии? :(

SCADAMaster
09.07.2014, 15:19
Мы не собираемся добавлять другие базы данных, на таком же уровне как сейчас SQLite.
Штатными средствами Lua можно подключать другие базы данных. Но примеров подключения других БД к нашему ОРС серверу у нас еще нет.

dspinreg
10.07.2014, 05:24
Мы не собираемся добавлять другие базы данных, на таком же уровне как сейчас SQLite.

Думаю, во многих случаях достаточно было бы поддержки SELECT, INSERT, UPDATE, DELETE.


Штатными средствами Lua можно подключать другие базы данных. Но примеров подключения других БД к нашему ОРС серверу у нас еще нет.

То есть, на сегодняшний день еще никому не удалось это проделать из Lua-скриптов MasterOPC?
Если у кого-то есть наработки в этой области, поделитесь пожалуйста.
dspinreg@mail.ru

dspinreg
04.08.2014, 14:13
Возник такой вопрос:
Можно ли записать скриптом NULL в значение тега?
Если можно, то нужен пример или подсказка.

SCADAMaster
04.08.2014, 16:28
Нет null записать нельзя.
Зачем вам это нужно? Почему нельзя записать с плохим признаком качества?

dspinreg
05.08.2014, 05:28
Собираемые данные архивируются в БД при каждом изменении значения, либо качества.
Null нужен для того, чтобы в программе визуализации данных, которая не обращает внимания на OPC-качество, было четко видно отсутствие данных (например, при нарушении связи с опрашиваемым прибором).

SCADAMaster
05.08.2014, 18:28
Так может быть вам на этапе записи в базу данных, производить обработку признака качества, и если плохой записать Null?

dspinreg
06.08.2014, 05:28
Так может быть вам на этапе записи в базу данных, производить обработку признака качества, и если плохой записать Null?
На этапе записи в базу данных нет возможности это реализовать.

SCADAMaster
06.08.2014, 08:04
Почему?
Опишите последовательность записи - каким ПО вы производите работу с ОРС сервером?

dspinreg
06.08.2014, 12:14
Схема следующая:
Прибор --(*)--> OPC-сервер --(OPCDA)--> FSGateway --(SuiteLink)--> IndustrialSQL
* В соответствии с протоколом обмена, прибор опрашивается Lua-скриптом, полученное значение записывается в OPC-тег.

SCADAMaster
06.08.2014, 17:58
Null в тег записать нельзя. Вам все таки нужно попробовать обработать данные в самой базе данных (подредактировать SQL запрос или хранимую процедуру).

energvk
21.08.2014, 13:10
Не идет опрос плк через модемную связь. Соединение между модемами устанавливается (вижу по диоду модема), но opc не отправляет запрос на чтение. При подключении напрямую, все работает. Или на 32 точки opc не поддерживает передачу данных через модем?

energvk
21.08.2014, 18:22
нет,вижу,что в 3-й версии поддерживает модем, тогда непонятно в чем проблема...

energvk
22.08.2014, 11:20
Вот лог опроса


22-08-2014 10:08:14.562 modem:Набор номера ATD8981xxxxxxx
22-08-2014 10:08:14.562 баграмяна-22а:Запрос 2:баграмяна-22а:HOLDING_REGISTERS
22-08-2014 10:08:14.562 баграмяна-22а:Превышение таймаута баграмяна-22а:HOLDING_REGISTERS
22-08-2014 10:07:43.937 modem:Набор номера ATD89814681060
22-08-2014 10:07:43.937 баграмяна-22а:Запрос 1:баграмяна-22а:HOLDING_REGISTERS
22-08-2014 10:07:43.937 баграмяна-22а:Превышение таймаута баграмяна-22а:HOLDING_REGISTERS
22-08-2014 10:07:43.875 modem:Звонок невозможен.Модем не подключен
22-08-2014 10:07:40.265 баграмяна-22а:Запрос 1:баграмяна-22а:HOLDING_REGISTERS
22-08-2014 10:07:40.265 Server:Cтарт конфигурации C:\Documents and Settings\All Users\Application Data\InSAT\MasterOPC Universal Modbus Server\SERVERCFG\bagramyana-22a.mbp
22-08-2014 10:07:40.265 Server:MasterOPC Universal Modbus Server Demo 32 Build - 3.0.0.4


Вот, тишина после соединения
14131

Вот конфиг
14132
(в расширении нужно .txt убрать, иначе не грузилось на сайт)

Что неправильно в конфигурации может быть?

SCADAMaster
22.08.2014, 11:46
Что за модем? Проходит ли строка инициализации для этого модема (можно проверить подключившись к модему терминалом и введя строку инициализации, которая идет в OPC)?

energvk
22.08.2014, 12:33
Модем Cinterion MC52i. В лектусе строка инициализации пустая и всё работает. В masteropc также делал пустую строку, но эффект одинаковый.

ATE0V1X4&C0&D2&S1S0=0S7=60+CBST=71,0,1 дает ERROR

SCADAMaster
22.08.2014, 12:52
Попробуйте эти команды записать отдельно (на какую то из них он не реагирует или не может воспринять всю строку целиком), после этого подаем ATW (запись в память модема). В строке инициализации в OPC пишем ATZ (сброс к настройкам, которые задали ранее)

energvk
22.08.2014, 13:29
Попробуйте эти команды записать отдельно (на какую то из них он не реагирует или не может воспринять всю строку целиком), после этого подаем ATW (запись в память модема). В строке инициализации в OPC пишем ATZ (сброс к настройкам, которые задали ранее)

Помогло, спасибо большое.
P.s.
Целиком строку не воспринимал.

energvk
22.08.2014, 14:40
Снова проблема: несмотря на то, что стоит период опроса 1 час, опрос идет постоянно. Т.е. опросил все переменные, получил данные, качество ОК.
14135
и начинает новый дозвон, соединение, опрос и так по кругу без остановки. Почему так?
14136

SCADAMaster
22.08.2014, 14:51
Попробуйте обновить вашу версию до текущей - направьте запрос на scada(собка)insat.ru

energvk
22.08.2014, 15:50
Обновление помогло. Спасибо

MUPVKH_VLG
11.11.2014, 14:39
Подскажите о подключении MasterOPC Universal Modbus Server к ПЛК 160, с ПЛК 150 сервер работает хорошо, а вот с ПЛК 160 выдает сообщение о невозможности соединения. Само соединение с ПЛК 160 конечно работает с CoDeSys удаленно, с той же машины где установлен и OPC.

SCADAMaster
11.11.2014, 14:49
Настроен ли у вас в контроллере протокол Modbus? То есть добавили ли вы в PLC Configuration элемент Modbus (Slave), а в него переменные?
Инструкция по настройке ОРС и контроллера есть на странице загрузки сервера:
http://insat.ru/prices/info.php?pid=6944

MUPVKH_VLG
11.11.2014, 16:03
В ПЛК 160 такая -же программа что и в ПЛК 150. Основа исполнительного кода - это некий шаблон для однотипных объектов который привязывается к конкретным особенностям конкретного объекта. При этом порядка 100 объектов выполненных на базе ПЛК 150 работает с ОРС без особых проблем, а новые объекты в количестве 4 штук на базе ПЛК 160 не отвечают. Конечно все в кофигураторе ПЛК есть, в том числе и Modbus (Slave) с переменными.

SCADAMaster
11.11.2014, 16:10
А что пишется в логе ОРС сервера?
Как мы понимаем у вас идет связь по Modbus TCP - устанавливается ли соединение по IP адресу? На вкладке "запросы" происходит ли посылка запроса?
Возможно какие то проблемы с самим контроллером - возможно у него по каким то причинам не работает Modbus TCP (у контроллеров ОВЕН такое наблюдается, например при рестарте программы из Codesys).

MUPVKH_VLG
11.11.2014, 16:35
Да используется Modbus TCP. Но как я писал выше нет соединения. Выводятся сообщения: попытка соединения с "IP" 502, ошибка установления соединения с "IP" 502. Что вы имеете ввиду говоря, что проблемы с контроллером - не работает Modbus TCP. Если физический интерфейс Ethernet , то исполнительный код технологической программы "закачивается", отлаживается и редактируется на месте именно по Ethernet интерфейсу. По COM порту прописывается только IP адрес. В дальнейшем работа с объектом происходит удаленно, из офиса из Codesys и у нас не было случая что-бы при рестарте программы, сброса программы разной глубины, в плоть до заводских, происходил "слет" Modbus TCP, хотя повторюсь я не совсем понимаю, что вы имеете ввиду.

SCADAMaster
11.11.2014, 16:47
Выводятся сообщения: попытка соединения с "IP" 502, ошибка установления соединения с "IP" 502.
Это явно проблема контроллера - возможно не открывается порт. Обратитесь в техподдержку ОВЕН.
Можете попробовать подключиться другим Modbus мастером (другим ОРС, панелью или программой для тестирования).


В дальнейшем работа с объектом происходит удаленно, из офиса из Codesys и у нас не было случая что-бы при рестарте программы, сброса программы разной глубины, в плоть до заводских, происходил "слет" Modbus TCP, хотя повторюсь я не совсем понимаю, что вы имеете ввиду.
Codesys работает не по Modbus TCP. Мы наблюдали данную ситуацию - связь с Codesys осуществлялась, а вот Modbus TCP не функционировал. Проблема была на ПЛК110-60

MUPVKH_VLG
11.11.2014, 16:56
Спасибо за внимание, только одно не понятно. Вы меня отсылаете к ОВЕН, но это форум ОВЕНа, или это не тот ресурс где я могу получить ответы на мои вопросы?! Пока переписывался с вами пробовал Lectus Modbus - та-же история. Спасибо!

SCADAMaster
11.11.2014, 17:33
В данной ветке форума рассматриваются вопросы по программному обеспечению Инсат (MasterSCADA и OPC серверы).
У вас же проблема с ПЛК - поэтому вам следует сделать тему в ветке про ПЛК.

energvk
10.12.2014, 14:47
Добрый день.
Суть вопроса: есть ПЛК, с которым opc связывается по gprs. В случае неудачного соединения попытка повторного соединения происходит через заданный период опроса. Нельзя ли сделать, скриптом хотя бы, чтобы в случае неудачи происходила повторная попытка соединения заданное количество раз через заданный интервал времени? А если уж это не помогло, то через заданный период опрса попытки повторялись.

SCADAMaster
10.12.2014, 17:41
Так сейчас так и работает. Если связи нет, то через определенное количество раз заданное количество попыток установить связь повторяется.

energvk
10.12.2014, 18:34
У меня не так. Если попытка подключения к серверу не удалась, следующая попытка выполняется после заданного интервала опроса. Вот если, подключился и на запрос не получен ответ, тогда повторно отправляются запросы заданное количество раз через заданный интервал времени

SCADAMaster
10.12.2014, 21:13
Сделайте тег типа ServerOnly, включите у него исполнение скрипта после чтения, и напишите примерно такой код:
count=0;
-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnRead()
val,qual=server.ReadCurrentTag();
if qual~=192 and count<2 then
server.PollCurrentDevice( );
count=count+1;
end;
end

Количество повторов можете задать произвольное. Можете сделать как настройку у устройства через дополнительные свойства.

Victor721
11.12.2014, 13:00
Добрый день. Через MasterOPC опрашиваю модули сбора данных (МСД), ОРС опрашивает три канала на каждом МСД, нужно сделать задержку между запросами каждого МСД и между последним запросом одного МСД и первым следующего, в настройках ничего подобного не нашел.

SCADAMaster
11.12.2014, 14:06
Зачем?
Может быть просто опрашивать каждый канал отдельным запросом?

energvk
12.12.2014, 11:49
Сделайте тег типа ServerOnly, включите у него исполнение скрипта после чтения, и напишите примерно такой код:
count=0;
-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnRead()
val,qual=server.ReadCurrentTag();
if qual~=192 and count<2 then
server.PollCurrentDevice( );
count=count+1;
end;
end

Количество повторов можете задать произвольное. Можете сделать как настройку у устройства через дополнительные свойства.
Спасибо,попробую. Хотелось бы уточнить,что означает qual~=192?

SCADAMaster
12.12.2014, 13:15
192 - это константа признака качества GOOD

energvk
12.12.2014, 16:39
Меня смутил знак "~=". Погуглил, понял,что имелось ввиду "!="

SCADAMaster
12.12.2014, 17:39
На языке Lua оператор "Не равно" обозначается как ~=

energvk
12.12.2014, 18:10
Ясно, не вникал ещё в Lua, спасибо.

energvk
15.12.2014, 14:23
Сделайте тег типа ServerOnly, включите у него исполнение скрипта после чтения, и напишите примерно такой код:
count=0;
-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnRead()
val,qual=server.ReadCurrentTag();
if qual~=192 and count<2 then
server.PollCurrentDevice( );
count=count+1;
end;
end

Количество повторов можете задать произвольное. Можете сделать как настройку у устройства через дополнительные свойства.

Спасибо, работает. А как сделать настройкой у устройства, ставлю этот скрипт, но не работает. И можно ли сделать задержку времени перед повторной попыткой?

SCADAMaster
15.12.2014, 14:48
А как сделать настройкой у устройства, ставлю этот скрипт, но не работает
Настройкой у устройства имелось ввиду сделать количество повторов.
Либо можно получить количество повторов устройства через функцию server.GetCurrentDeviceRetry( );


И можно ли сделать задержку времени перед повторной попыткой?
Функцией server.Sleep(50);
Где 50 - задержка в миллисекундах.

energvk
15.12.2014, 15:14
Настройкой у устройства имелось ввиду сделать количество повторов.
Либо можно получить количество повторов устройства через функцию server.GetCurrentDeviceRetry( );
То есть, как я понял в настройках устройства нужно выставить выполнение скрипта и ,соответственно, в скрипте прописать server.SetCurrentDeviceRetry(2). Только почему то не работает...

SCADAMaster
15.12.2014, 15:28
Не нужно ничего этого делать.
Все это описывалось если вы хотите сделать количество повторов не константой, а изменяемым значением. Если нужно чтобы количество повторов равнялось заданному в устройстве, то просто измените код на:
count=0;
-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnRead()
val,qual=server.ReadCurrentTag();
if qual~=192 and count<server.GetCurrentDeviceRetry( ) then
server.PollCurrentDevice( );
count=count+1;
end;
end

energvk
15.12.2014, 15:35
Понял) То есть без дополнительного тэга никак.

_Pavel_
24.12.2014, 23:35
Подскажите, пожалуйста:
Объявляю в конфигурации ПЛК MODBUS TCP Master, создаю в нём несколько тэгов и среди них тэг: 32bit output module
Создаю в Master OPC Server Modbus TCP SLAVE с соответствующим набором тэгов.
Присваиваю 32bit output module в ПЛК значение 16#FFFFFF00 - вижу в сервере правильное значение,
Присваиваю 16#FFFFFF01, значение в сервере не меняется - 16#FFFFFF00, хотя вижу в "запросах" данные передаются корректно.
Присваиваю 16#FFFFFFFF, значение в сервере 0.
Меняю в сервере свойство тэга "тип данных в сервере" с UINT32 на DOUBLE и всё становится хорошо.
Вопрос: почему не работает тип данных в устройстве UINT32 = в сервере UINT32 - для тэга ПЛК 32bit output module ?

SCADAMaster
25.12.2014, 18:09
Ошибка проявилась.
Ошибка будет исправлена в следующей версии (3.1.3)

_Pavel_
26.12.2014, 10:53
Сообщите, пожалуйста когда появится новая версия.

Вопрос для самоконтроля: для того чтобы тэг TCP мастера работал в режиме передачи "по изменению значения", период опроса ставим в ноль, правильно? Уже поставил и работает, спрашиваю, потому что в ПЛК для этого есть отдельная опция "by value change", а здесь нет.

SCADAMaster
26.12.2014, 13:00
Сообщите, пожалуйста когда появится новая версия.

Сегодня вечером.


Вопрос для самоконтроля: для того чтобы тэг TCP мастера работал в режиме передачи "по изменению значения", период опроса ставим в ноль, правильно? Уже поставил и работает, спрашиваю, потому что в ПЛК для этого есть отдельная опция "by value change", а здесь нет.
Да, ставите в ноль, тогда опроса не будет.

SCADAMaster
26.12.2014, 17:40
Новая версия выложена на сайт.

energvk
01.01.2015, 23:32
Хочу получать время последнего удачного опроса. Создаю тег timeofpoll (server_only, int32). В скрипте после чтения прописываю:


-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnRead()
val,qual=server.ReadCurrentTag();
if qual==192 then
timeofpoll= time.TimeNow( );
end;
end

Но после опроса никаких значений нет. Что я делаю не правильно?

SCADAMaster
02.01.2015, 09:48
Вы делаете неправильно. Во первых, вы не производите запись в тег (для этого есть специальные функции). Во-вторых тег ServerOnly никак не может определить был ли опрос корректным или нет. В-третьих, вы пытаетесь в тег типа Int записать время - так не получится.

Вам нужно сделать так - при помощи тега ServerOnly отследить признак качества другого тега, который непосредственно опрашивает регистр. Если признак будет достоверным, то произвести запись в текущий тег любого значения - оно запишется с текущей меткой времени.

function OnRead()
val,qual=server.ReadTagByRelativeName("Tag1");
if qual==192 then
server.WriteCurrentTag(true,192);
end;
end

На верхнем уровне - отслеживайте метку времени времени этой переменной. В MasterSCADA для этого есть функция расчета TimeStamp( ), также ФБ "Метка времени" (закладка "Работа со временем" палитры ФБ).

energvk
02.01.2015, 15:05
Огромное спасибо, всё получилось.

energvk
06.01.2015, 22:13
Выявился странный глюк. Почему то опрос устройства повторяется несколько раз:


06-01-2015 21:01:16.087 гайдара-99а.гайдара-99а:Стоп опроса устройства (t = 3101 ms) (H42 0,3091,10 )
06-01-2015 21:01:12.986 гайдара-99а.гайдара-99а:Старт опроса устройства
06-01-2015 21:01:12.986 гайдара-99а.гайдара-99а:Стоп опроса устройства (t = 8099 ms) (H42 0,3091,8 )
06-01-2015 21:01:04.886 гайдара-99а.гайдара-99а:Старт опроса устройства
06-01-2015 21:01:04.886 гайдара-99а.гайдара-99а:Стоп опроса устройства (t = 8426 ms) (H42 0,3421,4 )
06-01-2015 21:00:56.461 гайдара-99а.гайдара-99а:Старт опроса устройства
06-01-2015 21:00:56.461 гайдара-99а.гайдара-99а:Стоп опроса устройства (t = 8641 ms) (H42 0,3630,11 )
06-01-2015 21:00:47.819 гайдара-99а.гайдара-99а:Старт опроса устройства
06-01-2015 21:00:47.819 гайдара-99а.гайдара-99а:Стоп опроса устройства (t = 8991 ms) (H42 0,1496,4 )
06-01-2015 21:00:41.319 гайдара-99а:Соединение установлено хх.хх.ххх.х ххх
06-01-2015 21:00:38.829 гайдара-99а:Попытка соединения хх.хх.ххх.х ххх
06-01-2015 21:00:38.828 гайдара-99а.гайдара-99а:Старт опроса устройства
06-01-2015 21:00:38.822 Server:Cтарт конфигурации C:\ProgramData\InSAT\MasterOPC Universal Modbus Server\SERVERCFG\test.mbp
06-01-2015 21:00:38.822 Server:MasterOPC Universal Modbus Server Demo 32 Build - 3.1.3

Количество повторов равняется заданному количеству повторов при ошибке, но при этом не выдерживается время между повторами. И ошибок нет при опросе. Т.е. все переменные ОК, кроме тех, которые SERVER_ONLY (они COM_FAILURE)

SCADAMaster
07.01.2015, 10:00
Пришлите несколько скриншотов описывающих проблему. Также пришлите лог обмена с устройством. Для этого в свойствах сервера включите запись журнала и всех его событий, размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\Documents and Settings\All Users\Application Data\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам.
Также пришлите конфигурацию ОРС сервера.

energvk
07.01.2015, 10:42
Прилагаю лог и конфигурацию.
16032

Насколько я понял проблема (если это можно отнести к проблеме) связана с тем что переменные server only после опроса остаются в comm_failure и происходит повторный опрос, т.к. если их удалить из конфигурации, то такого не наблюдается.

SCADAMaster
07.01.2015, 15:47
Да, тег ServerOnly не будет меняться, если в него что либо не записать (скриптом или ОРС клиентом).
Сейчас внеочередной опрос у вас вызывает тег reconnect. Что вы хотите им сделать?
Сейчас у вас такой код:
function OnRead()
val,qual=server.ReadCurrentTag();
if qual~=192 and count<4 then
server.Sleep(5000);
server.PollCurrentDevice( );
count=count+1;
end;
end
Зачем вы анализируете признак качества тега ServerOnly? Вы хотите контролировать были ли теги опрошены? Тогда анализируйте обычные Modbus теги, при помощи функции server.ReadTagByRelativeName.

energvk
07.01.2015, 16:11
Изменил скрипт:


-- Processing
function OnRead()
t, q, ts = server.ReadTagByRelativeName("гайдара-99а.гайдара-99а.Pust");
if q~=192 and count<4 then
server.Sleep(5000);
server.PollCurrentDevice( );
count=count+1;
end;
end

В итоге в логе получаю


[07.01.2015 15:07:19.970] Err : гайдара-99а:ошибка установления соединения хх.хх.ххх.хх 502
[07.01.2015 15:07:19.970] SCRIPT : <<reconnect>> : reconnect:гайдара-99а.гайдара-99а.reconnect >> ReadTagByRelativeName : тег не найден
[07.01.2015 15:07:19.970] SCRIPT : <<timepoll>> : timepoll:гайдара-99а.гайдара-99а.timepoll >> ReadTagByRelativeName : тег не найден
[07.01.2015 15:07:19.970] Inf : гайдара-99а.гайдара-99а:Ошибка опроса устройства

И соответственно, повторной попытки соединения нет

SCADAMaster
07.01.2015, 18:22
[07.01.2015 15:07:19.970] SCRIPT : <<timepoll>> : timepoll:гайдара-99а.гайдара-99а.timepoll >> ReadTagByRelativeName : тег не найден


Прочитайте в справке описание к функции server.ReadTagByRelativeName

energvk
07.01.2015, 19:59
Спасибо, разобрался. 2 тега оказались лишними, записал скрипт в текущий тег

Vitaliy
09.01.2015, 14:11
Здравствуйте!
Вопрос начинающего.
Необходимо производит опрос 4 функцией Modbus аналогично этому: 16058, 16059. Пытаюсь это сделать по примеру из руководства 16060, 16061. Запрос-ответ есть, но как получить десятичное число из 4х байтного ответа не могу разобраться?

SCADAMaster
09.01.2015, 14:36
Здравствуйте!
Вопрос начинающего.
Необходимо производит опрос 4 функцией Modbus аналогично этому
А просто тег типа Float с регионом InputRegisters вам не подходит?


Запрос-ответ есть, но как получить десятичное число из 4х байтного ответа не могу разобраться?
Указываете в маске формат числа и нужное чередование байт.
Также можете посмотреть функцию modbus.ReadInputRegistersAsFloat( )

Vitaliy
10.01.2015, 13:34
Да, Float с регионом InputRegisters получилось, но для того, что бы разобраться, что не правильно делаю 16087,
local destmask={"byte","byte","float:10325476"};
вроде и тип переменной правильный и последовательность байт?
И как применять modbus.ReadInputRegistersAsFloat( ) совместно с server.SendAndReceiveDataByMask? Если можно, пример.

SCADAMaster
10.01.2015, 15:36
local destmask={"byte","byte","float:10325476"};
вроде и тип переменной правильный и последовательность байт?

Для четырехбайтовых переменных чередование обычно "старшим словом вперед" (32105476).



И как применять modbus.ReadInputRegistersAsFloat( ) совместно с server.SendAndReceiveDataByMask? Если можно, пример.
Что значит совместно?
Это две разные функции для разных задач. Примеры есть в справке, а также в документации на сайте.

DENIS_NAUM
15.01.2015, 14:24
Помогите, пожалуйста. Необходимо читать получаемые значения с модуля МСД-200(ТРМ-210 подключен к RS2) в Master OPC (на компьютере подключенному к RS1). Не могу разобраться. Выручайте. Приложил файл для конфигуратора МСД-200.

SCADAMaster
15.01.2015, 14:55
Вы хотите читать архивные значения или действующие значения?
Вам лучше обратится в техподдержку компании ОВЕН - узнайте как получить адреса Modbus регистров для опроса.

energvk
19.01.2015, 13:26
Что означает сообщение "Ошибка в процедуре записи 14"? Не могу найти описание ошибок...

SCADAMaster
19.01.2015, 13:48
Приложите скриншот ошибки и опишите обстоятельства при которых она проявляется.

energvk
19.01.2015, 13:55
Ошибка появляется при попытке произвести запись в один из тэгов
16258
16259
16260

SCADAMaster
19.01.2015, 14:11
Пришлите лог обмена с устройством. Для этого в свойствах сервера включите запись журнала и всех его событий, размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\Documents and Settings\All Users\Application Data\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам.
Также пришлите конфигурацию ОРС сервера.

energvk
19.01.2015, 14:18
Лог и конфигурация во вложении
16261

SCADAMaster
19.01.2015, 16:32
Ошибку вызывает set_yy. У вас у него установлен тип данных в устройстве double. Скорее всего вы имели ввиду int16 (остальные теги у вас имеют этот тип).
Рекомендуем также обновить версию до текущей 3.1.3.

energvk
19.01.2015, 16:36
Нет, дело в том, что в плк стоит тип 4byte, который в программе преобразуется как нужно. Пробовал и int32 и double, в общем различные варианты, отправил последний, так как он хотя читает информацию.

SCADAMaster
19.01.2015, 16:46
4 byte - это 2 Modbus регистра. Double - 8 байт, 4 Modbus регистра. Вам нужно установить Int32.
У вас ПЛК ОВЕН?
Почему у вас используется запись командой 6? Нельзя использовать 0x10?

И зачем вы установили такой тип данных? Вы ожидаете что ваша система проработает до 32 767 года?

energvk
19.01.2015, 16:54
Да, овен плк-160. Int32 установил, так как с панели выходит в таком формате, а дальше приходится преобразовывать. Поставил int32, в настройках сервера запретил использовать команду 0х06. Запись прошла успешно.

Andrei1401
06.02.2015, 13:53
У меня такой вопрос. Установил ОРС сервер версии 3.1.0 и никак не могу добиться чтобы значение float передавалось в SCADA систему с десятыми или сотыми. Подскажите пожалуйста как это можно сделать?

Ни так слетел объяснил. С ОРС сервера выходит сигнал float, а SCADA приходит целый.

Извиняюсь, мой косяк был, надо было просто обновить данные в SCADA системе.

SCADAMaster
06.02.2015, 15:20
Не понятно - вы решили проблему или нет?
Вы используете масштабирование? Проверьте правильные ли вы типы указали в настройках "Тип данных в устройстве" и "Тип данных в сервере".

_Pavel_
10.02.2015, 14:53
Прокомментируйте, пожалуйста:

Итак, каждые 100 мс ПЛК уменьшает значение на 100.
В р-не значения 5300 кабель вынимают.
ПЛК ещё некоторое время продолжает посылать пакеты (с числами всё меньше и меньше, тем более у Вас стоит 3 попытки повтора.
Наконец Мастер рвет коннект, пробует новое соединение и когда кабель втыкают - соединяется.
Но некоторое время остатки предыдущих пакетов с разорванного коннекта гуляют по сети.
Непонятно по какой причине slave их воспринимает как ликвидные, хотя: номер порта-источника другой, последовательность посылок по TCP разрушена.
Но соединение в Slave всё еще воспринимает данные из "фантомного соединения".
Причины:
1. Таймаут на разрыв соединения в slave много больше чем у мастера. +
2. Slave поддерживает мультисоединение - несколько мастеров на 1 slave (это вообще невообразимо - 2(3, 4 ...100?) мастера на 1 slave ???)

SCADAMaster
10.02.2015, 15:42
ПЛК ещё некоторое время продолжает посылать пакеты (с числами всё меньше и меньше, тем более у Вас стоит 3 попытки повтора.

Это не совсем правильное поведение.
В качестве примера приведем наш ОРС сервер в режиме "Мастер". Если сервер чувствует обрыв соединения (приходит ошибка от системной функции ОС), то сервер прекращает попытки повтора (зачем если коннекта нет), закрывает соединение, и пытается снова соединиться.



Наконец Мастер рвет коннект, пробует новое соединение и когда кабель втыкают - соединяется.
Но некоторое время остатки предыдущих пакетов с разорванного коннекта гуляют по сети.

Давайте представим такую схему. У нас есть один ПЛК и компьютер, которые соединены напрямую кабелем (перекрестным). Разорвали соединение.
Какие остатки предыдущих пакетов будут гулять по сети? И где они будут гулять?
Они могут накопиться в буфере контроллера, и потом (если контроллер не очистил буфер) выйти в сеть. У нас в ОРС сервере (в режиме Мастер) это учитывается, и буфер при новом соединении очищается.



Непонятно по какой причине slave их воспринимает как ликвидные, хотя: номер порта-источника другой, последовательность посылок по TCP разрушена.
Но соединение в Slave всё еще воспринимает данные из "фантомного соединения".

Почему нарушена последовательность посылок? Почему стал другой номер порта и источника?
После реконнекта сменился IP и порт?



1. Таймаут на разрыв соединения в slave много больше чем у мастера. +

У нас в Slave нет таймаута ожидания разрыва. Разрыв детектируется операционной системой и передается в программу.



2. Slave поддерживает мультисоединение - несколько мастеров на 1 slave (это вообще невообразимо - 2(3, 4 ...100?) мастера на 1 slave ???)

Наш Slave действительно поддерживает мультисоединение. Несколько странно почему это так удивляет главного разработчика фирмы ОВЕН. Большинство контроллеров поддерживает несколько соединений на один порт (Wago, Modicon, Delta), не говоря уже про различное ПО для операционной системы Windows (например эмулятор ModRSSim поддерживает до 1000 коннектов). Но к данной проблеме это отношения не имеет.

Филоненко Владислав
10.02.2015, 18:08
Это не совсем правильное поведение.
В качестве примера приведем наш ОРС сервер в режиме "Мастер". Если сервер чувствует обрыв соединения (приходит ошибка от системной функции ОС), то сервер прекращает попытки повтора (зачем если коннекта нет), закрывает соединение, и пытается снова соединиться.

Ошибка приходит по таймауту коннекта, а пока его нет (а это секунды и более) - ПЛК успеет 10-к пакетов послать при описанных настройках мастера.



Давайте представим такую схему. У нас есть один ПЛК и компьютер, которые соединены напрямую кабелем (перекрестным). Разорвали соединение.
Какие остатки предыдущих пакетов будут гулять по сети? И где они будут гулять?
Они могут накопиться в буфере контроллера, и потом (если контроллер не очистил буфер) выйти в сеть. У нас в ОРС сервере (в режиме Мастер) это учитывается, и буфер при новом соединении очищается.

Буфер мастера очищается, а буфер стека TCP/IP? На логе ясно видны попытки ретрансмита.
И зачем представлять самую простую схему - использование TCP/IP предполагает что мастер находится, к примеру, в Антарктиде, 30 хопов до slave-а.




Почему нарушена последовательность посылок? Почему стал другой номер порта и источника?
После реконнекта сменился IP и порт?

При новом соединении как минимум номер порта-source меняется именно для того чтобы можно было различить что это новое соединение а не обежавший планету 3 раза пакет.




У нас в Slave нет таймаута ожидания разрыва. Разрыв детектируется операционной системой и передается в программу.

Через сколько секунд разрыва? В протоколе TCP/IP нет нативных средств для определения разрыва от внешних причин (дядя Вася с топором) в момент разрыва, только по таймауту.



Наш Slave действительно поддерживает мультисоединение. Несколько странно почему это так удивляет главного разработчика фирмы ОВЕН. Большинство контроллеров поддерживает несколько соединений на один порт (Wago, Modicon, Delta), не говоря уже про различное ПО для операционной системы Windows (например эмулятор ModRSSim поддерживает до 1000 коннектов). Но к данной проблеме это отношения не имеет.
[/QUOTE]
О майн гот! Расскажите мне, что будет со SCADA если я в один порт с 2-х мастеров буду по очереди слать: то "температура реактора 100 градусов" то "500 градусов"? Вот что будет делать SCADA, будет ли там признак "Данные из разных источников"? Нельзя ли узнать на каких опасных производствах стоит Ваш OPC?
Много соединений на 1 порт нужно для Web-сервера, к примеру, где действия 1 пользователя не пересекаются с другими. А ModBus априори предполагает наличие только 1 мастера в сети.

Описанный выше апокалипсец как раз и происходит у Павла. Соединение закрыто, мастер открыл другое а OPC еще обслуживает старое соединение и получает негодные данные.

SCADAMaster
10.02.2015, 18:53
Буфер мастера очищается, а буфер стека TCP/IP?

Это зависит от реализации и настроек маршрутизатора. Маршрутизатор может сбрасывать буфер при отсутствии коннекта.



И зачем представлять самую простую схему - использование TCP/IP предполагает что мастер находится, к примеру, в Антарктиде, 30 хопов до slave-а.

А почему бы и не проверить?
Может быть г-н _Pavel_ проверит работу по такой схеме?



При новом соединении как минимум номер порта-source меняется именно для того чтобы можно было различить что это новое соединение а не обежавший планету 3 раза пакет.

Не обязательно. Порт источника может остаться как и в предыдущей сессии.
Кроме того если будет установлен новый коннект, а в буфере маршрутизатора остались данные, то эти старые данные будут записаны уже в новой сессии с новыми параметрами соединения (новым портом-source).



О майн гот! Расскажите мне, что будет со SCADA если я в один порт с 2-х мастеров буду по очереди слать: то "температура реактора 100 градусов" то "500 градусов"? Вот что будет делать SCADA, будет ли там признак "Данные из разных источников"? Нельзя ли узнать на каких опасных производствах стоит Ваш OPC?

Вы занимаетесь демагогией.
Отвечая на вопрос что будет если послать разный запрос с двух мастеров ответ прост - сервер пример и запишет в теги сначала первый запрос, затем второй запрос.
Точно также поступит и ваш контроллер, если добавлю в него два TCP порта (502 и 503).
И это полностью является проблемой разработчика - он может на уровне исполняемых контролировать подобные изменения (в MasterSCADA для этого есть параметр "блокировка обратной связи"). В конце концов существуют информационные системы - которые только получают данные, и не производят запись данных.



А ModBus априори предполагает наличие только 1 мастера в сети.

В контроллерах вашей разработки ни что не мешает мне добавить в узел Modbus(Slave) два TCP порта (или больше) и обращаться к ним с разных мастеров. Поэтому режим 2 мастеров у вас, просто реализован не так удобно как у других производителей.

_Pavel_
10.02.2015, 19:26
А почему бы и не проверить?
Может быть г-н _Pavel_ проверит работу по такой схеме?
.

Уже. Крайний тест, который я выкладывал был произведён "на столе" , где ПЛК подключен непосредственно к сетевому адаптеру компьютера.

Филоненко Владислав
10.02.2015, 19:29
Это зависит от реализации и настроек маршрутизатора. Маршрутизатор может сбрасывать буфер при отсутствии коннекта.
Вы занимаетесь демагогией.
Отвечая на вопрос что будет если послать разный запрос с двух мастеров ответ прост - сервер пример и запишет в теги сначала первый запрос, затем второй запрос.
Точно также поступит и ваш контроллер, если добавлю в него два TCP порта (502 и 503).
И это полностью является проблемой разработчика - он может на уровне исполняемых контролировать подобные изменения (в MasterSCADA для этого есть параметр "блокировка обратной связи"). В конце концов существуют информационные системы - которые только получают данные, и не производят запись данных.


В контроллерах вашей разработки ни что не мешает мне добавить в узел Modbus(Slave) два TCP порта (или больше) и обращаться к ним с разных мастеров. Поэтому режим 2 мастеров у вас, просто реализован не так удобно как у других производителей.

Но вот в чём нюанс - у меня на ПЛК это будут 2 различных slave c разными тегами (в терминологии SCADA) или 1 slave с разными портами , т.е. это осознанный (не значит правильный, но осознанный) выбор. А если OPC поддерживает мультимастерность на одном порту - это будет скрытая особенность, дыра как для случайных (как у Павла) так и для намеренных действий. И противоречие со стандартом ModBus. Кстати, на ПЛК можно не включать мультимастерность, а как это сделать для OPC?

Филоненко Владислав
10.02.2015, 19:30
Уже. Крайний тест, который я выкладывал был произведён "на столе" , где ПЛК подключен непосредственно к сетевому адаптеру компьютера.

Отключите мультимастерность OPC - если это возможно и наступит счастье.

_Pavel_
10.02.2015, 19:38
А где оно отключается?

SCADAMaster
10.02.2015, 19:51
Уже. Крайний тест, который я выкладывал был произведён "на столе" , где ПЛК подключен непосредственно к сетевому адаптеру компьютера.
То есть данные с прошлой сессии приходят? Тогда про какую Антарктиду идут рассуждения?


Но вот в чём нюанс - у меня на ПЛК это будут 2 различных slave c разными тегами (в терминологии SCADA) или 1 slave с разными портами , т.е. это осознанный (не значит правильный, но осознанный) выбор.
Slave можно сделать с разными портами и одинаковыми тегами.


И противоречие со стандартом ModBus.
Просим вас указать где в Modbus TCP есть запрет двух и более коннектов:
http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf


Отключите мультимастерность OPC - если это возможно и наступит счастье.
Мы считаем что это ничего не даст. Но можно поэкспериментировать.
В комплекте с нашим OPC сервером есть ранее упомянутая утилита ModRSSim (c:\Program Files\InSAT\MasterOPC Universal Modbus Server\MODRSSIM\) - это эмулятор Modbus Slave устройства.
Г-н _Pavel_ просим вас выполнить следующее. Установите данную утилиту, и переключите ее на режим Modbus TCP, и установите у нее в настройках один коннект (см. приложение). Воспроизведите ошибку с этой программой (вместо ОРС сервера - сервер не запускайте). Поступление пакетов с прошлой сессии можно будет увидеть по логу - кнопка Comms в правом нижнем углу. В настройках лога включите отображение времени "Show Times" - так будет легче увидеть данные после разрыва. Посмотрите какие данные поступят от контроллера после восстановления соединения.

Филоненко Владислав
10.02.2015, 20:10
То есть данные с прошлой сессии приходят? Тогда про какую Антарктиду идут рассуждения?

А что мешает данным из прошлой сессии попасть в сеть при восстановлении физического линка?



Просим вас указать где в Modbus TCP есть запрет двух и более коннектов:
http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf


Пункт 1.2 Там даже рисунок есть. И перечисление из 4-х вариантов соединений. Везде 1 мастер - (1..N) slave. Обратных вариантов нет.

И в пункте 4.2.1:


A MODBUS request has to be sent on the righ
t TCP connection already opened. The IP
address of the remote is used to find the TC
P connection. In case of multiple TCP
connections opened with the same remote, one connection has to be chosen to send
the MODBUS message, different choice criteria can be used like the oldest one, the
first one.

SCADAMaster
10.02.2015, 20:21
А что мешает данным из прошлой сессии попасть в сеть при восстановлении физического линка?

Давайте вернемся немного назад. Вы писали:


Буфер мастера очищается, а буфер стека TCP/IP? На логе ясно видны попытки ретрансмита.
И зачем представлять самую простую схему - использование TCP/IP предполагает что мастер находится, к примеру, в Антарктиде, 30 хопов до slave-а.

Вот сейчас г-н _Pavel_ оставил как раз самую простую схему. И 30 хопов в Антарктиде мы исключили, остается только ваш контроллер и наш OPC сервер. Поэтому давайте оставим Антарктиду г-ну Сидякину, и разберемся почему у вас в контроллере не происходит очищение буфера?



И в пункте 4.2.1:
A MODBUS request has to be sent on the right TCP connection already opened. The IP address of the remote is used to find the TCP connection. In case of multiple TCP connections opened with the same remote, one connection has to be chosen to send the MODBUS message, different choice criteria can be used like the oldest one, the
first one.

Это рекомендация, которая зачастую игнорируется - когда нужно получить быстро большой объем данных, используя несколько потоков (несколько соединений).
Посмотрите пункт пункта 3.1.1 - там несколько Modbus мастеров на шине.

Или:
A MODBUS request has to be sent on the right TCP connection already opened. The IP address of the remote is used to find the TCP connection. In case of multiple TCP
connections opened with the same remote, one connection has to be chosen to send the MODBUS message, different choice criteria can be used like the oldest one, the
first one. The connection has to maintain open during all the MODBUS communications. As described in the following sections a client can initiate several MODBUS
transactions with a server without waiting the ending of the previous one.
Как описано в следующих разделах клиент может инициировать несколько MODBUS операции с сервером, не дожидаясь окончание предыдущего.

Филоненко Владислав
10.02.2015, 20:39
Давайте вернемся немного назад. Вы писали:
Вот сейчас г-н _Pavel_ оставил как раз самую простую схему. И 30 хопов в Антарктиде мы исключили, остается только ваш контроллер и наш OPC сервер. Поэтому давайте оставим Антарктиду г-ну Сидякину, и разберемся почему у вас в контроллере не происходит очищение буфера?


А с чего оно должно происходить? Линк потерян, в буфере пакеты, пакеты не потеряли ещё актуальности. Линк возобновился - выдаём в сеть.



Правильно - одним Modbus клиентом. И это рекомендация, которая зачастую игнорируется - когда нужно получить быстро большой объем данных, используя несколько потоков (несколько соединений).
Посмотрите пункт пункта 3.1.1 - там несколько Modbus мастеров на шине.

Одним Modbus клиентом. А не 2-а на 1 сервер. а шина - это ethernet - там может быть всё что угодно - но 1 мастер - N slave.
При этом N коннектов 1 клиента к серверу - но внутри 1 мастер к slave. О чём чётко пишется в пункте 4.2.1.
Банальный здравый смысл, а учитывая что ModBus TCP это надстройка над обычным ModBus serial, где жёстко 1 мастер - то и транспортный уровень не должен менять логику. На рисунке как раз и показан пример со шлюзами из serial в serial через TCP.
Иначе получится абсурд - пишем письмо бабушке - а авиакомпания меняет язык в письме.

P.S. Вот когда ГОСТ рассматривают как "рекомендацию" - и возникают проблемы.



a client can initiate


1 клиент, один, а не 2. Если 1 мастер создаёт несколько параллельных запросов к разным данным - это можно.

_Pavel_
10.02.2015, 20:47
Г-н _Pavel_ просим вас выполнить следующее. .

Установил, пытаюсь. У меня на компьютере сразу кто-то подключается к этой утилите и занимает единственное соединение, пока не могу понять кто... вроде бы всё подозрительное убил диспетчером задач...
Если ПЛК успевает занять соединение , то после принудительного дисконнекта уже не может подключиться, т.к. соединение занято.
Успел отметить факт: произвёл дисконнект, значение в утилите замерло, проходит секунд 7-10, значение изменяется (в правильном направлении), потом ещё несколько секунд - ещё раз изменяется как будто пакет доходят. При этом ПЛК уже отключен, а соединение занял кто-то другой...

SCADAMaster
10.02.2015, 21:11
А с чего оно должно происходить? Линк потерян, в буфере пакеты, пакеты не потеряли ещё актуальности. Линк возобновился - выдаём в сеть.

Ну мы уже писали ранее - это не совсем корректное поведение. Нужно закрыть соединение, тогда пакеты будут удалены. А после восстановления связи уже посылать новые.
А если рассуждать как вы (данные не потеряли актуальности) - то что мы тогда вообще обсуждаем, получается что у _Pavel_ проблем никаких нет - данные то поступили актуальные.



1 клиент, один, а не 2. Если 1 мастер создаёт несколько параллельных запросов к разным данным - это можно.

Это не играет роли. Slave поддерживает несколько коннектов, от одного мастера или от нескольких зависит от конфигурации пользователя, т.е. от реализации конечного проекта.



Успел отметить факт: произвёл дисконнект, значение в утилите замерло, проходит секунд 7-10, значение изменяется (в правильном направлении), потом ещё несколько секунд - ещё раз изменяется как будто пакет доходят. При этом ПЛК уже отключен, а соединение занял кто-то другой...
Вам лучше смотреть по логу - по данным вы можете и не увидеть, так как они могут изменится быстро. Посмотрите какие запросы поступают после восстановления соединения, и спустя какое то время (раз вы говорите что пакеты доходят спустя какое-то время).

_Pavel_
10.02.2015, 21:21
У меня на компьютере сразу кто-то подключается к этой утилите и занимает единственное соединение, пока не могу понять кто... вроде бы всё подозрительное убил диспетчером задач...

Пардон, это ПЛК в сброшенном состоянии подключается...

_Pavel_
10.02.2015, 21:45
Вот посмотрите, пожалуйста, видео эксперимента: тынц (https://yadi.sk/i/smiqeIMFeb4S5)

SCADAMaster
10.02.2015, 21:54
Как мы поняли из вашего видео, старые запросы с контроллера все равно приходят (в контроллере 1000, а в программу поступило сначала 5400, а затем 4300). Поэтому вариант с ограничением коннектов в сервере ничего не даст.

_Pavel_
10.02.2015, 22:20
Да, старые запросы приходят. Но мне не понятен один факт: почему когда был разрыв соединения утилита всё равно показывала Connected 1/1. А после восстановления подключения, ПЛК не мог подключиться, висела ошибка "81". И в этом состоянии в утилиту как раз приходили старые пакеты. Пока не выполнил команду (в конце видео) закрыть/открыть порт.

SCADAMaster
11.02.2015, 08:12
Попробуйте посмотреть вкладку "Comms" - какие Modbus запросы поступали в это время.

lomtik
16.02.2015, 15:32
Добрый день, подскажите,
как будут вести себя в плане стабильности работа двух универсальных ОПС-серверов разных версий при работе с одним ПЛК-100. В краткосрочном периоде я потестил - все гуд, хотелось узнать что будет в долгосрочном. Нужно ли приводить опс-серверы к одной версии? На плк открыты порты 501 и 502, плк настроены в режиме модбас слэйв по тcp/ip. Версии ОПС - 3.1.3 (только оплатили, еще не забирали, скорее всего версия будет такой) и 2.0.0.11 (2.0.0.9) (покупали в 2012-м). И еще - кому интересно, 2,5 года назад я перешел с кодесисного глючного опс-сервера на универсальный от модбас. Сейчас у меня в сети общее кол-во ПЛК - 275 штук и два опс-сервера. На 1-м сервере всего плк - 240 штук, на втором - пока 35 штук. Второй сервер запускается по Dcom. Все работает очень гуд, ни одного сбоя или зависания за 2,5 года, только добавляю новые ПЛК. И еще добавлять и добавлять))). Проект один. Сейчас встал вопрос об открытии 2-го проекта, будем использовать теже ПЛК, только разделим сигналы и выведим их на теперь уже третий ОПС, который будет работать параллельно либо с первым либо со вторым опс-сервером.

SCADAMaster
17.02.2015, 11:27
Добрый день, подскажите,
как будут вести себя в плане стабильности работа двух универсальных ОПС-серверов разных версий при работе с одним ПЛК-100. В краткосрочном периоде я потестил - все гуд, хотелось узнать что будет в долгосрочном. Нужно ли приводить опс-серверы к одной версии?
Таких проверок не проводилось, но раз они не мешают друг другу в работе, то нет принципиальной разницы какой версии OPC сервера опрашивают ПЛК.

xatuman
18.02.2015, 10:29
Добрый день, вопрос такой: возможно ли с помощью Lua опрашивать http Web сервер? Пытался подключить внешнюю библиотеку luasocket, но успеха не добился. (Хочу получать данные с прибора Мемограф-М через его встроенный Web сервер, с последующим разбором ответа) Если можно, с примером. Спасибо.

_Pavel_
18.02.2015, 19:07
Я вернулся :). Посмотрите, пожалуйста видео (https://yadi.sk/i/jZwmKV6gem4N2) и скриншот.

16792

SCADAMaster
19.02.2015, 09:41
По скриншоту хорошо видно - после восстановления связи в ОРС сервер пришло сразу несколько "склеенных" запросов. То есть пока не было связи буфер контроллера наполнялся, а затем после установления связи все данные вышли в сеть.
Старые данные из контроллера также поступили - поэтому настройка одного коннекта в ОРС сервере ничего не даст. Нужно очищать буфер в контроллере.

_Pavel_
19.02.2015, 10:21
Спасибо. Ситуация немного проясняется...
А почему в поле Connected значение 1/1 даже когда соединения нет?

SCADAMaster
19.02.2015, 10:26
На этот вопрос мы ответить не можем - программа не нашей разработки.

xatuman
19.02.2015, 12:16
Прошу прощения, а что насчет моего вопроса #229?

Неко Оксана
19.02.2015, 12:28
Попробуйте эти команды записать отдельно (на какую то из них он не реагирует или не может воспринять всю строку целиком), после этого подаем ATW (запись в память модема). В строке инициализации в OPC пишем ATZ (сброс к настройкам, которые задали ранее)

а как записать их отдельно?

SCADAMaster
19.02.2015, 12:42
Добрый день, вопрос такой: возможно ли с помощью Lua опрашивать http Web сервер? Пытался подключить внешнюю библиотеку luasocket, но успеха не добился. (Хочу получать данные с прибора Мемограф-М через его встроенный Web сервер, с последующим разбором ответа) Если можно, с примером. Спасибо.
Мы не пробовали подключать эту библиотеку, потому сказать отчего возникают ошибки не можем.

SCADAMaster
19.02.2015, 13:09
а как записать их отдельно?
Разбить на отдельные команды и вводить по одной. После ввода, если ответ OK, значит прошла без ошибок. Еrror - значит ошибка.

xatuman
24.02.2015, 09:42
Подключил библиотеку luasocket для MasterOPC Server v.3.1.3 скопировав все каталоги библиотеки в каталог c:\Program Files\InSAT\MasterOPC Universal Modbus Server_3\. Теперь в каталоге есть файл lua51.dll (из дистрибутива MasterOPC Server) и lua5.1.dll (идёт с библиотекой, без него библиотека не подключается, в этом и была ошибка). Стесняюсь спросить: точку в названии dll случайно потеряли или так надо?
Кому интересно, до WEB сервера из MasterOPC Server достучался с помощью socket.connect и последующего receive, а простой http.request не работает...
Из консоли LUA работают оба метода.

tPorte
24.02.2015, 17:49
Здравствуйте! Подскажите пожалуйста! А MasrerOPC поддерживает протокол Овен? Я могу старые овеновские приборы без поддержки MadBus подключить к серрверу OPC?

SCADAMaster
24.02.2015, 18:08
Нет, протокол ОВЕН наш ОРС не поддерживает.

Филоненко Владислав
25.02.2015, 08:23
Используйте ОВЕНовский же OPC

kobrik
25.02.2015, 21:14
Здравствуйте SCADAMaster,

Пытался реализовать подключение контроллера S7-1200 v2.2 к OPC-серверу Modbus Universal MasterOPC Server про протоколу Modbus TCP. Для реализации проекта у меня версия STEP 7 Basic от V12 SP2, Modbus Universal MasterOPC Server версии 2.0.0.12, программируемый контроллер S7-1200 версии от v2.0, сетевое соединение между контроллером и рабочей станцией. Добавил блок МОДБАС ТСР, создав в базе данных массив с именем 400001, как написано было в инструкции и обратился к этому массиву типом данных Array [0..15] of Bool в блоке MB_Server. Контроллер реагирует на запись нового значения через ОРС сервер и обратно, т.е. связь установлена.
1. Подскажите как извлечь отдельные биты средствами самого OPC сервера или же непосредственно в SCADA-системе.
2. Напишите пожалуйста инструкции как передать (со стороны ПЛК) и обратиться средствами OPC к данным не из DB, т.е. реальных В/В.

Спасибо заранее,
Ариф

SCADAMaster
25.02.2015, 21:18
1. Подскажите как извлечь отдельные биты средствами самого OPC сервера или же непосредственно в SCADA-системе.

Можно у тега включить "Извлечение бита", но лучше использовать распаковку на уровне SCADA. Для этого используйте ФБ "Распаковка 32-битного значения" (закладка "Вычисления" Палитры ФБ).
Также рекомендуем вам обновить вашу версию MasterOPC до текущей - 3.1.3




2. Напишите пожалуйста инструкции как передать (со стороны ПЛК) и обратиться средствами OPC к данным не из DB, т.е. реальных В/В.

С этим вопросом вам лучше обратится в Siemens - узнать есть ли возможность получить доступ к входам и выходам из Modbus. Но скорее всего нельзя. Делайте промежуточные Modbus переменные.

kobrik
25.02.2015, 21:23
Можно у тега включить "Извлечение бита", но лучше использовать распаковку на уровне SCADA. Для этого используйте ФБ "Распаковка 32-битного значения" (закладка "Вычисления" Палитры ФБ).
Также рекомендуем вам обновить вашу версию MasterOPC до текущей - 3.1.3
Объясните пожалуйста как включить "Извлечение бита".




С этим вопросом вам лучше обратится в Siemens - узнать есть ли возможность получить доступ к входам и выходам из Modbus. Но скорее всего нельзя. Делайте промежуточные Modbus переменные.
Значит Modbus Universal MasterOPC Server работает с переменными базы банных?

SCADAMaster
26.02.2015, 06:08
Объясните пожалуйста как включить "Извлечение бита".

У каждого тега региона Holding Registers есть настройка "Извлечение бита из данных". Включите ее, а затем в настройке "номер бита данных" укажите какой бит вы хотите извлекать.



Значит Modbus Universal MasterOPC Server работает с переменными базы банных?
Наш OPC работает с Modbus переменными. Как эти переменные формируются, и что в них передается зависит от контроллера.

kobrik
26.02.2015, 21:37
У каждого тега региона Holding Registers есть настройка "Извлечение бита из данных". Включите ее, а затем в настройке "номер бита данных" укажите какой бит вы хотите извлекать.


Как было в инструкции, обратился к этому массиву типом данных Array [0..15] of Bool в блоке MB_Server. Далее включил настройку "Извлечение бита из данных". Указываю 0, для первого бита. При старте не получается прочитать статус. Также указал 1, та же история...

SCADAMaster
27.02.2015, 08:25
А без извлечения бита регистр вообще читается? Посмотрите на вкладку "Запросы" - есть ли ответ от контроллера.

kobrik
27.02.2015, 22:39
А без извлечения бита регистр вообще читается? Посмотрите на вкладку "Запросы" - есть ли ответ от контроллера.

Да, изменяю значения каждого бита в котроллере, изменяется значение в ОРС сервере. И наоборот.

SCADAMaster
28.02.2015, 09:45
Добавьте в конфигурацию два тега - один тег читает непосредственно регистр, второй - извлекает из этого же регистра бит. Сделайте скриншоты на которых будет видно состояние регистра и несоответсвующее ему состояние бита.
Также пришлите вашу конфигурацию.

kobrik
28.02.2015, 22:21
Добавьте в конфигурацию два тега - один тег читает непосредственно регистр, второй - извлекает из этого же регистра бит. Сделайте скриншоты на которых будет видно состояние регистра и несоответсвующее ему состояние бита.
Также пришлите вашу конфигурацию.

Скриншоты и конфигурация прилагаются к данному сообщению.

SCADAMaster
01.03.2015, 09:24
Тип в устройстве нужно оставить int16, а не bool.

kobrik
01.03.2015, 15:11
Тип в устройстве нужно оставить int16, а не bool.
Поменял, не помогло.

SCADAMaster
01.03.2015, 16:38
Приложите снова скриншоты и конфигурацию

kobrik
02.03.2015, 19:27
Приложите снова скриншоты и конфигурацию

Скриншоты и конфигурация прилагаются к данному сообщению.