当使用Milo搭建OPC UA服务器时,需要从其他数据源获取PLC的值,比如redis,mqtt,需要修改milo如下代码:
tagNode.getFilterChain().addLast(
new AttributeLoggingFilter(),
AttributeFilters.getValue(
ctx -> {
String addr = ctx.getNode().getNodeId().getIdentifier().toString();
TagAllName tagAllName= new TagAllName();
tagAllName.setTagAllName(addr);
try {
R realTimeVal = remoteTaskService.getRedisVal(tagAllName, SecurityConstants.INNER);
if(null==realTimeVal || 500==realTimeVal.getCode() || null == realTimeVal.getData()){
return new DataValue(Variant.NULL_VALUE,StatusCode.BAD);
}
return new DataValue(getDataValType(tagDTO.getDataType(), (String) realTimeVal.getData()));
}catch (Exception e){
logger.info(“Service调用出错了:{}”,e.getMessage());
}
return new DataValue(Variant.NULL_VALUE,StatusCode.BAD);
}
)
重写父类的addLast方法,将数据源切换成自定义的数据源即可。