cancel
Showing results for 
Search instead for 
Did you mean: 

Example BulkReadNodeValues - read metadata from multiple data layer nodes

Example BulkReadNodeValues - read metadata from multiple data layer nodes

TrainerJohanna
New Poster

Hi,

I had problems implementing the Example_BulkReadNodeValues from the CXA_DATALAYER library.
I found a solution in which I combined the Example_BulkReadNodeValues and Example_ReadNodeValue and would like to share with you.
Please, comment if you have any suggestions for improvement! 

Declaration:
PROGRAM PLC_PRG
VAR
//read ctrlX Data Layer values
//combination of Example_BulkReadNodeValues and Example_ReadNodeValue
    m_fbBulkReadNode : DL_BulkReadNodeValues;

    bulkRequests : ARRAY[0..2] OF DL_BulkRequest;      // Names of the requested nodes in data layer
    bulkResponses : ARRAY[0..2] OF DL_BulkResponse;    // Values of the requested nodes in data layer
    nodeCount : INT := 3;  // number of nodes that will be requested
 
//project variables for traffic lights 2 
DL_bLightRed2 : BOOL;
DL_bLightYellow2 : BOOL;
DL_bLightGreen2 : BOOL;
END_VAR

Code:
//read ctrlX Data Layer values
//combination of Example_BulkReadNodeValues and Example_ReadNodeValue

//Data Layer addresses for traffic lights 2 
bulkRequests[0].NodeName := ADR('devices/remotes/TrafficLight2/plc/app/Application/sym/PLC_PRG/bLightRed2');
bulkRequests[1].NodeName := ADR('devices/remotes/TrafficLight2/plc/app/Application/sym/PLC_PRG/bLightYellow2');
bulkRequests[2].NodeName := ADR('devices/remotes/TrafficLight2/plc/app/Application/sym/PLC_PRG/bLightGreen2');
 
//read data from Data Layer
m_fbBulkReadNode(Execute:= TRUE, BulkRequests:= ADR(bulkRequests), BulkResponses:= ADR(bulkResponses),  Count := nodeCount); // set Execute to TRUE
 
// save data from Data Layer to project variables
IF (m_fbBulkReadNode.Done = TRUE) THEN
bulkResponses[0].NodeValue.GetValueBool8(Value=>DL_bLightRed2); 
bulkResponses[1].NodeValue.GetValueBool8(Value=>DL_bLightYellow2); 
bulkResponses[2].NodeValue.GetValueBool8(Value=>DL_bLightGreen2); 
END_IF
 
// end access to Data Layer
IF (m_fbBulkReadNode.Done = TRUE) OR (m_fbBulkReadNode.Error = TRUE) THEN
    m_fbBulkReadNode(Execute:= FALSE, BulkRequests:= ADR(bulkRequests), BulkResponses:= ADR(bulkResponses), Count := nodeCount); // set Execute to FALSE
END_IF
 

 

1 REPLY 1

CodeShepherd
Community Moderator
Community Moderator

Good to hear its working, but was the issues you faced and how did you get around them?

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