Доброго времени суток! Вот тут (архив): OPC.zip Размещается OPC UA сервер на питоне (тестовый пример взят по поисковикам по теме кстати для малины) - я применял только как тестовый сервер для отладки клиента. Там же размещается и код клиента на C++ (тестовый код). Моя задача собрать клиента для устройства с Linux. Как код все работает. И компилятор для устройства применял. И данные с оборудования читаю. Вопрос в том, что информации, кроме рекламы с призывом купить, ничего найти не могу. Питон (библиотеки доступны) на том устройстве не реальны. Возможно ли читать сразу несколько параметров по этому протоколу... и вообще боюсь "напрягать" рабочее оборудование контроллером на Linux. А данные получать надо. Желающих предложить иные решения типа "костыли" просьба не беспокоить - контроллер SIEMENS предлагает услуги OPC UA к которым контроллер с Linux на борту должен получать параметры как клиет OPC UA. Просьба не предлагать Raspberry вместо упоминаемого контроллера с Linux с установленного на DIN рейку. Спасибо! Информации по протоколу вполне достаточно! И как говорил устройство самостоятельно уже читает параметры. Страшно читать кучу параметров частым обращением к этому Сименсу. По сему и вопрос по протоколу!
Доброго времени суток! Проблема: посылаю запрос: Код (Text): 3:""MSG_AlarmToPanel"."BitList"."External Voltage On"" А по Wirechark (снифер) проходит: Код (C++): 3""MSG_AlarmToPanel"."BitList"."External найден участок кода(предположительно) Код (C++): XML_N* XML_N::setAttr( const string &name, const string &val ) { // for(unsigned iA = 0; iA < mAttr.size(); iA++) if(mAttr[iA].first == name) { mAttr[iA].second = val; return this; } mAttr.push_back(pair<string,string>(name,val)); return this; } Пропускает всё до первого пробела. А Товарищи ABP-шники сделали имя параметра с пробелами. С Си работаю, но не с C++ и string-ом конкретно. И именно этот параметр важен очень для автоконтроля...а остальные параметры сделали нормально и я их спокойно читаю. Есть ли возможность исправить? Спасибо.
Ключ и сертификат просто для теста, а приложены не мною... всё взято из чужого опубликованного примера. Я только приспосабливаю его под себя и до этих параметров у меня дела нет. Предоставленный мне OPC сервер в изолированной сети - открытый. Вопрос был в другом.
Вопрос был на всякий случай. А то были такие, что на публичные сервера выкладывали боевые закрытые ключи... В частности на github коммитили по-недосмотру... В этом участке кода нет проверки на пробел. Идёт поиск пары "ключ->значение" в списке, если находит, то заменяет значение, если нет, то добавляет в конец списка.
Если ту самую строку Код (Text): 3:""MSG_AlarmToPanel"."BitList"."External Voltage On"" передаете в командной строке тестовому приложению, то из-за наличия пробелов получается множество аргументов. Код (Text): 3:MSG_AlarmToPanel.BitList.External Voltage On
Доброго времени суток! Всякие ключи и т.п. надо настраивать в самом проекте для устройства... ну и клиента. По поводу замены на перенос... есть клиент (браузер для пробы) с ним нет проблем т.е. я им читаю параметры по выбору. Но требуется оснастить контроллер с Linux доступом к Сименс-контроллеру. Снифером посмотрел все... и S7-Simatic принимает именно строку всю нормально. Похоже выложенный код типа для примера и ограничен. Вообще-то по правилам нормального тона все имена имеют подобный вид: Код (Text): I_HVSwitch1IsOn ManPower OpMode И по началу я не понял почему именно этот параметр (сообщение об ошибке подачи высокого) - подача высокого напряжения. Искал и в блоках входа (Inputs) там так же через пробел... и в глобальных данных через пробел. И вот лампа индикации напряжения 6.3 кВ на щите в блоке (Outputs) без пробела: Код (Text): O_LMHVSwitch1On На том и остановился. А Код (Text): External Voltage On это уже поиск альтернативы. Сначала думал вообще, что не все параметры можно прочитать этим примером кода, а это дело в методе, который для документации и совсем не автоматизации. Окончание "ция" совсем не означает что документация и автоматизация одно и то же... ну и программа это рабочий код, а совсем не объяснительная начальнику и синтаксическая(или иная) ошибка в выводе сообщений программы в консоль вовсе не означает в неправильности работы алгоритма программы... ну и т.п.
А в этом случае символ с кодом 0x20 будет заменён на 0x0D (или 0x0A - уж и не помню кто из них "перевод строки" и "возврат каретки" - не на слуху)
Я говорил о передаче параметров через командную строку, в примере для проверки просто вывожу все аргументы на печать Код (Text): ~$ echo -e '#include <stdio.h>\nint main(int argc, char **argv) { for (int n = 0; n < argc; printf("[%d](%s)\\n", n, argv[n]), n++); return 0; }' >/tmp/my_prog.c && gcc /tmp/my_prog.c -o /tmp/my_prog Передаю строку не экранируя пробелы Код (Text): ~$ /tmp/my_prog 3:""MSG_AlarmToPanel"."BitList"."External Voltage On"" [0](/tmp/my_prog) [1](3:MSG_AlarmToPanel.BitList.External) [2](Voltage) [3](On) Передаю строку экранируя пробелы Код (Text): ~$ /tmp/my_prog 3:""MSG_AlarmToPanel"."BitList"."External\ Voltage\ On"" [0](/tmp/my_prog) [1](3:MSG_AlarmToPanel.BitList.External Voltage On) Я высказал свеё предположение, если командная строка не используется, могли бы просто об этом сказать.
Да я понимаю вас! Мне передавать надо с пробелами... а вот в Wireshark: Код (Text): NodeId Identifier String: ""MSG_AlarmToPanel"."BitList"."External при этом: Код (Text): kto@debian:~/coding/OPC/tmp/libopc$ ./test.sh URL:192.168.0.234 Input(def 84): Set and uses secure policy 'None' and messages mode 'None' Browse node '84' list from 4 items node0: "FolderType (61)" node1: "Objects (85)" node2: "Types (86)" node3: "Views (87)" Read node '84'=0h Input(def 84): Set and uses secure policy 'None' and messages mode 'None' Browse node '84' list from 4 items node0: "FolderType (61)" node1: "Objects (85)" node2: "Types (86)" node3: "Views (87)" Read node '84'=0h Input(def 84): 3:""MSG_AlarmToPanel"."BitList"."External Voltage On"" Set and uses secure policy 'None' and messages mode 'None' ERROR: Browse: '0x80210000:' ERROR: Read: '0x80010000:' Input(def 84): 3:""MSG_AlarmToPanel"."BitList"."External Voltage On"" Set and uses secure policy 'None' and messages mode 'None' ERROR: Browse: '0x80210000:' ERROR: Read: '0x80010000:' Input(def 84): просточило до первого пробела: Код (Text): 3:""MSG_AlarmToPanel"."BitList"."External Voltage On"" Это уже не важно... найден параметр без пробела (выход на лампу индикации этого параметра) Вопрос теперь в другом: Есть ли возможность используя обращение к OPC UA серверу сразу в один запрос читать несколько параметров, а не по одному (вышеуказанный пример). Уж больно большой интервал в получении данных по списку по одному. Спасибо!
Доброго времени суток! Спасибо, что уделили внимание! Научился читать данные по необходимому списку имён за один запрос к OPC UA серверу. Вопрос снят! Спасибо!
Доброго времени суток! Вот реализовал доступ к OPC UA к серверу для сбора параметров из устройства IA240. Теперь возникло желание(задание) что бы это же устройство получало доступ к MySQL серверу с целью их сохранения. Вот перебрал много чего из исходников, но имеющийся кросс-компилятор не умеет того что умеет обычный на Debian. Если не сложно ткните носом на подходящие исходники для сборки libmysqlclient(mysql-client). Собственно вопрос в том, что на устройстве нет apt-get, aptitude и пр. Для устройства можно что собрать используя кросс-компиляцию (прилагается на диске) и не умеет cmake и пр. вот краткая информация об устройстве: Код (Text): www-data@Moxa:~$ uname -a Linux Moxa 2.6.9-uc0 #5 Wed Jun 28 14:35:20 CST 2017 armv4tl unknown Заранее благодарен.
@Igor68, версия 5.1 подойдет? Есть в OpenWrt https://github.com/openwrt/packages/blob/lede-17.01/utils/mysql/Makefile Посмотрите еще в Entware (или в старом Entware-ng). В Moxa вроде есть пакетный менеджер - ipkg или в вашем устройстве прошивка собрана без поддержки пакетов?
Доброго времени суток! Спасибо за отклик! Думаю пойдёт. Посмотреть смогу позже. Весь прикол в том, что тулчейн не умеет C11 и пр. Честно сказать cmake посмотрел... и там можно указать кросс-компиляцию, но затык с C11.
Ради уточнения: в Makefile указано: Код (Text): PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=\ http://mysql.he.net/Downloads/MySQL-5.1/ \ http://www.linorg.usp.br/mysql/Downloads/MySQL-5.1/ \ http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.1/ \ http://mirror.switch.ch/ftp/mirror/mysql/Downloads/MySQL-5.1/ То есть исходники, что надо скачать (сам Makefile не может через прокси). Ну хоть ссылки есть. Спасибо! Без прокси только дома
Вот про MySQL что сделал: https://moxa.ru/forum/index.php?/topic/69085-apachephp-bashcurl-и-доступ-к-серверу-mysql-костыли/ Клиент работает