УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

OpenSCADA под Windows (XP/7/8, CE6, EC7)


Автор Сообщение
Сообщение создано: 20. 10. 2015 [13:25]
ViacheslavMezentsev
Вячеслав Мезенцев
Создатель темы
Зарегистрирован(а) с: 20.10.2015
Сообщения: 10
Доброго.

Пытался ли кто-нибудь собрать целиком или частично исходники под Windows? Или есть какая-то существенная проблема в разрешении зависимостей для аналогов библиотек/компонентов? Желательно, конечно, в Visual Studio 20xx.

Такой ещё вопрос. Насколько реально сделать сборку системы как ПЛК для HMI панелей Weintek c Windows Embedded Compact 7 на борту (железо на ARM, в минимальные требования к ПЛК вроде подходят)? Кто-нибудь смотрел в этом направлении?


[Сообщение редактировалось 1 раз(а), в последний раз 20.10.2015 в 13:32.]
Сообщение создано: 20. 10. 2015 [17:48]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"ViacheslavMezentsev" wrote:

Пытался ли кто-нибудь собрать целиком или частично исходники под Windows? Или есть какая-то существенная проблема в разрешении зависимостей для аналогов библиотек/компонентов? Желательно, конечно, в Visual Studio 20xx.

Это вопрос ни кого-нибудь и не сборки, а целенаправленной адаптации.

Learn, learn and learn better than work, work and work.
Сообщение создано: 20. 10. 2015 [21:31]
ViacheslavMezentsev
Вячеслав Мезенцев
Создатель темы
Зарегистрирован(а) с: 20.10.2015
Сообщения: 10
То есть я не смогу просто добавить windows-аналоги библиотек чтобы что-то собралось? Нужно будет перелопачивать весь код убирая линуксовости типа работы с файловой системой, вызовы низкоуровневых функций ОС и т. п.?

Никто даже не пытался что-ли? Было сложно, лениво, никому не нужно или нет опыта сборки под Windows? Или привязка к Линукс жёсткая?
Сообщение создано: 20. 10. 2015 [22:17]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"ViacheslavMezentsev" wrote:

То есть я не смогу просто добавить windows-аналоги библиотек чтобы что-то собралось? Нужно будет перелопачивать весь код убирая линуксовости типа работы с файловой системой, вызовы низкоуровневых функций ОС и т. п.?

Я говорил про адаптацию, а не разлом СПО для работы на закрытой ОС, кроме того читаем документацию и не задаём подобных вопросов:
Поскольку система OpenSCADA разрабатывается на стандартной POSIX ОС, по принципам кроссплатформенности, то её адаптация на остальные ОС не составит проблемы.

Однако наивно полагать, что "не составит проблемы" означает, что делать там нечего.

"ViacheslavMezentsev" wrote:

Никто даже не пытался что-ли? Было сложно, лениво, никому не нужно или нет опыта сборки под Windows? Или привязка к Линукс жёсткая?

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

Однако есть указанный опрос, есть эта задача в списке работ и если появятся те которым это действительно нужно (что будет подтверждено готовностью работу оплатить, что логично для работы на коммерческой ОС), тогда согласно указанной задаче работы начнутся.

Learn, learn and learn better than work, work and work.
Сообщение создано: 20. 10. 2015 [23:26]
fido_max
Maxim Kochetkov
Contributor
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129
"ViacheslavMezentsev" wrote:

То есть я не смогу просто добавить windows-аналоги библиотек чтобы что-то собралось? Нужно будет перелопачивать весь код убирая линуксовости типа работы с файловой системой, вызовы низкоуровневых функций ОС и т. п.?


Просто "добавить" не получится

"ViacheslavMezentsev" wrote:

Никто даже не пытался что-ли? Было сложно, лениво, никому не нужно или нет опыта сборки под Windows? Или привязка к Линукс жёсткая?

Пару лет назад я пытался... но ничего не вышло. А сегодня ради интереса решил повторить:
1) Взял свежий cygwin x64
2) Поставил в нем все зависимости
3) Сконфигурировал:
JAVASCRIPT
./configure --disable-MySQL --disable-DBF --disable-FireBird --disable-PostgreSQL --disable-SNMP --disable-Siemens --disable-SoundCard --disable-QTStarter --disable-QTCfg --disable-Vision --disable-OPC_UA --disable-Serial --prefix=/home/1/oscada_run --enable-CoreLibStatic --enable-SQLite=incl

4) Исправил ошибки компиляции:
https://github.com/fidomax/openscada/commit/7092e2048f2d3d90996595a092f66dd61e198a1e
После этого оно собралось и даже запустилось! Правда толку от этого не очень много: openscada_start вывел табличку с выбором проекта а потом:
JAVASCRIPT
Имя проекта установлено в: "start"
ps: unknown option -- C
Try `ps --help' for more information.
2015-10-20T23:05:11 1[/] Загрузка!
2015-10-20T23:05:11 3[/sub_ModSched/] SO '*bd_SQLite' ошибка: No such process !
2015-10-20T23:05:11 4[/] Ни одного модуля не загружено. Ваша конфигурация сломана!
2015-10-20T23:05:11 4[/] Stop by signal 30 on load.
OpenSCADA system correct exit by code 30.
Program rezult: 30

т.е. скада впринципе способна запуститься, но модули подгружать она не умеет о чем собственно в момент компиляции были предупреждения:
JAVASCRIPT
*** Warning: This system cannot link to static lib archive ../../../../src/liboscada.la.
*** I have the capability to make that library automatically link in when
*** you link to this library.  But I can only do this if you have a
*** shared version of the library, which you do not appear to have.
*** But as you try to build a module library, libtool will still create
*** a static module, that should work as long as the dlopening application
*** is linked with the -dlopen flag to resolve symbols at runtime.
libtool: warning: undefined symbols not allowed in x86_64-unknown-cygwin shared libraries; building static only

При сборке ругалось на следующие моменты:
1) конструкции типа: #if !__GLIBC_PREREQ(2,4) (закоментировал ввиду отсутствия в cygwin glibc, для адаптации требуется отвязка от glibc)
2) pthread_rwlock_timedwrlock (либо пробовать другую библиотеку, например от mingw, либо искать замену функции)
3) crypt.h оказался какой-то совсем скромный, пришлось временно выкинуть шифрование пароля
4) не оказалось файла ieee754.h (нужно искать замену, либо иначе работать с big/little endian)
5) компилятору не понравилось приведение типа указателя it->second.thr
JAVASCRIPT
if(n_thr)	n_thr->childAdd("el")->setText(u2s(it->second.thr));
, пришлось указать тип жестко (возможно здесь потенциальная проблема в основном коде)
6) не оказалось файла <sys/prctl.h>, поэтому все что с ним связано так же было временно отключено.
7) модуль Serial жестко привязан к linux/serial.h - пришлось отключить весь модуль (здесь нужно будет дописывать работу с последовательным портом в windows)

ИТОГО: все не так уж и плохо. Задача номер один: научить скаду подгружать модули.
Сообщение создано: 21. 10. 2015 [08:14]
ViacheslavMezentsev
Вячеслав Мезенцев
Создатель темы
Зарегистрирован(а) с: 20.10.2015
Сообщения: 10
Роман, я вас понял. Возможно есть фирма, которая может оплатить "адаптацию" под Windows. Мне нужно пока только понять конкретно что это означает на практике. К тому же меня интересует не столько Windows настольная, сколько версия для встраиваемых приложений. Это далеко не одно и тоже.

Поскольку система OpenSCADA разрабатывается на стандартной POSIX ОС, по принципам кроссплатформенности, то её адаптация на остальные ОС не составит проблемы.

Это адаптация Windows для того, чтобы на ней запускалось линуксовое ПО, так что ли? Компилятор только gcc и отладочное окружение всё из мира unix'а (gdb и прочее)?
Я бы хотел иной "адаптации", мне бы хотелось иметь код, который собирается "родным" для Windows компилятором Microsoft. Кроссплатформенность в этом смысле. Без костылей. Я посмотрел по-диагонали на зависимости (аналоги под Windows используемых библиотек) и обще впечатление - разрешить их вроде бы возможно (без gcc), но если внутри кода есть всякие dev/null и прочие fork'и, то это проблема.

Максим, спасибо за конкретику, я мало работал c gcc под Windows. Если запустить gdb под Windows не так сложно и сторонние IDE будут удобны для отладки, попробую поизучать исходники под отладчиком.
Сообщение создано: 23. 10. 2015 [13:26]
ViacheslavMezentsev
Вячеслав Мезенцев
Создатель темы
Зарегистрирован(а) с: 20.10.2015
Сообщения: 10
Максим, можете подсказать почему не срабатывает ./configure ? Я поставил себе cygwin, скачал autoconf, automake и libtool (выбрал галочками почти всё, что имеет к этому отношение). Без понятия оно скачалось и установилось или просто скачалось. В терминале bash пишет:

JAVASCRIPT
usermvn2@mezentsev ~/projects/OpenSCADA
$ pwd
/home/usermvn2/projects/OpenSCADA
 
usermvn2@mezentsev ~/projects/OpenSCADA
$ ./configure --help
-bash: ./configure: No such file or directory


Насколько я понимаю, скрипт конфигурации отсутствует. Должен ли он быть (или появляется после autoreconf)? Может быть дополните build.pdf описанием случая с cygwin для тех, кто хочет попробовать поработать в Windows без виртуалки с Linux.

Ещё не ясно как удовлетворять зависимости для библиотек. Они есть в разных версиях. Какие конкретно нужно выбирать (с номерами версий)? Это где-то написано?

[Сообщение редактировалось 2 раз(а), в последний раз 23.10.2015 в 13:32.]
Сообщение создано: 23. 10. 2015 [14:48]
fido_max
Maxim Kochetkov
Contributor
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129
"ViacheslavMezentsev" wrote:

Должен ли он быть (или появляется после autoreconf)?

Появляется после autoreconf.
"ViacheslavMezentsev" wrote:

Может быть дополните build.pdf описанием случая с cygwin для тех, кто хочет попробовать поработать в Windows без виртуалки с Linux.

Да я особо и не делал ничего. Поставил все зависимости (как описано в табличке) и исправил ошибки компиляции. Строчку конфигурирования для сборки смотрите выше.
"ViacheslavMezentsev" wrote:

Ещё не ясно как удовлетворять зависимости для библиотек. Они есть в разных версиях. Какие конкретно нужно выбирать (с номерами версий)? Это где-то написано?

Ставил последние версии библиотек, которые были на выбор в cygwin (setup.exe).
Сообщение создано: 27. 10. 2015 [13:59]
ViacheslavMezentsev
Вячеслав Мезенцев
Создатель темы
Зарегистрирован(а) с: 20.10.2015
Сообщения: 10
Всё-таки инструкция нужна. Я не могу повторить ваших действий. bash не находит autoreconf, все мои попытки понять почему так происходит ни к чему не привели. Для людей, которые не знают о неявных предположениях и прочих само собой разумеющихся вещах, желательно все их явно прописать.

П.С. Дело было в невнимательности. Оказывается выбрал скачивание без установки и пакеты скачивались, но не устанавливались.

Тогда другой вопрос. Есть ли консольная команда типа apt get install, чтобы одной командой скачать и установить все нужные пакеты под cygwin? Заколебался мышкой накликивать непонятно что. Мне многие названия не говорят вообще ничего, а выглядят как-будто имеющие отношение.

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

П.С2. Некоторых библиотек я не нашёл, пока остановился на этом:
JAVASCRIPT
$ autoreconf -if
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac,
libtoolize: and rerunning libtoolize and aclocal.
libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
configure.ac:40: error: possibly undefined macro: AC_MSG_ERROR
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
configure.ac:55: error: possibly undefined macro: AC_CHECK_HEADERS
configure.ac:59: error: possibly undefined macro: AC_MSG_NOTICE
configure.ac:71: error: possibly undefined macro: AC_CHECK_LIB
configure.ac:162: error: possibly undefined macro: AC_DEFINE
autoreconf-2.69: /usr/bin/autoconf-2.69 failed with exit status: 1


[Сообщение редактировалось 2 раз(а), в последний раз 27.10.2015 в 15:01.]
Сообщение создано: 28. 10. 2015 [06:51]
ViacheslavMezentsev
Вячеслав Мезенцев
Создатель темы
Зарегистрирован(а) с: 20.10.2015
Сообщения: 10
Портянка остановилась на sqlite3:

JAVASCRIPT
========== Build modules check =============
./configure: line 18869: syntax error near unexpected token `sqlite3,sqlite3'
./configure: line 18869: `    PKG_CHECK_MODULES(sqlite3,sqlite3 > 3,'


Вроде я отмечал какие-то части этого sqlite3, попробую отметить все с sqlite3.
Вложенный файл

configure_20151028.log (Тип файла: application/octet-stream, Размер: 9.99 килобайт) — 1312 загрузок



2780