6. OPC-Dienst
Der Zugriff erfolgt über client.opc(). OPC bezeichnet einen Datenerfassungskanal (Data Source). Es ist der Eintrittspunkt für externe Daten wie OPC UA Server, PLC, Modbus, RDBMS, REST API/Dateien oder virtuelle Kanäle.
ID-Regel: Das Präfix
OPC_oderAPI_ist zwingend erforderlich. Details siehe Domänen-ID-Regeln.
6.1 Methodenübersicht
| Methode | Rückgabetyp | HTTP | Endpunkt |
|---|---|---|---|
create(OPCRequestV5) | OPCResponseV5 oder null | POST | /api/v5/opc |
update(opc_id, OPCRequestV5) | OPCResponseV5 oder null | PUT | /api/v5/opc/{id} |
delete(opc_id) | boolean | DELETE | /api/v5/opc/{id} |
get(opc_id) | OPCResponseV5 oder null | GET | /api/v5/opc/{id} |
list() | List<OPCResponseV5> | GET | /api/v5/opc |
listBySite(site_id) | List<OPCResponseV5> | GET | /api/v5/opc?site_id=... |
listByType(opc_type) | List<OPCResponseV5> | GET | /api/v5/opc?opc_type=... |
exists(opc_id) | boolean | GET | /api/v5/opc/{id}/exists |
count() | long | GET | /api/v5/opc/count |
countBySite(site_id) | long | GET | /api/v5/opc/count?site_id=... |
6.2 OPC-Type-Werte
| Wert | Verwendung |
|---|---|
OPC | OPC UA / OPC DA Server |
PLC | Direktanbindung an PLC (Siemens, Mitsubishi, Allen-Bradley usw.) |
MODBUS | Modbus TCP/RTU-Geräte |
DATABASE | Externes RDBMS (Oracle, MSSQL usw.) |
FILE | REST API / Dateiimport |
VIRTUAL | Virtueller Kanal (für Simulation und Test) |
6.3 OPCRequestV5 / OPCResponseV5
| Feld | Typ | Beschreibung |
|---|---|---|
opc_id | String | OPC-ID (PK, OPC_ oder API_ erforderlich) |
opc_name | String | OPC-Anzeigename |
opc_type | String | OPC/PLC/MODBUS/DATABASE/FILE/VIRTUAL |
opc_sub_type | String | Detailtyp (z. B. PLC-Hersteller) |
opc_server_ip | String | IP des OPC-Servers |
opc_agent_ip | String | IP des Datenerfassungs-Agenten |
opc_agent_port | int | Agent-Port |
site_id | String | Zugehöriger Standort |
description | String | Beschreibung |
6.4 Anwendungsbeispiele
OPC anlegen (PLC-Direktanbindung)
import plantpulse.api.v5.dto.request.OPCRequestV5;
import plantpulse.api.v5.dto.response.OPCResponseV5;
OPCRequestV5 req = new OPCRequestV5();
req.setOpc_id("OPC_PLC_L1_001");
req.setOpc_name("Line1 메인 PLC");
req.setOpc_type("PLC");
req.setOpc_sub_type("SIEMENS_S7");
req.setOpc_server_ip("192.168.10.50");
req.setSite_id("SITE_DJ");
req.setOpc_agent_ip("192.168.10.5");
req.setOpc_agent_port(60000);
OPCResponseV5 created = client.opc().create(req);
OPC anlegen (externe REST API)
OPCRequestV5 api = new OPCRequestV5();
api.setOpc_id("API_ERP_001"); // 관례상 API_ 접두사
api.setOpc_name("ERP 생산 실적 API");
api.setOpc_type("FILE");
api.setSite_id("SITE_DJ");
api.setDescription("매시간 ERP에서 생산 카운트 폴링");
client.opc().create(api);
OPC anlegen (virtuell — für Tests)
OPCRequestV5 v = new OPCRequestV5();
v.setOpc_id("OPC_VIRTUAL_001");
v.setOpc_name("테스트용 가상 OPC");
v.setOpc_type("VIRTUAL");
v.setSite_id("SITE_00001");
v.setOpc_agent_ip("127.0.0.1");
v.setOpc_agent_port(0);
client.opc().create(v);
OPC nach Standort abfragen
import java.util.List;
List<OPCResponseV5> djOpcs = client.opc().listBySite("SITE_DJ");
for (OPCResponseV5 opc : djOpcs) {
System.out.println(opc.getOpc_id() + " (" + opc.getOpc_type() + ")");
}
OPC nach Typ abfragen
// 모든 사이트의 PLC만
List<OPCResponseV5> plcs = client.opc().listByType("PLC");
// 모든 사이트의 Modbus만
List<OPCResponseV5> modbus = client.opc().listByType("MODBUS");
Anzahl
long total = client.opc().count();
long djCount = client.opc().countBySite("SITE_DJ");
System.out.printf("전체 OPC: %d, 대전공장: %d%n", total, djCount);
CUD-Lebenszyklus
String opcId = "OPC_PLC_L1_001";
// 생성
OPCRequestV5 req = new OPCRequestV5();
req.setOpc_id(opcId);
req.setOpc_name("초기 이름");
req.setOpc_type("PLC");
req.setSite_id("SITE_DJ");
client.opc().create(req);
// 존재 여부 확인
assert client.opc().exists(opcId);
// 수정
req.setOpc_name("수정된 이름");
client.opc().update(opcId, req);
// 삭제
boolean deleted = client.opc().delete(opcId);
assert !client.opc().exists(opcId);
6.5 Anwendungsszenarien
Szenario — Nach Registrierung eines PLC einer neuen Linie auf die Tag-Erfassung warten
// 1) OPC 등록
OPCRequestV5 plc = new OPCRequestV5();
plc.setOpc_id("OPC_PLC_L2_001");
plc.setOpc_type("PLC");
plc.setSite_id("SITE_DJ");
plc.setOpc_server_ip("192.168.10.60");
plc.setOpc_agent_ip("192.168.10.5");
plc.setOpc_agent_port(60000);
client.opc().create(plc);
// 2) 에이전트가 자동으로 태그를 수집하면 — 이후 Tag 서비스에서 확인
List<TagResponseV5> tags = client.tag().listByOpc("OPC_PLC_L2_001");
System.out.println("수집된 태그 수: " + tags.size());
Nächste Schritte
- Asset-Dienst — Asset-Baum zur Verknüpfung von Equipment und Tags
- Tag-Dienst — Tag-Definition und OPC-Verbindung