Developer Portal Community

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

    How to check peripheral is alive using heartbeat

    How to check peripheral is alive using heartbeat

    maj9bj
    Long-established Member

    Hello object developers,

    I created object+interface+peripheral for a device which provides heartbeat (alive) Bit. I read this bit in OnEcUpdateIntputs of my peripheral object and now I would like to display an error event if the alive Bit is not changing.

    I have some idea how to deal with that, but I am not sure what is the right way. So here is my proposal:

    1. Evaluate bit is changing on peripheral side and transfer the state (IsAlive) to top level object using interface.
    2. Check the status of IsAlive in OnUnitOperational of Unit and trigger event if it is not present.

    Is it right or should I do that differently?

    3 REPLIES 3

    Düscha
    New Contributor

    You can set the error directly in your peripheral with method SetDeviceError.

    If you using SetDeviceError method you must clear the error in the base to.

    SUPER^.ClearError();

    In your unit you check for example in the method OnUnitOperational is the error set in peripheral and than you set wit the method SetExtEvent the error on HMI and bring your unit to state ERROR.

    VAR

    _deviceError : OpconDeviceError;

    END_VAR

     

    _deviceError := YourInterfaceToPeripheral.LastError;

    SetExtEvent(OpconEventClass.Error,_deviceError.Number,_deviceError.AddText,_deviceError.ObjectId,TRUE/FALSE);

    maj9bj
    Long-established Member

    Thanks for the very useful hint.

    I have additional question to SetDeviceError. What is usual place for call of this method? Should I place it directly to OnEcUpdateInputs where I am receiving information about missing heartbeat? Or to OnEcOnline?

    And what is the meaning of EventStdFlags of SetDeviceError?

    Düscha
    New Contributor

    I would call the method where the error occurs.

     

    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