西门子PLC数据采集

模拟工具

西门子PLC采用的S7协议,该协议有服务端和客户端机的概念,工具模拟的是服务端。

依赖

<dependency>
    <groupId>com.github.s7connector</groupId>
    <artifactId>s7connector</artifactId>
    <version>2.1</version>
</dependency>

获取连接

private static final Map<String, S7Connector> S7Servers = Maps.newHashMap();

@Override
public S7Connector getCon(String ipAndPort) {

    if (!S7Servers.containsKey(ipAndPort)) {
        S7Connector s7Connector = S7ConnectorFactory.buildTCPConnector()
                .withHost(ipAndPort)
                .withRack(0)
                .withSlot(2)
                .build();
        S7Servers.put(ipAndPort, s7Connector);
        return s7Connector;
    }
    return S7Servers.get(ipAndPort);
}

读取值

@Override
public Object getData(String ipAndPort) {

    S7Connector s7Connector = getCon(ipAndPort);
    byte[] bytes = s7Connector.read(DaveArea.DB, 2, 2, 0);
    return new String(bytes);
}

设值

@Override
public void setData(String ipAndPort, Object value) {

    /**
     *  测试,先设置一个数字:8
     */
    S7Connector s7Connector = getCon(ipAndPort);
    if (ObjectUtil.isNotNull(value) && value instanceof String) {
        byte[] bytes = value.toString().getBytes(StandardCharsets.UTF_8);
        s7Connector.write(DaveArea.DB, 2, 0, bytes);
    }
}
posted @ 2024-12-23 10:20  南翔技校毕业后  阅读(92)  评论(0)    收藏  举报