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