EnglishУкраїнськаmRussian
Login/New
Topic with many replies

Попытка "адаптации" OpenSCADA к QNX 6.5


Author Message
Written on: 20. 11. 2015 [18:24]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3742
"mr_dsv" wrote:

"Пободался" еще с QT интерфейсом. Улучшений нет.
Применил Ваши "патчи" по-поводу "QPixmap::grabWidget...", данное сообщение ушло.

Кстати в vis_run.cpp из 0.9+r2311 есть похоже ошибки.
QPixmap img = rpg->grab(); - выдает ошибку, пришлось дополнить до:
QPixmap img = rpg->grab().toImage();

Я собирал с реальным Qt5 и у меня всё работает!
Кроме того указанное некорректно, поскольку grab() возвращает QPixmap: QPixmap QWidget::grab(const QRect & rectangle = QRect( QPoint( 0, 0 ), QSize( -1, -1 ) ))

"mr_dsv" wrote:

Кстати после установки переменных окружения LANG, LANGUAGE, LC_* в ru_RU.UTF-8 появилась частичная русификация интерфейса. В "рантайме" так вообще неплохо (мнемосхемы, графики, отчеты).

Достаточно только LANG, обычно.

Learn, learn and learn better than work, work and work.
Written on: 28. 11. 2015 [09:17]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
"roman" wrote:

"mr_dsv" wrote:

- далее - "QObject::~QObject: Timers cannot be stopped from another thread"

Они там и не останавливаются собственно из других потоков.


Ubuntu 15.10 QT 5.4.2 то же самое сообщение и валится с коркой
Written on: 28. 11. 2015 [13:15]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3742
"fido_max" wrote:

"roman" wrote:

"mr_dsv" wrote:

- далее - "QObject::~QObject: Timers cannot be stopped from another thread"

Они там и не останавливаются собственно из других потоков.


Ubuntu 15.10 QT 5.4.2 то же самое сообщение и валится с коркой

К Qt значит вопросы, поскольку на Qt 4.8 и 5.3 ничего подобного нет.
Но поднял остановку таймеров OpenSCADA в обработчик закрытия окна, на пробу.

Learn, learn and learn better than work, work and work.
Written on: 30. 11. 2015 [08:20]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
Не помогло. Дело в QTStarter. Собрал без Vision и QTCfg:
JAVASCRIPT
Имя проекта установлено в: "start"
2015-11-30T09:07:16 1[/] Загрузка!
2015-11-30T09:07:16 1[/sub_Protocol/mod_OPC_UA/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_OPC_UA/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_BlockCalc/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_BD/mod_MySQL/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_BD/mod_SQLite/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_UI/mod_WebUser/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Protocol/mod_UserProtocol/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Protocol/mod_FT3/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_FT3/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Transport/mod_Sockets/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_DCON/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Protocol/mod_ModBus/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_ModBus/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_BD/mod_DBF/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_UI/mod_WebCfg/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_LogicLev/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_BD/mod_FireBird/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Transport/mod_SSL/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_Siemens/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_SoundCard/] Подключение модуля.
ALSA lib pcm.c:2267:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2267:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2267:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
2015-11-30T09:07:16 1[/sub_Archive/mod_FSArch/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Protocol/mod_SelfSystem/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Special/mod_SystemTests/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Protocol/mod_HTTP/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_SNMP/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_UI/mod_WebCfgD/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_System/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Special/mod_FLibSYS/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_JavaLikeCalc/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Special/mod_FLibMath/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Transport/mod_Serial/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_UI/mod_VCAEngine/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_UI/mod_QTStarter/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_Fastwel/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_BD/mod_PostgreSQL/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Special/mod_FLibComplex1/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_AMRDevs/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_UI/mod_WebVision/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_Archive/mod_DBArch/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_DAQ/mod_DAQGate/] Подключение модуля.
2015-11-30T09:07:16 1[/sub_UI/mod_VCAEngine/] Загрузка модуля.
2015-11-30T09:07:16 1[/sub_UI/mod_VCAEngine/wlb_originals/] Загрузка библиотеки виджетов.
2015-11-30T09:07:16 1[/sub_UI/mod_VCAEngine/wlb_originals/] Включение библиотеки виджетов.
2015-11-30T09:07:16 3[/] Нет доступа для создания политики реального времени для 'SYS_HighPr'. Создан поток по умолчанию!
2015-11-30T09:07:16 1[/] Запуск!
2015-11-30T09:07:16 1[/sub_Transport/] Пуск подсистемы.
2015-11-30T09:07:16 1[/sub_DAQ/] Пуск подсистемы.
2015-11-30T09:07:16 1[/sub_Archive/] Пуск/обновление подсистемы.
2015-11-30T09:07:16 3[/] Нет доступа для создания политики реального времени для 'sub_Archive.vals'. Создан поток по умолчанию!
2015-11-30T09:07:16 3[/] Нет доступа для создания политики реального времени для 'sub_DAQ.redundant'. Создан поток по умолчанию!
2015-11-30T09:07:16 1[/sub_Archive/] Пуск/обновление подсистемы.
2015-11-30T09:07:16 1[/sub_UI/] Пуск подсистемы.
2015-11-30T09:07:16 1[/sub_UI/mod_VCAEngine/] Старт модуля.
2015-11-30T09:07:16 1[/] Запуск завершён!
QFSFileEngine::open: No file name specified
2015-11-30T09:07:18 1[/] Останов!
2015-11-30T09:07:18 1[/sub_UI/] Останов подсистемы.
2015-11-30T09:07:18 1[/sub_UI/mod_VCAEngine/] Останов модуля.
QFSFileEngine::open: No file name specified
2015-11-30T09:07:18 1[/sub_Archive/] Останов подсистемы.
2015-11-30T09:07:18 1[/sub_DAQ/] Останов подсистемы.
2015-11-30T09:07:18 1[/sub_Transport/] Останов подсистемы.
2015-11-30T09:07:18 1[/sub_Protocol/] Отключение модуля 'OPC_UA'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'OPC_UA'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'BlockCalc'!
2015-11-30T09:07:18 1[/sub_BD/] Отключение модуля 'MySQL'!
2015-11-30T09:07:18 1[/sub_BD/] Отключение модуля 'SQLite'!
2015-11-30T09:07:18 1[/sub_UI/] Отключение модуля 'WebUser'!
2015-11-30T09:07:18 1[/sub_Protocol/] Отключение модуля 'UserProtocol'!
2015-11-30T09:07:18 1[/sub_Protocol/] Отключение модуля 'FT3'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'FT3'!
2015-11-30T09:07:18 1[/sub_Transport/] Отключение модуля 'Sockets'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'DCON'!
2015-11-30T09:07:18 1[/sub_Protocol/] Отключение модуля 'ModBus'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'ModBus'!
2015-11-30T09:07:18 1[/sub_BD/] Отключение модуля 'DBF'!
2015-11-30T09:07:18 1[/sub_UI/] Отключение модуля 'WebCfg'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'LogicLev'!
2015-11-30T09:07:18 1[/sub_BD/] Отключение модуля 'FireBird'!
2015-11-30T09:07:18 1[/sub_Transport/] Отключение модуля 'SSL'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'Siemens'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'SoundCard'!
2015-11-30T09:07:18 1[/sub_Archive/] Отключение модуля 'FSArch'!
2015-11-30T09:07:18 1[/sub_Protocol/] Отключение модуля 'SelfSystem'!
2015-11-30T09:07:18 1[/sub_Special/] Отключение модуля 'SystemTests'!
2015-11-30T09:07:18 1[/sub_Protocol/] Отключение модуля 'HTTP'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'SNMP'!
2015-11-30T09:07:18 1[/sub_UI/] Отключение модуля 'WebCfgD'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'System'!
2015-11-30T09:07:18 1[/sub_Special/] Отключение модуля 'FLibSYS'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'JavaLikeCalc'!
2015-11-30T09:07:18 1[/sub_Special/] Отключение модуля 'FLibMath'!
2015-11-30T09:07:18 1[/sub_Transport/] Отключение модуля 'Serial'!
2015-11-30T09:07:18 1[/sub_UI/] Отключение модуля 'VCAEngine'!
2015-11-30T09:07:18 1[/sub_UI/mod_VCAEngine/wlb_originals/] Отключение библиотеки виджетов.
2015-11-30T09:07:18 1[/sub_UI/] Отключение модуля 'QTStarter'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'Fastwel'!
2015-11-30T09:07:18 1[/sub_BD/] Отключение модуля 'PostgreSQL'!
2015-11-30T09:07:18 1[/sub_Special/] Отключение модуля 'FLibComplex1'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'AMRDevs'!
2015-11-30T09:07:18 1[/sub_UI/] Отключение модуля 'WebVision'!
2015-11-30T09:07:18 1[/sub_Archive/] Отключение модуля 'DBArch'!
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'DAQGate'!
OpenSCADA system correct exit by code 10.
QObject::~QObject: Timers cannot be stopped from another thread
./openscada_start: строка 119: 26493 Ошибка сегментирования                   (подготовлен дамп ядра) $pCmd $@
Program rezult: 139
Core dump process for back trace purchase to file start_core_2015-11-30_09.07.crash
Attachment

start_core_2015-11-30_09.07.crash (File type: text/x-apport, Size: 6.25 kilobytes) — 991 downloads
start_core_2015-11-30_09.06.crash (File type: text/x-apport, Size: 12.8 kilobytes) — 990 downloads
Written on: 30. 11. 2015 [11:26]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3742
"fido_max" wrote:

Не помогло. Дело в QTStarter. Собрал без Vision и QTCfg:

Можно было просто эти модули убрать.

"fido_max" wrote:

JAVASCRIPT
...
2015-11-30T09:07:18 1[/sub_DAQ/] Отключение модуля 'DAQGate'!
OpenSCADA system correct exit by code 10.
QObject::~QObject: Timers cannot be stopped from another thread
./openscada_start: строка 119: 26493 Ошибка сегментирования                   (подготовлен дамп ядра) $pCmd $@
Program rezult: 139
Core dump process for back trace purchase to file start_core_2015-11-30_09.07.crash


Если Qt по завершению главного объекта (приложения) перестал сам останавливать таймера при их разрушении, то очевидно это его проблемы.
Но, для проверки, включил патч, где остановка таймера проверки завершения OpenSCADA останавливается в деструкторе WinControl. Что судя по дампам вряд-ли поможет, поскольку он из QtApp->exec(); даже не выходит, что снова-же говорит о том что в Qt сломали обнаружение исполнения в не main-потоке.

P.S. Подозреваю, что Qt последних версий начал создавать отдельный поток при вызове QtApp->exec();, а текущий просто блокируя до завершения. Тогда и WinControl в текущем виде может уже не работать.
P.P.S. Вынес вызов останова таймера WinControl исключительно в его деструктор

Learn, learn and learn better than work, work and work.
Attachment

QTStarter.patch (File type: text/x-patch, Size: 1.94 kilobytes) — 923 downloads
Written on: 30. 11. 2015 [14:58]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
Не помогло.
Written on: 30. 11. 2015 [15:28]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3742
"fido_max" wrote:

Не помогло.

Проверьте, что патч именно последний и он корректно наложился, т.е. отключено tm->stop(); в WinControl::checkForEnd()!
Если это так тогда в OpenSCADA нет мест где её таймеры останавливаются в не том потоке где запущены.

Learn, learn and learn better than work, work and work.
Written on: 01. 12. 2015 [07:06]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
JAVASCRIPT
WinControl::WinControl( )
{
    tm = new QTimer(this);
    tm->setSingleShot(false);
    connect(tm, SIGNAL(timeout()), this, SLOT(checkForEnd()));
    tm->start(STD_WAIT_DELAY);
}
 
WinControl::~WinControl( )
{
    tm->stop();
}
 
void WinControl::checkForEnd( )
{
    if(!mod->endRun() && mod->startCom()) return;
//    tm->stop();
    QWidgetList wl = qApp->topLevelWidgets();
    for(int i_w = 0; i_w < wl.size(); i_w++) wl[i_w]->setProperty("forceClose",true);
    qApp->closeAllWindows();
}

Вот так оно сейчас выглядит.
Заметил еще одну вещь: если закрывать QtStarter кнопкой выход, либо закрытием окна - падает. А если в терминале Ctrl+C - то просто ругается на таймер и корректно закрывается без падения.
Written on: 01. 12. 2015 [10:46]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3742
"fido_max" wrote:

Вот так оно сейчас выглядит.

Правильно, значит это вопрос самого Qt тех версий и мне теперь понятно почему в стабильных дистрибутивах Qt версии 5.3.

Learn, learn and learn better than work, work and work.
Written on: 04. 04. 2017 [10:24]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3742
Активно сейчас занимаюсь адаптацией к Android, что за собой тянет унификацию сборочной системы, на предмет зависимостей OpenSCADA и сборки со статическими библиотеками.

Следовательно, если QNX участникам данной темы всё ещё интересен, то можете по-проверять это. Также можете создать отдельную страницу адаптации где отслеживать и решать возникающие проблемы.

Думаю скоро доберусь там и до Qt, а значит возможно озвученные тут проблемы возникнут и меня, которые возможно решатся выносом основного потока Qt в основной поток процесса и что попробую добавить, как опция. Однако предварительно погоняю ряд тестовых программ.

Learn, learn and learn better than work, work and work.



4281