1 依赖
<!--utgard -->
<dependency>
<groupId>org.openscada.external</groupId>
<artifactId>org.openscada.external.jcifs</artifactId>
<version>1.2.25</version>
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.openscada.jinterop</groupId>
<artifactId>org.openscada.jinterop.core</artifactId>
<version>2.1.8</version>
</dependency>
<dependency>
<groupId>org.openscada.jinterop</groupId>
<artifactId>org.openscada.jinterop.deps</artifactId>
<version>1.5.0</version>
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.openscada.utgard</groupId>
<artifactId>org.openscada.opc.dcom</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>org.openscada.utgard</groupId>
<artifactId>org.openscada.opc.lib</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.61</version>
</dependency>
2 config
#OPC 配置
opcconfig:
host: 192.168.4.132
username: opcuser
password: 123456
clsid: F8582CF2-88FB-11D0-B850-00C0F0
# 5 秒读一次数据
frequency: 5000
@Component
@ConfigurationProperties(prefix = "opcconfig")
public class OpcConfig {
private static String host;
private static String username;
private static String password;
private static String clsid;
private static Integer frequency;
public String getHost() {
return host;
}
public void setHost(String host) {
OpcConfig.host = host;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
OpcConfig.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
OpcConfig.password = password;
}
public String getClsid() {
return clsid;
}
public void setClsid(String clsid) {
OpcConfig.clsid = clsid;
}
public Integer getFrequency() {
return frequency;
}
public void setFrequency(Integer frequency) {
OpcConfig.frequency = frequency;
}
public static Server instance;
public static Server getServerInstance() throws Exception {
if (instance == null) {
instance = OpcConnectUtils.readDataFromOpcServer(host, username
, password, clsid);
}
return instance;
}
}
public class OpcConnectUtils {
public static Server readDataFromOpcServer(String host,String username,String password,String clsid) throws Exception {
final ConnectionInformation ci = new ConnectionInformation();
ci.setHost(host);
ci.setDomain("");
ci.setUser(username);
ci.setPassword(password);
ci.setClsid(clsid);
final String itemId = "group1.tag1";
final Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());
try {
server.connect();
System.out.println("连接到服务器。。。。");
return server;
} catch (final JIException e) {
System.out.println(String.format("%08X: %s", e.getErrorCode(), server.getErrorMessage(e.getErrorCode())));
return null;
}
}
}
3 读取值
Server server = OpcConfig.getServerInstance();
final AccessBase access = new SyncAccess(server, opcConfig.getFrequency());
for (String deviceName : deviceNameList) {
access.addItem(deviceName, (item, itemState) -> {
JIString value;
try {
value = itemState.getValue().getObjectAsString();
} catch (JIException e) {
throw new RuntimeException(e);
}
stringRedisTemplate.convertAndSend("saveEnvironmentMonitorData", value.getString() + "##" + item.getId());
});
}
access.bind();
4 写值
Server server;
try {
server = OpcConfig.getServerInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
public void writeDataToOpcServer(Server server, String name, Boolean isTurnOn) throws Exception {
try {
final String itemId = "lighting." + name;
assert server != null;
Group group = server.addGroup("test");
final Item item = group.addItem(itemId);
item.write(new JIVariant(isTurnOn));
server.removeGroup(group, true);
} catch (final JIException e) {
throw new RuntimeException(e);
}
}