Показано с 1 по 5 из 5

Тема: Component Manager удаление компонента

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #4
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    1,044

    По умолчанию

    Доброго времени суток, уважаемые форумчане.
    Решил попробовать работу механизма TRY_CATCH при ошибке с повторным удалением компонента журнала.

    Результаты показаны на прикрепленном видео. Тестовую программу прикрепляю (без архива, так как используются только стандартные библиотеки).

    Краткие комментарии.
    Как было описано выше в сообщениях, если повторно удалять компонент, то система вылетает по исключению, на панели СПК загорается черный экран, так как будто бы в панели
    нет приложения. Для подключения из среды разработки нужно перезагрузить панель по питанию или из веб-конфигуратора. Этот эксперимент можно провести с тестовым проектом (TestComponentManager2), если галочка "Использовать TRY_CATCH" снята.

    Если галочка установлена, то попытка удаления компонента происходит в секции __TRY.
    Полный код PLC_PRG представлен ниже:
    Код:
    Cntr := Cntr + 1;
    
    IF AddCmp THEN
    	AddCmp := FALSE;
    	AddCntr := AddCntr + 1;
    	pCmp := Component_Manager.CMAddComponent2(Name,16#0305111E,ADR(udiCmpID),ADR(dwResult));
    END_IF
    
    IF DelCmp THEN
    	DelCmp := FALSE;
    	DelCntr := DelCntr + 1;
    	LogAdd2(LOG_STD_LOGGER, udiCmpID,CmpLog.LogClass.LOG_WARNING, CmpErrors.Errors.ERR_FAILED, 1,'Deleting Component');
    
    	IF NOT UseTC THEN
    		dwResult := Component_Manager.CMRemoveComponent(pCmp);
    	ELSE
    		__TRY
    			dwResult := Component_Manager.CMRemoveComponent(pCmp);
    		__CATCH(Exec)
    			strTemp := concat('IN CATCH SECTION! Deleting Component ERROR:',UDINT_TO_STRING(Exec));
    			LogAdd2(LOG_STD_LOGGER, udiCmpID,CmpLog.LogClass.LOG_WARNING, 
    					CmpErrors.Errors.ERR_FAILED, 1, strTemp);	
    		__ENDTRY
    	END_IF
    END_IF
    
    IF TestMes THEN
    	TestMes := FALSE;
    	TestCntr := TestCntr + 1;
     	LogAdd2(LOG_STD_LOGGER, udiCmpID,CmpLog.LogClass.LOG_WARNING, CmpErrors.Errors.ERR_FAILED, 1,'Test Message');
    END_IF
    
    IF Test0Div THEN
    	Test0Div := FALSE;
    
    	IF NOT UseTC THEN
    		rTest := rTest/rTest;
    	ELSE
    		__TRY
    			rTest := rTest/rTest;
    		__CATCH(Exec)
    			strTemp := concat('IN CATCH SECTION! Divide ERROR:',UDINT_TO_STRING(Exec));
    			LogAdd2(LOG_STD_LOGGER, udiCmpID,CmpLog.LogClass.LOG_WARNING, 
    					CmpErrors.Errors.ERR_FAILED, 1, strTemp);		
    		__ENDTRY
    	END_IF
    END_IF
    НО!
    Использование механизма TRY_CATCH не помогает.

    В результате панель все равно "зависает". Причем зависание стабильно происходит при отключении среды разработки от панели (т.е. при команде Онлайн->Отключение). Хотя в представленном видео среда сама "отвалилась" от панели (без моей команды) и сразу как это произошло, панель зависла!!!
    Вложения Вложения

Похожие темы

  1. Ответов: 3
    Последнее сообщение: 24.11.2021, 14:07
  2. Номинал компонента DA1 ТРМ 138
    от Алексей24 в разделе Сервисное обслуживание приборов ОВЕН
    Ответов: 6
    Последнее сообщение: 15.04.2021, 09:08
  3. Менеджер компонентов - невозможно прочитать описание компонента
    от K123 в разделе Среда программирования OWEN Logic
    Ответов: 5
    Последнее сообщение: 25.12.2020, 09:34
  4. удаление компонента
    от Vladimir-B в разделе Программируемые реле
    Ответов: 10
    Последнее сообщение: 28.12.2015, 20:43
  5. Создание ActiveX компонента для MasterSCADA.
    от 42ia в разделе Master SCADA 3
    Ответов: 32
    Последнее сообщение: 30.05.2012, 09:17

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •