Developer Portal Community

    We are still working on migrating to the new Bosch Connected Industry Online Portal. Stay tuned! Click here for the latest updates.

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

    Access to SetEvent/SetExtEvent from a self created FB in the project

    Access to SetEvent/SetExtEvent from a self created FB in the project

    tommy3000
    Established Member

    Hello together

    Is it possible to get an access to the methods SetEvent/SetExtEvent in a self created method.

    Would be great, getting an example for this. We have a station, which is a rebuild of an old Opcon project and there are function blocks we would like to reuse them. Therefore, we need to set error messages directly from an instance of a function block.

    If there is an easy way to connect a function block to the mode handler, that would be really helpful.

    Thanks in advance.

    5 REPLIES 5

    nexidator
    Community Moderator
    Community Moderator

    SetEvent/SetExtEvent aren't global functions but instance methods of OpconUnit. That's why they can only be called in the context of Control plus model tree objects. Apart from that, the methods are also available in sequences deriving from OpconBaseChain, but only because the chains are always owned by an OpconUnit which is used internally for setting the events.

    The main reason why the methods need the OpconUnit context is that every Control plus event has a source object (i.e. an instance ID) telling exactly who created the event.

    You could pass a reference to an OpconUnit into another FB allowing it to call SetEvent on the Unit. But that means the FB is no longer independent from the Control plus infrastructure.

    The more common solution would be to pass a result value with an error code from the FB to the calling OpconUnit (e.g. ModeHandler) and doing all the event handling there.

    Hello, Dear Nexidator,

    I understand what you said: “passing a reference to an OpconUnit into the FB means the FB is no longer independent from the Control plus infrastructure” , I think it's because each OpconUnit (in my case, the Cmd handler) is defined differently. Therefore, there is no way to reference something that can be applied to all OpconUnits.

     

    But is it possible to directly reference to the "SetEvent" method, and when calling the instance of the FB,  pass the "XXXUnit.SetEvent" to it, since the SetEvent method might be the same for each different OpconUnit, and then could the independence of the FB be ensured in this way? 

     

    I tried defining the input of the FB as:

    VAR_INPUT

    XXX : REFERENCE TO SetEvent;

    END_VAR

    but when building the solution, it throws an error saying : "Error Unknown type: 'SetEvent' ."
    Is this approach really unfeasible?

    SetEvent is a method from ObconUnit.

    You can not set a reference to a Method.

    @ZYYZZZ1:  Why do you not simply use a reference to the OpconUnit (base class of all units) itself ?

    VAR_INPUT

      rUnit : REFERENCE TO OpconUnit;

    END_VAR
    --------------------------------------------------------

    IF ( __isValidRef (rUnit))
    THEN
      rUnit.SetEvent( OpconEventClass := OpconEventClass.ERROR, Number := -1 , AddText := '', Lock := FALSE);
    END_IF

    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