cancel
Showing results for 
Search instead for 
Did you mean: 

Read DeviceBridge provided value from DataLayer in PLC

Read DeviceBridge provided value from DataLayer in PLC

Michael6
New Poster

Hi,

I try to read a variable in my PLC program. I successfuly got created the variable in DataLayer by DeviceBridge app and see that the values reqularily change. 

In PLC I execute the following sample program. For whatever reason I read only 0. Is there some fundamental issue which I have overseen or do wrong?

vars:
fbReadNodeValue: DL_ReadNodeValue;
bReadExecute: BOOL;
bReadDone: BOOL;
bReadActive: BOOL;
bReadError: BOOL;
ReadErrorID: CXA_Datalayer.ERROR_CODE;
ReadErrorIdent: CXA_Datalayer.ERROR_STRUCT;
DataRead: CXA_Datalayer.DL_NodeValue;
DataType: CXA_Datalayer.DL_DATA_TYPE;

prog:
bReadExecute := NOT(bReadExecute);

fbReadNodeValue(Execute:=bReadExecute,
           Done=> bReadDone,
           Active=> bReadActive,
           Error=> bReadError,
           ErrorID=> ReadErrorID,
           ErrorIdent=> ReadErrorIdent,
           ClientId:= ,
           NodeName:= strNodeName,
           NodeValue:= DataRead);
 
IF fbReadNodeValue.Done THEN
    iValue := DataRead.GetValueInt32();
    DataType := DataRead.GetType();
END_IF

==============================

iValue is always 0.
Thank you very much for any suggestion.
Michael

3 REPLIES 3

CodeShepherd
Community Moderator
Community Moderator

DL_ReadNodeValue is supposed for complex data types. Please try DL_ReadNode instead for your int32.

Thank you very much for this proposal. I gave it a try and it looks like it works. 

What do you have in mind saying "complex data types"? Are you refering e.g. to structs or something like this?
What I actually what to do is to transfer several int32 values via DeviceBridge to my PLC program. So in this case maybe the DL_ReadNodeVAlue function is the right one to read all of those int values at one time, isn't it?

What do you think?

I am referring to "Complex data types" in the manual using flatbuffer technology. It is not 1:1 compareable to structs, as a struct will be published via the data layer normally as single values. The Provider of the data, in your case DeviceBridge app, needs to publish the data as flatbuffer if you need to read it as complex data type.

Another possibility for you would be to use DL_BulkReadNodeValues to read several data at once.

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