package com.mes.milo.runner; import com.mes.milo.model.WriteEntity; import com.mes.milo.utils.CustomUtil; import lombok.extern.slf4j.Slf4j; import org.eclipse.milo.opcua.sdk.client.OpcUaClient; import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId; import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode; import java.util.LinkedList; import java.util.List; /** * @author mes * @version 0.0.1 * @since 2020/4/14 */ @Slf4j public class WriteValuesRunner { private final List entities; public WriteValuesRunner(List entities) { this.entities = entities; } public void run(OpcUaClient opcUaClient) { try { if (!entities.isEmpty()) { List nodeIds = new LinkedList<>(); List dataValues = new LinkedList<>(); for (WriteEntity entity : entities) { nodeIds.add(CustomUtil.parseNodeId(entity.getIdentifier())); dataValues.add(new DataValue(entity.getVariant(), null, null)); } List statusCodeList = opcUaClient.writeValues(nodeIds, dataValues).join(); for (int i = 0; i < statusCodeList.size(); i++) { if (statusCodeList.get(i).isGood()) { log.info("将值 '{}' 写入到点位:{} 成功", dataValues.get(i).getValue(), nodeIds.get(i)); } else { log.error("点位:{} 写入时出现了异常:{}", nodeIds.get(i), statusCodeList.get(i)); } } } } catch (Exception e) { log.error("批量写值出现异常出现了异常:{}", e.getMessage(), e); } } }