KEPserverEX6通过OPCUA服务交互javaMilo

一:安装KEPserverEX6:

解压安装包傻瓜式安装就可以了,不赘述......

二:进行相关设置(重点

1.安装完成kepserver之后需要设置opc ua配置项如图:

  右键点击kepserver的图标选怎opc ua配置,点击进入之后显示为:

第一步设置本机通讯opc地址(也就是通过java程序也就是本地服务ip为:127.0.0.1)的安全策略推荐设置成无,博主设置成其它选项折腾很久未果,设置如图:

2.设置远程连接地址(重点)也就是kepserverEX可能并不是安装在本地,或者说别人的java程序访问你本地的kepserver opc服务,设置如图:

3.用户名和密码的设置:设置一个连接kepserver的登陆用户名和密码,这样可以保证非登录无法读写kepsever的数据设置如图:                                                                         

  

4.项目根路径设置需要把opc ua选项的匿名登录关掉如图:

 

 

5.创建一个opc服务本例子以连接欧姆龙plc-nx系列为例子:

 

 

 

 

 

 

 

到此kepserver的设置结束了,配置完重新初始化一下设置就可以了。 

三:java端的设置

1.本案例是基于springboot工程,设置opc的配置文件如图:

 

2. 设置opc的连接客户端如图:

@Configuration
@Slf4j
public class OpcClient {

    @Value("${opc.endpointUrl}")
    private String endpointUrl;

    @Value("${opc.username}")
    private String username;

    @Value("${opc.password}")
    private String password;

    @Value("${opc.applicationName}")
    private String applicationName;

    @Value("${opc.applicationUri}")
    private String applicationUri;

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    @Bean("OpcUaClient")
    public OpcUaClient createClient() throws Exception {

        //安全策略 None、Basic256、Basic128Rsa15、Basic256Sha256
        SecurityPolicy securityPolicy = SecurityPolicy.None;

        List<EndpointDescription> endpoints = DiscoveryClient.getEndpoints(endpointUrl).get();

        EndpointDescription endpoint = endpoints.stream()
                .filter(e -> e.getSecurityPolicyUri().equals(securityPolicy.getUri()))
                .findFirst()
                .orElseThrow(() -> new Exception("没有连接上端点"));

        log.info("使用端点: {} [{}/{}]", endpoint.getEndpointUrl(), securityPolicy, endpoint.getSecurityMode());

        OpcUaClientConfig config = OpcUaClientConfig.builder()
                .setApplicationName(LocalizedText.english(applicationName))
                .setApplicationUri(applicationUri)
                .setEndpoint(endpoint)
                //AnonymousProvider (匿名方式)UsernameProvider(账户密码)
                //.setIdentityProvider(new AnonymousProvider())
                .setIdentityProvider(new UsernameProvider(username, password))
                .setRequestTimeout(uint(5000))
                .build();
        OpcUaClient opcUaClient = OpcUaClient.create(config);
        opcUaClient.connect().get();
        return opcUaClient;
    }
}
@Slf4j
@Component
public class OpcUaUtil {

    @Autowired
    private OpcUaClient client;

    /**
     * 写入数据到opc服务器
     *
     * @param namespaceIndex
     * @param identifier
     * @param value
     * @throws Exception
     */
    public void write(int namespaceIndex, String identifier, Object value) throws Exception {
        NodeId nodeId = new NodeId(namespaceIndex, identifier);
        Variant v = new Variant(value);
        DataValue dv = new DataValue(v, null, null);
        CompletableFuture<StatusCode> status = client.writeValue(nodeId, dv);
        StatusCode statusCode = status.get();
        boolean good = statusCode.isGood();
        if (!good)
            throw new BusinessException("输入写入失败,请检查系统运行情况");
    }

    /**
     * 从opc服务器读数据
     *
     * @param namespaceIndex
     * @param identifier
     * @return
     * @throws Exception
     */
    public Object read(int namespaceIndex, String identifier) throws Exception {
        UaVariableNode node = client.getAddressSpace().getVariableNode(new NodeId(namespaceIndex, identifier));
        DataValue value = node.readValue();
        Object data = value.getValue().getValue();
        return data;
    }

    /**
     * 获取对应的节点
     *
     * @param namespaceIndex
     * @param identifier
     * @return
     * @throws UaException
     */
    public List<ExpandedNodeId> browseNode(int namespaceIndex, String identifier) throws Exception {
        List<ReferenceDescription> referenceDescriptions = client.getAddressSpace().browse(new NodeId(namespaceIndex, identifier));
        List<ExpandedNodeId> listNode = new ArrayList<>();
        for (ReferenceDescription referenceDescription : referenceDescriptions) {
            listNode.add(referenceDescription.getNodeId());
        }
        return listNode;
    }

3.测试类

    @Test
    public void redWriteOpcTest() throws Exception {
        System.out.println(opcUaUtil.read(2, "欧姆龙.设备 1.测试"));
//        System.out.println(opcUaUtil.read(2, "欧姆龙.设备 1.测试1"));
//        opcUaUtil.write(2,"欧姆龙.设备 1.测试",(short)888);//西门子opc-ua.设备1.PLC.Memory.测i试
//        System.out.println(opcUaUtil.read(2, "西门子opc-ua.设备 1.PLC.Memory.测试"));
    }

避坑处:kepserver的namespace都为 2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinCC是西门子公司推出的一款用于监控和控制系统的软件平台,而KEPServerEX是一款用于与设备和控制系统进行通信的Server软件。OPC UAOPC Unified Architecture)是一种开放的通信协议,用于实现设备之间的互操作性。 WinCC可以通过不同的方式与KEPServerEX进行通信,其中一种方式就是使用OPC UA协议。通过配置和设置,WinCC可以将数据从KEPServerEX获取到,并进行实时监控和控制。例如,可以通过WinCC的配置界面设置连接参数,包括KEPServerEX的地址和端口号,以及所需的数据项。然后,在WinCC中创建相应的显示屏或图表,将从KEPServerEX获取到的数据显示出来。这样,用户可以通过WinCC监控和控制与KEPServerEX连接的设备和系统。 这种通讯方式具有较好的可靠性和稳定性,同时也具备较高的灵活性。因为OPC UA是一种开放的通信协议,可以支持不同类型的设备和控制系统之间的通信。而KEPServerEX作为一个通信软件,提供了丰富的驱动程序和插件,可以与各种不同的设备进行通信。而且,WinCC也支持多种通信协议,不仅仅是OPC UA,从而使得整个系统更加灵活和可扩展。 总结来说,通过将WinCC与KEPServerEX和OPC UA结合使用,可以实现设备和控制系统的监控和控制。这种通讯方式能够确保数据的可靠传输,并且具备高度的灵活性和可扩展性,适用于各种不同的工业应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值