Страница 1 из 2

OPC Data Socket чтение и запись одновременно

Добавлено: 28 ноя 2013, 10:34
sergrlager
ситуация следующая. Есть две vi одна читает из одного OPC сервера, другая записывает во второй OPC сервер. При независимом запуске они работают, если запускать вместе или последовательно- то либо чтение либо запись не работает. Пробовал Выставить при открытии DataSocket чтение -запись, а сами теги в OPC серверах тоже сделал чтение-запись. Все тоже самое- по отдельности работает - вместе нет!!!! Такое впечатление что DataSocket не может одновременно и читать и писать даже в разные теги, в один тег не пробовал и читать и писать.

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 28 ноя 2013, 14:25
Borjomy_1
Ищете, какая из функций, хранящая локальные переменные между вызовами (это может быть неинициализированные сдвиговые регистры, фидбаки и пр), у вас вызывается и в одной и в другой VI, и делаете ее реентрантной.

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 29 ноя 2013, 12:56
sergrlager
решил проблему - путем отказа от DataSocket, чтение и запись произвожу через shared variables напрямую в OPC без IO servera.
В примерах этого не нашел - наковырял сам- все работает.

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 29 ноя 2013, 12:58
sergrlager
из поддержки Ni написали следующее (работаю как раз с массивами данных, в общем Data Socket -not good:))))))

1. на что необходимо обратить внимание, так это что для каждого OPC сервера необходимо иметь свое соединение Data Socket
http://digital.ni.com/public.nsf/allkb/ ... enDocument
http://digital.ni.com/public.nsf/allkb/ ... enDocument
2.если вы работаете с массивами то одновременно чтение и запись не возможно
http://digital.ni.com/public.nsf/allkb/ ... enDocument

Так же есть возможность одновременно писать и читать данные через data socket От нескольких клиентов (но в данном случае - скорее всего один opc сервер и один data socket)
http://digital.ni.com/public.nsf/allkb/ ... enDocument

Рекомендую вам посмотреть примеры (ниже) на одновременное считывание и запись.
http://digital.ni.com/public.nsf/allkb/ ... enDocument

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 01 дек 2016, 09:43
olib35
Добрый день всем. По-поводу DataSocket есть вопрос. Я соеденил два компа на гигабитной сетке (crossover), оба вин7. На одном запустил DataSocketserver от NI, на другом считываю значения. Сервер получает данные от рандом генератора с периодом 1 мс. На другом компе значение отображаются на иникаторе, но смена значений идет значительно медленнее, период где-то 100 мс. Это я сделал для теста. В техническом задании стоит, что на приемник будут сыпаться данные 5 мегабит/с. Получается я писать эти данные без потерь в реале не имею возможности? Перерыл интернет- везде стоит, что датасок обеспечивает скорость передачи чуть-чуть меньше tcp/ip, Андрей Дмитриев в своем посте писал, что на гигабитной сетке можно получить до 60 мегабайт/с. На обоих Виндах ничего кроме :labview: не запужено, компы дуалкор 2,7 Ггц, пиоритет Лабвиев поставил на максимальный. Кто-нибудь может это объяснить- в чем засада?

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 01 дек 2016, 22:30
Blackman
Почему DataSocket?
Lossless Communication with Network Streams: Components, Architecture and Performance
http://www.ni.com/white-paper/12267/en/

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 02 дек 2016, 09:46
olib35
Добрый день Bleckman. Разработчик прибора (ОС Linux) организовал Datasocket OPC для передачи данных. Я не хочу разработчику ставить условия, так как это затормозит весь проект, он (разработчик) и так уже опаздывает со сроками на 2 месяца. Де-факто- останется Datasocket. Всё-таки меня интересует, почему я получаю скорость намного ниже, чем теоретически возможно и как бы я мог проконтроллировать, где вставлены тормоза- на клиенте, сервер или сам виндовс тормозит. :dntknw:

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 02 дек 2016, 09:51
olib35
Небольшое дополнение. Я на серверной машине отправляю 20000 пакетов (2 байта) на клиенте получаю переменно от 4000 до 6000, около 3/4 пакетов теряются. :think:

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 02 дек 2016, 15:59
Borjomy_1
olib35, На каждое обновление значения приходится как минимум 1 TCP пакет (с подтверждением). Что такое пинг и что он означает, надеюсь, вам известно. Socket TCP не может выполняться бесконечно быстро даже при низкоуровневых операциях типа DataSocket. Вам действительно необходимо передавать каждый отсчет отдельно??? Не хотите передавать вместо одного отсчета пакет из N отсчетов? Естественно, тип данных меняется на массив.

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 03 дек 2016, 23:15
olib35
Приветствую Вас Borjomy_1. Данные будут передаваться именно массивами по 250 2-х байтовых значений, но тактовая чатота 5 мбит/с. Если я правильно считаю то 5мбит / (250значений х 16бит) получается сменна данных мозможна со скоростью 1250 раз в секунду, откидываю служебную информация при передаче, округляю до 1000 пакетов по 500 байт в секунду. Я пытался протестировать с 2-мя байтами и у меня уже идет потеря 3/4 информации. Мне бы хотя бы узнать направление поисков.

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 04 дек 2016, 07:58
Borjomy_1
olib35, Во-первых ничего не мешает вам сформировать пакеты размером по полкилобайта и отправлять их раз по 1 мс. Вы сразу выясните возможности. скиньте тестовые VI, посмотрим. Как вы сконфигурировали переменную?
Во-вторых, я не понимаю, в чем сложность заменить DataSocket на Network Stream. Это работа на полчаса.

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 04 дек 2016, 15:23
Blackman
olib35 писал(а):... Разработчик прибора (ОС Linux) организовал Datasocket OPC для передачи данных...
Смущает терминология Datasocket OPC.
Как я понимаю должно быть что то одно: или NI DataSocket Server или какой-то OPC Server for Linux.
В обоих случаях посмотрите настройки буфера как на серверной стороне, так и на стороне клиента.
Если данные передаются для мониторинга, то передавать каждый пакет (500 байт) не обязательно. Можно накапливать данные (например за одну секунду) и записывать их на сервер за один раз.

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 04 дек 2016, 18:39
Borjomy_1
да, и OPC на такие скорости не рассчитан. Его максимум - десятки миллисекунд. OPC предназначен для обмена данными в АСУТП второго уровня и выше.
Если обмен идет между программами на разных платформах, надежнее всего использовать прямое TCP соединение. Вот тут точно можно быть уверенным в скорости обмена.

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 04 дек 2016, 23:30
olib35
Уважаемые Blackman и Borjomy_1. Благодарю Вас за интерес к теме. Еще хочу уточнить, что Датасокет будет организован на linux, но я пока не имею хардваре от разработчика, мне известен только протокол обмена, поэтому попытался симулировать коммуникацию на двух Виндовс компютерах.

Re: OPC Data Socket чтение и запись одновременно

Добавлено: 05 дек 2016, 09:49
olib35
Добрый день. Вот, в принципе, как я тестировал. Не уверен обязательно ли указывать размер буфера на сервере, но я на всякий случай сделал так. Запускаю сервер, запускаю клиента. Клиент ждет значений, запускаю генерацию 20000 значений.