Developer Portal Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    UnitStateReq.OPERATIONAL has influence on Exec State machine

    UnitStateReq.OPERATIONAL has influence on Exec State machine

    MarvinW
    Long-established Member

    When I change the UnitStateReq to OPERATIONAL, as opposed to BACKBONE_CONTROLLED, then the backbone signals related to the Exec state machine are also not executed anymore it seems.

    Today I learned this very surprising fact when I was debugging why a switch of operation modes would not trigger a unit's cancel as I expected. I always thought that the UnitStateReq only affects the Unit state, as the name also suggests, but not that it would also affect the Exec state. I guess this behavior is intentional. If so, then I would like to raise the point if this is really a good idea. Which use case exists where this is behavior desired?

    If you think this is exactly how things should be, then I want to stress that this needs some documentation. I scanned the training book and couldn't find this mentioned (2019 version). Also I could not find a descriptive comment in the NxBase library where I would expect it. In particular the OpconUnitStateReq enum could use a serious hint that it also affects the behavior of the exec state machine. I was really surprised by this behavior and I thought I understood quite well how the framework works. Also debugging this was not easy at all.

    1 REPLY 1

    SteffenR-
    Community Moderator
    Community Moderator

    If you set the UnitState explicitly to OPERATIONAL, it indeed means that you want to make this unit independent of the parent unit. Therefore the behaviour is intended.

    Example use case:

    You have a pump or belt motor that shall run always, independent of operation mode changes. You can put the UnitState to OPERATIONAL to prevent a cancel because of operation mode change.
    Disadvantage is that you have to manage the cancel because of an emergency stop in your application.

    A whole framework documentation is currently in work.

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist