メインコンテンツまでスキップ

6. OPC サービス

client.opc() でアクセスします。OPC は データ収集チャネル(Data Source)を表します。OPC UA サーバ、PLC、Modbus、RDBMS、REST API/ファイル、仮想チャネルなど、外部データの入口です。

ID 規則: OPC_ または API_ プレフィックスが必須です。詳細は ドメイン ID 規則 を参照してください。

6.1 メソッド一覧

メソッド戻り値の型HTTPエンドポイント
create(OPCRequestV5)OPCResponseV5 または nullPOST/api/v5/opc
update(opc_id, OPCRequestV5)OPCResponseV5 または nullPUT/api/v5/opc/{id}
delete(opc_id)booleanDELETE/api/v5/opc/{id}
get(opc_id)OPCResponseV5 または nullGET/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)booleanGET/api/v5/opc/{id}/exists
count()longGET/api/v5/opc/count
countBySite(site_id)longGET/api/v5/opc/count?site_id=...

6.2 OPC Type の値

用途
OPCOPC UA / OPC DA サーバ
PLCSiemens、Mitsubishi、Allen-Bradley などの PLC 直結
MODBUSModbus TCP/RTU デバイス
DATABASE外部 RDBMS(Oracle、MSSQL など)
FILEREST API / ファイルインポート
VIRTUAL仮想チャネル(シミュレーション・テスト用)

6.3 OPCRequestV5 / OPCResponseV5

フィールド説明
opc_idStringOPC ID(PK、OPC_ または API_ が必須)
opc_nameStringOPC 表示名
opc_typeStringOPC/PLC/MODBUS/DATABASE/FILE/VIRTUAL
opc_sub_typeString詳細タイプ(例: PLC メーカー)
opc_server_ipStringOPC サーバ IP
opc_agent_ipStringデータ収集エージェント IP
opc_agent_portintエージェントポート
site_idString所属サイト
descriptionString説明

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_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 作成(外部 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 作成(仮想 — テスト用)

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 照会

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 照会

// 모든 사이트의 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_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 活用シナリオ

シナリオ — 新規ライン PLC 登録後のタグ収集待機

// 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());

次のステップ