6. OPCサービス
client.opc() でアクセスします。OPCはソース接続(Source Connection)を表します。OPC UAサーバー、PLC、Modbusデバイス、データベース、メッセージブローカー、REST APIなど、外部データのエントリーポイントです。
IDルール:
OPC_プレフィックス必須。詳細は ドメインIDルール を参照。
6.1 メソッド一覧
| メソッド | 戻り値の型 | HTTP | エンドポイント |
|---|---|---|---|
create(OPCRequestV5) | OPCResponseV5 または null | POST | /api/v5/opc |
update(opc_id, OPCRequestV5) | OPCResponseV5 または null | PUT | /api/v5/opc/{id} |
delete(opc_id) | boolean | DELETE | /api/v5/opc/{id} |
get(opc_id) | OPCResponseV5 または 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_source_type) | List<OPCResponseV5> | GET | /api/v5/opc?opc_source_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_protocol, 例: S7・LS・MELSEC・MODBUS・OPCUA・MQTT_CLIENT・API)を持ちます。
ソースタイプと収集主体はプロトコルから派生し、直接書き込みません。プロトコルの正本は plantpulse-event のプロトコルカタログです。
| ソースタイプ | 用途 |
|---|---|
OPC | OPC UAサーバー |
PLC | Siemens, LS, Mitsubishi, Allen-BradleyなどのPLC直結 |
MODBUS | Modbus TCP/UDP/RTUデバイス |
DATABASE | 外部データベースポーリング |
MESSAGING | メッセージブローカー・プッシュプロトコル (MQTT, Kafka, HTTP, WebSocket, CoAP, ROS 2) |
API | PlantPulse REST APIから入ってくるデータ |
SYSTEM | Edge ゲートウェイ自己監視 (OPC_SYSTEM_<edge_id>, Edgeが宣言) |
6.3 OPCRequestV5 / OPCResponseV5
| フィールド | 型 | 説明 |
|---|---|---|
opc_id | String | OPC ID (PK, OPC_ 必須) |
opc_name | String | OPC表示名 |
opc_protocol | String | プロトコルコード (例: S7, LS, OPCUA, API) |
opc_source_ip | String | 実際のソース(PLC・デバイス・OPC UAサーバー・DB・ブローカー)のIPまたはホスト |
opc_source_port | int | 実際のソースのポート |
opc_edge_id | String | この接続を収集するEdge。Platformが直接収集する場合は空にする |
opc_source_type | String | (応答専用) プロトコルから派生したソースタイプ |
opc_collected_by | String | (応答専用) EDGE / PLATFORM — プロトコルから派生 |
site_id | String | 所属サイト |
description | String | 説明 |
Edgeが収集する接続(
opc_edge_idがある接続)のプロトコル・アドレスはEdge sync(PUT /api/v5/opc/{id}/sync)のみで使用します。Platform画面では読み取り専用です。
6.4 使用例
OPC作成 (PLC直結)
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_protocol("S7");
req.setSite_id("SITE_DJ");
req.setOpc_source_ip("192.168.10.50");
req.setOpc_source_port(102);
OPCResponseV5 created = client.opc().create(req);
OPC作成 (外部REST API)
OPCRequestV5 api = new OPCRequestV5();
api.setOpc_id("OPC_API_ERP_001"); // OPC_ 접두사 필수
api.setOpc_name("ERP 생산 실적 API");
api.setOpc_protocol("API");
api.setSite_id("SITE_DJ");
api.setDescription("매시간 ERP에서 생산 카운트 폴링");
client.opc().create(api);
OPC作成 (テスト用 — APIソース)
OPCRequestV5 v = new OPCRequestV5();
v.setOpc_id("OPC_TEST_001");
v.setOpc_name("테스트용 OPC");
v.setOpc_protocol("API");
v.setSite_id("SITE_000001");
client.opc().create(v);
サイト別OPC照会
import java.util.List;
List<OPCResponseV5> djOpcs = client.opc().listBySite("SITE_DJ");
for (OPCResponseV5 opc : djOpcs) {
System.out.println(opc.getOpc_id() + " (" + opc.getOpc_protocol() + ", " + opc.getOpc_source_type() + ")");
}
ソースタイプ別OPC照会
// 사이트를 가리지 않고 PLC 만
List<OPCResponseV5> plcs = client.opc().listByType("PLC");
// 사이트를 가리지 않고 Modbus 만
List<OPCResponseV5> modbus = client.opc().listByType("MODBUS");
カウント
long total = client.opc().count();
long djCount = client.opc().countBySite("SITE_DJ");
System.out.printf("전체 OPC: %d, 대전공장: %d%n", total, djCount);
CUDライフサイクル
String opcId = "OPC_PLC_L1_001";
// 생성
OPCRequestV5 req = new OPCRequestV5();
req.setOpc_id(opcId);
req.setOpc_name("초기 이름");
req.setOpc_protocol("S7");
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 活用シナリオ
シナリオ — 新規ラインPLC登録後、タグ収集待機
// 1) OPC 등록
OPCRequestV5 plc = new OPCRequestV5();
plc.setOpc_id("OPC_PLC_L2_001");
plc.setOpc_protocol("S7");
plc.setSite_id("SITE_DJ");
plc.setOpc_source_ip("192.168.10.60");
plc.setOpc_source_port(102);
client.opc().create(plc);
// 2) 수집이 시작되면 — 이후 Tag 서비스에서 확인
List<TagResponseV5> tags = client.tag().listByOpc("OPC_PLC_L2_001");
System.out.println("수집된 태그 수: " + tags.size());