Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Ошибка при подкючении к OPC серверу для чтения списка тегов  (Прочитано 13418 раз)

Ilya

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Здравствуйте. Пробую выполнить управление лампочкой на ардуине посредством скады. Использую "OPC server for Arduino". В ардуино загружаю пример из библиотеки "OPC".
    Запускаю сервер, в Simple-Editor ищу opc сервер, пытаюсь импортировать переменные, но появляется ошибка "Ошибка при попытке подключиться к OPC серверу "ArduinoOPCServer.1" для чтения списка тегов". Подскажите пожалуйста, в чем причина

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Здравствуйте!

Пожалуйста покажите пример кода, который Вы загружаете в Arduino. Также скажите, как ведет себя OPC-сервер Arduino, когда скада пытается считать с него теги? Запускается ли он? Установлены ли у Вас компоненты OPC-core components? (скачать можно здесь)

Ilya

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Спасибо за своевременный ответ. К сожалению, не смог ответить сразу. Я загружаю код из примеров блиотеки OPC "Uno LED". После установки компонентов OPC ситуация изменилась. Теперь ошибка: "Этот OPC сервер не содержит публичных тегов".

Сервер пишет следующее:

01.06.2016 11:21:12 > Connected client
01.06.2016 11:21:12 > Asking for available OPCItems from ArduinoSerial0
01.06.2016 11:21:13 > Disconnected client Simple-Editor DA Client

На всякий случай приложу код:
Код
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>

/*
 * Declaring the OPC object
 */
OPCSerial aOPCSerial;

/*
 * set led status from OPC Client
 */
int ledPin = 13;

/*
 * create a callback function for the OPCItem
 */
bool callback(const char *itemID, const opcOperation opcOP, const bool value){
  static bool ledValue = false;
 
  /*
   * if operation is a write command from OPC Client
   */
  if (opcOP == opc_opwrite) {
    ledValue = value;
   
    if (ledValue) 
      digitalWrite(ledPin, HIGH);
    else
      digitalWrite(ledPin, LOW);
  }
  else
    /*
     * read the led status
     */
    return ledValue; 
}

void setup() {
  Serial.begin(9600);
 
  pinMode(ledPin, OUTPUT);
 
  /*
   * OPC Object initialization
   */
  aOPCSerial.setup(); 
 
  /*
   * led OPCItem declaration
   */
  aOPCSerial.addItem("led",opc_readwrite, opc_bool, callback);
}

void loop() {
  /*
   * OPC process commands
   */
  aOPCSerial.processOPCCommands();
}

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 168
    • Просмотр профиля
    • Simple-Scada
Ilya, ваш пример работает!
попробуйте запустить OPC и редактор от администратора

Ilya

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Senpai, проделал все еще раз, запустив от имени администратора. Ошибка та же самая. При запуске "Editor" от имени администратора, сервер не пишет никакую реакцию.В "Debug and information window" пишет "Неверный дескриптор"
     Попробовал снова без режима администратора, на этот раз сервер отреагировал следующим образом:
Код
01.06.2016 17:01:16 > Connected client 
01.06.2016 17:01:16 > Trying to open COM5 port
01.06.2016 17:01:16 > COM5 port open
01.06.2016 17:01:16 > Trying to open COM5 port
01.06.2016 17:01:16 > COM5 port open
01.06.2016 17:01:17 > Asking for available OPCItems from ArduinoSerial0
01.06.2016 17:01:17 > Trying to close COM5 port
01.06.2016 17:01:17 > COM5 port closed
01.06.2016 17:01:17 > Trying to close COM5 port
01.06.2016 17:01:17 > COM5 port closed
01.06.2016 17:01:17 > Disconnected client Simple-Editor DA Clien

Стоит добавить, что использую Arduno Mega. При компилировании появляются ошибки, но скетч все равно загружается. Приведу код ниже,  если вдруг поможет
Код
In file included from C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:6:0,

                 from C:\Users\Р?лья\Documents\Arduino\libraries\OPC\examples\UNOLed\UNOLed.ino:1:

C:\Program Files (x86)\Arduino\libraries\Bridge\src/YunServer.h:24:2: warning: #warning "The use of YunServer is deprecated. Use BridgeServer instead!" [-Wcpp]

 #warning "The use of YunServer is deprecated. Use BridgeServer instead!"

  ^

In file included from C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:7:0,

                 from C:\Users\Р?лья\Documents\Arduino\libraries\OPC\examples\UNOLed\UNOLed.ino:1:

C:\Program Files (x86)\Arduino\libraries\Bridge\src/YunClient.h:24:2: warning: #warning "The use of YunClient is deprecated. Use BridgeClient instead!" [-Wcpp]

 #warning "The use of YunClient is deprecated. Use BridgeClient instead!"

  ^

In file included from C:\Users\Р?лья\Documents\Arduino\libraries\OPC\examples\UNOLed\UNOLed.ino:1:0:

C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:19:1: warning: 'typedef' was ignored in this declaration [enabled by default]

 };

 ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:25:1: warning: 'typedef' was ignored in this declaration [enabled by default]

 };

 ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:30:1: warning: 'typedef' was ignored in this declaration [enabled by default]

 };

 ^

In file included from C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:6:0,

                 from C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:1:

C:\Program Files (x86)\Arduino\libraries\Bridge\src/YunServer.h:24:2: warning: #warning "The use of YunServer is deprecated. Use BridgeServer instead!" [-Wcpp]

 #warning "The use of YunServer is deprecated. Use BridgeServer instead!"

  ^

In file included from C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:7:0,

                 from C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:1:

C:\Program Files (x86)\Arduino\libraries\Bridge\src/YunClient.h:24:2: warning: #warning "The use of YunClient is deprecated. Use BridgeClient instead!" [-Wcpp]

 #warning "The use of YunClient is deprecated. Use BridgeClient instead!"

  ^

In file included from C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:1:0:

C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:19:1: warning: 'typedef' was ignored in this declaration [enabled by default]

 };

 ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:25:1: warning: 'typedef' was ignored in this declaration [enabled by default]

 };

 ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src/OPC.h:30:1: warning: 'typedef' was ignored in this declaration [enabled by default]

 };

 ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp: In member function 'void OPCSerial::processOPCCommands()':

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:105:89: warning: converting to non-pointer type 'byte {aka unsigned char}' from NULL [-Wconversion-null]

                       Serial.println(byte_callback(OPCItemList[i].itemID,opc_opread,NULL));

                                                                                         ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:109:88: warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]

                       Serial.println(int_callback(OPCItemList[i].itemID,opc_opread,NULL));

                                                                                        ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:113:90: warning: converting to non-pointer type 'float' from NULL [-Wconversion-null]

                       Serial.println(float_callback(OPCItemList[i].itemID,opc_opread,NULL));

                                                                                          ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp: In member function 'void OPCNet::processOPCCommands()':

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:237:93: warning: converting to non-pointer type 'byte {aka unsigned char}' from NULL [-Wconversion-null]

                             client.print(byte_callback(OPCItemList[i].itemID,opc_opread,NULL));

                                                                                             ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:241:92: warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]

                             client.print(int_callback(OPCItemList[i].itemID,opc_opread,NULL));

                                                                                            ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:245:94: warning: converting to non-pointer type 'float' from NULL [-Wconversion-null]

                             client.print(float_callback(OPCItemList[i].itemID,opc_opread,NULL));

                                                                                              ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp: In member function 'void OPCEthernet::processClientCommand()':

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:387:79: warning: converting to non-pointer type 'byte {aka unsigned char}' from NULL [-Wconversion-null]

               client.print(byte_callback(OPCItemList[i].itemID,opc_opread,NULL));

                                                                               ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:391:78: warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]

               client.print(int_callback(OPCItemList[i].itemID,opc_opread,NULL));

                                                                              ^

C:\Users\Илья\Documents\Arduino\libraries\OPC\src\OPC.cpp:395:80: warning: converting to non-pointer type 'float' from NULL [-Wconversion-null]

               client.print(float_callback(OPCItemList[i].itemID,opc_opread,NULL));
« Изменён: 18 Августа 2021, 11:58:08 от Simple-Scada »

Ilya

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Я все еще не понимаю, почему у меня не работает. Помогите, пожалуйста. Хелп :'(

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Ilya, трудно сказать почему именно редактор не видит публичных тегов на OPC-сервере Arduino. У нас такой код работает. Эта строка регистрирует новый тег на сервере:
Код
aOPCSerial.addItem("led", opc_readwrite, opc_bool, callback);
и в ней всё корректно.

Пытались ли Вы добавить не только bool-теги, но и теги с другими типами данных (например int)? В этой теме есть много примеров. И ещё, удается ли увидеть теги утилитой ItemProperty?
« Изменён: 27 Апреля 2023, 09:41:50 от Simple-Scada »

Timur007

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Здравствуйте! Столкнулся с такой же проблемой. Сам проект разрабатывал на Win7 x 64.  Теперь переношу проект на машину которая будет стоять в цеху (WinXP x 86) и появляется эта ошибка. При поиске в редакторе OPC сервер сразу находится. При попытке импорта переменных выдает вышеописанную ошибку. В чем может быть проблема?
Проблема именно в связке OPC и Simple SCADA т.к. подключаюсь сторонней утилитой к OPC серверу я вижу все переменные и их значения.
« Изменён: 11 Июня 2016, 21:41:40 от Timur007 »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
О каком OPC-сервере идет речь? Вы установили компоненты OPC-core components? (скачать можно здесь). Также убедитесь, что скада не блокируется антивирусом.

Цитировать
...т.к. подключаюсь сторонней утилитой к OPC серверу я вижу все переменные и их значения.
Вы говорите о утилите ItemProperty, которая описана в сообщении выше? Если о другой, то проверьте через ItemProperty, видит ли она теги?
« Изменён: 27 Апреля 2023, 09:42:08 от Simple-Scada »

Timur007

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Использую OPC сервер Modbus бесплатную версию на 32 тега insat
Если просто регистрирую сервер в реестре bat файлом то все работает нормально
Если регистрирую сервер как сервис другим bat файлом то теги не видны в SCADA
« Изменён: 27 Апреля 2023, 09:42:37 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Вы пробовали подключиться утилитой ItemProperty? Удается ли найти сервер и увидеть теги?
Уточните, у Вас не видны только теги? Сам OPC-сервер виден? Если только теги, то убедитесь, что служба MasterOPC работает (для этого нужно перезагрузить компьютер после регистрации сервера).
« Изменён: 13 Июня 2016, 21:30:14 от Simple-Scada »

alex_karn

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Здравствуйте! у меня такой вопрос: Есть арендованый удаленный сервер со статическим IP. На нем установлен ОРС сервер INsat, и simple scada 2. ОРС сервер работает т.е. получает данные удаленно с контроллеров, так же scada server запущен видит ОРС сервер, запущены проекты в том чисде и демо. НО если я запускаю клиент скады на сервере то все работает, а вот с удаленного компьтера все зависает на фразе: "подождите....Выполняется поиск проектов на сервере:188.........173:8750 и в таком виде висит бесконечно не пишет ни чего! как исправить??????????????

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
alex_karn, это означает, что клиент отправил запрос серверу на получение списка проектов, но сервер не ответил. Это проблема связи между клиентом и сервером и на каком-то этапе эта связь обрывается/блокируется. Может возникать по следующим причинам:
  • сервер Simple-Scada не запущен на удаленном компьютере;
  • сетевой трафик сервера/клиента Simple-Scada блокируется фаерволом;
  • указан неправильный IP-адрес сервера, или порт на клиенте;
  • при необходимости нужно настроить на модеме сервера перенаправление трафика (NAT) на локальный IP-адрес и порт, чтобы внешний TCP трафик по порту 8750 перенаправлялся на локальный IP-сервера и порт 8750. Пример настройки для ZyXEL Keenetic на скрине;
  • нет связи между клиентом и удаленным сервером, или связь нарушена.
« Изменён: 01 Июля 2016, 09:17:42 от Simple-Scada »

AlPe

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
"Вы пробовали подключиться утилитой ItemProperty? Удается ли найти сервер и увидеть теги?
Уточните, у Вас не видны только теги? Сам OPC-сервер виден? Если только теги, то убедитесь, что служба MasterOPC работает (для этого нужно перезагрузить компьютер после регистрации сервера)."
У меня аналогичная проблема - работает OPC-сервер Fatek, ItemProperty видит его, но при попытке Connect пишет "Отказано в доступе, ClassID .....".

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
AlPe, OPC-сервер находится на удаленном компьютере или на локальном? Если на локальном, то попробуйте завершить работу OPC-сервера и затем подключиться через Itep Property. Утилита должна сама запустить OPC-сервер. Иногда это помогает, хотя ошибка "Отказано в доступе, ClassID ....." говорит о том что у приложения нет достаточных прав для подключения к OPC-серверу. Можно также попробовать запускать утилиту от имени администратора.
« Изменён: 16 Сентября 2016, 16:23:56 от Simple-Scada »