Example BulkReadNodeValues - read metadata from multiple data layer nodes

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