Попытка "адаптации" OpenSCADA к QNX 6.5
| 1 | 2 | 3 | Next » | Last
Author |
Message |
Written on: 10. 11. 2015 [11:30]
|
mr_dsv
Сергій Дорошка
Contributor
Topic creator
registered since: 31.10.2012
Posts: 31
|
Пытаюсь "заставить" работать OpenSCADA-у на QNX 6.5. Пока скорее из "любопытства"...
1. версия 0.8.13 (пробовал также добавлять исправления из 0.8.14 в правленые мной файлы)
2. Система запускается и "работает" (пока без QT) - только web.
3. Пока работаешь с системой от имени пользователя не входящего в группу "root" все хорошо. Запускаются WebCfg, WebCfgD, WebVision.
4. Если зарегистрироваться пользователем из группы "root" скады, то при попытке войти в WebCfg, WebCfgD - OpenSCADA "падает".
Описанное показано в приложенном видео.
В каком месте (хоть примерно) может быть проблема?
[This article was edited 3 times, at last 10.11.2015 at 11:45.]
Attachment
qnx4.avi.7z (File type: application/octet-stream, Size: 870.82 kilobytes) — 1738 downloads
|
Written on: 10. 11. 2015 [12:35]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"mr_dsv" wrote:
Пытаюсь "заставить" работать OpenSCADA-у на QNX 6.5. Пока скорее из "любопытства"...
1. версия 0.8.13 (пробовал также добавлять исправления из 0.8.14 в правленые мной файлы)
Осуществлять адаптацию сборки и работы нужно на рабочей версии, а не LTS!
"mr_dsv" wrote:
2. Система запускается и "работает" (пока без QT) - только web.
3. Пока работаешь с системой от имени пользователя не входящего в группу "root" все хорошо. Запускаются WebCfg, WebCfgD, WebVision.
4. Если зарегистрироваться пользователем из группы "root" скады, то при попытке войти в WebCfg, WebCfgD - OpenSCADA "падает".
В каком месте (хоть примерно) может быть проблема?
Если Вы берётесь за адаптацию, то Вы очевидно должны:
- владеть понятиями и особенностями кросплатформенной разработки;
- владеть спецификой целевой платформы;
- владеть кросплатформенным инструментарием сборки и отладки, использованным OpenSCADA;
- знать про структуру, функции и возможности OpenSCADA.
Ну и ответ на Ваш вопрос следует из вышеописанных требований — включайте генерацию дампов и анализируйте падения с помощью gdb.
Прямо-же Вам сказать про специфику окружения QNX или иного, адаптация под которое официально не осуществлялась, Вам тут никто не сможет. И вообще, на такие вопросы Вы очевидно сами должны отвечать, раз взялись.
Learn, learn and learn better than work, work and work.
|
Written on: 11. 11. 2015 [15:06]
|
mr_dsv
Сергій Дорошка
Contributor
Topic creator
registered since: 31.10.2012
Posts: 31
|
Спешу сообщить, что "пинок" - возымел действие... :D
Проблема была вызвана "спецификой" структуры dirent в qnx 6.5 :
"The struct dirent structure doesn't include space for the pathname. You must provide it:
struct dirent *entry;
entry = malloc( sizeof(*entry) + NAME_MAX + 1 );"
После исправлений соответствующих мест в исходниках "в стиле qnx" - проблема ушла, теперь работает при любом пользователе через WEB.
Имею такой вот вопрос.
При старте с QT интерфейсом выводится следующее предупреждение
WARNING: QApplication was not created in the main() thread.
QT библиотеки версии 4.8.7 собраны "заботливыми руками" других людей (СВД ВС).
Собственно вопрос: Насколько данное предупреждение критично? Потому как система "падает", судя по дампу где-то в "глубине" QT.
|
Written on: 11. 11. 2015 [15:16]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"mr_dsv" wrote:
Спешу сообщить, что "пинок" - возымел действие... :D
Проблема была вызвана "спецификой" структуры dirent в qnx 6.5 :
"The struct dirent structure doesn't include space for the pathname. You must provide it:
struct dirent *entry;
entry = malloc( sizeof(*entry) + NAME_MAX + 1 );"
После исправлений соответствующих мест в исходниках "в стиле qnx" - проблема ушла, теперь работает при любом пользователе через WEB.
Чудно, погляжу где это ещё есть и включу как вариант для QNX или может пойдёт и для Linux.
"mr_dsv" wrote:
Имею такой вот вопрос.
При старте с QT интерфейсом выводится следующее предупреждение
WARNING: QApplication was not created in the main() thread.
QT библиотеки версии 4.8.7 собраны "заботливыми руками" других людей (СВД ВС).
Собственно вопрос: Насколько данное предупреждение критично? Потому как система "падает", судя по дампу где-то в "глубине" QT.
Оно и на Linux выводится, если отладка включена. Но запуск в отдельно потоке это особенность подключения Qt-модулей к OpenSCADA, да и вообще это нормально, всегда работало и должно так работать.
P.S. Пробуйте проверять на простейшем, т.е. только UI.QTStarter, без остальных.
Learn, learn and learn better than work, work and work.
|
Written on: 12. 11. 2015 [23:57]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"roman" wrote:
Чудно, погляжу где это ещё есть и включу как вариант для QNX или может пойдёт и для Linux.
Переписал к рабочему виду на Linux и QNX!
Learn, learn and learn better than work, work and work.
|
Written on: 16. 11. 2015 [11:42]
|
mr_dsv
Сергій Дорошка
Contributor
Topic creator
registered since: 31.10.2012
Posts: 31
|
Удалось заставить работать QT интерфейс. Для этого пришлось пересобрать OpenScada с библиотеками QT версии 5.5.0 также собранных "заботливыми руками" других людей (СВД ВС).
В принципе все работает, но:
- при "хождении" по меню QTCfg в консоли появляются строки "This plugin does not support grabbing the keyboard"
- по завершении работы имеем "OpenSCADA system correct exit by code 16"
- далее - "QObject::~QObject: Timers cannot be stopped from another thread"
- далее "остатки валятся в кору". GDB указывает на проблему где-то в системной си библиотеке.
Скорее всего проблемы "кроются" где-то в QT (данной ее сборке). На прошлой версии (4.8.7) совсем не запускалось.
Для того что-бы OpenScada "работала" на QNX 6.5 хотя бы в таком виде пришлось исключить следующее:
- отключен выбор конкретного CPU, в qnx это делается иначе - нужно разбираться
- langinfo.h - не поддерживается, похоже с локализацией будут трудности
- crypt_r не поддерживается, использую стандартный crypt c DES (MD5 не поддерживается)
- структура dirent в qnx не содержит поля d_type, пришлось закомментировать. Кстати чем это чревато?
- в транспорте serial пришлось убрать CRTSCTS и высокоскоростные режимы (B230400 и выше). Кроме того думаю, что работа с com-портом в qnx имеет свою специфику.
Ну пока как-то так...
|
Written on: 16. 11. 2015 [12:40]
|
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
|
А может попробовать 6.6?
|
Written on: 16. 11. 2015 [12:44]
|
mr_dsv
Сергій Дорошка
Contributor
Topic creator
registered since: 31.10.2012
Posts: 31
|
Еще вот заметил (специфика QT 5.5.0 ?) - при попытке выбора графических элементов мнемосхем в консоли выводится "QPixmap::grabWidget is deprecated, use QWidget::grab() instead" и ничего не происходит...
|
Written on: 16. 11. 2015 [22:12]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"mr_dsv" wrote:
В принципе все работает, но:
- при "хождении" по меню QTCfg в консоли появляются строки "This plugin does not support grabbing the keyboard"
Скорее какой-то "серый" плагин Qt такое выдаёт, да и плагины Qt в OpenSCADA прямо не используются.
"mr_dsv" wrote:
- по завершении работы имеем "OpenSCADA system correct exit by code 16"
Размер стека мал наверное, а в QNX он похоже и не динамический.
"mr_dsv" wrote:
- далее - "QObject::~QObject: Timers cannot be stopped from another thread"
Они там и не останавливаются собственно из других потоков.
"mr_dsv" wrote:
- далее "остатки валятся в кору". GDB указывает на проблему где-то в системной си библиотеке.
Скорее всего проблемы "кроются" где-то в QT (данной ее сборке). На прошлой версии (4.8.7) совсем не запускалось.
Таки стек наверное.
"mr_dsv" wrote:
Для того что-бы OpenScada "работала" на QNX 6.5 хотя бы в таком виде пришлось исключить следующее:
- отключен выбор конкретного CPU, в qnx это делается иначе - нужно разбираться
GNU вроде, по идее можно опцией "-D_GNU_SOURCE", к параметрам компилятора, включить.
"mr_dsv" wrote:
- langinfo.h - не поддерживается, похоже с локализацией будут трудности
Да, локаль как-то по иному определяется.
"mr_dsv" wrote:
- crypt_r не поддерживается, использую стандартный crypt c DES (MD5 не поддерживается)
Тоже "-D_GNU_SOURCE" должно исправить.
"mr_dsv" wrote:
- структура dirent в qnx не содержит поля d_type, пришлось закомментировать. Кстати чем это чревато?
Черевато обнаружением нужных типов файлов, т.е. однострочный выбор файлов будет проблематичен. Вообще быть такое должно, может чем включается.
"mr_dsv" wrote:
- в транспорте serial пришлось убрать CRTSCTS и высокоскоростные режимы (B230400 и выше). Кроме того думаю, что работа с com-портом в qnx имеет свою специфику.
Вы не убирайте просто, а ставьте условия препроцессора типа:
#ifndef __QNXNTO__
#endif
или
#ifndef __QNX__
#endif
Какой-то должен подойти, попробуйте!
"mr_dsv" wrote:
Еще вот заметил (специфика QT 5.5.0 ?) - при попытке выбора графических элементов мнемосхем в консоли выводится "QPixmap::grabWidget is deprecated, use QWidget::grab() instead" и ничего не происходит...
Позже добавлю условие тут для Qt5, хотя на Linux он хоть и ругается, но и работает.
Learn, learn and learn better than work, work and work.
|
Written on: 20. 11. 2015 [14:13]
|
mr_dsv
Сергій Дорошка
Contributor
Topic creator
registered since: 31.10.2012
Posts: 31
|
"fido_max" wrote:
А может попробовать 6.6?
А нету там Photon-а!
"Пободался" еще с QT интерфейсом. Улучшений нет.
Применил Ваши "патчи" по-поводу "QPixmap::grabWidget...", данное сообщение ушло.
Кстати в vis_run.cpp из 0.9+r2311 есть похоже ошибки.
QPixmap img = rpg->grab(); - выдает ошибку, пришлось дополнить до:
QPixmap img = rpg->grab().toImage();
Сообщение "This plugin does not support grabbing the keyboard" в версии QT 5.5.0 выводится из-за "неполной реализации" данной сборки ее авторами.
В исходниках QT 5.5.0 в qplatformwindow.cpp предлагается следующая "заглушка":
bool QPlatformWindow::setKeyboardGrabEnabled(bool grab)
{
Q_UNUSED(grab);
qWarning("This plugin does not support grabbing the keyboard");
return false;
}
Кстати данное сообщение выскакивает и во многих других местах, делая QT-интерфейс OpenSCADA "неработопригодным" в данный момент.
"QObject::~QObject: Timers cannot be stopped from another thread" - при выходе возможно также следствие "ранней интерпретации", а может и нет...
"Игрался" с различными параметрами стека в компиляторе "qcc -N ..." (увеличивал до "неприличных" размеров 4М), но не помогло. Да и в QNX 6.5 вроде "обещают" динамический стек.
И так пробую в tuimod.cpp (QTStarter)
#ifdef __QNXNTO__
pthread_attr_t tattr;
// size_t size = PTHREAD_STACK_MIN + 0x400000; // > 4M
size_t size = 0x400000; // 4M
/* initialized with default attributes */
pthread_attr_init(&tattr);
/* setting the size of the stack also */
pthread_attr_setstacksize(&tattr, size);
SYS->taskCreate(nodePath('.',true), 0, Task, this,5,&tattr);
#else
SYS->taskCreate(nodePath('.',true), 0, Task, this);
#endif
Похоже нужно или ждать следующих реализаций библиотек QT от "СВД ВС" или попробовать "вступить с ними в дискуссию".
Кстати после установки переменных окружения LANG, LANGUAGE, LC_* в ru_RU.UTF-8 появилась частичная русификация интерфейса. В "рантайме" так вообще неплохо (мнемосхемы, графики, отчеты).
По поводу прочих отличий. Предлагаемая Вами опция "-D_GNU_SOURCE" не помогает т.к. (crypt_r, dirent.d_type, CRTSCTS и B230400...) просто отсутствуют в заголовочных файлах на QNX 6.5.
|
| 1 | 2 | 3 | Next » | Last
|
|