commit 16fc7a2598d69fdaf776913a90041c7b03238465 Author: windpacer Date: Wed Jun 3 20:28:14 2026 +0900 Initial commit: HC900 Crawler Honeywell HC900을 Modbus TCP로 직접 폴링 → gRPC → C# 크롤러 → PostgreSQL. 기존 Experion OPC UA 데이터 경로를 HC900 직접 통신으로 대체. - industrial-comm/cpp: C++ Modbus 게이트웨이 (gRPC 서버) - src: C# .NET 8 ASP.NET Core 크롤러 + 웹 UI (3-Layer) - mcp-server: Python FastMCP (RAG/NL2SQL/P&ID) - 다중 컨트롤러(N-Controller) 지원 Co-Authored-By: Claude Opus 4.8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..912511f --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# ─── .NET ─── +[Bb]in/ +[Oo]bj/ +*.user +*.suo +.vs/ + +# ─── C++ build ─── +industrial-comm/cpp/build/ +industrial-comm/build/ + +# ─── Python ─── +mcp-server/.venv/ +.venv/ +venv/ +__pycache__/ +*.py[cod] +.pytest_cache/ +.ruff_cache/ +.mypy_cache/ + +# ─── Runtime / logs ─── +*.log +/tmp/ +data/ +storage/kb/** +!storage/kb/.gitkeep + +# ─── Generated P&ID geometry cache (재생성 가능, 대용량) ─── +mcp-server/storage/*_geo.json + +# ─── Local / machine-specific ─── +.claude/settings.local.json +*.local.json +appsettings.Development.json +appsettings.Production.json + +# ─── OS / editor ─── +.DS_Store +Thumbs.db +*.swp +*~ diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..c7b9322 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,9 @@ +{ + "mcpServers": { + "iiot-rag": { + "command": "/home/windpacer/projects/ExperionCrawler/mcp-server/.venv/bin/python", + "args": ["/home/windpacer/projects/ExperionCrawler/mcp-server/server.py"], + "type": "stdio" + } + } +} diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..e8b1679 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,172 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This project replaces the Experion OPC UA data path with a direct Modbus TCP connection to the Honeywell HC900 process controller: + +``` +Before: HC900 ──Modbus TCP──▶ Experion R530 ──OPC UA──▶ ExperionCrawler ──▶ PostgreSQL +After: HC900 ──Modbus TCP──▶ C++ Gateway ──gRPC──▶ HC900Crawler ──▶ PostgreSQL +``` + +Four active components: +- **`industrial-comm/cpp/`** — C++ gateway: Modbus TCP poller + gRPC server (`hc900_gateway` binary) +- **`src/Hc900Crawler/`** — C# .NET 8 ASP.NET Core web app: full monitoring platform (gRPC client + web UI + KB/P&ID/FF) +- **`mcp-server/`** — Python FastMCP server (port 5001): RAG, NL2SQL, P&ID processing tools +- **`scripts/`** + **`test/`** — Python utilities for register map generation and testing + +## Commands + +### C++ Gateway (build) + +gRPC and abseil are pre-installed to `/tmp/grpc_local` and `/tmp/absl_local` (aarch64). + +```bash +cd industrial-comm/cpp +mkdir -p build && cd build +cmake .. +make -j$(nproc) +``` + +Produces `build/hc900_gateway` and `build/libcomm_core.so`. + +Run the gateway: +```bash +./build/hc900_gateway [host] [register-map-path] [poll_ms] +# defaults: 192.168.0.240, docs/register-map.json, 1000 +``` + +Log file: `/tmp/hc900_gateway.log`. gRPC listens on `0.0.0.0:50051`. + +### C# Crawler (build + run) + +```bash +cd src/Hc900Crawler +dotnet build +dotnet run +``` + +Configuration via `appsettings.json`: `Hc900.GatewayAddress` (default `http://localhost:50051`), `Hc900.PollIntervalMs`, `ConnectionStrings.DefaultConnection` (PostgreSQL, `Search Path=hc900`). Serves web UI at `http://0.0.0.0:5000`. + +### Register Map Generation + +Converts HC Designer CSV exports → `docs/register-map.json` used by the gateway at startup: + +```bash +python3 scripts/build_register_map.py \ + --loop-csv docs/SummaryFucntionBlockReport.csv \ + --signal-csv docs/SignalTags.csv \ + --variable-csv docs/Variables.csv \ + -o docs/register-map.json +``` + +Load state labels (StatusPoint descriptors from xlsx) into DB: +```bash +python3 scripts/load_state_labels.py +``` + +### Test Utilities + +```bash +# Start Modbus TCP simulator (port 5020, loads register-map.json) +python3 test/modbus_sim.py + +# Read tags directly via Modbus TCP +python3 test/read_tags.py FICQ3101.PV FICQ3101.SP FICQ3101.MODE +python3 test/read_tags.py --port 5020 FICQ3101.PV # against simulator +python3 test/read_tags.py --all --limit 50 + +# pymodbus must be available; it's expected at /tmp/hc900_venv +/tmp/hc900_venv/bin/python3 test/read_tags.py FICQ3101.PV +``` + +## Architecture + +### C++ Gateway (`industrial-comm/cpp/`) + +**`Hc900Gateway`** (`src/gateway.cpp`, `include/gateway.h`) is the core class: +- Loads `register-map.json` at startup into `registers_` (vector of `RegisterEntry`) and `tag_index_` (name→index map) +- Spawns a poll thread (`PollLoop`) that runs `ReadAllRegisters()` every `poll_interval_ms` +- `ReadAllRegisters()` groups consecutive registers into batches of ≤120 and issues one `read_raw()` call per batch (~48 batches total for a full HC900 config, ~117 ms round-trip) +- Cache (`cache_`, protected by `cache_mutex_`) stores `CachedValue` per tag; quality=192=good, quality=0=bad/stale +- `transport_mutex_` serializes all Modbus transport calls between the poll thread and gRPC `WriteTag` handlers + +**Key gRPC operations** (all implemented in `gateway.cpp`): +- `ReadTags` — reads from cache, sub-millisecond, no Modbus I/O +- `WriteTag` — calls Modbus FC16 directly, then updates cache +- `StreamTags` — pushes cache snapshot at requested interval +- `ListTags` — returns metadata from in-memory register list +- `HealthCheck` — reports connection state, poll count, last poll duration + +**`Controller`** (`src/controller.cpp`, `include/controller.hpp`) wraps `ITransport` with typed read/write methods. **`ModbusTCP`** (`src/modbus_tcp.cpp`, `include/modbus_tcp.hpp`) implements the transport. + +**Codec** (`src/codec.cpp`, `include/codec.hpp`) handles byte/word order for float32, int32, int64, double. HC900 uses `VendorFormat::HC900_FLOAT` = `{BigEndian, HighFirst, Normal}` (FP B format per manual). + +**Proto:** The generated files (`gen/modbus_gateway.pb.{cc,h}` and `gen/modbus_gateway.grpc.pb.{cc,h}`) are pre-built and committed. The source proto is at `proto/modbus_gateway.proto`. The C# copy lives at `src/Hc900Crawler/Proto/modbus_gateway.proto` and is compiled by MSBuild via `Grpc.Tools`. + +### C# Crawler (`src/Hc900Crawler/`) — 3-Layer Architecture + +**Project layout** (ExperionCrawler 패턴 적용): +``` +src/ + Core/ ← Domain entities, interfaces, application services + Infrastructure/ ← DB (Hc900DbContext), HC900 services, Control, Kb, Mcp, Trend, Docs + Hc900Crawler/ ← ASP.NET Core web project (Controllers, wwwroot, Program.cs, csproj) +mcp-server/ ← Python MCP server (copied from ExperionCrawler) +``` + +**BackgroundServices:** +- **`Hc900RealtimeService`** (`Infrastructure/Hc900/`) — gRPC 폴링 → `hc900.realtime_table` upsert (500 rows/batch). 상태 노출: `IsConnected`, `PollCount`, `LastPollAt` +- **`Hc900HistoryService`** — 60초 주기 `realtime_table` → `history_table` 스냅샷 (IsConnected 확인 후 실행) +- **`Hc900DigitalEventDetectorService`** — 1초 주기로 realtime_table 변화 감지 → `event_history_table` 기록 + +**`Hc900GatewayClient`** (`Infrastructure/Hc900/`) — `IHc900GatewayService` 구현. gRPC 채널 lazy 생성. `GetHealthAsync()`, `ListTagsAsync()`, `WriteTagAsync()`. + +**`Hc900WriteService`** — FeedforwardSupervisor·FeedforwardController에서 SP 쓰기용. + +**Value formatting**: 상태 레이블 있으면 `{N | LABEL | }`, 없으면 float/uint16 string. + +**Web API endpoints** (port 5000): +- `GET /api/gateway/health` — gRPC HealthCheck +- `GET /api/gateway/tags` — ListTags +- `POST /api/gateway/write` — WriteTag +- `GET /api/gateway/status` — Hc900RealtimeService 상태 +- `GET /api/realtime/points` — realtime_table +- `POST /api/history/query` — history_table 조회 +- `POST /api/events/query` — event_history_table 조회 +- `/api/pid/*`, `/api/kb/*`, `/api/ff/*`, `/api/t2s/*`, `/api/ollama/*` 등 ExperionCrawler 동일 + +### Database (PostgreSQL, schema `hc900`) + +`Hc900DbContext` (`Infrastructure/Database/Hc900DbContext.cs`) — `HasDefaultSchema("hc900")` + `Search Path=hc900` 연결문자열. `InitializeAsync()`에서 모든 테이블·뷰·TimeScaleDB 하이퍼테이블 자동 생성. + +| Table | Purpose | +|---|---| +| `hc900_map_master` | OPC UA `tagname` ↔ `hc900_tag` 매핑, Modbus addr, 데이터타입 | +| `realtime_table` | 실시간 값 (tagname, livevalue, timestamp) — upsert on conflict | +| `history_table` | 60초 이력 스냅샷 (TimeScaleDB hypertable) | +| `event_history_table` | 디지털 태그 상태 변경 이벤트 (TRIP/ALARM/RUN 등) | +| `tag_metadata` | 태그 메타 (description, area, sub_area, state0-7 레이블) | +| `pid_equipment`, `pid_prefix_rules` | P&ID 추출 데이터 | +| `kb_*` | Knowledge Base (Qdrant RAG) | +| `ff_*` | Feedforward 제어 설정/감사 | + +### Register Map (`docs/register-map.json`) + +JSON file with a top-level `registers` array. Each entry: `tag`, `addr` (0-based Modbus holding register address), `count` (1=uint16, 2=float32), `type`, `access` ("R"/"RW"), `description`. + +Sources: +- **Loops** (PID): `SummaryFucntionBlockReport.csv` → expanded into per-parameter entries using `LOOP_PARAM_OFFSETS` in `build_register_map.py`. Loop #N base address = `0x40 + (N-1)*0x100` (loops 1–24), `0x7840 + (N-25)*0x100` (loops 25–32). +- **Signal Tags** (read-only): `SignalTags.csv`, addresses `0x2000–0x25E4` +- **Variables** (R/W): `Variables.csv`, addresses `0x18C0–0x1A10` + +Float format is `FP_B` (IEEE 754 big-endian, wire order bytes 4,3,2,1). + +### HC900 Hardware + +- Controller: HC900-C70, IP `192.168.0.240`, Modbus TCP port 502 +- Maximum simultaneous connections: 10 (R530 uses 1, leaving 9 available) +- Unit ID: 0x00 (not used in Modbus TCP mode) +- Float format must be set to **FP B** on the controller diff --git a/MULTI_CONTROLLER_WORK_ORDER.md b/MULTI_CONTROLLER_WORK_ORDER.md new file mode 100644 index 0000000..a6c6fe5 --- /dev/null +++ b/MULTI_CONTROLLER_WORK_ORDER.md @@ -0,0 +1,1355 @@ +# HC900 다중 컨트롤러 지원 — 구현 작업 지시서 + +## 목표 +현재 단일 HC900 컨트롤러 구조를 N대 확장 가능한 구조로 변경한다. +현재 4대 운영 중. 추가 증설 고려. + +--- + +## 현재 구조 (변경 전) + +``` +config/gateway-config.json → { gateway: { controllerIp, grpcPort, ... } } +Hc900GatewayProcessService → hc900_gateway 프로세스 1개 관리 +Hc900GatewayClient → gRPC 채널 1개 (단일 Options 기반) +Hc900RealtimeService → 단일 gRPC 클라이언트로 폴링 +realtime_table → PK: id (UNIQUE tagname) +history_table → tagname 기준 +event_history_table → tagname 기준 +hc900_map_master → tagname + hc900_tag +``` + +--- + +## 목표 구조 (변경 후) + +``` +config/gateway-config.json → { shared: {...}, controllers: [...] } +ControllerRegistry → ControllerConfig[] 관리 싱글턴 +ControllerProcessManager → 컨트롤러별 GatewayProcess 관리 BackgroundService +ControllerGrpcClientPool → 컨트롤러별 GrpcChannel 풀 +Hc900RealtimeService → 컨트롤러 목록 루프로 각각 폴링 +realtime_table → PK: (controller_id, tagname) +history_table → controller_id 컬럼 추가 +event_history_table → controller_id 컬럼 추가 +hc900_map_master → controller_id 컬럼 추가 +``` + +--- + +## 1단계 — Config 구조 변경 + +### 파일: `src/Infrastructure/Hc900/Hc900GatewayProcessService.cs` + +#### 1-1. 기존 `GatewayConfig` 클래스 대체 + +기존: +```csharp +public class GatewayConfig +{ + public string BinaryPath { get; set; } = ""; + public string ControllerIp { get; set; } = ""; + public int ControllerPort { get; set; } = 502; + public int PollIntervalMs { get; set; } = 1000; + public string RegisterMapPath { get; set; } = ""; + public int GrpcListenPort { get; set; } = 50051; + public string LdLibraryPath { get; set; } = ""; + public string LogPath { get; set; } = "/tmp/hc900_gateway.log"; +} +``` + +변경 후 — 파일 맨 위에 새 클래스 추가: +```csharp +/// 공유 설정 — 모든 컨트롤러가 공통으로 사용 +public class GatewaySharedConfig +{ + public string BinaryPath { get; set; } = ""; + public string LdLibraryPath { get; set; } = ""; + public string LogDir { get; set; } = "/tmp"; +} + +/// 컨트롤러 1대 설정 +public class ControllerConfig +{ + public string Id { get; set; } = ""; // 고유 식별자 e.g. "HC1" + public string Name { get; set; } = ""; // 표시명 e.g. "반응기 1" + public string ControllerIp { get; set; } = ""; + public int ControllerPort { get; set; } = 502; + public int GrpcPort { get; set; } = 50051; + public int PollIntervalMs { get; set; } = 1000; + public string RegisterMapPath { get; set; } = ""; + public bool Enabled { get; set; } = true; +} + +/// 전체 Config 루트 (기존 GatewayConfig 대체) +public class MultiControllerConfig +{ + public GatewaySharedConfig Shared { get; set; } = new(); + public List Controllers { get; set; } = new(); +} + +// 하위 호환: 기존 GatewayConfig는 삭제해도 됨 +// SetupController 등에서 GatewayConfig를 직접 참조하는 곳은 +// ControllerConfig + GatewaySharedConfig 로 교체 +``` + +#### 1-2. `gateway-config.json` 형식 변경 예시 + +```json +{ + "shared": { + "binaryPath": "/home/windpacer/projects/hc900_ax/industrial-comm/cpp/build/hc900_gateway", + "ldLibraryPath": "/tmp/grpc_local/lib:/tmp/absl_local/lib", + "logDir": "/tmp" + }, + "controllers": [ + { + "id": "HC1", + "name": "반응기 1", + "controllerIp": "192.168.0.240", + "controllerPort": 502, + "grpcPort": 50051, + "pollIntervalMs": 1000, + "registerMapPath": "/home/windpacer/projects/hc900_ax/docs/register-map.json", + "enabled": true + }, + { + "id": "HC2", + "name": "반응기 2", + "controllerIp": "192.168.0.241", + "controllerPort": 502, + "grpcPort": 50052, + "pollIntervalMs": 1000, + "registerMapPath": "/home/windpacer/projects/hc900_ax/docs/register-map-hc2.json", + "enabled": true + } + ] +} +``` + +#### 1-3. `Hc900GatewayProcessService` → `ControllerProcessManager` 로 재작성 + +기존 파일에서 `Hc900GatewayProcessService` 클래스를 다음으로 교체. +`GatewayStatus` 클래스도 수정: + +```csharp +public class ControllerStatus +{ + public string ControllerId { get; set; } = ""; + public string Name { get; set; } = ""; + public bool Running { get; set; } + public int? Pid { get; set; } + public string Message { get; set; } = ""; + public string ControllerIp { get; set; } = ""; + public int GrpcPort { get; set; } + public DateTime? StartedAt { get; set; } + public List RecentLog { get; set; } = new(); +} + +public class ControllerProcessManager : BackgroundService +{ + private readonly ILogger _logger; + + // D1: Dictionary → ConcurrentDictionary (HTTP 스레드 + 감시 루프 동시 접근 안전) + private readonly ConcurrentDictionary _processes = new(); + private readonly ConcurrentDictionary _startedAt = new(); + // D1: StartAsync 의 "확인 후 시작" 복합연산 TOCTOU 방지 — 컨트롤러별 1개 세마포어 + private readonly ConcurrentDictionary _startLocks = new(); + + private MultiControllerConfig _config = new(); + private readonly object _configLock = new(); // D1: _config 읽기/쓰기 보호 + private static readonly string ConfigPath = FindConfigPath(); + + private static string FindConfigPath() + { + var dir = new DirectoryInfo(AppContext.BaseDirectory); + for (int i = 0; i < 8 && dir != null; i++, dir = dir.Parent) + { + var c = Path.Combine(dir.FullName, "config", "gateway-config.json"); + if (File.Exists(c)) return c; + } + return Path.Combine(AppContext.BaseDirectory, + "..", "..", "..", "..", "..", "..", "config", "gateway-config.json"); + } + + private static readonly JsonSerializerOptions _jsonOpts = new() + { + PropertyNameCaseInsensitive = true, + WriteIndented = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }; + + public ControllerProcessManager(ILogger logger) + { + _logger = logger; + ReloadConfig(); + } + + // D1: _config 읽기는 lock 안에서 + public MultiControllerConfig Config { get { lock (_configLock) return _config; } } + + public void ReloadConfig() + { + try + { + var path = Path.GetFullPath(ConfigPath); + if (!File.Exists(path)) { _logger.LogWarning("[ProcMgr] config 없음: {P}", path); return; } + var json = File.ReadAllText(path); + var loaded = JsonSerializer.Deserialize(json, _jsonOpts) + ?? new MultiControllerConfig(); + lock (_configLock) { _config = loaded; } + _logger.LogInformation("[ProcMgr] 컨트롤러 {Count}대 로드", loaded.Controllers.Count); + } + catch (Exception ex) { _logger.LogWarning(ex, "[ProcMgr] config 로드 실패"); } + } + + public static void SaveConfig(MultiControllerConfig cfg) + { + var path = Path.GetFullPath(ConfigPath); + Directory.CreateDirectory(Path.GetDirectoryName(path)!); + File.WriteAllText(path, JsonSerializer.Serialize(cfg, _jsonOpts)); + } + + public List GetAllStatus() + { + List ctrls; + lock (_configLock) { ctrls = _config.Controllers.ToList(); } + return ctrls.Select(c => GetStatus(c.Id)).ToList(); + } + + public ControllerStatus GetStatus(string controllerId) + { + ControllerConfig? cfg; + MultiControllerConfig snapshot; + lock (_configLock) { snapshot = _config; cfg = snapshot.Controllers.FirstOrDefault(c => c.Id == controllerId); } + if (cfg == null) return new ControllerStatus { ControllerId = controllerId, Message = "설정 없음" }; + + // ConcurrentDictionary — 스레드 안전 읽기 + _processes.TryGetValue(controllerId, out var p); + var running = p != null && !p.HasExited; + + var logPath = Path.Combine(snapshot.Shared.LogDir, $"hc900_gateway_{controllerId}.log"); + var log = new List(); + try { if (File.Exists(logPath)) log = File.ReadLines(logPath).TakeLast(20).ToList(); } catch { } + + _startedAt.TryGetValue(controllerId, out var startedAt); + return new ControllerStatus + { + ControllerId = controllerId, + Name = cfg.Name, + Running = running, + Pid = running ? p!.Id : null, + Message = running ? $"실행 중 (PID {p!.Id})" : "중지됨", + ControllerIp = cfg.ControllerIp, + GrpcPort = cfg.GrpcPort, + StartedAt = startedAt, + RecentLog = log, + }; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + _logger.LogInformation("[ProcMgr] 시작"); + await Task.Delay(2000, stoppingToken); + + foreach (var ctrl in _config.Controllers.Where(c => c.Enabled)) + { + var (ok, msg) = await StartAsync(ctrl.Id); + _logger.LogInformation("[ProcMgr] {Id} 초기 시작: {Msg}", ctrl.Id, msg); + } + + // 감시 루프 + while (!stoppingToken.IsCancellationRequested) + { + try { await Task.Delay(5000, stoppingToken); } catch (OperationCanceledException) { break; } + + List enabledCtrls; + lock (_configLock) { enabledCtrls = _config.Controllers.Where(c => c.Enabled).ToList(); } + foreach (var ctrl in enabledCtrls) + { + if (_processes.TryGetValue(ctrl.Id, out var p) && p != null && p.HasExited) + { + _logger.LogWarning("[ProcMgr] {Id} 종료됨 (exit={Code}) — 재시작", ctrl.Id, p.ExitCode); + _processes.TryRemove(ctrl.Id, out _); // D1: TryRemove 사용 + _startedAt.TryRemove(ctrl.Id, out _); + try { await Task.Delay(5000, stoppingToken); } catch (OperationCanceledException) { break; } + var (ok, msg) = await StartAsync(ctrl.Id); + _logger.LogInformation("[ProcMgr] {Id} 재시작: {Msg}", ctrl.Id, msg); + } + } + } + } + + public async Task<(bool Ok, string Msg)> StartAsync(string controllerId) + { + // D1: 컨트롤러별 세마포어로 동시 중복 시작 방지 (TOCTOU 방지) + var sem = _startLocks.GetOrAdd(controllerId, _ => new SemaphoreSlim(1, 1)); + if (!await sem.WaitAsync(0)) + return (false, "이미 시작 처리 중"); + try + { + MultiControllerConfig snapshot; + lock (_configLock) { snapshot = _config; } + var cfg = snapshot.Controllers.FirstOrDefault(c => c.Id == controllerId); + if (cfg == null) return (false, $"컨트롤러 {controllerId} 설정 없음"); + + if (_processes.TryGetValue(controllerId, out var existing) && existing != null && !existing.HasExited) + return (false, "이미 실행 중"); + + if (!File.Exists(snapshot.Shared.BinaryPath)) + return (false, $"바이너리 없음: {snapshot.Shared.BinaryPath}"); + if (string.IsNullOrEmpty(cfg.ControllerIp)) + return (false, "Controller IP 미설정"); + + var logPath = Path.Combine(snapshot.Shared.LogDir, $"hc900_gateway_{controllerId}.log"); + try { File.WriteAllText(logPath, ""); } catch { } + + // D7: 인수 순서 — 기존 호환 유지하며 끝에 추가 + // argv[1]=host argv[2]=map_path argv[3]=poll_ms argv[4]=grpc_port argv[5]=modbus_port + var psi = new ProcessStartInfo + { + FileName = snapshot.Shared.BinaryPath, + Arguments = $"{cfg.ControllerIp} {cfg.RegisterMapPath} {cfg.PollIntervalMs} {cfg.GrpcPort} {cfg.ControllerPort}", + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false, + CreateNoWindow = true, + }; + if (!string.IsNullOrEmpty(snapshot.Shared.LdLibraryPath)) + psi.EnvironmentVariables["LD_LIBRARY_PATH"] = snapshot.Shared.LdLibraryPath; + + var proc = new Process { StartInfo = psi }; + proc.OutputDataReceived += (_, e) => { if (e.Data != null) AppendLog(logPath, e.Data); }; + proc.ErrorDataReceived += (_, e) => { if (e.Data != null) AppendLog(logPath, e.Data); }; + proc.Start(); + proc.BeginOutputReadLine(); + proc.BeginErrorReadLine(); + + _processes[controllerId] = proc; + _startedAt[controllerId] = DateTime.UtcNow; + + // D6: 고정 2초 대기 → gRPC 헬스체크 폴링 (최대 10초) + // StartAsync 내에서 임시 채널 사용 (아직 풀에 등록 전이므로 불가피); 사용 후 즉시 dispose + await Task.Delay(500); + for (int i = 0; i < 10; i++) + { + if (proc.HasExited) return (false, "즉시 종료됨 — 로그 확인"); + try + { + using var tempChannel = GrpcChannel.ForAddress($"http://localhost:{cfg.GrpcPort}"); + var tempClient = new ModbusGateway.ModbusGatewayClient(tempChannel); + var health = await tempClient.HealthCheckAsync( + new HealthCheckRequest(), deadline: DateTime.UtcNow.AddSeconds(1)); + if (health.Status == HealthCheckResponse.Types.ServingStatus.Serving) + return (true, $"시작 PID={proc.Id} (헬스체크 통과, {i + 1}회)"); + } + catch { /* 아직 준비 안 됨 */ } + await Task.Delay(1000); + } + return proc.HasExited + ? (false, "즉시 종료됨 — 로그 확인") + : (true, $"시작 PID={proc.Id} (헬스체크 미응답)"); + } + finally { sem.Release(); } + } + + public Task<(bool Ok, string Msg)> StopAsync(string controllerId) + { + if (!_processes.TryGetValue(controllerId, out var p) || p == null || p.HasExited) + { + _processes.TryRemove(controllerId, out _); // D1: TryRemove + return Task.FromResult((false, "실행 중인 프로세스 없음")); + } + try { p.Kill(entireProcessTree: true); } catch { } + p.Dispose(); + _processes.TryRemove(controllerId, out _); // D1: TryRemove + _startedAt.TryRemove(controllerId, out _); + return Task.FromResult((true, $"{controllerId} 중지됨")); + } + + private void AppendLog(string logPath, string line) + { + try { File.AppendAllText(logPath, line + "\n"); } catch { } + } + + public override void Dispose() + { + foreach (var (_, p) in _processes) + { + try { if (p != null && !p.HasExited) p.Kill(entireProcessTree: true); p?.Dispose(); } catch { } + } + foreach (var (_, sem) in _startLocks) + try { sem.Dispose(); } catch { } + base.Dispose(); + } +} +``` + +--- + +## 2단계 — C++ 게이트웨이 수정 (gRPC 포트 + Modbus 포트 인수 추가) + +> **D5 주의**: `src/main.cpp`는 엔트리포인트가 아님 (내용: `auto controller = init_system();` 3줄짜리 미사용 파일). +> 실제 `main()` 함수는 **`src/gateway.cpp:390`** 에 있음. 모든 변경은 `gateway.cpp`와 `include/gateway.h`에 적용. + +### 파일 1: `industrial-comm/cpp/include/gateway.h` + +현재 생성자 (`gateway.h:36`): +```cpp +Hc900Gateway(const std::string& host, uint16_t port, + const std::string& map_path, + int poll_interval_ms = 1000); +// 멤버 변수: std::string grpc_listen_{"0.0.0.0:50051"}; ← 하드코딩 +``` + +변경 후 — D4: 생성자에 grpc_port 파라미터 추가, 멤버 변수 초기화 제거: +```cpp +// 생성자 선언 변경 +Hc900Gateway(const std::string& host, uint16_t port, + const std::string& map_path, + int poll_interval_ms = 1000, + int grpc_port = 50051); // ← 추가 + +// 멤버 변수: 하드코딩 제거 → 생성자에서 초기화 +std::string grpc_listen_; // "0.0.0.0:50051" 제거 +``` + +### 파일 2: `industrial-comm/cpp/src/gateway.cpp` + +**생성자 구현 변경** (현재 `gateway.cpp:19-26` 근방): +```cpp +// 변경 전 +Hc900Gateway::Hc900Gateway(const std::string& host, uint16_t port, + const std::string& map_path, + int poll_interval_ms) + : host_(host), port_(port), poll_interval_ms_(poll_interval_ms) + +// 변경 후 +Hc900Gateway::Hc900Gateway(const std::string& host, uint16_t port, + const std::string& map_path, + int poll_interval_ms, + int grpc_port) + : host_(host), port_(port), poll_interval_ms_(poll_interval_ms), + grpc_listen_("0.0.0.0:" + std::to_string(grpc_port)) +``` + +**`main()` 변경** (`gateway.cpp:390`): + +현재: +```cpp +// argv[1]=host, argv[2]=map_path, argv[3]=poll_ms (port는 502 하드코딩) +if (argc > 1) host = argv[1]; +if (argc > 2) map_path = argv[2]; +if (argc > 3) poll_ms = std::atoi(argv[3]); +Hc900Gateway gateway(host, port, map_path, poll_ms); +``` + +변경 후 — D7: 기존 인수 순서 유지, 끝에 추가 (하위 호환): +```cpp +// argv[1]=host argv[2]=map_path argv[3]=poll_ms +// argv[4]=grpc_port (신규, 기본 50051) +// argv[5]=modbus_port (신규, 기본 502) +std::string host = "192.168.0.240"; +std::string map_path = "docs/register-map.json"; +int poll_ms = 1000; +int grpc_port = 50051; +uint16_t modbus_port = 502; + +if (argc > 1) host = argv[1]; +if (argc > 2) map_path = argv[2]; +if (argc > 3) poll_ms = std::atoi(argv[3]); +if (argc > 4) grpc_port = std::atoi(argv[4]); +if (argc > 5) modbus_port = static_cast(std::atoi(argv[5])); + +Hc900Gateway gateway(host, modbus_port, map_path, poll_ms, grpc_port); +``` + +빌드 후 `build/hc900_gateway` 재배포. + +--- + +## 3단계 — DB 마이그레이션 + +### `Hc900DbContext.cs` > `InitializeAsync()` 에 추가 + +기존 테이블 생성 코드 **아래에** 다음 멱등 ALTER 문 추가: + +```csharp +// ── Multi-controller 지원: controller_id 컬럼 추가 ──────────────── +await _ctx.Database.ExecuteSqlRawAsync(""" + ALTER TABLE realtime_table + ADD COLUMN IF NOT EXISTS controller_id TEXT NOT NULL DEFAULT 'HC1' + """); + +await _ctx.Database.ExecuteSqlRawAsync(""" + ALTER TABLE history_table + ADD COLUMN IF NOT EXISTS controller_id TEXT NOT NULL DEFAULT 'HC1' + """); + +await _ctx.Database.ExecuteSqlRawAsync(""" + ALTER TABLE event_history_table + ADD COLUMN IF NOT EXISTS controller_id TEXT NOT NULL DEFAULT 'HC1' + """); + +await _ctx.Database.ExecuteSqlRawAsync(""" + ALTER TABLE hc900_map_master + ADD COLUMN IF NOT EXISTS controller_id TEXT NOT NULL DEFAULT 'HC1' + """); + +await _ctx.Database.ExecuteSqlRawAsync(""" + ALTER TABLE tag_metadata + ADD COLUMN IF NOT EXISTS controller_id TEXT NOT NULL DEFAULT 'HC1' + """); + +// UNIQUE 제약 변경: tagname 단독 → (controller_id, tagname) +// UNIQUE INDEX 이름이 다를 수 있으므로 기존 것 먼저 삭제 +await _ctx.Database.ExecuteSqlRawAsync(""" + DO $$ + BEGIN + -- realtime_table unique 재설정 + IF EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conrelid = 'realtime_table'::regclass AND contype = 'u' + ) THEN + ALTER TABLE realtime_table DROP CONSTRAINT IF EXISTS realtime_table_tagname_key; + ALTER TABLE realtime_table DROP CONSTRAINT IF EXISTS uq_realtime_tagname; + END IF; + IF NOT EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conrelid = 'realtime_table'::regclass + AND conname = 'uq_realtime_controller_tagname' + ) THEN + ALTER TABLE realtime_table + ADD CONSTRAINT uq_realtime_controller_tagname UNIQUE (controller_id, tagname); + END IF; + END $$ + """); + +// 인덱스 +await _ctx.Database.ExecuteSqlRawAsync(""" + CREATE INDEX IF NOT EXISTS idx_realtime_controller + ON realtime_table(controller_id) + """); +await _ctx.Database.ExecuteSqlRawAsync(""" + CREATE INDEX IF NOT EXISTS idx_history_controller + ON history_table(controller_id) + """); +await _ctx.Database.ExecuteSqlRawAsync(""" + CREATE INDEX IF NOT EXISTS idx_event_history_controller + ON event_history_table(controller_id) + """); +``` + +### 엔티티 클래스 수정: `src/Core/Domain/Entities/Hc900Entities.cs` + +다음 4개 클래스에 `controller_id` 컬럼 추가: + +```csharp +// RealtimePoint 에 추가 +[Column("controller_id")] public string ControllerId { get; set; } = "HC1"; + +// HistoryRecord 에 추가 +[Column("controller_id")] public string ControllerId { get; set; } = "HC1"; + +// EventHistoryRecord 에 추가 +[Column("controller_id")] public string ControllerId { get; set; } = "HC1"; + +// Hc900MapEntry 에 추가 +[Column("controller_id")] public string ControllerId { get; set; } = "HC1"; + +// TagMetadata 에 추가 +[Column("controller_id")] public string ControllerId { get; set; } = "HC1"; +``` + +--- + +## 4단계 — gRPC 클라이언트 풀 + +### 신규 파일: `src/Infrastructure/Hc900/ControllerGrpcClientPool.cs` + +```csharp +using Grpc.Net.Client; +using Hc900.Gateway; +using Microsoft.Extensions.Logging; + +namespace Hc900Crawler.Infrastructure.Hc900; + +/// 컨트롤러별 gRPC 채널/클라이언트 풀 +public class ControllerGrpcClientPool : IDisposable +{ + private readonly ControllerProcessManager _procMgr; + private readonly ILogger _logger; + private readonly Dictionary _clients = new(); + private readonly object _lock = new(); + + public ControllerGrpcClientPool(ControllerProcessManager procMgr, ILogger logger) + { + _procMgr = procMgr; + _logger = logger; + } + + public ModbusGateway.ModbusGatewayClient GetClient(string controllerId) + { + lock (_lock) + { + if (_clients.TryGetValue(controllerId, out var existing)) + return existing.Client; + + var ctrl = _procMgr.Config.Controllers.FirstOrDefault(c => c.Id == controllerId) + ?? throw new InvalidOperationException($"컨트롤러 {controllerId} 설정 없음"); + + var address = $"http://localhost:{ctrl.GrpcPort}"; + var channel = GrpcChannel.ForAddress(address, new GrpcChannelOptions + { + MaxReceiveMessageSize = 64 * 1024 * 1024, + }); + var client = new ModbusGateway.ModbusGatewayClient(channel); + _clients[controllerId] = (channel, client); + _logger.LogInformation("[GrpcPool] 채널 생성: {Id} → {Addr}", controllerId, address); + return client; + } + } + + /// 모든 활성 컨트롤러 ID 목록 + public IEnumerable EnabledControllerIds + => _procMgr.Config.Controllers.Where(c => c.Enabled).Select(c => c.Id); + + public void RemoveClient(string controllerId) + { + lock (_lock) + { + if (_clients.TryGetValue(controllerId, out var pair)) + { + pair.Channel.ShutdownAsync().GetAwaiter().GetResult(); + pair.Channel.Dispose(); + _clients.Remove(controllerId); + } + } + } + + public void Dispose() + { + lock (_lock) + { + foreach (var (_, pair) in _clients) + { + try { pair.Channel.ShutdownAsync().GetAwaiter().GetResult(); pair.Channel.Dispose(); } catch { } + } + _clients.Clear(); + } + } +} +``` + +--- + +## 5단계 — Hc900RealtimeService 수정 + +### 파일: `src/Infrastructure/Hc900/Hc900RealtimeService.cs` + +`Hc900GatewayClient` 의존성을 `ControllerGrpcClientPool` 로 교체. +컨트롤러별로 폴링 루프 실행. + +```csharp +// 생성자 변경: Hc900GatewayClient → ControllerGrpcClientPool +public Hc900RealtimeService( + ControllerGrpcClientPool clientPool, + IOptions options, // pollIntervalMs 등 공통 옵션 여전히 사용 + IConfiguration config, + ILogger logger) + +// ExecuteAsync: 컨트롤러별 Task 동시 실행 +protected override async Task ExecuteAsync(CancellationToken stoppingToken) +{ + var tasks = _clientPool.EnabledControllerIds + .Select(id => RunControllerLoopAsync(id, stoppingToken)) + .ToList(); + await Task.WhenAll(tasks); +} + +private async Task RunControllerLoopAsync(string controllerId, CancellationToken ct) +{ + // 기존 단일 루프와 동일한 로직, client는 _clientPool.GetClient(controllerId) + // DB upsert 시 controller_id = controllerId 포함 + // IsConnected / PollCount 는 컨트롤러별로 관리 (Dictionary 사용) +} +``` + +**변경 핵심:** +- `BatchUpdateRealtimeTableAsync` 의 INSERT 쿼리: + ```sql + INSERT INTO realtime_table (controller_id, tagname, node_id, livevalue, timestamp) + VALUES ($1, $2, '', $3, $4) + ON CONFLICT (controller_id, tagname) DO UPDATE + SET livevalue = EXCLUDED.livevalue, timestamp = EXCLUDED.timestamp + ``` +- `LoadMappingAsync` 쿼리: + ```sql + SELECT tagname, hc900_tag FROM hc900_map_master + WHERE is_active = TRUE AND controller_id = $1 + ``` +- `LoadStateLabelsAsync` 쿼리: + ```sql + SELECT base_tag, attribute, value FROM tag_metadata + WHERE attribute LIKE 'state%' AND controller_id = $1 + ``` + +**IsConnected / PollCount 노출:** +```csharp +// 기존 단일 값 → 컨트롤러별 딕셔너리 +private readonly ConcurrentDictionary _connected = new(); +private readonly ConcurrentDictionary _pollCounts = new(); +private readonly ConcurrentDictionary _lastPollAt = new(); + +public bool IsConnected => _connected.Values.Any(v => v); // 하나라도 연결되면 true +public long PollCount => _pollCounts.Values.Sum(); +public DateTime? LastPollAt => _lastPollAt.Values.Where(v => v.HasValue).Max(); + +// 컨트롤러별 상태 노출 (Setup UI용) +public IReadOnlyDictionary ControllerConnected => _connected; +``` + +--- + +## 6단계 — Hc900HistoryService 수정 + +### 파일: `src/Infrastructure/Hc900/Hc900HistoryService.cs` + +`SnapshotToHistoryAsync` 가 `controller_id` 를 전달하도록 수정. + +**`IExperionDbService` 인터페이스 / `Hc900DbService` 구현 변경:** +```csharp +// 기존 (IExperionServices.cs:31) +Task SnapshotToHistoryAsync(bool includeDigital = false); + +// 변경 후 — D2: includeDigital 유지, controllerId 추가 +Task SnapshotToHistoryAsync(string? controllerId = null, bool includeDigital = false); +// controllerId=null → 전체 컨트롤러 스냅샷 +``` + +`Hc900HistoryService` 호출: +```csharp +var count = await db.SnapshotToHistoryAsync(controllerId: null, includeDigital: false); +``` + +**DB 쿼리:** +```sql +INSERT INTO history_table (controller_id, tagname, node_id, value, recorded_at) +SELECT controller_id, tagname, node_id, livevalue, NOW() +FROM realtime_table +WHERE ($1::TEXT IS NULL OR controller_id = $1) + AND ($2 = TRUE OR livevalue IS NOT NULL) -- includeDigital=false면 NULL 제외 +ON CONFLICT DO NOTHING +``` + +--- + +## 6-b단계 — Hc900DigitalEventDetectorService 수정 (D3 — 지시서 원안 누락) + +> **원안 누락 항목.** 이 서비스가 `event_history_table`에 기록할 때 `controller_id`를 전파하지 않으면 +> HC1 이외 컨트롤러의 디지털 이벤트가 모두 `DEFAULT 'HC1'`로 저장됨. + +### 파일 1: `src/Core/Application/Interfaces/IExperionServices.cs` — DigitalEventRecord + +```csharp +public class DigitalEventRecord +{ + public string ControllerId { get; set; } = "HC1"; // ← 추가 + public string TagName { get; set; } = ""; + public string NodeId { get; set; } = ""; + public string? PrevValue { get; set; } + public string CurrValue { get; set; } = ""; + public string EventType { get; set; } = ""; + public DateTime EventTime { get; set; } = DateTime.UtcNow; + public int? DurationSeconds { get; set; } + public string? Area { get; set; } + public string? SubArea { get; set; } + public string? Metadata { get; set; } +} +``` + +### 파일 2: `src/Infrastructure/Hc900/Hc900DigitalEventDetectorService.cs` + +`DetectAndRecordChangesAsync` 내부 — `RealtimePoint.ControllerId` 전파: +```csharp +// RealtimePoint 엔티티에 ControllerId가 추가된 후 (3단계 완료 전제) +events.Add(new DigitalEventRecord +{ + ControllerId = point.ControllerId, // ← 추가 (기본값 "HC1" 대신 실제 값) + TagName = tagName, + NodeId = point.NodeId, + PrevValue = prevState.Value, + CurrValue = currValue, + EventType = eventType, + EventTime = now, + DurationSeconds = duration, + Area = area, + SubArea = subArea, + Metadata = BuildMetadata(tagName, eventType, currValue) +}); +``` + +### 파일 3: `src/Infrastructure/Database/Hc900DbContext.cs` — BatchRecordDigitalEventsAsync + +DB INSERT 쿼리에 `controller_id` 컬럼 추가: +```sql +INSERT INTO event_history_table + (controller_id, tagname, node_id, prev_value, curr_value, + event_type, event_time, duration_seconds, area, sub_area, metadata) +VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) +``` +파라미터 $1 = `record.ControllerId` + +--- + +## 7단계 — SetupController 수정 + +### 파일: `src/Hc900Crawler/Controllers/SetupController.cs` + +`Hc900GatewayProcessService` → `ControllerProcessManager` 로 교체. + +```csharp +[ApiController] +[Route("api/setup")] +public class SetupController : ControllerBase +{ + private readonly ControllerProcessManager _procMgr; + private readonly Hc900RealtimeService _realtime; + + public SetupController(ControllerProcessManager procMgr, Hc900RealtimeService realtime) + { _procMgr = procMgr; _realtime = realtime; } + + /// 전체 컨트롤러 상태 조회 + [HttpGet("controllers")] + public IActionResult GetControllers() + { + var statuses = _procMgr.GetAllStatus(); + var connected = _realtime.ControllerConnected; + return Ok(statuses.Select(s => new + { + s.ControllerId, s.Name, s.Running, s.Pid, + s.Message, s.ControllerIp, s.GrpcPort, s.StartedAt, + crawlerConnected = connected.GetValueOrDefault(s.ControllerId), + pollCount = _realtime.PollCount, // 전체 합산 또는 컨트롤러별 구현 + })); + } + + /// 단일 컨트롤러 상태 (기존 /gateway/status 대체) + [HttpGet("gateway/status")] + public IActionResult GetStatus() + { + // 하위 호환: 첫 번째 컨트롤러 상태 반환 + 전체 합산 + var statuses = _procMgr.GetAllStatus(); + var first = statuses.FirstOrDefault() ?? new ControllerStatus(); + return Ok(new + { + running = statuses.Any(s => s.Running), + pid = first.Pid, + message = string.Join(", ", statuses.Select(s => $"{s.ControllerId}:{s.Message}")), + controllerIp = string.Join(", ", statuses.Select(s => s.ControllerIp)), + startedAt = first.StartedAt, + recentLog = first.RecentLog, + crawlerConnected = _realtime.IsConnected, + crawlerPollCount = _realtime.PollCount, + crawlerLastPoll = _realtime.LastPollAt, + controllers = statuses, // 상세 목록 추가 + }); + } + + /// 전체 설정 조회 + [HttpGet("config")] + public IActionResult GetConfig() + { + _procMgr.ReloadConfig(); + return Ok(_procMgr.Config); + } + + /// 전체 설정 저장 + [HttpPost("config")] + public IActionResult SaveConfig([FromBody] MultiControllerConfig cfg) + { + ControllerProcessManager.SaveConfig(cfg); + _procMgr.ReloadConfig(); + return Ok(new { success = true }); + } + + /// 특정 컨트롤러 시작 + [HttpPost("gateway/start")] + public async Task Start([FromQuery] string? id = null) + { + if (id != null) + { + var (ok, msg) = await _procMgr.StartAsync(id); + return Ok(new { success = ok, message = msg }); + } + // id 없으면 전체 시작 + var results = new List(); + foreach (var ctrl in _procMgr.Config.Controllers.Where(c => c.Enabled)) + { + var (ok, msg) = await _procMgr.StartAsync(ctrl.Id); + results.Add(new { ctrl.Id, ok, msg }); + } + return Ok(results); + } + + /// 특정 컨트롤러 중지 + [HttpPost("gateway/stop")] + public async Task Stop([FromQuery] string? id = null) + { + if (id != null) + { + var (ok, msg) = await _procMgr.StopAsync(id); + return Ok(new { success = ok, message = msg }); + } + var results = new List(); + foreach (var ctrl in _procMgr.Config.Controllers) + { + var (ok, msg) = await _procMgr.StopAsync(ctrl.Id); + results.Add(new { ctrl.Id, ok, msg }); + } + return Ok(results); + } + + [HttpPost("gateway/restart")] + public async Task Restart([FromBody] MultiControllerConfig? cfg, [FromQuery] string? id = null) + { + if (cfg != null) { ControllerProcessManager.SaveConfig(cfg); _procMgr.ReloadConfig(); } + if (id != null) + { + await _procMgr.StopAsync(id); + await Task.Delay(500); + var (ok, msg) = await _procMgr.StartAsync(id); + return Ok(new { success = ok, message = msg }); + } + // 전체 재시작 + foreach (var ctrl in _procMgr.Config.Controllers) + await _procMgr.StopAsync(ctrl.Id); + await Task.Delay(500); + var results = new List(); + foreach (var ctrl in _procMgr.Config.Controllers.Where(c => c.Enabled)) + { + var (ok, msg) = await _procMgr.StartAsync(ctrl.Id); + results.Add(new { ctrl.Id, ok, msg }); + } + return Ok(results); + } + + [HttpGet("gateway/log")] + public IActionResult GetLog([FromQuery] string? id = null, [FromQuery] int lines = 50) + { + var target = id ?? _procMgr.Config.Controllers.FirstOrDefault()?.Id; + if (target == null) return Ok(new { log = Array.Empty() }); + var status = _procMgr.GetStatus(target); + return Ok(new { log = status.RecentLog.TakeLast(lines) }); + } +} +``` + +--- + +## 8단계 — Program.cs 수정 + +### 파일: `src/Hc900Crawler/Program.cs` + +기존 등록 코드 교체: + +```csharp +// 제거: +// builder.Services.AddSingleton(); +// builder.Services.AddHostedService(sp => sp.GetRequiredService()); +// builder.Services.AddSingleton(); +// builder.Services.AddSingleton(...); + +// 추가: +builder.Services.AddSingleton(); +builder.Services.AddHostedService(sp => sp.GetRequiredService()); +builder.Services.AddSingleton(); + +// Hc900RealtimeService 생성자 변경에 따라 DI는 자동 해결됨 +builder.Services.AddSingleton(); +builder.Services.AddSingleton(sp => sp.GetRequiredService()); +builder.Services.AddHostedService(sp => sp.GetRequiredService()); + +// Hc900WriteService 도 ControllerGrpcClientPool 사용하도록 수정 필요 +builder.Services.AddSingleton(); +``` + +--- + +## 9단계 — Hc900WriteService 수정 + +### 파일: `src/Infrastructure/Hc900/Hc900WriteService.cs` + +```csharp +// 생성자: Hc900GatewayClient → ControllerGrpcClientPool +// WriteTagAsync 에 controllerId 파라미터 추가 +public async Task<(bool Success, string? Error)> WriteTagAsync( + string controllerId, string tagName, double value) +{ + var client = _clientPool.GetClient(controllerId); + var resp = await client.WriteTagAsync(new WriteTagRequest { TagName = tagName, Value = value }); + return (resp.Success, resp.Error); +} +``` + +### GatewayController write endpoint 수정: +```csharp +// WriteTagDto 에 ControllerId 추가 +public class WriteTagDto +{ + public string ControllerId { get; set; } = "HC1"; // 기본값 하위 호환 + public string TagName { get; set; } = ""; + public double Value { get; set; } +} +``` + +--- + +## 10단계 — Setup UI 수정 + +### 파일: `wwwroot/js/setup.js` + +기존 단일 컨트롤러 상태 표시를 컨트롤러 목록 카드 형식으로 변경. + +**refreshStatus 변경:** +```javascript +async function refreshStatus() { + try { + const d = await _setupApi('GET', '/gateway/status'); + // d.controllers = [{controllerId, name, running, pid, controllerIp, grpcPort, crawlerConnected}, ...] + + const container = document.getElementById('controllers-list'); + if (!container) return; + container.innerHTML = (d.controllers || []).map(c => ` +
+
+ ${esc(c.controllerId)} + ${esc(c.name)} + ${c.running ? '실행 중' : '중지됨'} +
+
+ IP: ${esc(c.controllerIp)} | gRPC: :${c.grpcPort} | PID: ${c.pid ?? '—'} + | Crawler: ${c.crawlerConnected ? '연결됨' : '미연결'} +
+
+ + + +
+
+ `).join(''); + } catch(e) { console.error('refreshStatus:', e); } +} +``` + +**startGateway/stopGateway/restartGateway 에 id 파라미터 추가:** +```javascript +async function startGateway(id) { + const url = id ? `/gateway/start?id=${encodeURIComponent(id)}` : '/gateway/start'; + const r = await _setupApi('POST', url); + _setupMsg('action-msg', r.success ?? (r[0]?.ok), r.message ?? '완료'); + setTimeout(refreshStatus, 2500); +} +``` + +### 파일: `wwwroot/panes/setup.html` + +Gateway Status 카드 내부: +```html + +
+``` + +Config 카드도 `multiControllerConfig` 형식으로 편집할 수 있게 변경. +(controllers 배열 추가/편집/삭제 UI 구현) + +--- + +## 11단계 — API 쿼리 파라미터 전파 + +아래 API들에 `?controllerId=HC1` 쿼리 파라미터 추가 및 DB 쿼리에 반영: + +| API | 변경 | +|-----|------| +| `GET /api/realtime/points` | `?controllerId=` 필터 추가 | +| `POST /api/history/query` | `HistoryQueryDto.ControllerId` 추가 | +| `POST /api/events/query` | `EventQueryDto.ControllerId` 추가 | +| `GET /api/hc900/tags` | `?controllerId=` 필터 추가 | + +UI의 이력/이벤트/태그 탭에 컨트롤러 선택 드롭다운 추가. + +--- + +## 12단계 — IHc900RealtimeService 인터페이스 수정 + +### 파일: `src/Core/Application/Interfaces/IExperionServices.cs` (또는 유사) + +```csharp +public interface IHc900RealtimeService +{ + bool IsConnected { get; } + long PollCount { get; } + DateTime? LastPollAt { get; } + IReadOnlyDictionary ControllerConnected { get; } // 추가 +} +``` + +--- + +## 체크리스트 + +``` +[ ] 1. C++ gateway.h: 생성자에 grpc_port 파라미터 추가, grpc_listen_ 초기화 이동 (D4) +[ ] 2. C++ gateway.cpp main(): argv[4]=grpc_port, argv[5]=modbus_port 추가 (기존 순서 유지) (D7) +[ ] 3. C++ 재빌드 → build/hc900_gateway 배포 +[ ] 4. gateway-config.json: shared + controllers 형식으로 변환 +[ ] 5. GatewayConfig → MultiControllerConfig / ControllerConfig 교체 +[ ] 6. Hc900GatewayProcessService → ControllerProcessManager 교체 + - Dictionary → ConcurrentDictionary (D1) + - SemaphoreSlim per-controller StartAsync 보호 (D1) + - _config 읽기/쓰기 lock(_configLock) 추가 (D1) + - Task.Delay(2000) → gRPC 헬스체크 폴링 with using tempChannel (D6) + - Arguments에 grpc_port + modbus_port 포함 (D7) +[ ] 7. ControllerGrpcClientPool 신규 작성 +[ ] 8. DB InitializeAsync: controller_id 컬럼 ALTER + UNIQUE 재설정 +[ ] 9. 엔티티 클래스 5곳 ControllerId 추가 + (RealtimePoint, HistoryRecord, EventHistoryRecord, Hc900MapEntry, TagMetadata) +[ ] 10. Hc900RealtimeService: clientPool 기반 멀티 루프로 변경 +[ ] 11. Hc900HistoryService: SnapshotToHistoryAsync(controllerId, includeDigital) — includeDigital 유지 (D2) +[ ] 12. Hc900DigitalEventDetectorService: DigitalEventRecord.ControllerId 추가 + 전파 (D3) +[ ] 13. Hc900WriteService: controllerId 파라미터 추가 +[ ] 14. SetupController: ControllerProcessManager 사용으로 교체 +[ ] 15. GatewayController: WriteTagDto.ControllerId 추가 +[ ] 16. Program.cs: DI 등록 교체 +[ ] 17. Setup UI: 컨트롤러 목록 카드 표시 + 개별 제어 +[ ] 18. 이력/이벤트/태그 API + UI: controllerId 필터 추가 +[ ] 19. dotnet build 확인 +[ ] 20. 단일 컨트롤러(HC1)로 회귀 테스트 +``` + +--- + +## 주의사항 + +- **기존 DB 데이터**: `controller_id DEFAULT 'HC1'` 로 마이그레이션 자동 처리됨 +- **하위 호환**: `GET /api/setup/gateway/status` 는 기존 형식 + `controllers` 배열 추가로 호환 유지 +- **gRPC 포트**: 50051~50054 방화벽 개방 필요 (서버 내부 통신이므로 loopback만 사용 시 불필요) +- **레지스터맵**: 컨트롤러마다 다를 수 있으므로 `registerMapPath` 를 개별 지정 +- **Hc900Options (appsettings.json)**: 단일 `GatewayAddress` 는 더 이상 사용 안 함. config/gateway-config.json 으로 통합 + +--- + +## 진단 결과 및 반박 검수 + +| 항목 | 판정 | 반영 위치 | +|------|------|-----------| +| D1 동시성 | **채택 + 보완** — ConcurrentDictionary 외 SemaphoreSlim 추가 | 1-3단계 코드 | +| D2 includeDigital | **채택** — 기존 시그니처 확인 후 양쪽 파라미터 유지 | 6단계 | +| D3 DigitalEventDetector | **채택** — 원안 누락 인정, 6-b단계 신규 추가 | 6-b단계 | +| D4 gateway.h 생성자 | **채택** — 헤더 파일 변경 명시 | 2단계 | +| D5 main.cpp 혼란 | **채택 + 상향 조정** — 수정 대상이 main.cpp가 아닌 gateway.cpp임을 명시 | 2단계 | +| D6 Task.Delay | **부분 채택** — 방향 동의. 임시 채널은 `using` 으로 즉시 dispose (풀 우회 주의) | 1-3단계 코드 | +| D7 인수 순서 | **부분 채택** — 포트 추가 동의. 단 중간 삽입은 Breaking Change이므로 **끝에 추가** | 2단계 | + +### D1. `ControllerProcessManager` — Dictionary 동시성 미보호 (MED) + +**문제**: `_processes`(Dictionary)와 `_config`가 `ExecuteAsync`(감시루프), `StartAsync`, `StopAsync`, `GetStatus`에서 **lock 없이** 동시 접근된다. +**근거**: `MULTI_CONTROLLER_WORK_ORDER.md:154` — `private readonly Dictionary _processes = new();` +**영향**: 동시 HTTP 요청 또는 감시 루프와 충돌 시 `Collection was modified` 예외, 프로세스 중복 실행, 또는 `NullReferenceException`. +**수정**: `_processes` → `ConcurrentDictionary` 로 변경하고 `_config` 접근 시 `lock (_lock)` 보호: + +```csharp +// 필드 선언 교체 +private readonly ConcurrentDictionary _processes = new(); +private readonly ConcurrentDictionary _startedAt = new(); + +// GetStatus 의 _processes 접근 +_processes.TryGetValue(controllerId, out var p); + +// ExecuteAsync 의 _processes 접근 +if (_processes.TryGetValue(ctrl.Id, out var p) && p != null && p.HasExited) +{ + _processes.TryRemove(ctrl.Id, out _); + // ... +} + +// StartAsync 의 _processes 접근 +if (_processes.TryGetValue(controllerId, out var existing) && existing != null && !existing.HasExited) + return (false, "이미 실행 중"); +// ... +_processes[controllerId] = proc; + +// StopAsync 의 _processes 접근 +if (!_processes.TryGetValue(controllerId, out var p) || p == null || p.HasExited) +{ + _processes.TryRemove(controllerId, out _); + // ... +} + +// _config 도 ReloadConfig() 전역 lock 필요 +private readonly object _configLock = new(); +public void ReloadConfig() { lock (_configLock) { /* 기존 로직 */ } } +public MultiControllerConfig Config { get { lock (_configLock) return _config; } } +``` + +--- + +### D2. `IExperionDbService.SnapshotToHistoryAsync` — `includeDigital` 파라미터 유실 (MED) + +**문제**: STEP 6이 현재 시그니처를 `SnapshotToHistoryAsync()` (파라미터 없음)으로 잘못 기술했고, 변경 후에도 `includeDigital`이 사라진다. +**근거**: `IExperionServices.cs:31` — 실제 현재 시그니처는 `Task SnapshotToHistoryAsync(bool includeDigital = false)`. +**영향**: 구현 시 기존 `includeDigital` 기능이 손실됨. 디지털 태그 필터링 없이 전체 스냅샷 저장. +**수정**: STEP 6 변경 후 시그니처를 아래로 통일: + +```csharp +// 변경 후: controllerId + includeDigital 동시 지원 +Task SnapshotToHistoryAsync(string? controllerId = null, bool includeDigital = false); +``` + +`Hc900HistoryService`의 호출 코드: +```csharp +// 실시간 서비스가 하나라도 연결되었는지는 컨트롤러레벨로 확인 +// 각 컨트롤러별로 스냅샷 호출하거나, null로 전체 스냅샷 +var count = await db.SnapshotToHistoryAsync(controllerId: null, includeDigital: false); +``` + +--- + +### D3. `Hc900DigitalEventDetectorService` — `controller_id` 미전파 (MED) + +**문제**: 작업 지시서가 `Hc900DigitalEventDetectorService`의 변경을 전혀 언급하지 않는다. 이 서비스가 기록하는 `event_history_table`의 `controller_id`가 항상 `'HC1'` (DEFAULT)이 된다. +**근거**: `MULTI_CONTROLLER_WORK_ORDER.md:624` — `Hc900HistoryService`만 언급, `Hc900DigitalEventDetectorService` 누락. `Hc900DigitalEventDetectorService.cs:140-152` — `DigitalEventRecord`에 `ControllerId` 필드가 없음. +**영향**: HC1 이외 컨트롤러의 디지털 이벤트가 모두 HC1로 기록되어 이벤트 조회 시 혼란. +**수정**: (A) `DigitalEventRecord`에 `ControllerId` 추가, (B) `DetectAndRecordChangesAsync`에서 realtime_table 조회 시 controller_id를 함께 읽어 event record에 포함, (C) DB 저장 쿼리에 controller_id 컬럼 추가: + +```csharp +// ── 3a. Core.Application.Interfaces/IExperionServices.cs - DigitalEventRecord ── +public class DigitalEventRecord +{ + // ... 기존 필드들 ... + public string ControllerId { get; set; } = "HC1"; +} + +// ── 3b. DetectAndRecordChangesAsync 내부 ── +// RealtimePoint에 ControllerId가 추가되면(STEP 7) 아래와 같이 전파: +events.Add(new DigitalEventRecord +{ + TagName = tagName, + ControllerId = point.ControllerId, // ← 추가 + // ... +}); + +// ── 3c. DB batch insert 쿼리 수정 (Hc900DbService) ── +// controller_id 컬럼 포함 INSERT +``` + +--- + +### D4. C++ `grpc_listen_` 생성자 파라미터화 명시 필요 (LOW) + +**문제**: STEP 2가 `argv[4]` 파싱만 언급하고 `gateway.h:99`의 `grpc_listen_` 하드코딩을 생성자 파라미터로 변경하는 코드를 명시하지 않았다. 문맥상 유추 가능하지만 실수 방지를 위해 명시 필요. +**근거**: `gateway.h:99` — `std::string grpc_listen_{"0.0.0.0:50051"};`, `gateway.cpp:19-26` — 생성자에 `grpc_port` 파라미터 없음. +**수정**: `gateway.h` 생성자 선언과 `gateway.cpp` 생성자 구현에 `grpc_port` 파라미터 추가: + +```cpp +// gateway.h:36-38 +Hc900Gateway(const std::string& host, uint16_t port, + const std::string& map_path, int poll_interval_ms = 1000, + int grpc_port = 50051); + +// 멤버 변수: +// std::string grpc_listen_{"0.0.0.0:50051"}; ← 제거 +std::string grpc_listen_; // 생성자에서 초기화 + +// gateway.cpp 생성자: +Hc900Gateway::Hc900Gateway(const std::string& host, uint16_t port, + const std::string& map_path, int poll_interval_ms, + int grpc_port) + : host_(host), port_(port), poll_interval_ms_(poll_interval_ms), + grpc_listen_("0.0.0.0:" + std::to_string(grpc_port)) +{ + LoadRegisterMap(map_path); + auto transport = std::make_unique(); + controller_ = std::make_unique(std::move(transport)); +} +``` + +--- + +### D5. `main.cpp` / `app_init.cpp` 가 CMakeLists에서 제외됨 (LOW) + +**문제**: `main.cpp`(`main()` 함수 없음, 3줄)와 `app_init.cpp`가 CMakeLists의 어떤 target에도 포함되지 않았다. 실제 게이트웨이 `main()`은 `gateway.cpp:390`에 있다. `main.cpp` 파일 내부에 `// app_init.cpp` 코멘트가 있어 파일명과 내용이 불일치. +**근거**: `CMakeLists.txt:6-10,30-35` — `main.cpp`와 `app_init.cpp`가 source 목록에 없음. `main.cpp:1` — `// app_init.cpp`. +**영향**: 유지보수 시 혼란. 누군가 `main.cpp`가 엔트리포인트라고 오해할 수 있음. +**수정**: `main.cpp`의 내용을 제거하거나, 진정한 엔트리포인트로 전환. `app_init.cpp`는 `comm_core` 라이브러리에 등록: + +```cmake +# CMakeLists.txt: target_sources(comm_core PRIVATE ... src/app_init.cpp ... 추가) +target_sources(comm_core + PRIVATE + src/controller.cpp + src/codec.cpp + src/app_init.cpp # ← 추가 +) +``` + +또는 `main.cpp`를 실제 엔트리포인트로 만들어 `gateway.cpp`의 `main()`을 분리. + +--- + +### D6. `Task.Delay(2000)` 고정 대기 — gRPC 헬스체크로 대체 권장 (LOW) + +**문제**: `ControllerProcessManager.StartAsync()`에서 2초 고정 `Task.Delay`로 게이트웨이 준비를 확인한다. +**근거**: `MULTI_CONTROLLER_WORK_ORDER.md:321` — `await Task.Delay(2000);`. +**영향**: 게이트웨이 기동이 2초보다 오래 걸리면 즉시 종료됨으로 오판. 2초 이내면 불필요한 대기. +**수정**: gRPC 헬스체크 폴링 루프로 대체 (기존 `Hc900RealtimeService.WaitForGatewayAsync` 패턴 재사용): + +```csharp +// StartAsync 끝부분: +await Task.Delay(1000); +// gRPC 헬스체크 폴링 (최대 10초) +using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10)); +for (int i = 0; i < 10; i++) +{ + try + { + var client = new ModbusGateway.ModbusGatewayClient( + GrpcChannel.ForAddress($"http://localhost:{cfg.GrpcPort}")); + var health = await client.HealthCheckAsync(new HealthCheckRequest(), + deadline: DateTime.UtcNow.AddSeconds(2)); + if (health.Status == HealthCheckResponse.Types.ServingStatus.Serving) + return (true, $"시작 PID={proc.Id} (헬스체크 통과)"); + } + catch { /* 아직 준비 안 됨 */ } + try { await Task.Delay(1000, cts.Token); } catch { break; } +} +return _processes.TryGetValue(controllerId, out var p) && p != null && !p.HasExited + ? (true, $"시작 PID={proc.Id} (헬스체크 미응답)") + : (false, "즉시 종료됨 — 로그 확인"); +``` + +--- + +### D7. C++ 게이트웨이 포트 처리 누락 (LOW) + +**문제**: `Hc900GatewayProcessService.StartAsync()`는 현재 `ControllerPort`를 ProcessStartInfo.Arguments에 포함시키지 않고, `Hc900Gateway` 생성자의 두 번째 인자가 포트이므로 전달되어야 한다. 그러나 `gateway.cpp`의 `main()`에서는 `argv[1]=host`, `argv[2]=map_path`, `argv[3]=poll_ms`만 처리하고 포트는 항상 `uint16_t port = 502`로 고정이다. +**근거**: `gateway.cpp:392-399` — 포트는 고정 502, `Hc900GatewayProcessService.cs:203` — Arguments에 `ControllerPort` 누락. +**영향**: `config/gateway-config.json`에서 `controllerPort`를 변경해도 무시되고 항상 502로 연결. +**수정**: C++ `main()`에 `argv[4]=port` 추가 및 .NET 측 Arguments에 `${_config.ControllerPort}` 포함: + +```cpp +// gateway.cpp main() +if (argc > 1) host = argv[1]; +uint16_t port = 502; +if (argc > 2) port = static_cast(std::atoi(argv[2])); +if (argc > 3) map_path = argv[3]; +if (argc > 4) poll_ms = std::atoi(argv[4]); +if (argc > 5) grpc_port = std::atoi(argv[5]); +Hc900Gateway gateway(host, port, map_path, poll_ms, grpc_port); +``` + +```csharp +// .NET StartAsync() +Arguments = $"{cfg.ControllerIp} {cfg.ControllerPort} {cfg.RegisterMapPath} {cfg.PollIntervalMs} {cfg.GrpcPort}"; +``` + diff --git a/README.md b/README.md new file mode 100644 index 0000000..eed6870 --- /dev/null +++ b/README.md @@ -0,0 +1,149 @@ +# HC900 Crawler + +Honeywell HC900 공정 컨트롤러를 **Modbus TCP로 직접** 폴링하여 PostgreSQL에 적재하고, +웹 UI · RAG · NL2SQL · 피드포워드 제어 권고를 제공하는 산업용 모니터링 플랫폼. + +기존 Experion R530의 OPC UA 데이터 경로를 HC900 직접 통신으로 대체한 프로젝트로, +**물리 플랜트·공정·계기·로직은 동일**하고 통신 계층만 교체되었다. + +``` +변경 전: HC900 ──Modbus TCP──▶ Experion R530 ──OPC UA──▶ ExperionCrawler ──▶ PostgreSQL +변경 후: HC900 ──Modbus TCP──▶ C++ Gateway ──gRPC──▶ HC900Crawler ──▶ PostgreSQL +``` + +--- + +## 아키텍처 + +``` +┌──────────┐ Modbus TCP ┌──────────────┐ gRPC ┌──────────────┐ EF Core ┌────────────┐ +│ HC900 │ ◀───────────▶ │ C++ Gateway │ ◀───────▶ │ C# Crawler │ ◀─────────▶ │ PostgreSQL │ +│ C70 PLC │ :502 │ hc900_gateway│ :50051 │ ASP.NET 8 │ │ (hc900) │ +└──────────┘ └──────────────┘ │ + Web UI │ │ TimescaleDB│ + └──────┬───────┘ └────────────┘ + │ HTTP :5001 + ┌──────▼───────┐ + │ Python MCP │ RAG / NL2SQL / P&ID + │ FastMCP │ + └──────────────┘ +``` + +### 구성 요소 + +| 디렉토리 | 설명 | +|---|---| +| `industrial-comm/cpp/` | **C++ 게이트웨이** — Modbus TCP 폴러 + gRPC 서버 (`hc900_gateway` 바이너리) | +| `src/Hc900Crawler/` | **C# .NET 8 ASP.NET Core** — gRPC 클라이언트 + 웹 UI + KB/P&ID/FF (포트 5000) | +| `src/Core/`, `src/Infrastructure/` | 도메인 엔티티 · DB · 서비스 (3-Layer 아키텍처) | +| `mcp-server/` | **Python FastMCP 서버** (포트 5001) — RAG, NL2SQL, P&ID 처리 | +| `scripts/`, `test/` | 레지스터 맵 생성 · 테스트 유틸 | +| `prompts/`, `knowledge/` | LLM 시스템 컨텍스트 · RAG 기본 문서 | + +다중 컨트롤러(N-Controller) 지원: `config/gateway-config.json`의 `controllers[]`에 +컨트롤러를 추가하면 게이트웨이 인스턴스가 컨트롤러별 gRPC 포트로 개별 기동된다. + +--- + +## 빠른 시작 + +### 1. C++ 게이트웨이 빌드 + +gRPC · abseil은 `/tmp/grpc_local`, `/tmp/absl_local`(aarch64)에 사전 설치되어 있다. + +```bash +cd industrial-comm/cpp +mkdir -p build && cd build +cmake .. && make -j$(nproc) +# 산출물: build/hc900_gateway, build/libcomm_core.so +``` + +직접 실행: +```bash +./build/hc900_gateway [host] [register-map] [poll_ms] [grpc_port] [modbus_port] +# 기본값: 192.168.0.240 docs/register-map.json 1000 50051 502 +# 로그: /tmp/hc900_gateway.log, gRPC: 0.0.0.0:50051 +``` + +### 2. C# 크롤러 빌드 · 실행 + +```bash +cd src/Hc900Crawler +dotnet build +dotnet run # 웹 UI: http://0.0.0.0:5000 +``` + +> 크롤러는 부팅 시 `config/gateway-config.json`을 읽어 게이트웨이 프로세스를 직접 기동·감시한다. +> 게이트웨이를 따로 실행할 필요 없이 크롤러만 띄우면 된다. + +설정: `src/Hc900Crawler/appsettings.json` +- `ConnectionStrings.DefaultConnection` — PostgreSQL (`Search Path=hc900`) +- `Hc900.PollIntervalMs`, `Kb.*`, `DocBrowser.*` 등 + +### 3. MCP 서버 (RAG / NL2SQL) + +```bash +cd mcp-server +uv sync # 의존성 (최초 1회) +uv run python server.py --http # 포트 5001 +``` + +### 4. 레지스터 맵 생성 + +HC Designer CSV 내보내기 → `docs/register-map.json` (게이트웨이가 기동 시 로드): + +```bash +python3 scripts/build_register_map.py \ + --loop-csv docs/SummaryFucntionBlockReport.csv \ + --signal-csv docs/SignalTags.csv \ + --variable-csv docs/Variables.csv \ + -o docs/register-map.json +``` + +--- + +## 웹 UI 탭 + +| 탭 | 기능 | +|---|---| +| Setup | 게이트웨이 프로세스 제어 · 다중 컨트롤러 설정 · 로그 | +| 태그 관리 | HC900 등록 태그 조회 · 폴링 활성화 관리 | +| 이력 조회 | `history_table` 시계열 조회 (TimescaleDB 하이퍼테이블) | +| Text-to-SQL | 자연어 → SQL (MCP) | +| fastRecord | 고속 샘플링 세션 수집 · CSV 내보내기 | +| P&ID 추출 | 도면 파싱 · 계기 추론 | +| 이벤트 히스토리 | 디지털 포인트 상태 변경 (TRIP/ALARM/RUN) | +| 로컬 LLM 채팅 | Ollama/vLLM 기반 플랜트 지식 채팅 | +| RAG 관리 | 지식 문서 업로드 · Qdrant 색인 | +| 태그 쓰기 | gRPC `WriteTag` (SP/OP/MODE) | +| 문서 탐색기 | 리포지토리 문서 브라우징 | +| 트렌드 | 실시간/이력 차트 + 이벤트 오버레이 | +| 유량 권장(FF) | 측류추출 피드포워드 제어 권고 | + +--- + +## 데이터베이스 (PostgreSQL, 스키마 `hc900`) + +`Hc900DbContext.InitializeAsync()`가 모든 테이블·뷰·하이퍼테이블을 자동 생성한다. + +| 테이블 | 용도 | +|---|---| +| `hc900_map_master` | OPC UA `tagname` ↔ HC900 레지스터 매핑 (Modbus addr 포함) | +| `realtime_table` | 실시간 값 (`controller_id`, `tagname` UNIQUE) | +| `history_table` | 60초 이력 스냅샷 (TimescaleDB 하이퍼테이블) | +| `event_history_table` | 디지털 태그 상태 변경 이벤트 | +| `tag_metadata` | 태그 메타 (description, area, state 레이블) | +| `pid_*`, `kb_*`, `ff_*` | P&ID · Knowledge Base · 피드포워드 | + +--- + +## HC900 하드웨어 + +- 컨트롤러: HC900-C70, Modbus TCP 포트 502, 최대 동시 연결 10 +- Float 포맷은 컨트롤러에서 **FP B** (IEEE 754 big-endian, 워드 순서 4·3·2·1)로 설정 필요 +- 레지스터 주소: Loop N base = `0x40 + (N-1)*0x100` (1–24), `0x7840 + (N-25)*0x100` (25–32) + +--- + +## 라이선스 + +Proprietary — 내부 사용. diff --git a/TAB_FIX_WORK_ORDER.md b/TAB_FIX_WORK_ORDER.md new file mode 100644 index 0000000..2a8e20b --- /dev/null +++ b/TAB_FIX_WORK_ORDER.md @@ -0,0 +1,413 @@ +# HC900 Crawler — 탭 수정 작업지시서 (교정판) + +> 본 문서는 실측 검증(DB 직접 조회 + 실행 중인 앱 API Content-Type 확인)으로 교정되었다. +> 이전 판의 "문제 1(DB 스키마 불일치)"과 "문제 2(DI 캐스트 오류)"는 **오진으로 확인되어 삭제**했다. + +--- + +## 진단 요약 + +빌드: ✅ 성공 / 앱: ✅ 실행 중(포트 5000) / DB 스키마: ✅ 정상 + +**진짜 근본 원인은 단 하나: JS가 존재하지 않는 API 경로를 호출한다.** + +ASP.NET이 `MapFallbackToFile("index.html")`로 매핑되어 있어, 없는 GET 경로는 +**404가 아니라 200 + `index.html`(HTML)** 을 반환한다. +프런트는 이 HTML을 `JSON.parse()` 시도 → 예외 → 사용자에게는 "DB/연결 오류"처럼 보인다. +실제로는 DB도 연결도 정상이며, **경로 오타/미구현**이 전부다. + +### 검증 방법 (재현 가능) +```bash +# text/html = 엔드포인트 없음(SPA 폴백), application/json = 실제 존재 +curl -s -o /dev/null -w "%{content_type}\n" http://localhost:5000/api/history/tags # application/json ✓ +curl -s -o /dev/null -w "%{content_type}\n" http://localhost:5000/api/history/tagnames # text/html ✗(없음) +``` + +### 실측 결과 (오진 정정 포함) + +| 이전 판 주장 | 실측 | 판정 | +|---|---|---| +| controller_id 컬럼 미적용 → InitializeAsync 실패 | 5개 테이블 모두 컬럼 존재, v_tag_summary 정상 | **오진(삭제)** | +| IHc900GatewayService DI 캐스트 오류 | 해당 등록 줄 이미 제거됨, 빌드 성공 | **오진(삭제)** | +| /api/realtime/points DB오류 | 200 application/json 정상 | **오진** | +| JS 경로 불일치 (hist/evt/write/fast/t2s) | text/html 또는 404 확인 | **정확(유지)** | + +--- + +## 별도 이슈: 데이터가 비어 보이는 진짜 원인 (코드 아님) + +경로를 다 고쳐도 **표에 값이 안 나올 수 있다.** 원인은 게이트웨이 Modbus 연결 실패다. + +``` +GET /api/gateway/health → + { "status":"NotServing", "controllerIp":"192.168.0.230", "pollCount":0 } +realtime_table rows = 0 +``` + +게이트웨이가 `192.168.0.230`에 연결 못 함(`NotServing`) → 수집 0건 → 모든 탭 데이터 공란. +HC900 기본 IP는 `192.168.0.240`. **Setup 탭에서 컨트롤러 IP를 실제 값으로 교정 후 재시작.** +(이건 코드 수정과 무관한 운영 설정 문제이며, 탭 로직 수정과 병행해야 데이터가 보인다.) + +--- + +## 수정 대상 (모두 JS 경로 문제, DB 무관) + +| # | 탭 | JS 호출 (없는 경로) | 실제/대체 경로 | 작업 | +|---|---|---|---|---| +| 1 | hist | `GET /api/history/tagnames` | `GET /api/history/tags` | JS 1줄 | +| 2 | hist | `GET /api/history/query` | `POST /api/history/query` | JS 메서드+body | +| 3 | hist | `/api/experion/hypertable/*` | 없음 | 엔드포인트 신설 | +| 4 | evt | `/api/event-history/*` (3개) | `POST /api/events/query` | JS 3함수 | +| 5 | write | `/api/points/*` (4개) | `POST /api/gateway/write` | JS 4함수 | +| 6 | fast | `/api/fast/*`, `/api/pointbuilder/points` | FastController 없음 | 컨트롤러 신설 | +| 7 | t2s | `POST /api/text-to-sql/execute` | `execute-mcp`만 존재 | JS 통일 또는 신설 | + +> pid / llmchat / kbadmin / docs / trend / ff 탭은 **코드 수정 불필요.** +> 데이터 공란은 위 "게이트웨이 Modbus 연결" 이슈로만 설명된다. + +--- + +## 수정 1: `hist.js` — 이력 조회 탭 + +### 1-1. tagnames → tags (hist.js:42) +```javascript +// 변경 전 +const d = await api('GET', '/api/history/tagnames'); // text/html (없음) +// 변경 후 +const d = await api('GET', '/api/history/tags'); +``` + +### 1-2. query GET → POST (hist.js:98) +`HistoryController`는 `[HttpPost("query")]`만 있다(GET 없음). GET 호출은 SPA 폴백으로 빠진다. + +```javascript +// 변경 전 (hist.js:98) — 쿼리스트링 GET +const d = await api('GET', `/api/history/query?${params}`); + +// 변경 후 — POST + body DTO +const d = await api('POST', '/api/history/query', { + tagNames: tags, // 배열 + from: fromDt, // ISO 또는 null + to: toDt, + limit: parseInt(limit) || 1000 +}); +``` +> 응답 형태(`d.rows`, `d.tagNames`)는 기존 코드와 동일하므로 파싱부는 그대로 둔다. + +### 1-3. hypertable 엔드포인트 신설 (hist.js:241, 343) +JS가 `/api/experion/hypertable/status`·`/create`를 호출하나 둘 다 없다. + +`Hc900Controllers.cs`에 컨트롤러 추가: +```csharp +[ApiController] +[Route("api/experion/hypertable")] +public class HypertableController : ControllerBase +{ + private readonly IExperionDbService _db; + public HypertableController(IExperionDbService db) => _db = db; + + [HttpGet("status")] + public async Task Status() + => Ok(await _db.GetHypertableStatsAsync()); // 기존 hypertable 조회 메서드 재사용 + + [HttpPost("create")] + public IActionResult Create() + => Ok(new { success = true, message = "history_table 하이퍼테이블 설정됨" }); +} +``` +> `IExperionDbService`에 하이퍼테이블 상태 조회 메서드가 이미 있으면 그대로, +> 없으면 `Hc900DbContext.cs`의 `timescaledb_information.hypertables` 조회 로직(이미 존재)을 +> public 메서드로 노출. + +--- + +## 수정 2: `evt.js` — 이벤트 히스토리 탭 + +`/api/event-history/*` 3개 경로 모두 없음. 실제 API는 `POST /api/events/query`(정상 작동). +**백엔드 변경 없이 JS만 수정.** + +```javascript +// (1) 디지털 태그 목록 — 전용 API 없음 → realtime에서 클라이언트 필터 +// 주의: 응답은 PascalCase (TagName, LiveValue) +async function evtLoadDigitalTags() { + const pts = await api('GET', '/api/realtime/points'); + return pts.filter(p => (p.LiveValue ?? '').startsWith('{')); // 상태 레이블 형식 {n|LABEL|} +} + +// (2) 이벤트 조회 — GET /api/event-history → POST /api/events/query +async function evtQuery() { + const body = { + tagName: document.getElementById('ev-tag').value.trim() || null, + eventType: document.getElementById('ev-type').value || null, + area: document.getElementById('ev-area').value.trim() || null, + from: fromISO, + to: toISO, + limit: 500 + }; + const d = await api('POST', '/api/events/query', body); + // d = EventHistoryRecord[] (PascalCase: TagName, EventType, EventTime, CurrValue ...) +} + +// (3) 요약 — 전용 엔드포인트 없음 → (2) 결과로 클라이언트 집계 +// 예: eventType별 count, 또는 최근 N건 그룹화 +``` + +--- + +## 수정 3: `write.js` — 태그 쓰기 탭 + +`/api/points/*` 4개 모두 없음. HC900 쓰기는 gRPC 기반 `POST /api/gateway/write` 단일 경로. +`WriteTagDto = { ControllerId, TagName, Value }`. + +```javascript +// write/mode/control 전부 동일 엔드포인트로 통합 +async function writeValue() { + const controllerId = document.getElementById('w-ctrl').value || 'HC1'; + const tagName = document.getElementById('w-tag').value.trim(); + const value = parseFloat(document.getElementById('w-val').value); + const d = await api('POST', '/api/gateway/write', { controllerId, tagName, value }); +} + +// MODE 변경: tagName에 .MODE 접미사, value=정수 +async function writeMode() { + const controllerId = document.getElementById('w-ctrl').value || 'HC1'; + const tagName = document.getElementById('m-tag').value.trim() + '.MODE'; + const value = parseInt(document.getElementById('m-mode').value); + await api('POST', '/api/gateway/write', { controllerId, tagName, value }); +} + +// read: 전용 read API 없음 → realtime에서 조회 (PascalCase 주의!) +async function readTag() { + const tagName = document.getElementById('r-tag').value.trim().toLowerCase(); + const pts = await api('GET', '/api/realtime/points'); + const point = pts.find(p => (p.TagName ?? '').toLowerCase() === tagName); // ← p.TagName (대문자) + // point.LiveValue 표시 +} +``` +> ⚠️ 이전 판은 `p.tagName`(소문자)으로 적었으나 직렬화가 PascalCase라 **항상 undefined**가 된다. +> 반드시 `p.TagName`, `p.LiveValue`로 쓴다. + +**컨트롤러 드롭다운** (`panes/write.html` + `write.js`): +```html +
+``` +```javascript +async function writeLoadControllers() { + const d = await api('GET', '/api/gateway/status'); // { controllers: [{controllerId, controllerIp}, ...] } + const sel = document.getElementById('w-ctrl'); + (d.controllers || []).forEach(c => { + const id = c.controllerId ?? c.ControllerId; + const opt = document.createElement('option'); + opt.value = id; opt.textContent = `${id} — ${c.controllerIp ?? c.ControllerIp}`; + sel.appendChild(opt); + }); +} +``` +> `/api/gateway/status`의 `controllers` 필드는 `Hc900RealtimeService.ControllerConnected` +> 직렬화 결과이므로 키 케이싱을 실제 응답으로 한 번 확인하고 맞춘다. + +--- + +## 수정 4: `fast.js` — fastRecord 탭 (컨트롤러 신규) + +`IExperionDbService`에 FastSession/FastRecord 메서드 존재(`IExperionServices.cs:44-61`). +`GetRealtimeRecordsByTagNamesAsync`(L61)도 있어 실시간 값 채우기 가능. **컨트롤러만 신설.** + +### 신규 파일: `src/Hc900Crawler/Controllers/FastController.cs` +```csharp +using Hc900Crawler.Core.Application.Interfaces; +using Hc900Crawler.Core.Domain.Entities; +using Microsoft.AspNetCore.Mvc; + +namespace Hc900Crawler.Web.Controllers; + +[ApiController] +[Route("api/fast")] +public class FastController : ControllerBase +{ + private readonly IExperionDbService _db; + private static readonly Dictionary _sessions = new(); + + public FastController(IExperionDbService db) => _db = db; + + [HttpGet("sessions")] + public async Task GetSessions() => Ok(await _db.GetFastSessionsAsync()); + + [HttpGet("{id}")] + public async Task GetSession(int id) + { + var s = await _db.GetFastSessionAsync(id); + return s == null ? NotFound() : Ok(s); + } + + [HttpPost("start")] + public async Task Start([FromBody] FastSessionStartRequest req) + { + var createReq = new FastSessionCreateRequest( + req.Name, DateTime.UtcNow, "Running", + req.SamplingMs, req.DurationSec, + System.Text.Json.JsonSerializer.Serialize(req.TagNames), + 0, req.RetentionDays); + var session = await _db.CreateFastSessionAsync(createReq); + + var cts = new CancellationTokenSource(); + lock (_sessions) { _sessions[session.Id] = cts; } + _ = Task.Run(() => RunSessionAsync(session.Id, req, cts.Token)); + return Ok(new { session.Id, status = "Running" }); + } + + private async Task RunSessionAsync(int sessionId, FastSessionStartRequest req, CancellationToken ct) + { + var endAt = DateTime.UtcNow.AddSeconds(req.DurationSec); + int rowCount = 0; + try + { + while (!ct.IsCancellationRequested && DateTime.UtcNow < endAt) + { + var now = DateTime.UtcNow; + // 실시간 값 조회 후 기록 (빈 값 대신 실제 값) + var live = (await _db.GetRealtimeRecordsByTagNamesAsync(req.TagNames)) + .ToDictionary(p => p.TagName, p => p.LiveValue); + var records = req.TagNames.Select(t => new FastRecord + { + SessionId = sessionId, + RecordedAt = now, + TagName = t, + Value = live.GetValueOrDefault(t) + }).ToList(); + + await _db.BatchInsertFastRecordsAsync(records); + rowCount += records.Count; + await _db.UpdateFastSessionRowCountAsync(sessionId, rowCount); + await Task.Delay(req.SamplingMs, ct); + } + await _db.UpdateFastSessionStatusAsync(sessionId, "Completed"); + } + catch (OperationCanceledException) + { + await _db.UpdateFastSessionStatusAsync(sessionId, "Stopped"); + } + finally { lock (_sessions) { _sessions.Remove(sessionId); } } + } + + [HttpPost("{id}/stop")] + public async Task Stop(int id) + { + lock (_sessions) { if (_sessions.TryGetValue(id, out var cts)) { cts.Cancel(); _sessions.Remove(id); } } + await _db.UpdateFastSessionStatusAsync(id, "Stopped"); + return Ok(new { success = true }); + } + + [HttpDelete("{id}")] + public async Task Delete(int id) + { + lock (_sessions) { if (_sessions.TryGetValue(id, out var cts)) { cts.Cancel(); _sessions.Remove(id); } } + await _db.DeleteFastSessionAsync(id); + return Ok(new { success = true }); + } + + [HttpPost("{id}/pin")] + public async Task Pin(int id, [FromBody] bool pinned) + { + await _db.UpdateFastSessionPinnedAsync(id, pinned); + return Ok(new { success = true }); + } + + [HttpGet("{id}/records")] + public async Task GetRecords(int id, [FromQuery] DateTime? from = null, [FromQuery] DateTime? to = null) + => Ok(await _db.GetFastRecordsAsync(id, from, to)); + + [HttpGet("{id}/csv")] + public async Task ExportCsv(int id, [FromQuery] DateTime? from = null, [FromQuery] DateTime? to = null) + { + var stream = new MemoryStream(); + await _db.ExportFastRecordsToCsvAsync(id, stream, from, to); + stream.Position = 0; + return File(stream, "text/csv", $"fast_{id}.csv"); + } +} +``` +> `FastController`는 attribute routing이라 별도 DI 등록 불필요(`AddControllers`가 자동 스캔). +> `FastSessionStartRequest`/`FastSessionCreateRequest`/`FastQueryResult` 레코드 정의를 +> `IExperionServices.cs:130~` 에서 확인하고 생성자 인자 순서를 맞출 것. + +### fast.js:389 — 태그 목록 +```javascript +// 변경 전: /api/pointbuilder/points (없음) +// 변경 후: 기존 태그 API 재사용 +const res = await fetch('/api/gateway/tags?limit=500'); // 또는 /api/hc900/tags +``` + +--- + +## 수정 5: `t2s.js` — Text-to-SQL 탭 + +`/api/text-to-sql/execute` 없음(`execute-mcp`만 존재). 호출부 t2s.js:184, 449, 608. + +**옵션 A (빠름) — JS를 execute-mcp로 통일:** +```javascript +// t2s.js의 '/api/text-to-sql/execute' 3곳을 모두 '/api/text-to-sql/execute-mcp' 로 교체 +``` +**옵션 B — 컨트롤러에 execute 신설** (MCP 없이 직접 실행이 필요할 때만): +```csharp +// TextToSqlController.cs +[HttpPost("execute")] +public async Task ExecuteDirect([FromBody] ExecuteSqlRequest req) +{ + var v = _validator.Validate(req.Sql); + if (!v.IsValid) return BadRequest(new { error = v.ErrorMessage }); + // Npgsql 직접 실행 (execute-mcp에서 MCP pivot 제외한 버전) + return Ok(result); +} +``` +> MCP 경로가 이미 정상 동작 중이면 **옵션 A 권장**(코드 최소화). + +--- + +## 체크리스트 + +``` +[ ] 0. (운영) Setup 탭에서 컨트롤러 IP 192.168.0.230 → 실제 HC900 IP(예 0.240) 교정 후 재시작 + → gateway health가 Serving 되어야 데이터가 표시됨 (코드와 무관, 병행 필수) + + ── JS만 수정 (백엔드 무변경) ── +[ ] 1. hist.js:42 /api/history/tagnames → /api/history/tags +[ ] 2. hist.js:98 query GET → POST + body DTO +[ ] 3. evt.js 3함수: /api/event-history/* → POST /api/events/query (+ realtime 필터) +[ ] 4. write.js 4함수: /api/points/* → POST /api/gateway/write (필드 PascalCase 주의) +[ ] 5. write.html + write.js 컨트롤러 드롭다운 추가 +[ ] 6. fast.js:389 /api/pointbuilder/points → /api/gateway/tags +[ ] 7. t2s.js /api/text-to-sql/execute → execute-mcp (옵션 A) + + ── 백엔드 신규 ── +[ ] 8. FastController.cs 신규 작성 (수정 4) +[ ] 9. HypertableController 신설 (수정 1-3) — hist 탭 하이퍼테이블 패널 + +[ ] 10. dotnet build 확인 +[ ] 11. 탭별 동작 확인: write → evt → hist → fast → t2s +``` + +--- + +## 검증 부록 (재현 명령) + +```bash +# DB 스키마가 이미 정상임을 재확인 (오진 검증용) +/tmp/hc900_venv/bin/python3 -c " +import psycopg2 +c=psycopg2.connect(host='localhost',dbname='iiot_platform',user='postgres',password='postgres') +cur=c.cursor() +for t in ['realtime_table','history_table','event_history_table','hc900_map_master','tag_metadata']: + cur.execute(\"SELECT 1 FROM information_schema.columns WHERE table_schema='hc900' AND table_name=%s AND column_name='controller_id'\",(t,)) + print(t, 'controller_id:', 'YES' if cur.fetchone() else 'NO') +" + +# 엔드포인트 존재 여부 (application/json=있음, text/html=없음) +for p in /api/history/tags /api/history/tagnames /api/fast/sessions \ + /api/event-history/digital-tags /api/pointbuilder/points; do + printf "%-40s %s\n" "$p" "$(curl -s -o /dev/null -w '%{content_type}' http://localhost:5000$p)" +done + +# 게이트웨이 실제 연결 상태 +curl -s http://localhost:5000/api/gateway/health +``` diff --git a/config/gateway-config.json b/config/gateway-config.json new file mode 100644 index 0000000..99d8a72 --- /dev/null +++ b/config/gateway-config.json @@ -0,0 +1,19 @@ +{ + "shared": { + "binaryPath": "/home/windpacer/projects/hc900_ax/industrial-comm/cpp/build/hc900_gateway", + "ldLibraryPath": "/tmp/grpc_local/usr/lib/aarch64-linux-gnu:/tmp/absl_local/usr/lib/aarch64-linux-gnu", + "logDir": "/tmp" + }, + "controllers": [ + { + "id": "C3", + "name": "HC900 C3 Controller", + "controllerIp": "192.168.0.230", + "controllerPort": 502, + "grpcPort": 50051, + "pollIntervalMs": 1000, + "registerMapPath": "/home/windpacer/projects/hc900_ax/docs/register-map.json", + "enabled": true + } + ] +} diff --git a/diagnosis-checklist.md b/diagnosis-checklist.md new file mode 100644 index 0000000..56e6142 --- /dev/null +++ b/diagnosis-checklist.md @@ -0,0 +1,188 @@ +# 코드 진단 규칙 + +코드 진단 요청 시 아래 8단계를 **반드시 순서대로** 실행한다. +순서를 건너뛰면 오진이 발생한다. 실제 오진 사례는 각 단계 하단에 기재. + +--- + +## STEP 1 — 맥락 파악 + +**질문: 이 파일은 무엇을 하는 파일인가?** + +- 파일명·디렉토리 위치로 역할 추정 +- 관련 문서 존재 확인: README, 계획서, CLAUDE.md, .roo.md +- 아키텍처에서 어느 레이어인지 파악 (진입점 / 서비스 / 워커 / 유틸) + +> 이 단계를 건너뛰면 "의도적 설계"를 "버그"로 오인한다. + +--- + +## STEP 2 — 구조 탐색 + +**도구: `find`, `ls`** + +- 디렉토리 전체 구조 확인 +- 진단 대상이 의존하는 모듈·파일 목록 파악 +- 설정 파일(config, .env, appsettings.json) 위치 확인 + +--- + +## STEP 3 — 코드 읽기 ★ 가장 중요 + +**도구: `read_file` — 전체 파일, 건너뛰기 금지** +**기억·요약·이전 대화에 의존하지 말 것** + +읽는 순서: +1. 진입점(`main`, `__init__`, `Program.cs`, `if __name__ == "__main__"`) 먼저 +2. 인터페이스·추상 레이어 +3. 구현체 (진단 대상 파일) +4. 의존 모듈 (필요한 것만) + +> **이 단계를 건너뛴 오진 사례**: +> `pid_worker.py` 보고서가 `asyncio.to_thread` 누락을 HIGH로 지적했으나 +> 실제 파일엔 이미 적용되어 있었음. STEP 3을 건너뛰어 구버전 기준으로 진단한 결과. + +--- + +## STEP 4 — 호출 계층 지도 작성 + +코드를 읽으면서 다음 구조를 머릿속에(또는 메모로) 그린다: + +``` +HTTP 요청 + → endpoint 함수 + → _dispatch() ← 여기서 try-catch? + → _tool_a() ← 여기도 try-catch? + → 외부 I/O ← blocking? +``` + +**이 지도 없이 에러 처리·블로킹을 진단하면 반드시 오진한다.** + +> **이 단계를 건너뛴 오진 사례**: +> `_dispatch()`가 전체 예외를 일괄 처리하고 있었음에도 +> 하위 함수에 try-catch가 없다는 이유로 "에러 핸들링 불균형(MED)"으로 지적. +> 계층 지도를 그렸다면 상위에서 잡힌다는 것을 바로 확인할 수 있었음. + +--- + +## STEP 5 — 패턴 매칭 (체크리스트 순회) + +우선순위 순서로 확인한다. + +### 🔴 런타임 즉시 실패 + +| 체크 | 항목 | 판단 기준 | +|------|------|-----------| +| [ ] | 미정의 변수·함수 참조 | 임포트 없이 사용하거나 정의 전에 호출 | +| [ ] | 잘못된 타입 | FastAPI `def f(body: dict)` → 동작 안 함. `Request.json()` 또는 Pydantic 사용 | +| [ ] | 누락된 `app = FastAPI()` | `uvicorn.run(app, ...)` 전에 `app` 미정의 | +| [ ] | SIGTERM이 응답보다 먼저 실행 | `os.kill` 후 `return result`는 응답이 전달되지 않을 수 있음 | + +### 🟠 동시성 / 비동기 + +| 체크 | 항목 | 판단 기준 | +|------|------|-----------| +| [ ] | async 함수 내 blocking 호출 | `asyncio.to_thread` 없이 파일 I/O·HTTP·OCR 직접 호출 → 이벤트루프 블로킹 | +| [ ] | Race Condition | `if key not in dict → await start()` 패턴에서 await 사이 다른 코루틴 진입 가능 → Lock 필요 | +| [ ] | one-shot + 동시 요청 | 종료 로직이 있을 때 동시 요청이 들어오면 진행 중인 요청이 강제 종료됨 | +| [ ] | `asyncio.sleep` 고정값으로 준비 확인 | 불안정 — 헬스체크 루프로 대체 | +| [ ] | `asyncio.gather` 병렬화 기회 | 독립적인 await가 순차 나열 → gather로 묶을 수 있는가? | + +### 🟠 프로세스 / 리소스 + +| 체크 | 항목 | 판단 기준 | +|------|------|-----------| +| [ ] | subprocess `stdout=PIPE` 데드락 | 대량 출력 시 파이프 버퍼 가득 참 → `DEVNULL` 또는 파일 리다이렉션 | +| [ ] | 고아 프로세스 | 메인 프로세스 종료 시 자식이 남는가? `atexit` 또는 signal 핸들러 | +| [ ] | DB 커넥션 누수 | `with` 블록 또는 명시적 `close()` 없이 커넥션 획득 | + +### 🟠 에러 처리 + +| 체크 | 항목 | 판단 기준 | +|------|------|-----------| +| [ ] | 예외가 사용자에게 노출 | 최상위 핸들러까지 예외 전파 시 500 + 스택 트레이스 노출 가능 | +| [ ] | 예외를 삼킴 | `except: pass` → 디버깅 불가. 최소 `logging.error` 필요 | +| [ ] | 에러 응답 형식 불일치 | 일부 경로만 `{"success": false, "error": "..."}` 형식이 다르면 클라이언트 파싱 실패 | + +### 🟡 보안 + +| 체크 | 항목 | 판단 기준 | +|------|------|-----------| +| [ ] | SQL Injection | 쿼리를 f-string으로 조합 → parameterized query 사용 | +| [ ] | 경로 트래버설 | 사용자 입력 filepath에서 `..` 검증 없음 → 임의 파일 접근 | +| [ ] | Command Injection | `shell=True` + 사용자 입력 → `shell=False` + 리스트 인자 | +| [ ] | 민감 정보 로깅 | 비밀번호·토큰이 에러 메시지에 포함 | + +### 🟢 코드 구조 + +| 체크 | 항목 | 판단 기준 | +|------|------|-----------| +| [ ] | 설정 하드코딩 | URL·비밀번호·포트가 코드에 박혀 있음 → 환경 변수 또는 설정 파일 | +| [ ] | 미사용 import·변수 | 실행 경로에서 실제로 사용되지 않는 import | + +--- + +## STEP 6 — 교차 검증 ★ 오진 방지 핵심 + +**STEP 5에서 발견한 각 의심 항목마다 아래 4개 질문을 모두 통과해야 보고서에 올린다.** + +| 질문 | 확인 방법 | "예"이면 | +|------|-----------|---------| +| Q1. 이미 수정된 문제인가? | 파일 현재 상태 재확인 (grep) | 보고서에서 제거 | +| Q2. 다른 레이어에서 처리되고 있는가? | STEP 4 호출 계층 지도 재참조 | 보고서에서 제거 또는 LOW 강등 | +| Q3. 의도적 설계인가? | 문서·주석·아키텍처 계획서 확인 | 보고서에서 제거 | +| Q4. 실제 장애 시나리오가 있는가? | 재현 경로를 구체적으로 서술할 수 있는가? | 없으면 LOW 강등 | + +> **이 단계를 건너뛴 오진 사례 (모두 pid_worker.py 보고서)**: +> +> | 지적 사항 | 실제 | 건너뛴 질문 | +> |-----------|------|------------| +> | `asyncio.to_thread` 누락 (HIGH) | 이미 적용되어 있었음 | Q1 | +> | 에러 핸들링 불균형 (MED) | `_dispatch`가 전체 예외를 잡고 있었음 | Q2 | +> | `lru_cache` 메모리 고정 (MED) | one-shot 워커에서 의도적 싱글톤 패턴 | Q3 | +> | `max_tokens` 차이가 중복 (LOW) | 도구마다 의도적으로 다른 값 사용 | Q3 | + +--- + +## STEP 7 — 심각도 분류 + +| 등급 | 기준 | +|------|------| +| 🔴 HIGH | 런타임 즉시 오류, 데이터 손실, 보안 취약점 — 재현 가능한 시나리오 있음 | +| 🟠 MED | 간헐적 오류, 성능 저하, 동시성 문제 — 특정 조건에서 발생 | +| 🟡 LOW | 유지보수성, 하드코딩, 스타일 — 동작에는 영향 없음 | + +심각도 결정 전 스스로 확인: "이 문제가 언제, 어떤 조건에서 실제 장애를 일으키는가?" + +--- + +## STEP 8 — 보고서 작성 및 자가 검증 + +### 보고서 형식 (항목당 4줄) + +``` +### [번호]. [제목] (HIGH / MED / LOW) + +**문제**: 어떤 상황에서 무엇이 잘못되는가 (구체적으로) +**근거**: 파일명:줄번호 — 코드 인용 필수 +**영향**: 실제로 어떤 장애가 발생하는가 +**수정**: 구체적인 수정 코드 또는 방향 +``` + +### 보고서에 포함하지 않는 것 + +- 이미 수정된 문제 (Q1 탈락) +- 다른 레이어에서 처리되어 실제 장애가 없는 문제 (Q2 탈락) +- 의도적 설계를 버그로 지적한 사항 (Q3 탈락) +- 재현 시나리오 없는 추정 (Q4 탈락) +- 실측 없는 성능 수치 ("느릴 것이다", "메모리가 많이 든다") + +### 제출 전 자가 검증 + +- [ ] 각 지적 사항을 "현재 파일 몇 번 줄"로 직접 가리킬 수 있는가? +- [ ] HIGH 항목은 재현 가능한 시나리오를 한 문장으로 말할 수 있는가? +- [ ] 교차 검증 4개 질문을 모두 통과한 항목만 포함되어 있는가? +- [ ] 보고서의 수정 예시가 현재 코드에 아직 적용되지 않은 내용인가? +- [ ] "더 좋은 방법 제안"과 "현재 코드가 틀렸다"를 혼동하지 않았는가? +------------------------------------------------------------------------------------------- + diff --git a/docs/51-52-25-111-HC900-Process-Controller-Communications-manual.pdf b/docs/51-52-25-111-HC900-Process-Controller-Communications-manual.pdf new file mode 100644 index 0000000..0837b15 Binary files /dev/null and b/docs/51-52-25-111-HC900-Process-Controller-Communications-manual.pdf differ diff --git a/docs/C3-All-Modbus-Map.csv b/docs/C3-All-Modbus-Map.csv new file mode 100644 index 0000000..21828bc --- /dev/null +++ b/docs/C3-All-Modbus-Map.csv @@ -0,0 +1,2236 @@ +RevisionID:,0120.0032.0005.0002.0011 +File Name:,HC900-C70 Rev 4.4x : Config1 +Controller Name,CONTROLLER +Title:, +Author:, +Created Date:,2014-02-25 오전 10:01:30 +Modified Date:,2026-06-01 오후 4:41:08 + +Report Title:,Modbus Full Address Report + +Hex Addr,Dec Addr,Tag Name,Description,Type,#,Data Type,Access + , ,FICQ3101,,PID,#01,, +0x0040,65,FICQ3101.PV,PV,PID,#01,float 32,R +0x0042,67,FICQ3101.RSP_SP2,RSP_SP2,PID,#01,float 32,R/W +0x0044,69,FICQ3101.WSP,WSP,PID,#01,float 32,R/W +0x0046,71,FICQ3101.Output,Output,PID,#01,float 32,R/W +0x004A,75,FICQ3101.CarbonPotTemp,Carbon Pot Temp,PID,#01,float 32,R +0x004C,77,FICQ3101.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#01,float 32,R/W +0x004E,79,FICQ3101.Direction,Direction,PID,#01,float 32,R +0x0050,81,FICQ3101.Reset1,Reset 1,PID,#01,float 32,R/W +0x0052,83,FICQ3101.Rate1,Rate 1,PID,#01,float 32,R/W +0x0054,85,FICQ3101.ScanCycleTime,Scan Cycle Time,PID,#01,float 32,R +0x0056,87,FICQ3101.PV_LowRange,PV_Low Range,PID,#01,float 32,R +0x0058,89,FICQ3101.PV_HighRange,PV_High Range,PID,#01,float 32,R +0x005A,91,FICQ3101.Alarm1SP1,Alarm 1 SP1,PID,#01,float 32,R/W +0x005C,93,FICQ3101.Alarm1SP2,Alarm 1 SP2,PID,#01,float 32,R/W +0x0060,97,FICQ3101.Gain2_PropBand2,Gain2_Prop Band 2,PID,#01,float 32,R/W +0x0062,99,FICQ3101.3PosStepDeadband,3 Pos Step Deadband,PID,#01,float 32,R/W +0x0064,101,FICQ3101.Reset2,Reset 2,PID,#01,float 32,R/W +0x0066,103,FICQ3101.Rate2,Rate 2,PID,#01,float 32,R/W +0x0068,105,FICQ3101.CycleTime_Scan,Cycle Time_Scan,PID,#01,float 32,R +0x006A,107,FICQ3101.LSP1,LSP1,PID,#01,float 32,R/W +0x006C,109,FICQ3101.LSP2,LSP2,PID,#01,float 32,R/W +0x006E,111,FICQ3101.Alarm2SP1,Alarm 2 SP1,PID,#01,float 32,R/W +0x0070,113,FICQ3101.Alarm2SP2,Alarm 2 SP2,PID,#01,float 32,R/W +0x0074,117,FICQ3101.SP_LowLimit,SP_Low Limit,PID,#01,float 32,R/W +0x0076,119,FICQ3101.SP_HighLimit,SP_High Limit,PID,#01,float 32,R/W +0x007A,123,FICQ3101.Output_LowLimit,Output_Low Limit,PID,#01,float 32,R/W +0x007C,125,FICQ3101.Output_HighLimit,Output_High Limit,PID,#01,float 32,R/W +0x007E,127,FICQ3101.OutputB,Output (B),PID,#01,float 32,R/W +0x0086,135,FICQ3101.Ratio,Ratio,PID,#01,float 32,R/W +0x0088,137,FICQ3101.Bias,Bias,PID,#01,float 32,R/W +0x008A,139,FICQ3101.Deviation,Deviation,PID,#01,float 32,R +0x008E,143,FICQ3101.ManualReset,Manual Reset,PID,#01,float 32,R/W +0x0090,145,FICQ3101.FeedforwardGain,Feed forward Gain,PID,#01,float 32,R/W +0x0092,147,FICQ3101.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#01,float 32,R/W +0x0094,149,FICQ3101.FurnaceFactor,Furnace Factor,PID,#01,float 32,R/W +0x0096,151,FICQ3101.PercentHydrogen,Percent Hydrogen,PID,#01,float 32,R/W +0x0098,153,FICQ3101.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#01,float 32,R/W +0x009A,155,FICQ3101.CarbPotDewPt,Carb Pot Dew Pt,PID,#01,float 32,R/W +0x009C,157,FICQ3101.3PosStepMotorTime,3 Pos Step Motor Time,PID,#01,float 32,R/W +0x00F7,248,FICQ3101.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#01,unsigned 16,R/W +0x00F8,249,FICQ3101.DemandTuneReq,Demand Tune Req,PID,#01,unsigned 16,R/W +0x00F9,250,FICQ3101.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#01,unsigned 16,R/W +0x00FA,251,FICQ3101.AutoManState,Auto Man State,PID,#01,unsigned 16,R/W +0x00FB,252,FICQ3101.LSPSelectState,LSP Select State,PID,#01,unsigned 16,R/W +0x00FC,253,FICQ3101.RemLocSPState,Rem Loc SP State,PID,#01,unsigned 16,R/W +0x00FD,254,FICQ3101.TuneSetState,Tune Set State,PID,#01,unsigned 16,R/W +0x00FE,255,FICQ3101.LoopStatusRegister,Loop Status Register,PID,#01,unsigned 16,R + , ,LICA5113,,PID,#02,, +0x0140,321,LICA5113.PV,PV,PID,#02,float 32,R +0x0142,323,LICA5113.RSP_SP2,RSP_SP2,PID,#02,float 32,R/W +0x0144,325,LICA5113.WSP,WSP,PID,#02,float 32,R/W +0x0146,327,LICA5113.Output,Output,PID,#02,float 32,R/W +0x014A,331,LICA5113.CarbonPotTemp,Carbon Pot Temp,PID,#02,float 32,R +0x014C,333,LICA5113.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#02,float 32,R/W +0x014E,335,LICA5113.Direction,Direction,PID,#02,float 32,R +0x0150,337,LICA5113.Reset1,Reset 1,PID,#02,float 32,R/W +0x0152,339,LICA5113.Rate1,Rate 1,PID,#02,float 32,R/W +0x0154,341,LICA5113.ScanCycleTime,Scan Cycle Time,PID,#02,float 32,R +0x0156,343,LICA5113.PV_LowRange,PV_Low Range,PID,#02,float 32,R +0x0158,345,LICA5113.PV_HighRange,PV_High Range,PID,#02,float 32,R +0x015A,347,LICA5113.Alarm1SP1,Alarm 1 SP1,PID,#02,float 32,R/W +0x015C,349,LICA5113.Alarm1SP2,Alarm 1 SP2,PID,#02,float 32,R/W +0x0160,353,LICA5113.Gain2_PropBand2,Gain2_Prop Band 2,PID,#02,float 32,R/W +0x0162,355,LICA5113.3PosStepDeadband,3 Pos Step Deadband,PID,#02,float 32,R/W +0x0164,357,LICA5113.Reset2,Reset 2,PID,#02,float 32,R/W +0x0166,359,LICA5113.Rate2,Rate 2,PID,#02,float 32,R/W +0x0168,361,LICA5113.CycleTime_Scan,Cycle Time_Scan,PID,#02,float 32,R +0x016A,363,LICA5113.LSP1,LSP1,PID,#02,float 32,R/W +0x016C,365,LICA5113.LSP2,LSP2,PID,#02,float 32,R/W +0x016E,367,LICA5113.Alarm2SP1,Alarm 2 SP1,PID,#02,float 32,R/W +0x0170,369,LICA5113.Alarm2SP2,Alarm 2 SP2,PID,#02,float 32,R/W +0x0174,373,LICA5113.SP_LowLimit,SP_Low Limit,PID,#02,float 32,R/W +0x0176,375,LICA5113.SP_HighLimit,SP_High Limit,PID,#02,float 32,R/W +0x017A,379,LICA5113.Output_LowLimit,Output_Low Limit,PID,#02,float 32,R/W +0x017C,381,LICA5113.Output_HighLimit,Output_High Limit,PID,#02,float 32,R/W +0x017E,383,LICA5113.OutputB,Output (B),PID,#02,float 32,R/W +0x0186,391,LICA5113.Ratio,Ratio,PID,#02,float 32,R/W +0x0188,393,LICA5113.Bias,Bias,PID,#02,float 32,R/W +0x018A,395,LICA5113.Deviation,Deviation,PID,#02,float 32,R +0x018E,399,LICA5113.ManualReset,Manual Reset,PID,#02,float 32,R/W +0x0190,401,LICA5113.FeedforwardGain,Feed forward Gain,PID,#02,float 32,R/W +0x0192,403,LICA5113.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#02,float 32,R/W +0x0194,405,LICA5113.FurnaceFactor,Furnace Factor,PID,#02,float 32,R/W +0x0196,407,LICA5113.PercentHydrogen,Percent Hydrogen,PID,#02,float 32,R/W +0x0198,409,LICA5113.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#02,float 32,R/W +0x019A,411,LICA5113.CarbPotDewPt,Carb Pot Dew Pt,PID,#02,float 32,R/W +0x019C,413,LICA5113.3PosStepMotorTime,3 Pos Step Motor Time,PID,#02,float 32,R/W +0x01F7,504,LICA5113.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#02,unsigned 16,R/W +0x01F8,505,LICA5113.DemandTuneReq,Demand Tune Req,PID,#02,unsigned 16,R/W +0x01F9,506,LICA5113.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#02,unsigned 16,R/W +0x01FA,507,LICA5113.AutoManState,Auto Man State,PID,#02,unsigned 16,R/W +0x01FB,508,LICA5113.LSPSelectState,LSP Select State,PID,#02,unsigned 16,R/W +0x01FC,509,LICA5113.RemLocSPState,Rem Loc SP State,PID,#02,unsigned 16,R/W +0x01FD,510,LICA5113.TuneSetState,Tune Set State,PID,#02,unsigned 16,R/W +0x01FE,511,LICA5113.LoopStatusRegister,Loop Status Register,PID,#02,unsigned 16,R + , ,FICA3203,,PID,#03,, +0x0240,577,FICA3203.PV,PV,PID,#03,float 32,R +0x0242,579,FICA3203.RSP_SP2,RSP_SP2,PID,#03,float 32,R/W +0x0244,581,FICA3203.WSP,WSP,PID,#03,float 32,R/W +0x0246,583,FICA3203.Output,Output,PID,#03,float 32,R/W +0x024A,587,FICA3203.CarbonPotTemp,Carbon Pot Temp,PID,#03,float 32,R +0x024C,589,FICA3203.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#03,float 32,R/W +0x024E,591,FICA3203.Direction,Direction,PID,#03,float 32,R +0x0250,593,FICA3203.Reset1,Reset 1,PID,#03,float 32,R/W +0x0252,595,FICA3203.Rate1,Rate 1,PID,#03,float 32,R/W +0x0254,597,FICA3203.ScanCycleTime,Scan Cycle Time,PID,#03,float 32,R +0x0256,599,FICA3203.PV_LowRange,PV_Low Range,PID,#03,float 32,R +0x0258,601,FICA3203.PV_HighRange,PV_High Range,PID,#03,float 32,R +0x025A,603,FICA3203.Alarm1SP1,Alarm 1 SP1,PID,#03,float 32,R/W +0x025C,605,FICA3203.Alarm1SP2,Alarm 1 SP2,PID,#03,float 32,R/W +0x0260,609,FICA3203.Gain2_PropBand2,Gain2_Prop Band 2,PID,#03,float 32,R/W +0x0262,611,FICA3203.3PosStepDeadband,3 Pos Step Deadband,PID,#03,float 32,R/W +0x0264,613,FICA3203.Reset2,Reset 2,PID,#03,float 32,R/W +0x0266,615,FICA3203.Rate2,Rate 2,PID,#03,float 32,R/W +0x0268,617,FICA3203.CycleTime_Scan,Cycle Time_Scan,PID,#03,float 32,R +0x026A,619,FICA3203.LSP1,LSP1,PID,#03,float 32,R/W +0x026C,621,FICA3203.LSP2,LSP2,PID,#03,float 32,R/W +0x026E,623,FICA3203.Alarm2SP1,Alarm 2 SP1,PID,#03,float 32,R/W +0x0270,625,FICA3203.Alarm2SP2,Alarm 2 SP2,PID,#03,float 32,R/W +0x0274,629,FICA3203.SP_LowLimit,SP_Low Limit,PID,#03,float 32,R/W +0x0276,631,FICA3203.SP_HighLimit,SP_High Limit,PID,#03,float 32,R/W +0x027A,635,FICA3203.Output_LowLimit,Output_Low Limit,PID,#03,float 32,R/W +0x027C,637,FICA3203.Output_HighLimit,Output_High Limit,PID,#03,float 32,R/W +0x027E,639,FICA3203.OutputB,Output (B),PID,#03,float 32,R/W +0x0286,647,FICA3203.Ratio,Ratio,PID,#03,float 32,R/W +0x0288,649,FICA3203.Bias,Bias,PID,#03,float 32,R/W +0x028A,651,FICA3203.Deviation,Deviation,PID,#03,float 32,R +0x028E,655,FICA3203.ManualReset,Manual Reset,PID,#03,float 32,R/W +0x0290,657,FICA3203.FeedforwardGain,Feed forward Gain,PID,#03,float 32,R/W +0x0292,659,FICA3203.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#03,float 32,R/W +0x0294,661,FICA3203.FurnaceFactor,Furnace Factor,PID,#03,float 32,R/W +0x0296,663,FICA3203.PercentHydrogen,Percent Hydrogen,PID,#03,float 32,R/W +0x0298,665,FICA3203.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#03,float 32,R/W +0x029A,667,FICA3203.CarbPotDewPt,Carb Pot Dew Pt,PID,#03,float 32,R/W +0x029C,669,FICA3203.3PosStepMotorTime,3 Pos Step Motor Time,PID,#03,float 32,R/W +0x02F7,760,FICA3203.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#03,unsigned 16,R/W +0x02F8,761,FICA3203.DemandTuneReq,Demand Tune Req,PID,#03,unsigned 16,R/W +0x02F9,762,FICA3203.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#03,unsigned 16,R/W +0x02FA,763,FICA3203.AutoManState,Auto Man State,PID,#03,unsigned 16,R/W +0x02FB,764,FICA3203.LSPSelectState,LSP Select State,PID,#03,unsigned 16,R/W +0x02FC,765,FICA3203.RemLocSPState,Rem Loc SP State,PID,#03,unsigned 16,R/W +0x02FD,766,FICA3203.TuneSetState,Tune Set State,PID,#03,unsigned 16,R/W +0x02FE,767,FICA3203.LoopStatusRegister,Loop Status Register,PID,#03,unsigned 16,R + , ,TICA3202A,,PID,#04,, +0x0340,833,TICA3202A.PV,PV,PID,#04,float 32,R +0x0342,835,TICA3202A.RSP_SP2,RSP_SP2,PID,#04,float 32,R/W +0x0344,837,TICA3202A.WSP,WSP,PID,#04,float 32,R/W +0x0346,839,TICA3202A.Output,Output,PID,#04,float 32,R/W +0x034A,843,TICA3202A.CarbonPotTemp,Carbon Pot Temp,PID,#04,float 32,R +0x034C,845,TICA3202A.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#04,float 32,R/W +0x034E,847,TICA3202A.Direction,Direction,PID,#04,float 32,R +0x0350,849,TICA3202A.Reset1,Reset 1,PID,#04,float 32,R/W +0x0352,851,TICA3202A.Rate1,Rate 1,PID,#04,float 32,R/W +0x0354,853,TICA3202A.ScanCycleTime,Scan Cycle Time,PID,#04,float 32,R +0x0356,855,TICA3202A.PV_LowRange,PV_Low Range,PID,#04,float 32,R +0x0358,857,TICA3202A.PV_HighRange,PV_High Range,PID,#04,float 32,R +0x035A,859,TICA3202A.Alarm1SP1,Alarm 1 SP1,PID,#04,float 32,R/W +0x035C,861,TICA3202A.Alarm1SP2,Alarm 1 SP2,PID,#04,float 32,R/W +0x0360,865,TICA3202A.Gain2_PropBand2,Gain2_Prop Band 2,PID,#04,float 32,R/W +0x0362,867,TICA3202A.3PosStepDeadband,3 Pos Step Deadband,PID,#04,float 32,R/W +0x0364,869,TICA3202A.Reset2,Reset 2,PID,#04,float 32,R/W +0x0366,871,TICA3202A.Rate2,Rate 2,PID,#04,float 32,R/W +0x0368,873,TICA3202A.CycleTime_Scan,Cycle Time_Scan,PID,#04,float 32,R +0x036A,875,TICA3202A.LSP1,LSP1,PID,#04,float 32,R/W +0x036C,877,TICA3202A.LSP2,LSP2,PID,#04,float 32,R/W +0x036E,879,TICA3202A.Alarm2SP1,Alarm 2 SP1,PID,#04,float 32,R/W +0x0370,881,TICA3202A.Alarm2SP2,Alarm 2 SP2,PID,#04,float 32,R/W +0x0374,885,TICA3202A.SP_LowLimit,SP_Low Limit,PID,#04,float 32,R/W +0x0376,887,TICA3202A.SP_HighLimit,SP_High Limit,PID,#04,float 32,R/W +0x037A,891,TICA3202A.Output_LowLimit,Output_Low Limit,PID,#04,float 32,R/W +0x037C,893,TICA3202A.Output_HighLimit,Output_High Limit,PID,#04,float 32,R/W +0x037E,895,TICA3202A.OutputB,Output (B),PID,#04,float 32,R/W +0x0386,903,TICA3202A.Ratio,Ratio,PID,#04,float 32,R/W +0x0388,905,TICA3202A.Bias,Bias,PID,#04,float 32,R/W +0x038A,907,TICA3202A.Deviation,Deviation,PID,#04,float 32,R +0x038E,911,TICA3202A.ManualReset,Manual Reset,PID,#04,float 32,R/W +0x0390,913,TICA3202A.FeedforwardGain,Feed forward Gain,PID,#04,float 32,R/W +0x0392,915,TICA3202A.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#04,float 32,R/W +0x0394,917,TICA3202A.FurnaceFactor,Furnace Factor,PID,#04,float 32,R/W +0x0396,919,TICA3202A.PercentHydrogen,Percent Hydrogen,PID,#04,float 32,R/W +0x0398,921,TICA3202A.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#04,float 32,R/W +0x039A,923,TICA3202A.CarbPotDewPt,Carb Pot Dew Pt,PID,#04,float 32,R/W +0x039C,925,TICA3202A.3PosStepMotorTime,3 Pos Step Motor Time,PID,#04,float 32,R/W +0x03F7,1016,TICA3202A.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#04,unsigned 16,R/W +0x03F8,1017,TICA3202A.DemandTuneReq,Demand Tune Req,PID,#04,unsigned 16,R/W +0x03F9,1018,TICA3202A.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#04,unsigned 16,R/W +0x03FA,1019,TICA3202A.AutoManState,Auto Man State,PID,#04,unsigned 16,R/W +0x03FB,1020,TICA3202A.LSPSelectState,LSP Select State,PID,#04,unsigned 16,R/W +0x03FC,1021,TICA3202A.RemLocSPState,Rem Loc SP State,PID,#04,unsigned 16,R/W +0x03FD,1022,TICA3202A.TuneSetState,Tune Set State,PID,#04,unsigned 16,R/W +0x03FE,1023,TICA3202A.LoopStatusRegister,Loop Status Register,PID,#04,unsigned 16,R + , ,TICA6111A,,PID,#05,, +0x0440,1089,TICA6111A.PV,PV,PID,#05,float 32,R +0x0442,1091,TICA6111A.RSP_SP2,RSP_SP2,PID,#05,float 32,R/W +0x0444,1093,TICA6111A.WSP,WSP,PID,#05,float 32,R/W +0x0446,1095,TICA6111A.Output,Output,PID,#05,float 32,R/W +0x044A,1099,TICA6111A.CarbonPotTemp,Carbon Pot Temp,PID,#05,float 32,R +0x044C,1101,TICA6111A.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#05,float 32,R/W +0x044E,1103,TICA6111A.Direction,Direction,PID,#05,float 32,R +0x0450,1105,TICA6111A.Reset1,Reset 1,PID,#05,float 32,R/W +0x0452,1107,TICA6111A.Rate1,Rate 1,PID,#05,float 32,R/W +0x0454,1109,TICA6111A.ScanCycleTime,Scan Cycle Time,PID,#05,float 32,R +0x0456,1111,TICA6111A.PV_LowRange,PV_Low Range,PID,#05,float 32,R +0x0458,1113,TICA6111A.PV_HighRange,PV_High Range,PID,#05,float 32,R +0x045A,1115,TICA6111A.Alarm1SP1,Alarm 1 SP1,PID,#05,float 32,R/W +0x045C,1117,TICA6111A.Alarm1SP2,Alarm 1 SP2,PID,#05,float 32,R/W +0x0460,1121,TICA6111A.Gain2_PropBand2,Gain2_Prop Band 2,PID,#05,float 32,R/W +0x0462,1123,TICA6111A.3PosStepDeadband,3 Pos Step Deadband,PID,#05,float 32,R/W +0x0464,1125,TICA6111A.Reset2,Reset 2,PID,#05,float 32,R/W +0x0466,1127,TICA6111A.Rate2,Rate 2,PID,#05,float 32,R/W +0x0468,1129,TICA6111A.CycleTime_Scan,Cycle Time_Scan,PID,#05,float 32,R +0x046A,1131,TICA6111A.LSP1,LSP1,PID,#05,float 32,R/W +0x046C,1133,TICA6111A.LSP2,LSP2,PID,#05,float 32,R/W +0x046E,1135,TICA6111A.Alarm2SP1,Alarm 2 SP1,PID,#05,float 32,R/W +0x0470,1137,TICA6111A.Alarm2SP2,Alarm 2 SP2,PID,#05,float 32,R/W +0x0474,1141,TICA6111A.SP_LowLimit,SP_Low Limit,PID,#05,float 32,R/W +0x0476,1143,TICA6111A.SP_HighLimit,SP_High Limit,PID,#05,float 32,R/W +0x047A,1147,TICA6111A.Output_LowLimit,Output_Low Limit,PID,#05,float 32,R/W +0x047C,1149,TICA6111A.Output_HighLimit,Output_High Limit,PID,#05,float 32,R/W +0x047E,1151,TICA6111A.OutputB,Output (B),PID,#05,float 32,R/W +0x0486,1159,TICA6111A.Ratio,Ratio,PID,#05,float 32,R/W +0x0488,1161,TICA6111A.Bias,Bias,PID,#05,float 32,R/W +0x048A,1163,TICA6111A.Deviation,Deviation,PID,#05,float 32,R +0x048E,1167,TICA6111A.ManualReset,Manual Reset,PID,#05,float 32,R/W +0x0490,1169,TICA6111A.FeedforwardGain,Feed forward Gain,PID,#05,float 32,R/W +0x0492,1171,TICA6111A.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#05,float 32,R/W +0x0494,1173,TICA6111A.FurnaceFactor,Furnace Factor,PID,#05,float 32,R/W +0x0496,1175,TICA6111A.PercentHydrogen,Percent Hydrogen,PID,#05,float 32,R/W +0x0498,1177,TICA6111A.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#05,float 32,R/W +0x049A,1179,TICA6111A.CarbPotDewPt,Carb Pot Dew Pt,PID,#05,float 32,R/W +0x049C,1181,TICA6111A.3PosStepMotorTime,3 Pos Step Motor Time,PID,#05,float 32,R/W +0x04F7,1272,TICA6111A.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#05,unsigned 16,R/W +0x04F8,1273,TICA6111A.DemandTuneReq,Demand Tune Req,PID,#05,unsigned 16,R/W +0x04F9,1274,TICA6111A.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#05,unsigned 16,R/W +0x04FA,1275,TICA6111A.AutoManState,Auto Man State,PID,#05,unsigned 16,R/W +0x04FB,1276,TICA6111A.LSPSelectState,LSP Select State,PID,#05,unsigned 16,R/W +0x04FC,1277,TICA6111A.RemLocSPState,Rem Loc SP State,PID,#05,unsigned 16,R/W +0x04FD,1278,TICA6111A.TuneSetState,Tune Set State,PID,#05,unsigned 16,R/W +0x04FE,1279,TICA6111A.LoopStatusRegister,Loop Status Register,PID,#05,unsigned 16,R + , ,PICA3203,,PID,#06,, +0x0540,1345,PICA3203.PV,PV,PID,#06,float 32,R +0x0542,1347,PICA3203.RSP_SP2,RSP_SP2,PID,#06,float 32,R/W +0x0544,1349,PICA3203.WSP,WSP,PID,#06,float 32,R/W +0x0546,1351,PICA3203.Output,Output,PID,#06,float 32,R/W +0x054A,1355,PICA3203.CarbonPotTemp,Carbon Pot Temp,PID,#06,float 32,R +0x054C,1357,PICA3203.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#06,float 32,R/W +0x054E,1359,PICA3203.Direction,Direction,PID,#06,float 32,R +0x0550,1361,PICA3203.Reset1,Reset 1,PID,#06,float 32,R/W +0x0552,1363,PICA3203.Rate1,Rate 1,PID,#06,float 32,R/W +0x0554,1365,PICA3203.ScanCycleTime,Scan Cycle Time,PID,#06,float 32,R +0x0556,1367,PICA3203.PV_LowRange,PV_Low Range,PID,#06,float 32,R +0x0558,1369,PICA3203.PV_HighRange,PV_High Range,PID,#06,float 32,R +0x055A,1371,PICA3203.Alarm1SP1,Alarm 1 SP1,PID,#06,float 32,R/W +0x055C,1373,PICA3203.Alarm1SP2,Alarm 1 SP2,PID,#06,float 32,R/W +0x0560,1377,PICA3203.Gain2_PropBand2,Gain2_Prop Band 2,PID,#06,float 32,R/W +0x0562,1379,PICA3203.3PosStepDeadband,3 Pos Step Deadband,PID,#06,float 32,R/W +0x0564,1381,PICA3203.Reset2,Reset 2,PID,#06,float 32,R/W +0x0566,1383,PICA3203.Rate2,Rate 2,PID,#06,float 32,R/W +0x0568,1385,PICA3203.CycleTime_Scan,Cycle Time_Scan,PID,#06,float 32,R +0x056A,1387,PICA3203.LSP1,LSP1,PID,#06,float 32,R/W +0x056C,1389,PICA3203.LSP2,LSP2,PID,#06,float 32,R/W +0x056E,1391,PICA3203.Alarm2SP1,Alarm 2 SP1,PID,#06,float 32,R/W +0x0570,1393,PICA3203.Alarm2SP2,Alarm 2 SP2,PID,#06,float 32,R/W +0x0574,1397,PICA3203.SP_LowLimit,SP_Low Limit,PID,#06,float 32,R/W +0x0576,1399,PICA3203.SP_HighLimit,SP_High Limit,PID,#06,float 32,R/W +0x057A,1403,PICA3203.Output_LowLimit,Output_Low Limit,PID,#06,float 32,R/W +0x057C,1405,PICA3203.Output_HighLimit,Output_High Limit,PID,#06,float 32,R/W +0x057E,1407,PICA3203.OutputB,Output (B),PID,#06,float 32,R/W +0x0586,1415,PICA3203.Ratio,Ratio,PID,#06,float 32,R/W +0x0588,1417,PICA3203.Bias,Bias,PID,#06,float 32,R/W +0x058A,1419,PICA3203.Deviation,Deviation,PID,#06,float 32,R +0x058E,1423,PICA3203.ManualReset,Manual Reset,PID,#06,float 32,R/W +0x0590,1425,PICA3203.FeedforwardGain,Feed forward Gain,PID,#06,float 32,R/W +0x0592,1427,PICA3203.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#06,float 32,R/W +0x0594,1429,PICA3203.FurnaceFactor,Furnace Factor,PID,#06,float 32,R/W +0x0596,1431,PICA3203.PercentHydrogen,Percent Hydrogen,PID,#06,float 32,R/W +0x0598,1433,PICA3203.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#06,float 32,R/W +0x059A,1435,PICA3203.CarbPotDewPt,Carb Pot Dew Pt,PID,#06,float 32,R/W +0x059C,1437,PICA3203.3PosStepMotorTime,3 Pos Step Motor Time,PID,#06,float 32,R/W +0x05F7,1528,PICA3203.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#06,unsigned 16,R/W +0x05F8,1529,PICA3203.DemandTuneReq,Demand Tune Req,PID,#06,unsigned 16,R/W +0x05F9,1530,PICA3203.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#06,unsigned 16,R/W +0x05FA,1531,PICA3203.AutoManState,Auto Man State,PID,#06,unsigned 16,R/W +0x05FB,1532,PICA3203.LSPSelectState,LSP Select State,PID,#06,unsigned 16,R/W +0x05FC,1533,PICA3203.RemLocSPState,Rem Loc SP State,PID,#06,unsigned 16,R/W +0x05FD,1534,PICA3203.TuneSetState,Tune Set State,PID,#06,unsigned 16,R/W +0x05FE,1535,PICA3203.LoopStatusRegister,Loop Status Register,PID,#06,unsigned 16,R + , ,LICA3705,,PID,#07,, +0x0640,1601,LICA3705.PV,PV,PID,#07,float 32,R +0x0642,1603,LICA3705.RSP_SP2,RSP_SP2,PID,#07,float 32,R/W +0x0644,1605,LICA3705.WSP,WSP,PID,#07,float 32,R/W +0x0646,1607,LICA3705.Output,Output,PID,#07,float 32,R/W +0x064A,1611,LICA3705.CarbonPotTemp,Carbon Pot Temp,PID,#07,float 32,R +0x064C,1613,LICA3705.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#07,float 32,R/W +0x064E,1615,LICA3705.Direction,Direction,PID,#07,float 32,R +0x0650,1617,LICA3705.Reset1,Reset 1,PID,#07,float 32,R/W +0x0652,1619,LICA3705.Rate1,Rate 1,PID,#07,float 32,R/W +0x0654,1621,LICA3705.ScanCycleTime,Scan Cycle Time,PID,#07,float 32,R +0x0656,1623,LICA3705.PV_LowRange,PV_Low Range,PID,#07,float 32,R +0x0658,1625,LICA3705.PV_HighRange,PV_High Range,PID,#07,float 32,R +0x065A,1627,LICA3705.Alarm1SP1,Alarm 1 SP1,PID,#07,float 32,R/W +0x065C,1629,LICA3705.Alarm1SP2,Alarm 1 SP2,PID,#07,float 32,R/W +0x0660,1633,LICA3705.Gain2_PropBand2,Gain2_Prop Band 2,PID,#07,float 32,R/W +0x0662,1635,LICA3705.3PosStepDeadband,3 Pos Step Deadband,PID,#07,float 32,R/W +0x0664,1637,LICA3705.Reset2,Reset 2,PID,#07,float 32,R/W +0x0666,1639,LICA3705.Rate2,Rate 2,PID,#07,float 32,R/W +0x0668,1641,LICA3705.CycleTime_Scan,Cycle Time_Scan,PID,#07,float 32,R +0x066A,1643,LICA3705.LSP1,LSP1,PID,#07,float 32,R/W +0x066C,1645,LICA3705.LSP2,LSP2,PID,#07,float 32,R/W +0x066E,1647,LICA3705.Alarm2SP1,Alarm 2 SP1,PID,#07,float 32,R/W +0x0670,1649,LICA3705.Alarm2SP2,Alarm 2 SP2,PID,#07,float 32,R/W +0x0674,1653,LICA3705.SP_LowLimit,SP_Low Limit,PID,#07,float 32,R/W +0x0676,1655,LICA3705.SP_HighLimit,SP_High Limit,PID,#07,float 32,R/W +0x067A,1659,LICA3705.Output_LowLimit,Output_Low Limit,PID,#07,float 32,R/W +0x067C,1661,LICA3705.Output_HighLimit,Output_High Limit,PID,#07,float 32,R/W +0x067E,1663,LICA3705.OutputB,Output (B),PID,#07,float 32,R/W +0x0686,1671,LICA3705.Ratio,Ratio,PID,#07,float 32,R/W +0x0688,1673,LICA3705.Bias,Bias,PID,#07,float 32,R/W +0x068A,1675,LICA3705.Deviation,Deviation,PID,#07,float 32,R +0x068E,1679,LICA3705.ManualReset,Manual Reset,PID,#07,float 32,R/W +0x0690,1681,LICA3705.FeedforwardGain,Feed forward Gain,PID,#07,float 32,R/W +0x0692,1683,LICA3705.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#07,float 32,R/W +0x0694,1685,LICA3705.FurnaceFactor,Furnace Factor,PID,#07,float 32,R/W +0x0696,1687,LICA3705.PercentHydrogen,Percent Hydrogen,PID,#07,float 32,R/W +0x0698,1689,LICA3705.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#07,float 32,R/W +0x069A,1691,LICA3705.CarbPotDewPt,Carb Pot Dew Pt,PID,#07,float 32,R/W +0x069C,1693,LICA3705.3PosStepMotorTime,3 Pos Step Motor Time,PID,#07,float 32,R/W +0x06F7,1784,LICA3705.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#07,unsigned 16,R/W +0x06F8,1785,LICA3705.DemandTuneReq,Demand Tune Req,PID,#07,unsigned 16,R/W +0x06F9,1786,LICA3705.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#07,unsigned 16,R/W +0x06FA,1787,LICA3705.AutoManState,Auto Man State,PID,#07,unsigned 16,R/W +0x06FB,1788,LICA3705.LSPSelectState,LSP Select State,PID,#07,unsigned 16,R/W +0x06FC,1789,LICA3705.RemLocSPState,Rem Loc SP State,PID,#07,unsigned 16,R/W +0x06FD,1790,LICA3705.TuneSetState,Tune Set State,PID,#07,unsigned 16,R/W +0x06FE,1791,LICA3705.LoopStatusRegister,Loop Status Register,PID,#07,unsigned 16,R + , ,TICA3403,,PID,#08,, +0x0740,1857,TICA3403.PV,PV,PID,#08,float 32,R +0x0742,1859,TICA3403.RSP_SP2,RSP_SP2,PID,#08,float 32,R/W +0x0744,1861,TICA3403.WSP,WSP,PID,#08,float 32,R/W +0x0746,1863,TICA3403.Output,Output,PID,#08,float 32,R/W +0x074A,1867,TICA3403.CarbonPotTemp,Carbon Pot Temp,PID,#08,float 32,R +0x074C,1869,TICA3403.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#08,float 32,R/W +0x074E,1871,TICA3403.Direction,Direction,PID,#08,float 32,R +0x0750,1873,TICA3403.Reset1,Reset 1,PID,#08,float 32,R/W +0x0752,1875,TICA3403.Rate1,Rate 1,PID,#08,float 32,R/W +0x0754,1877,TICA3403.ScanCycleTime,Scan Cycle Time,PID,#08,float 32,R +0x0756,1879,TICA3403.PV_LowRange,PV_Low Range,PID,#08,float 32,R +0x0758,1881,TICA3403.PV_HighRange,PV_High Range,PID,#08,float 32,R +0x075A,1883,TICA3403.Alarm1SP1,Alarm 1 SP1,PID,#08,float 32,R/W +0x075C,1885,TICA3403.Alarm1SP2,Alarm 1 SP2,PID,#08,float 32,R/W +0x0760,1889,TICA3403.Gain2_PropBand2,Gain2_Prop Band 2,PID,#08,float 32,R/W +0x0762,1891,TICA3403.3PosStepDeadband,3 Pos Step Deadband,PID,#08,float 32,R/W +0x0764,1893,TICA3403.Reset2,Reset 2,PID,#08,float 32,R/W +0x0766,1895,TICA3403.Rate2,Rate 2,PID,#08,float 32,R/W +0x0768,1897,TICA3403.CycleTime_Scan,Cycle Time_Scan,PID,#08,float 32,R +0x076A,1899,TICA3403.LSP1,LSP1,PID,#08,float 32,R/W +0x076C,1901,TICA3403.LSP2,LSP2,PID,#08,float 32,R/W +0x076E,1903,TICA3403.Alarm2SP1,Alarm 2 SP1,PID,#08,float 32,R/W +0x0770,1905,TICA3403.Alarm2SP2,Alarm 2 SP2,PID,#08,float 32,R/W +0x0774,1909,TICA3403.SP_LowLimit,SP_Low Limit,PID,#08,float 32,R/W +0x0776,1911,TICA3403.SP_HighLimit,SP_High Limit,PID,#08,float 32,R/W +0x077A,1915,TICA3403.Output_LowLimit,Output_Low Limit,PID,#08,float 32,R/W +0x077C,1917,TICA3403.Output_HighLimit,Output_High Limit,PID,#08,float 32,R/W +0x077E,1919,TICA3403.OutputB,Output (B),PID,#08,float 32,R/W +0x0786,1927,TICA3403.Ratio,Ratio,PID,#08,float 32,R/W +0x0788,1929,TICA3403.Bias,Bias,PID,#08,float 32,R/W +0x078A,1931,TICA3403.Deviation,Deviation,PID,#08,float 32,R +0x078E,1935,TICA3403.ManualReset,Manual Reset,PID,#08,float 32,R/W +0x0790,1937,TICA3403.FeedforwardGain,Feed forward Gain,PID,#08,float 32,R/W +0x0792,1939,TICA3403.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#08,float 32,R/W +0x0794,1941,TICA3403.FurnaceFactor,Furnace Factor,PID,#08,float 32,R/W +0x0796,1943,TICA3403.PercentHydrogen,Percent Hydrogen,PID,#08,float 32,R/W +0x0798,1945,TICA3403.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#08,float 32,R/W +0x079A,1947,TICA3403.CarbPotDewPt,Carb Pot Dew Pt,PID,#08,float 32,R/W +0x079C,1949,TICA3403.3PosStepMotorTime,3 Pos Step Motor Time,PID,#08,float 32,R/W +0x07F7,2040,TICA3403.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#08,unsigned 16,R/W +0x07F8,2041,TICA3403.DemandTuneReq,Demand Tune Req,PID,#08,unsigned 16,R/W +0x07F9,2042,TICA3403.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#08,unsigned 16,R/W +0x07FA,2043,TICA3403.AutoManState,Auto Man State,PID,#08,unsigned 16,R/W +0x07FB,2044,TICA3403.LSPSelectState,LSP Select State,PID,#08,unsigned 16,R/W +0x07FC,2045,TICA3403.RemLocSPState,Rem Loc SP State,PID,#08,unsigned 16,R/W +0x07FD,2046,TICA3403.TuneSetState,Tune Set State,PID,#08,unsigned 16,R/W +0x07FE,2047,TICA3403.LoopStatusRegister,Loop Status Register,PID,#08,unsigned 16,R + , ,LICA3403,,PID,#09,, +0x0840,2113,LICA3403.PV,PV,PID,#09,float 32,R +0x0842,2115,LICA3403.RSP_SP2,RSP_SP2,PID,#09,float 32,R/W +0x0844,2117,LICA3403.WSP,WSP,PID,#09,float 32,R/W +0x0846,2119,LICA3403.Output,Output,PID,#09,float 32,R/W +0x084A,2123,LICA3403.CarbonPotTemp,Carbon Pot Temp,PID,#09,float 32,R +0x084C,2125,LICA3403.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#09,float 32,R/W +0x084E,2127,LICA3403.Direction,Direction,PID,#09,float 32,R +0x0850,2129,LICA3403.Reset1,Reset 1,PID,#09,float 32,R/W +0x0852,2131,LICA3403.Rate1,Rate 1,PID,#09,float 32,R/W +0x0854,2133,LICA3403.ScanCycleTime,Scan Cycle Time,PID,#09,float 32,R +0x0856,2135,LICA3403.PV_LowRange,PV_Low Range,PID,#09,float 32,R +0x0858,2137,LICA3403.PV_HighRange,PV_High Range,PID,#09,float 32,R +0x085A,2139,LICA3403.Alarm1SP1,Alarm 1 SP1,PID,#09,float 32,R/W +0x085C,2141,LICA3403.Alarm1SP2,Alarm 1 SP2,PID,#09,float 32,R/W +0x0860,2145,LICA3403.Gain2_PropBand2,Gain2_Prop Band 2,PID,#09,float 32,R/W +0x0862,2147,LICA3403.3PosStepDeadband,3 Pos Step Deadband,PID,#09,float 32,R/W +0x0864,2149,LICA3403.Reset2,Reset 2,PID,#09,float 32,R/W +0x0866,2151,LICA3403.Rate2,Rate 2,PID,#09,float 32,R/W +0x0868,2153,LICA3403.CycleTime_Scan,Cycle Time_Scan,PID,#09,float 32,R +0x086A,2155,LICA3403.LSP1,LSP1,PID,#09,float 32,R/W +0x086C,2157,LICA3403.LSP2,LSP2,PID,#09,float 32,R/W +0x086E,2159,LICA3403.Alarm2SP1,Alarm 2 SP1,PID,#09,float 32,R/W +0x0870,2161,LICA3403.Alarm2SP2,Alarm 2 SP2,PID,#09,float 32,R/W +0x0874,2165,LICA3403.SP_LowLimit,SP_Low Limit,PID,#09,float 32,R/W +0x0876,2167,LICA3403.SP_HighLimit,SP_High Limit,PID,#09,float 32,R/W +0x087A,2171,LICA3403.Output_LowLimit,Output_Low Limit,PID,#09,float 32,R/W +0x087C,2173,LICA3403.Output_HighLimit,Output_High Limit,PID,#09,float 32,R/W +0x087E,2175,LICA3403.OutputB,Output (B),PID,#09,float 32,R/W +0x0886,2183,LICA3403.Ratio,Ratio,PID,#09,float 32,R/W +0x0888,2185,LICA3403.Bias,Bias,PID,#09,float 32,R/W +0x088A,2187,LICA3403.Deviation,Deviation,PID,#09,float 32,R +0x088E,2191,LICA3403.ManualReset,Manual Reset,PID,#09,float 32,R/W +0x0890,2193,LICA3403.FeedforwardGain,Feed forward Gain,PID,#09,float 32,R/W +0x0892,2195,LICA3403.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#09,float 32,R/W +0x0894,2197,LICA3403.FurnaceFactor,Furnace Factor,PID,#09,float 32,R/W +0x0896,2199,LICA3403.PercentHydrogen,Percent Hydrogen,PID,#09,float 32,R/W +0x0898,2201,LICA3403.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#09,float 32,R/W +0x089A,2203,LICA3403.CarbPotDewPt,Carb Pot Dew Pt,PID,#09,float 32,R/W +0x089C,2205,LICA3403.3PosStepMotorTime,3 Pos Step Motor Time,PID,#09,float 32,R/W +0x08F7,2296,LICA3403.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#09,unsigned 16,R/W +0x08F8,2297,LICA3403.DemandTuneReq,Demand Tune Req,PID,#09,unsigned 16,R/W +0x08F9,2298,LICA3403.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#09,unsigned 16,R/W +0x08FA,2299,LICA3403.AutoManState,Auto Man State,PID,#09,unsigned 16,R/W +0x08FB,2300,LICA3403.LSPSelectState,LSP Select State,PID,#09,unsigned 16,R/W +0x08FC,2301,LICA3403.RemLocSPState,Rem Loc SP State,PID,#09,unsigned 16,R/W +0x08FD,2302,LICA3403.TuneSetState,Tune Set State,PID,#09,unsigned 16,R/W +0x08FE,2303,LICA3403.LoopStatusRegister,Loop Status Register,PID,#09,unsigned 16,R + , ,PICA6111,,PID,#10,, +0x0940,2369,PICA6111.PV,PV,PID,#10,float 32,R +0x0942,2371,PICA6111.RSP_SP2,RSP_SP2,PID,#10,float 32,R/W +0x0944,2373,PICA6111.WSP,WSP,PID,#10,float 32,R/W +0x0946,2375,PICA6111.Output,Output,PID,#10,float 32,R/W +0x094A,2379,PICA6111.CarbonPotTemp,Carbon Pot Temp,PID,#10,float 32,R +0x094C,2381,PICA6111.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#10,float 32,R/W +0x094E,2383,PICA6111.Direction,Direction,PID,#10,float 32,R +0x0950,2385,PICA6111.Reset1,Reset 1,PID,#10,float 32,R/W +0x0952,2387,PICA6111.Rate1,Rate 1,PID,#10,float 32,R/W +0x0954,2389,PICA6111.ScanCycleTime,Scan Cycle Time,PID,#10,float 32,R +0x0956,2391,PICA6111.PV_LowRange,PV_Low Range,PID,#10,float 32,R +0x0958,2393,PICA6111.PV_HighRange,PV_High Range,PID,#10,float 32,R +0x095A,2395,PICA6111.Alarm1SP1,Alarm 1 SP1,PID,#10,float 32,R/W +0x095C,2397,PICA6111.Alarm1SP2,Alarm 1 SP2,PID,#10,float 32,R/W +0x0960,2401,PICA6111.Gain2_PropBand2,Gain2_Prop Band 2,PID,#10,float 32,R/W +0x0962,2403,PICA6111.3PosStepDeadband,3 Pos Step Deadband,PID,#10,float 32,R/W +0x0964,2405,PICA6111.Reset2,Reset 2,PID,#10,float 32,R/W +0x0966,2407,PICA6111.Rate2,Rate 2,PID,#10,float 32,R/W +0x0968,2409,PICA6111.CycleTime_Scan,Cycle Time_Scan,PID,#10,float 32,R +0x096A,2411,PICA6111.LSP1,LSP1,PID,#10,float 32,R/W +0x096C,2413,PICA6111.LSP2,LSP2,PID,#10,float 32,R/W +0x096E,2415,PICA6111.Alarm2SP1,Alarm 2 SP1,PID,#10,float 32,R/W +0x0970,2417,PICA6111.Alarm2SP2,Alarm 2 SP2,PID,#10,float 32,R/W +0x0974,2421,PICA6111.SP_LowLimit,SP_Low Limit,PID,#10,float 32,R/W +0x0976,2423,PICA6111.SP_HighLimit,SP_High Limit,PID,#10,float 32,R/W +0x097A,2427,PICA6111.Output_LowLimit,Output_Low Limit,PID,#10,float 32,R/W +0x097C,2429,PICA6111.Output_HighLimit,Output_High Limit,PID,#10,float 32,R/W +0x097E,2431,PICA6111.OutputB,Output (B),PID,#10,float 32,R/W +0x0986,2439,PICA6111.Ratio,Ratio,PID,#10,float 32,R/W +0x0988,2441,PICA6111.Bias,Bias,PID,#10,float 32,R/W +0x098A,2443,PICA6111.Deviation,Deviation,PID,#10,float 32,R +0x098E,2447,PICA6111.ManualReset,Manual Reset,PID,#10,float 32,R/W +0x0990,2449,PICA6111.FeedforwardGain,Feed forward Gain,PID,#10,float 32,R/W +0x0992,2451,PICA6111.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#10,float 32,R/W +0x0994,2453,PICA6111.FurnaceFactor,Furnace Factor,PID,#10,float 32,R/W +0x0996,2455,PICA6111.PercentHydrogen,Percent Hydrogen,PID,#10,float 32,R/W +0x0998,2457,PICA6111.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#10,float 32,R/W +0x099A,2459,PICA6111.CarbPotDewPt,Carb Pot Dew Pt,PID,#10,float 32,R/W +0x099C,2461,PICA6111.3PosStepMotorTime,3 Pos Step Motor Time,PID,#10,float 32,R/W +0x09F7,2552,PICA6111.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#10,unsigned 16,R/W +0x09F8,2553,PICA6111.DemandTuneReq,Demand Tune Req,PID,#10,unsigned 16,R/W +0x09F9,2554,PICA6111.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#10,unsigned 16,R/W +0x09FA,2555,PICA6111.AutoManState,Auto Man State,PID,#10,unsigned 16,R/W +0x09FB,2556,PICA6111.LSPSelectState,LSP Select State,PID,#10,unsigned 16,R/W +0x09FC,2557,PICA6111.RemLocSPState,Rem Loc SP State,PID,#10,unsigned 16,R/W +0x09FD,2558,PICA6111.TuneSetState,Tune Set State,PID,#10,unsigned 16,R/W +0x09FE,2559,PICA6111.LoopStatusRegister,Loop Status Register,PID,#10,unsigned 16,R + , ,FICA6101,,PID,#11,, +0x0A40,2625,FICA6101.PV,PV,PID,#11,float 32,R +0x0A42,2627,FICA6101.RSP_SP2,RSP_SP2,PID,#11,float 32,R/W +0x0A44,2629,FICA6101.WSP,WSP,PID,#11,float 32,R/W +0x0A46,2631,FICA6101.Output,Output,PID,#11,float 32,R/W +0x0A4A,2635,FICA6101.CarbonPotTemp,Carbon Pot Temp,PID,#11,float 32,R +0x0A4C,2637,FICA6101.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#11,float 32,R/W +0x0A4E,2639,FICA6101.Direction,Direction,PID,#11,float 32,R +0x0A50,2641,FICA6101.Reset1,Reset 1,PID,#11,float 32,R/W +0x0A52,2643,FICA6101.Rate1,Rate 1,PID,#11,float 32,R/W +0x0A54,2645,FICA6101.ScanCycleTime,Scan Cycle Time,PID,#11,float 32,R +0x0A56,2647,FICA6101.PV_LowRange,PV_Low Range,PID,#11,float 32,R +0x0A58,2649,FICA6101.PV_HighRange,PV_High Range,PID,#11,float 32,R +0x0A5A,2651,FICA6101.Alarm1SP1,Alarm 1 SP1,PID,#11,float 32,R/W +0x0A5C,2653,FICA6101.Alarm1SP2,Alarm 1 SP2,PID,#11,float 32,R/W +0x0A60,2657,FICA6101.Gain2_PropBand2,Gain2_Prop Band 2,PID,#11,float 32,R/W +0x0A62,2659,FICA6101.3PosStepDeadband,3 Pos Step Deadband,PID,#11,float 32,R/W +0x0A64,2661,FICA6101.Reset2,Reset 2,PID,#11,float 32,R/W +0x0A66,2663,FICA6101.Rate2,Rate 2,PID,#11,float 32,R/W +0x0A68,2665,FICA6101.CycleTime_Scan,Cycle Time_Scan,PID,#11,float 32,R +0x0A6A,2667,FICA6101.LSP1,LSP1,PID,#11,float 32,R/W +0x0A6C,2669,FICA6101.LSP2,LSP2,PID,#11,float 32,R/W +0x0A6E,2671,FICA6101.Alarm2SP1,Alarm 2 SP1,PID,#11,float 32,R/W +0x0A70,2673,FICA6101.Alarm2SP2,Alarm 2 SP2,PID,#11,float 32,R/W +0x0A74,2677,FICA6101.SP_LowLimit,SP_Low Limit,PID,#11,float 32,R/W +0x0A76,2679,FICA6101.SP_HighLimit,SP_High Limit,PID,#11,float 32,R/W +0x0A7A,2683,FICA6101.Output_LowLimit,Output_Low Limit,PID,#11,float 32,R/W +0x0A7C,2685,FICA6101.Output_HighLimit,Output_High Limit,PID,#11,float 32,R/W +0x0A7E,2687,FICA6101.OutputB,Output (B),PID,#11,float 32,R/W +0x0A86,2695,FICA6101.Ratio,Ratio,PID,#11,float 32,R/W +0x0A88,2697,FICA6101.Bias,Bias,PID,#11,float 32,R/W +0x0A8A,2699,FICA6101.Deviation,Deviation,PID,#11,float 32,R +0x0A8E,2703,FICA6101.ManualReset,Manual Reset,PID,#11,float 32,R/W +0x0A90,2705,FICA6101.FeedforwardGain,Feed forward Gain,PID,#11,float 32,R/W +0x0A92,2707,FICA6101.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#11,float 32,R/W +0x0A94,2709,FICA6101.FurnaceFactor,Furnace Factor,PID,#11,float 32,R/W +0x0A96,2711,FICA6101.PercentHydrogen,Percent Hydrogen,PID,#11,float 32,R/W +0x0A98,2713,FICA6101.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#11,float 32,R/W +0x0A9A,2715,FICA6101.CarbPotDewPt,Carb Pot Dew Pt,PID,#11,float 32,R/W +0x0A9C,2717,FICA6101.3PosStepMotorTime,3 Pos Step Motor Time,PID,#11,float 32,R/W +0x0AF7,2808,FICA6101.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#11,unsigned 16,R/W +0x0AF8,2809,FICA6101.DemandTuneReq,Demand Tune Req,PID,#11,unsigned 16,R/W +0x0AF9,2810,FICA6101.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#11,unsigned 16,R/W +0x0AFA,2811,FICA6101.AutoManState,Auto Man State,PID,#11,unsigned 16,R/W +0x0AFB,2812,FICA6101.LSPSelectState,LSP Select State,PID,#11,unsigned 16,R/W +0x0AFC,2813,FICA6101.RemLocSPState,Rem Loc SP State,PID,#11,unsigned 16,R/W +0x0AFD,2814,FICA6101.TuneSetState,Tune Set State,PID,#11,unsigned 16,R/W +0x0AFE,2815,FICA6101.LoopStatusRegister,Loop Status Register,PID,#11,unsigned 16,R + , ,FICA6113,,PID,#12,, +0x0B40,2881,FICA6113.PV,PV,PID,#12,float 32,R +0x0B42,2883,FICA6113.RSP_SP2,RSP_SP2,PID,#12,float 32,R/W +0x0B44,2885,FICA6113.WSP,WSP,PID,#12,float 32,R/W +0x0B46,2887,FICA6113.Output,Output,PID,#12,float 32,R/W +0x0B4A,2891,FICA6113.CarbonPotTemp,Carbon Pot Temp,PID,#12,float 32,R +0x0B4C,2893,FICA6113.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#12,float 32,R/W +0x0B4E,2895,FICA6113.Direction,Direction,PID,#12,float 32,R +0x0B50,2897,FICA6113.Reset1,Reset 1,PID,#12,float 32,R/W +0x0B52,2899,FICA6113.Rate1,Rate 1,PID,#12,float 32,R/W +0x0B54,2901,FICA6113.ScanCycleTime,Scan Cycle Time,PID,#12,float 32,R +0x0B56,2903,FICA6113.PV_LowRange,PV_Low Range,PID,#12,float 32,R +0x0B58,2905,FICA6113.PV_HighRange,PV_High Range,PID,#12,float 32,R +0x0B5A,2907,FICA6113.Alarm1SP1,Alarm 1 SP1,PID,#12,float 32,R/W +0x0B5C,2909,FICA6113.Alarm1SP2,Alarm 1 SP2,PID,#12,float 32,R/W +0x0B60,2913,FICA6113.Gain2_PropBand2,Gain2_Prop Band 2,PID,#12,float 32,R/W +0x0B62,2915,FICA6113.3PosStepDeadband,3 Pos Step Deadband,PID,#12,float 32,R/W +0x0B64,2917,FICA6113.Reset2,Reset 2,PID,#12,float 32,R/W +0x0B66,2919,FICA6113.Rate2,Rate 2,PID,#12,float 32,R/W +0x0B68,2921,FICA6113.CycleTime_Scan,Cycle Time_Scan,PID,#12,float 32,R +0x0B6A,2923,FICA6113.LSP1,LSP1,PID,#12,float 32,R/W +0x0B6C,2925,FICA6113.LSP2,LSP2,PID,#12,float 32,R/W +0x0B6E,2927,FICA6113.Alarm2SP1,Alarm 2 SP1,PID,#12,float 32,R/W +0x0B70,2929,FICA6113.Alarm2SP2,Alarm 2 SP2,PID,#12,float 32,R/W +0x0B74,2933,FICA6113.SP_LowLimit,SP_Low Limit,PID,#12,float 32,R/W +0x0B76,2935,FICA6113.SP_HighLimit,SP_High Limit,PID,#12,float 32,R/W +0x0B7A,2939,FICA6113.Output_LowLimit,Output_Low Limit,PID,#12,float 32,R/W +0x0B7C,2941,FICA6113.Output_HighLimit,Output_High Limit,PID,#12,float 32,R/W +0x0B7E,2943,FICA6113.OutputB,Output (B),PID,#12,float 32,R/W +0x0B86,2951,FICA6113.Ratio,Ratio,PID,#12,float 32,R/W +0x0B88,2953,FICA6113.Bias,Bias,PID,#12,float 32,R/W +0x0B8A,2955,FICA6113.Deviation,Deviation,PID,#12,float 32,R +0x0B8E,2959,FICA6113.ManualReset,Manual Reset,PID,#12,float 32,R/W +0x0B90,2961,FICA6113.FeedforwardGain,Feed forward Gain,PID,#12,float 32,R/W +0x0B92,2963,FICA6113.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#12,float 32,R/W +0x0B94,2965,FICA6113.FurnaceFactor,Furnace Factor,PID,#12,float 32,R/W +0x0B96,2967,FICA6113.PercentHydrogen,Percent Hydrogen,PID,#12,float 32,R/W +0x0B98,2969,FICA6113.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#12,float 32,R/W +0x0B9A,2971,FICA6113.CarbPotDewPt,Carb Pot Dew Pt,PID,#12,float 32,R/W +0x0B9C,2973,FICA6113.3PosStepMotorTime,3 Pos Step Motor Time,PID,#12,float 32,R/W +0x0BF7,3064,FICA6113.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#12,unsigned 16,R/W +0x0BF8,3065,FICA6113.DemandTuneReq,Demand Tune Req,PID,#12,unsigned 16,R/W +0x0BF9,3066,FICA6113.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#12,unsigned 16,R/W +0x0BFA,3067,FICA6113.AutoManState,Auto Man State,PID,#12,unsigned 16,R/W +0x0BFB,3068,FICA6113.LSPSelectState,LSP Select State,PID,#12,unsigned 16,R/W +0x0BFC,3069,FICA6113.RemLocSPState,Rem Loc SP State,PID,#12,unsigned 16,R/W +0x0BFD,3070,FICA6113.TuneSetState,Tune Set State,PID,#12,unsigned 16,R/W +0x0BFE,3071,FICA6113.LoopStatusRegister,Loop Status Register,PID,#12,unsigned 16,R + , ,FICA6114,,PID,#13,, +0x0C40,3137,FICA6114.PV,PV,PID,#13,float 32,R +0x0C42,3139,FICA6114.RSP_SP2,RSP_SP2,PID,#13,float 32,R/W +0x0C44,3141,FICA6114.WSP,WSP,PID,#13,float 32,R/W +0x0C46,3143,FICA6114.Output,Output,PID,#13,float 32,R/W +0x0C4A,3147,FICA6114.CarbonPotTemp,Carbon Pot Temp,PID,#13,float 32,R +0x0C4C,3149,FICA6114.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#13,float 32,R/W +0x0C4E,3151,FICA6114.Direction,Direction,PID,#13,float 32,R +0x0C50,3153,FICA6114.Reset1,Reset 1,PID,#13,float 32,R/W +0x0C52,3155,FICA6114.Rate1,Rate 1,PID,#13,float 32,R/W +0x0C54,3157,FICA6114.ScanCycleTime,Scan Cycle Time,PID,#13,float 32,R +0x0C56,3159,FICA6114.PV_LowRange,PV_Low Range,PID,#13,float 32,R +0x0C58,3161,FICA6114.PV_HighRange,PV_High Range,PID,#13,float 32,R +0x0C5A,3163,FICA6114.Alarm1SP1,Alarm 1 SP1,PID,#13,float 32,R/W +0x0C5C,3165,FICA6114.Alarm1SP2,Alarm 1 SP2,PID,#13,float 32,R/W +0x0C60,3169,FICA6114.Gain2_PropBand2,Gain2_Prop Band 2,PID,#13,float 32,R/W +0x0C62,3171,FICA6114.3PosStepDeadband,3 Pos Step Deadband,PID,#13,float 32,R/W +0x0C64,3173,FICA6114.Reset2,Reset 2,PID,#13,float 32,R/W +0x0C66,3175,FICA6114.Rate2,Rate 2,PID,#13,float 32,R/W +0x0C68,3177,FICA6114.CycleTime_Scan,Cycle Time_Scan,PID,#13,float 32,R +0x0C6A,3179,FICA6114.LSP1,LSP1,PID,#13,float 32,R/W +0x0C6C,3181,FICA6114.LSP2,LSP2,PID,#13,float 32,R/W +0x0C6E,3183,FICA6114.Alarm2SP1,Alarm 2 SP1,PID,#13,float 32,R/W +0x0C70,3185,FICA6114.Alarm2SP2,Alarm 2 SP2,PID,#13,float 32,R/W +0x0C74,3189,FICA6114.SP_LowLimit,SP_Low Limit,PID,#13,float 32,R/W +0x0C76,3191,FICA6114.SP_HighLimit,SP_High Limit,PID,#13,float 32,R/W +0x0C7A,3195,FICA6114.Output_LowLimit,Output_Low Limit,PID,#13,float 32,R/W +0x0C7C,3197,FICA6114.Output_HighLimit,Output_High Limit,PID,#13,float 32,R/W +0x0C7E,3199,FICA6114.OutputB,Output (B),PID,#13,float 32,R/W +0x0C86,3207,FICA6114.Ratio,Ratio,PID,#13,float 32,R/W +0x0C88,3209,FICA6114.Bias,Bias,PID,#13,float 32,R/W +0x0C8A,3211,FICA6114.Deviation,Deviation,PID,#13,float 32,R +0x0C8E,3215,FICA6114.ManualReset,Manual Reset,PID,#13,float 32,R/W +0x0C90,3217,FICA6114.FeedforwardGain,Feed forward Gain,PID,#13,float 32,R/W +0x0C92,3219,FICA6114.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#13,float 32,R/W +0x0C94,3221,FICA6114.FurnaceFactor,Furnace Factor,PID,#13,float 32,R/W +0x0C96,3223,FICA6114.PercentHydrogen,Percent Hydrogen,PID,#13,float 32,R/W +0x0C98,3225,FICA6114.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#13,float 32,R/W +0x0C9A,3227,FICA6114.CarbPotDewPt,Carb Pot Dew Pt,PID,#13,float 32,R/W +0x0C9C,3229,FICA6114.3PosStepMotorTime,3 Pos Step Motor Time,PID,#13,float 32,R/W +0x0CF7,3320,FICA6114.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#13,unsigned 16,R/W +0x0CF8,3321,FICA6114.DemandTuneReq,Demand Tune Req,PID,#13,unsigned 16,R/W +0x0CF9,3322,FICA6114.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#13,unsigned 16,R/W +0x0CFA,3323,FICA6114.AutoManState,Auto Man State,PID,#13,unsigned 16,R/W +0x0CFB,3324,FICA6114.LSPSelectState,LSP Select State,PID,#13,unsigned 16,R/W +0x0CFC,3325,FICA6114.RemLocSPState,Rem Loc SP State,PID,#13,unsigned 16,R/W +0x0CFD,3326,FICA6114.TuneSetState,Tune Set State,PID,#13,unsigned 16,R/W +0x0CFE,3327,FICA6114.LoopStatusRegister,Loop Status Register,PID,#13,unsigned 16,R + , ,FICA6116,,PID,#14,, +0x0D40,3393,FICA6116.PV,PV,PID,#14,float 32,R +0x0D42,3395,FICA6116.RSP_SP2,RSP_SP2,PID,#14,float 32,R/W +0x0D44,3397,FICA6116.WSP,WSP,PID,#14,float 32,R/W +0x0D46,3399,FICA6116.Output,Output,PID,#14,float 32,R/W +0x0D4A,3403,FICA6116.CarbonPotTemp,Carbon Pot Temp,PID,#14,float 32,R +0x0D4C,3405,FICA6116.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#14,float 32,R/W +0x0D4E,3407,FICA6116.Direction,Direction,PID,#14,float 32,R +0x0D50,3409,FICA6116.Reset1,Reset 1,PID,#14,float 32,R/W +0x0D52,3411,FICA6116.Rate1,Rate 1,PID,#14,float 32,R/W +0x0D54,3413,FICA6116.ScanCycleTime,Scan Cycle Time,PID,#14,float 32,R +0x0D56,3415,FICA6116.PV_LowRange,PV_Low Range,PID,#14,float 32,R +0x0D58,3417,FICA6116.PV_HighRange,PV_High Range,PID,#14,float 32,R +0x0D5A,3419,FICA6116.Alarm1SP1,Alarm 1 SP1,PID,#14,float 32,R/W +0x0D5C,3421,FICA6116.Alarm1SP2,Alarm 1 SP2,PID,#14,float 32,R/W +0x0D60,3425,FICA6116.Gain2_PropBand2,Gain2_Prop Band 2,PID,#14,float 32,R/W +0x0D62,3427,FICA6116.3PosStepDeadband,3 Pos Step Deadband,PID,#14,float 32,R/W +0x0D64,3429,FICA6116.Reset2,Reset 2,PID,#14,float 32,R/W +0x0D66,3431,FICA6116.Rate2,Rate 2,PID,#14,float 32,R/W +0x0D68,3433,FICA6116.CycleTime_Scan,Cycle Time_Scan,PID,#14,float 32,R +0x0D6A,3435,FICA6116.LSP1,LSP1,PID,#14,float 32,R/W +0x0D6C,3437,FICA6116.LSP2,LSP2,PID,#14,float 32,R/W +0x0D6E,3439,FICA6116.Alarm2SP1,Alarm 2 SP1,PID,#14,float 32,R/W +0x0D70,3441,FICA6116.Alarm2SP2,Alarm 2 SP2,PID,#14,float 32,R/W +0x0D74,3445,FICA6116.SP_LowLimit,SP_Low Limit,PID,#14,float 32,R/W +0x0D76,3447,FICA6116.SP_HighLimit,SP_High Limit,PID,#14,float 32,R/W +0x0D7A,3451,FICA6116.Output_LowLimit,Output_Low Limit,PID,#14,float 32,R/W +0x0D7C,3453,FICA6116.Output_HighLimit,Output_High Limit,PID,#14,float 32,R/W +0x0D7E,3455,FICA6116.OutputB,Output (B),PID,#14,float 32,R/W +0x0D86,3463,FICA6116.Ratio,Ratio,PID,#14,float 32,R/W +0x0D88,3465,FICA6116.Bias,Bias,PID,#14,float 32,R/W +0x0D8A,3467,FICA6116.Deviation,Deviation,PID,#14,float 32,R +0x0D8E,3471,FICA6116.ManualReset,Manual Reset,PID,#14,float 32,R/W +0x0D90,3473,FICA6116.FeedforwardGain,Feed forward Gain,PID,#14,float 32,R/W +0x0D92,3475,FICA6116.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#14,float 32,R/W +0x0D94,3477,FICA6116.FurnaceFactor,Furnace Factor,PID,#14,float 32,R/W +0x0D96,3479,FICA6116.PercentHydrogen,Percent Hydrogen,PID,#14,float 32,R/W +0x0D98,3481,FICA6116.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#14,float 32,R/W +0x0D9A,3483,FICA6116.CarbPotDewPt,Carb Pot Dew Pt,PID,#14,float 32,R/W +0x0D9C,3485,FICA6116.3PosStepMotorTime,3 Pos Step Motor Time,PID,#14,float 32,R/W +0x0DF7,3576,FICA6116.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#14,unsigned 16,R/W +0x0DF8,3577,FICA6116.DemandTuneReq,Demand Tune Req,PID,#14,unsigned 16,R/W +0x0DF9,3578,FICA6116.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#14,unsigned 16,R/W +0x0DFA,3579,FICA6116.AutoManState,Auto Man State,PID,#14,unsigned 16,R/W +0x0DFB,3580,FICA6116.LSPSelectState,LSP Select State,PID,#14,unsigned 16,R/W +0x0DFC,3581,FICA6116.RemLocSPState,Rem Loc SP State,PID,#14,unsigned 16,R/W +0x0DFD,3582,FICA6116.TuneSetState,Tune Set State,PID,#14,unsigned 16,R/W +0x0DFE,3583,FICA6116.LoopStatusRegister,Loop Status Register,PID,#14,unsigned 16,R + , ,FICA6118,,PID,#15,, +0x0E40,3649,FICA6118.PV,PV,PID,#15,float 32,R +0x0E42,3651,FICA6118.RSP_SP2,RSP_SP2,PID,#15,float 32,R/W +0x0E44,3653,FICA6118.WSP,WSP,PID,#15,float 32,R/W +0x0E46,3655,FICA6118.Output,Output,PID,#15,float 32,R/W +0x0E4A,3659,FICA6118.CarbonPotTemp,Carbon Pot Temp,PID,#15,float 32,R +0x0E4C,3661,FICA6118.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#15,float 32,R/W +0x0E4E,3663,FICA6118.Direction,Direction,PID,#15,float 32,R +0x0E50,3665,FICA6118.Reset1,Reset 1,PID,#15,float 32,R/W +0x0E52,3667,FICA6118.Rate1,Rate 1,PID,#15,float 32,R/W +0x0E54,3669,FICA6118.ScanCycleTime,Scan Cycle Time,PID,#15,float 32,R +0x0E56,3671,FICA6118.PV_LowRange,PV_Low Range,PID,#15,float 32,R +0x0E58,3673,FICA6118.PV_HighRange,PV_High Range,PID,#15,float 32,R +0x0E5A,3675,FICA6118.Alarm1SP1,Alarm 1 SP1,PID,#15,float 32,R/W +0x0E5C,3677,FICA6118.Alarm1SP2,Alarm 1 SP2,PID,#15,float 32,R/W +0x0E60,3681,FICA6118.Gain2_PropBand2,Gain2_Prop Band 2,PID,#15,float 32,R/W +0x0E62,3683,FICA6118.3PosStepDeadband,3 Pos Step Deadband,PID,#15,float 32,R/W +0x0E64,3685,FICA6118.Reset2,Reset 2,PID,#15,float 32,R/W +0x0E66,3687,FICA6118.Rate2,Rate 2,PID,#15,float 32,R/W +0x0E68,3689,FICA6118.CycleTime_Scan,Cycle Time_Scan,PID,#15,float 32,R +0x0E6A,3691,FICA6118.LSP1,LSP1,PID,#15,float 32,R/W +0x0E6C,3693,FICA6118.LSP2,LSP2,PID,#15,float 32,R/W +0x0E6E,3695,FICA6118.Alarm2SP1,Alarm 2 SP1,PID,#15,float 32,R/W +0x0E70,3697,FICA6118.Alarm2SP2,Alarm 2 SP2,PID,#15,float 32,R/W +0x0E74,3701,FICA6118.SP_LowLimit,SP_Low Limit,PID,#15,float 32,R/W +0x0E76,3703,FICA6118.SP_HighLimit,SP_High Limit,PID,#15,float 32,R/W +0x0E7A,3707,FICA6118.Output_LowLimit,Output_Low Limit,PID,#15,float 32,R/W +0x0E7C,3709,FICA6118.Output_HighLimit,Output_High Limit,PID,#15,float 32,R/W +0x0E7E,3711,FICA6118.OutputB,Output (B),PID,#15,float 32,R/W +0x0E86,3719,FICA6118.Ratio,Ratio,PID,#15,float 32,R/W +0x0E88,3721,FICA6118.Bias,Bias,PID,#15,float 32,R/W +0x0E8A,3723,FICA6118.Deviation,Deviation,PID,#15,float 32,R +0x0E8E,3727,FICA6118.ManualReset,Manual Reset,PID,#15,float 32,R/W +0x0E90,3729,FICA6118.FeedforwardGain,Feed forward Gain,PID,#15,float 32,R/W +0x0E92,3731,FICA6118.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#15,float 32,R/W +0x0E94,3733,FICA6118.FurnaceFactor,Furnace Factor,PID,#15,float 32,R/W +0x0E96,3735,FICA6118.PercentHydrogen,Percent Hydrogen,PID,#15,float 32,R/W +0x0E98,3737,FICA6118.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#15,float 32,R/W +0x0E9A,3739,FICA6118.CarbPotDewPt,Carb Pot Dew Pt,PID,#15,float 32,R/W +0x0E9C,3741,FICA6118.3PosStepMotorTime,3 Pos Step Motor Time,PID,#15,float 32,R/W +0x0EF7,3832,FICA6118.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#15,unsigned 16,R/W +0x0EF8,3833,FICA6118.DemandTuneReq,Demand Tune Req,PID,#15,unsigned 16,R/W +0x0EF9,3834,FICA6118.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#15,unsigned 16,R/W +0x0EFA,3835,FICA6118.AutoManState,Auto Man State,PID,#15,unsigned 16,R/W +0x0EFB,3836,FICA6118.LSPSelectState,LSP Select State,PID,#15,unsigned 16,R/W +0x0EFC,3837,FICA6118.RemLocSPState,Rem Loc SP State,PID,#15,unsigned 16,R/W +0x0EFD,3838,FICA6118.TuneSetState,Tune Set State,PID,#15,unsigned 16,R/W +0x0EFE,3839,FICA6118.LoopStatusRegister,Loop Status Register,PID,#15,unsigned 16,R + , ,LICA6128,,PID,#16,, +0x0F40,3905,LICA6128.PV,PV,PID,#16,float 32,R +0x0F42,3907,LICA6128.RSP_SP2,RSP_SP2,PID,#16,float 32,R/W +0x0F44,3909,LICA6128.WSP,WSP,PID,#16,float 32,R/W +0x0F46,3911,LICA6128.Output,Output,PID,#16,float 32,R/W +0x0F4A,3915,LICA6128.CarbonPotTemp,Carbon Pot Temp,PID,#16,float 32,R +0x0F4C,3917,LICA6128.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#16,float 32,R/W +0x0F4E,3919,LICA6128.Direction,Direction,PID,#16,float 32,R +0x0F50,3921,LICA6128.Reset1,Reset 1,PID,#16,float 32,R/W +0x0F52,3923,LICA6128.Rate1,Rate 1,PID,#16,float 32,R/W +0x0F54,3925,LICA6128.ScanCycleTime,Scan Cycle Time,PID,#16,float 32,R +0x0F56,3927,LICA6128.PV_LowRange,PV_Low Range,PID,#16,float 32,R +0x0F58,3929,LICA6128.PV_HighRange,PV_High Range,PID,#16,float 32,R +0x0F5A,3931,LICA6128.Alarm1SP1,Alarm 1 SP1,PID,#16,float 32,R/W +0x0F5C,3933,LICA6128.Alarm1SP2,Alarm 1 SP2,PID,#16,float 32,R/W +0x0F60,3937,LICA6128.Gain2_PropBand2,Gain2_Prop Band 2,PID,#16,float 32,R/W +0x0F62,3939,LICA6128.3PosStepDeadband,3 Pos Step Deadband,PID,#16,float 32,R/W +0x0F64,3941,LICA6128.Reset2,Reset 2,PID,#16,float 32,R/W +0x0F66,3943,LICA6128.Rate2,Rate 2,PID,#16,float 32,R/W +0x0F68,3945,LICA6128.CycleTime_Scan,Cycle Time_Scan,PID,#16,float 32,R +0x0F6A,3947,LICA6128.LSP1,LSP1,PID,#16,float 32,R/W +0x0F6C,3949,LICA6128.LSP2,LSP2,PID,#16,float 32,R/W +0x0F6E,3951,LICA6128.Alarm2SP1,Alarm 2 SP1,PID,#16,float 32,R/W +0x0F70,3953,LICA6128.Alarm2SP2,Alarm 2 SP2,PID,#16,float 32,R/W +0x0F74,3957,LICA6128.SP_LowLimit,SP_Low Limit,PID,#16,float 32,R/W +0x0F76,3959,LICA6128.SP_HighLimit,SP_High Limit,PID,#16,float 32,R/W +0x0F7A,3963,LICA6128.Output_LowLimit,Output_Low Limit,PID,#16,float 32,R/W +0x0F7C,3965,LICA6128.Output_HighLimit,Output_High Limit,PID,#16,float 32,R/W +0x0F7E,3967,LICA6128.OutputB,Output (B),PID,#16,float 32,R/W +0x0F86,3975,LICA6128.Ratio,Ratio,PID,#16,float 32,R/W +0x0F88,3977,LICA6128.Bias,Bias,PID,#16,float 32,R/W +0x0F8A,3979,LICA6128.Deviation,Deviation,PID,#16,float 32,R +0x0F8E,3983,LICA6128.ManualReset,Manual Reset,PID,#16,float 32,R/W +0x0F90,3985,LICA6128.FeedforwardGain,Feed forward Gain,PID,#16,float 32,R/W +0x0F92,3987,LICA6128.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#16,float 32,R/W +0x0F94,3989,LICA6128.FurnaceFactor,Furnace Factor,PID,#16,float 32,R/W +0x0F96,3991,LICA6128.PercentHydrogen,Percent Hydrogen,PID,#16,float 32,R/W +0x0F98,3993,LICA6128.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#16,float 32,R/W +0x0F9A,3995,LICA6128.CarbPotDewPt,Carb Pot Dew Pt,PID,#16,float 32,R/W +0x0F9C,3997,LICA6128.3PosStepMotorTime,3 Pos Step Motor Time,PID,#16,float 32,R/W +0x0FF7,4088,LICA6128.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#16,unsigned 16,R/W +0x0FF8,4089,LICA6128.DemandTuneReq,Demand Tune Req,PID,#16,unsigned 16,R/W +0x0FF9,4090,LICA6128.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#16,unsigned 16,R/W +0x0FFA,4091,LICA6128.AutoManState,Auto Man State,PID,#16,unsigned 16,R/W +0x0FFB,4092,LICA6128.LSPSelectState,LSP Select State,PID,#16,unsigned 16,R/W +0x0FFC,4093,LICA6128.RemLocSPState,Rem Loc SP State,PID,#16,unsigned 16,R/W +0x0FFD,4094,LICA6128.TuneSetState,Tune Set State,PID,#16,unsigned 16,R/W +0x0FFE,4095,LICA6128.LoopStatusRegister,Loop Status Register,PID,#16,unsigned 16,R + , ,TICA6211,,PID,#17,, +0x1040,4161,TICA6211.PV,PV,PID,#17,float 32,R +0x1042,4163,TICA6211.RSP_SP2,RSP_SP2,PID,#17,float 32,R/W +0x1044,4165,TICA6211.WSP,WSP,PID,#17,float 32,R/W +0x1046,4167,TICA6211.Output,Output,PID,#17,float 32,R/W +0x104A,4171,TICA6211.CarbonPotTemp,Carbon Pot Temp,PID,#17,float 32,R +0x104C,4173,TICA6211.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#17,float 32,R/W +0x104E,4175,TICA6211.Direction,Direction,PID,#17,float 32,R +0x1050,4177,TICA6211.Reset1,Reset 1,PID,#17,float 32,R/W +0x1052,4179,TICA6211.Rate1,Rate 1,PID,#17,float 32,R/W +0x1054,4181,TICA6211.ScanCycleTime,Scan Cycle Time,PID,#17,float 32,R +0x1056,4183,TICA6211.PV_LowRange,PV_Low Range,PID,#17,float 32,R +0x1058,4185,TICA6211.PV_HighRange,PV_High Range,PID,#17,float 32,R +0x105A,4187,TICA6211.Alarm1SP1,Alarm 1 SP1,PID,#17,float 32,R/W +0x105C,4189,TICA6211.Alarm1SP2,Alarm 1 SP2,PID,#17,float 32,R/W +0x1060,4193,TICA6211.Gain2_PropBand2,Gain2_Prop Band 2,PID,#17,float 32,R/W +0x1062,4195,TICA6211.3PosStepDeadband,3 Pos Step Deadband,PID,#17,float 32,R/W +0x1064,4197,TICA6211.Reset2,Reset 2,PID,#17,float 32,R/W +0x1066,4199,TICA6211.Rate2,Rate 2,PID,#17,float 32,R/W +0x1068,4201,TICA6211.CycleTime_Scan,Cycle Time_Scan,PID,#17,float 32,R +0x106A,4203,TICA6211.LSP1,LSP1,PID,#17,float 32,R/W +0x106C,4205,TICA6211.LSP2,LSP2,PID,#17,float 32,R/W +0x106E,4207,TICA6211.Alarm2SP1,Alarm 2 SP1,PID,#17,float 32,R/W +0x1070,4209,TICA6211.Alarm2SP2,Alarm 2 SP2,PID,#17,float 32,R/W +0x1074,4213,TICA6211.SP_LowLimit,SP_Low Limit,PID,#17,float 32,R/W +0x1076,4215,TICA6211.SP_HighLimit,SP_High Limit,PID,#17,float 32,R/W +0x107A,4219,TICA6211.Output_LowLimit,Output_Low Limit,PID,#17,float 32,R/W +0x107C,4221,TICA6211.Output_HighLimit,Output_High Limit,PID,#17,float 32,R/W +0x107E,4223,TICA6211.OutputB,Output (B),PID,#17,float 32,R/W +0x1086,4231,TICA6211.Ratio,Ratio,PID,#17,float 32,R/W +0x1088,4233,TICA6211.Bias,Bias,PID,#17,float 32,R/W +0x108A,4235,TICA6211.Deviation,Deviation,PID,#17,float 32,R +0x108E,4239,TICA6211.ManualReset,Manual Reset,PID,#17,float 32,R/W +0x1090,4241,TICA6211.FeedforwardGain,Feed forward Gain,PID,#17,float 32,R/W +0x1092,4243,TICA6211.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#17,float 32,R/W +0x1094,4245,TICA6211.FurnaceFactor,Furnace Factor,PID,#17,float 32,R/W +0x1096,4247,TICA6211.PercentHydrogen,Percent Hydrogen,PID,#17,float 32,R/W +0x1098,4249,TICA6211.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#17,float 32,R/W +0x109A,4251,TICA6211.CarbPotDewPt,Carb Pot Dew Pt,PID,#17,float 32,R/W +0x109C,4253,TICA6211.3PosStepMotorTime,3 Pos Step Motor Time,PID,#17,float 32,R/W +0x10F7,4344,TICA6211.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#17,unsigned 16,R/W +0x10F8,4345,TICA6211.DemandTuneReq,Demand Tune Req,PID,#17,unsigned 16,R/W +0x10F9,4346,TICA6211.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#17,unsigned 16,R/W +0x10FA,4347,TICA6211.AutoManState,Auto Man State,PID,#17,unsigned 16,R/W +0x10FB,4348,TICA6211.LSPSelectState,LSP Select State,PID,#17,unsigned 16,R/W +0x10FC,4349,TICA6211.RemLocSPState,Rem Loc SP State,PID,#17,unsigned 16,R/W +0x10FD,4350,TICA6211.TuneSetState,Tune Set State,PID,#17,unsigned 16,R/W +0x10FE,4351,TICA6211.LoopStatusRegister,Loop Status Register,PID,#17,unsigned 16,R + , ,PICA6211,,PID,#18,, +0x1140,4417,PICA6211.PV,PV,PID,#18,float 32,R +0x1142,4419,PICA6211.RSP_SP2,RSP_SP2,PID,#18,float 32,R/W +0x1144,4421,PICA6211.WSP,WSP,PID,#18,float 32,R/W +0x1146,4423,PICA6211.Output,Output,PID,#18,float 32,R/W +0x114A,4427,PICA6211.CarbonPotTemp,Carbon Pot Temp,PID,#18,float 32,R +0x114C,4429,PICA6211.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#18,float 32,R/W +0x114E,4431,PICA6211.Direction,Direction,PID,#18,float 32,R +0x1150,4433,PICA6211.Reset1,Reset 1,PID,#18,float 32,R/W +0x1152,4435,PICA6211.Rate1,Rate 1,PID,#18,float 32,R/W +0x1154,4437,PICA6211.ScanCycleTime,Scan Cycle Time,PID,#18,float 32,R +0x1156,4439,PICA6211.PV_LowRange,PV_Low Range,PID,#18,float 32,R +0x1158,4441,PICA6211.PV_HighRange,PV_High Range,PID,#18,float 32,R +0x115A,4443,PICA6211.Alarm1SP1,Alarm 1 SP1,PID,#18,float 32,R/W +0x115C,4445,PICA6211.Alarm1SP2,Alarm 1 SP2,PID,#18,float 32,R/W +0x1160,4449,PICA6211.Gain2_PropBand2,Gain2_Prop Band 2,PID,#18,float 32,R/W +0x1162,4451,PICA6211.3PosStepDeadband,3 Pos Step Deadband,PID,#18,float 32,R/W +0x1164,4453,PICA6211.Reset2,Reset 2,PID,#18,float 32,R/W +0x1166,4455,PICA6211.Rate2,Rate 2,PID,#18,float 32,R/W +0x1168,4457,PICA6211.CycleTime_Scan,Cycle Time_Scan,PID,#18,float 32,R +0x116A,4459,PICA6211.LSP1,LSP1,PID,#18,float 32,R/W +0x116C,4461,PICA6211.LSP2,LSP2,PID,#18,float 32,R/W +0x116E,4463,PICA6211.Alarm2SP1,Alarm 2 SP1,PID,#18,float 32,R/W +0x1170,4465,PICA6211.Alarm2SP2,Alarm 2 SP2,PID,#18,float 32,R/W +0x1174,4469,PICA6211.SP_LowLimit,SP_Low Limit,PID,#18,float 32,R/W +0x1176,4471,PICA6211.SP_HighLimit,SP_High Limit,PID,#18,float 32,R/W +0x117A,4475,PICA6211.Output_LowLimit,Output_Low Limit,PID,#18,float 32,R/W +0x117C,4477,PICA6211.Output_HighLimit,Output_High Limit,PID,#18,float 32,R/W +0x117E,4479,PICA6211.OutputB,Output (B),PID,#18,float 32,R/W +0x1186,4487,PICA6211.Ratio,Ratio,PID,#18,float 32,R/W +0x1188,4489,PICA6211.Bias,Bias,PID,#18,float 32,R/W +0x118A,4491,PICA6211.Deviation,Deviation,PID,#18,float 32,R +0x118E,4495,PICA6211.ManualReset,Manual Reset,PID,#18,float 32,R/W +0x1190,4497,PICA6211.FeedforwardGain,Feed forward Gain,PID,#18,float 32,R/W +0x1192,4499,PICA6211.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#18,float 32,R/W +0x1194,4501,PICA6211.FurnaceFactor,Furnace Factor,PID,#18,float 32,R/W +0x1196,4503,PICA6211.PercentHydrogen,Percent Hydrogen,PID,#18,float 32,R/W +0x1198,4505,PICA6211.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#18,float 32,R/W +0x119A,4507,PICA6211.CarbPotDewPt,Carb Pot Dew Pt,PID,#18,float 32,R/W +0x119C,4509,PICA6211.3PosStepMotorTime,3 Pos Step Motor Time,PID,#18,float 32,R/W +0x11F7,4600,PICA6211.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#18,unsigned 16,R/W +0x11F8,4601,PICA6211.DemandTuneReq,Demand Tune Req,PID,#18,unsigned 16,R/W +0x11F9,4602,PICA6211.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#18,unsigned 16,R/W +0x11FA,4603,PICA6211.AutoManState,Auto Man State,PID,#18,unsigned 16,R/W +0x11FB,4604,PICA6211.LSPSelectState,LSP Select State,PID,#18,unsigned 16,R/W +0x11FC,4605,PICA6211.RemLocSPState,Rem Loc SP State,PID,#18,unsigned 16,R/W +0x11FD,4606,PICA6211.TuneSetState,Tune Set State,PID,#18,unsigned 16,R/W +0x11FE,4607,PICA6211.LoopStatusRegister,Loop Status Register,PID,#18,unsigned 16,R + , ,FICA6201,,PID,#19,, +0x1240,4673,FICA6201.PV,PV,PID,#19,float 32,R +0x1242,4675,FICA6201.RSP_SP2,RSP_SP2,PID,#19,float 32,R/W +0x1244,4677,FICA6201.WSP,WSP,PID,#19,float 32,R/W +0x1246,4679,FICA6201.Output,Output,PID,#19,float 32,R/W +0x124A,4683,FICA6201.CarbonPotTemp,Carbon Pot Temp,PID,#19,float 32,R +0x124C,4685,FICA6201.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#19,float 32,R/W +0x124E,4687,FICA6201.Direction,Direction,PID,#19,float 32,R +0x1250,4689,FICA6201.Reset1,Reset 1,PID,#19,float 32,R/W +0x1252,4691,FICA6201.Rate1,Rate 1,PID,#19,float 32,R/W +0x1254,4693,FICA6201.ScanCycleTime,Scan Cycle Time,PID,#19,float 32,R +0x1256,4695,FICA6201.PV_LowRange,PV_Low Range,PID,#19,float 32,R +0x1258,4697,FICA6201.PV_HighRange,PV_High Range,PID,#19,float 32,R +0x125A,4699,FICA6201.Alarm1SP1,Alarm 1 SP1,PID,#19,float 32,R/W +0x125C,4701,FICA6201.Alarm1SP2,Alarm 1 SP2,PID,#19,float 32,R/W +0x1260,4705,FICA6201.Gain2_PropBand2,Gain2_Prop Band 2,PID,#19,float 32,R/W +0x1262,4707,FICA6201.3PosStepDeadband,3 Pos Step Deadband,PID,#19,float 32,R/W +0x1264,4709,FICA6201.Reset2,Reset 2,PID,#19,float 32,R/W +0x1266,4711,FICA6201.Rate2,Rate 2,PID,#19,float 32,R/W +0x1268,4713,FICA6201.CycleTime_Scan,Cycle Time_Scan,PID,#19,float 32,R +0x126A,4715,FICA6201.LSP1,LSP1,PID,#19,float 32,R/W +0x126C,4717,FICA6201.LSP2,LSP2,PID,#19,float 32,R/W +0x126E,4719,FICA6201.Alarm2SP1,Alarm 2 SP1,PID,#19,float 32,R/W +0x1270,4721,FICA6201.Alarm2SP2,Alarm 2 SP2,PID,#19,float 32,R/W +0x1274,4725,FICA6201.SP_LowLimit,SP_Low Limit,PID,#19,float 32,R/W +0x1276,4727,FICA6201.SP_HighLimit,SP_High Limit,PID,#19,float 32,R/W +0x127A,4731,FICA6201.Output_LowLimit,Output_Low Limit,PID,#19,float 32,R/W +0x127C,4733,FICA6201.Output_HighLimit,Output_High Limit,PID,#19,float 32,R/W +0x127E,4735,FICA6201.OutputB,Output (B),PID,#19,float 32,R/W +0x1286,4743,FICA6201.Ratio,Ratio,PID,#19,float 32,R/W +0x1288,4745,FICA6201.Bias,Bias,PID,#19,float 32,R/W +0x128A,4747,FICA6201.Deviation,Deviation,PID,#19,float 32,R +0x128E,4751,FICA6201.ManualReset,Manual Reset,PID,#19,float 32,R/W +0x1290,4753,FICA6201.FeedforwardGain,Feed forward Gain,PID,#19,float 32,R/W +0x1292,4755,FICA6201.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#19,float 32,R/W +0x1294,4757,FICA6201.FurnaceFactor,Furnace Factor,PID,#19,float 32,R/W +0x1296,4759,FICA6201.PercentHydrogen,Percent Hydrogen,PID,#19,float 32,R/W +0x1298,4761,FICA6201.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#19,float 32,R/W +0x129A,4763,FICA6201.CarbPotDewPt,Carb Pot Dew Pt,PID,#19,float 32,R/W +0x129C,4765,FICA6201.3PosStepMotorTime,3 Pos Step Motor Time,PID,#19,float 32,R/W +0x12F7,4856,FICA6201.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#19,unsigned 16,R/W +0x12F8,4857,FICA6201.DemandTuneReq,Demand Tune Req,PID,#19,unsigned 16,R/W +0x12F9,4858,FICA6201.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#19,unsigned 16,R/W +0x12FA,4859,FICA6201.AutoManState,Auto Man State,PID,#19,unsigned 16,R/W +0x12FB,4860,FICA6201.LSPSelectState,LSP Select State,PID,#19,unsigned 16,R/W +0x12FC,4861,FICA6201.RemLocSPState,Rem Loc SP State,PID,#19,unsigned 16,R/W +0x12FD,4862,FICA6201.TuneSetState,Tune Set State,PID,#19,unsigned 16,R/W +0x12FE,4863,FICA6201.LoopStatusRegister,Loop Status Register,PID,#19,unsigned 16,R + , ,FICA6213,,PID,#20,, +0x1340,4929,FICA6213.PV,PV,PID,#20,float 32,R +0x1342,4931,FICA6213.RSP_SP2,RSP_SP2,PID,#20,float 32,R/W +0x1344,4933,FICA6213.WSP,WSP,PID,#20,float 32,R/W +0x1346,4935,FICA6213.Output,Output,PID,#20,float 32,R/W +0x134A,4939,FICA6213.CarbonPotTemp,Carbon Pot Temp,PID,#20,float 32,R +0x134C,4941,FICA6213.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#20,float 32,R/W +0x134E,4943,FICA6213.Direction,Direction,PID,#20,float 32,R +0x1350,4945,FICA6213.Reset1,Reset 1,PID,#20,float 32,R/W +0x1352,4947,FICA6213.Rate1,Rate 1,PID,#20,float 32,R/W +0x1354,4949,FICA6213.ScanCycleTime,Scan Cycle Time,PID,#20,float 32,R +0x1356,4951,FICA6213.PV_LowRange,PV_Low Range,PID,#20,float 32,R +0x1358,4953,FICA6213.PV_HighRange,PV_High Range,PID,#20,float 32,R +0x135A,4955,FICA6213.Alarm1SP1,Alarm 1 SP1,PID,#20,float 32,R/W +0x135C,4957,FICA6213.Alarm1SP2,Alarm 1 SP2,PID,#20,float 32,R/W +0x1360,4961,FICA6213.Gain2_PropBand2,Gain2_Prop Band 2,PID,#20,float 32,R/W +0x1362,4963,FICA6213.3PosStepDeadband,3 Pos Step Deadband,PID,#20,float 32,R/W +0x1364,4965,FICA6213.Reset2,Reset 2,PID,#20,float 32,R/W +0x1366,4967,FICA6213.Rate2,Rate 2,PID,#20,float 32,R/W +0x1368,4969,FICA6213.CycleTime_Scan,Cycle Time_Scan,PID,#20,float 32,R +0x136A,4971,FICA6213.LSP1,LSP1,PID,#20,float 32,R/W +0x136C,4973,FICA6213.LSP2,LSP2,PID,#20,float 32,R/W +0x136E,4975,FICA6213.Alarm2SP1,Alarm 2 SP1,PID,#20,float 32,R/W +0x1370,4977,FICA6213.Alarm2SP2,Alarm 2 SP2,PID,#20,float 32,R/W +0x1374,4981,FICA6213.SP_LowLimit,SP_Low Limit,PID,#20,float 32,R/W +0x1376,4983,FICA6213.SP_HighLimit,SP_High Limit,PID,#20,float 32,R/W +0x137A,4987,FICA6213.Output_LowLimit,Output_Low Limit,PID,#20,float 32,R/W +0x137C,4989,FICA6213.Output_HighLimit,Output_High Limit,PID,#20,float 32,R/W +0x137E,4991,FICA6213.OutputB,Output (B),PID,#20,float 32,R/W +0x1386,4999,FICA6213.Ratio,Ratio,PID,#20,float 32,R/W +0x1388,5001,FICA6213.Bias,Bias,PID,#20,float 32,R/W +0x138A,5003,FICA6213.Deviation,Deviation,PID,#20,float 32,R +0x138E,5007,FICA6213.ManualReset,Manual Reset,PID,#20,float 32,R/W +0x1390,5009,FICA6213.FeedforwardGain,Feed forward Gain,PID,#20,float 32,R/W +0x1392,5011,FICA6213.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#20,float 32,R/W +0x1394,5013,FICA6213.FurnaceFactor,Furnace Factor,PID,#20,float 32,R/W +0x1396,5015,FICA6213.PercentHydrogen,Percent Hydrogen,PID,#20,float 32,R/W +0x1398,5017,FICA6213.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#20,float 32,R/W +0x139A,5019,FICA6213.CarbPotDewPt,Carb Pot Dew Pt,PID,#20,float 32,R/W +0x139C,5021,FICA6213.3PosStepMotorTime,3 Pos Step Motor Time,PID,#20,float 32,R/W +0x13F7,5112,FICA6213.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#20,unsigned 16,R/W +0x13F8,5113,FICA6213.DemandTuneReq,Demand Tune Req,PID,#20,unsigned 16,R/W +0x13F9,5114,FICA6213.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#20,unsigned 16,R/W +0x13FA,5115,FICA6213.AutoManState,Auto Man State,PID,#20,unsigned 16,R/W +0x13FB,5116,FICA6213.LSPSelectState,LSP Select State,PID,#20,unsigned 16,R/W +0x13FC,5117,FICA6213.RemLocSPState,Rem Loc SP State,PID,#20,unsigned 16,R/W +0x13FD,5118,FICA6213.TuneSetState,Tune Set State,PID,#20,unsigned 16,R/W +0x13FE,5119,FICA6213.LoopStatusRegister,Loop Status Register,PID,#20,unsigned 16,R + , ,FICA6214,,PID,#21,, +0x1440,5185,FICA6214.PV,PV,PID,#21,float 32,R +0x1442,5187,FICA6214.RSP_SP2,RSP_SP2,PID,#21,float 32,R/W +0x1444,5189,FICA6214.WSP,WSP,PID,#21,float 32,R/W +0x1446,5191,FICA6214.Output,Output,PID,#21,float 32,R/W +0x144A,5195,FICA6214.CarbonPotTemp,Carbon Pot Temp,PID,#21,float 32,R +0x144C,5197,FICA6214.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#21,float 32,R/W +0x144E,5199,FICA6214.Direction,Direction,PID,#21,float 32,R +0x1450,5201,FICA6214.Reset1,Reset 1,PID,#21,float 32,R/W +0x1452,5203,FICA6214.Rate1,Rate 1,PID,#21,float 32,R/W +0x1454,5205,FICA6214.ScanCycleTime,Scan Cycle Time,PID,#21,float 32,R +0x1456,5207,FICA6214.PV_LowRange,PV_Low Range,PID,#21,float 32,R +0x1458,5209,FICA6214.PV_HighRange,PV_High Range,PID,#21,float 32,R +0x145A,5211,FICA6214.Alarm1SP1,Alarm 1 SP1,PID,#21,float 32,R/W +0x145C,5213,FICA6214.Alarm1SP2,Alarm 1 SP2,PID,#21,float 32,R/W +0x1460,5217,FICA6214.Gain2_PropBand2,Gain2_Prop Band 2,PID,#21,float 32,R/W +0x1462,5219,FICA6214.3PosStepDeadband,3 Pos Step Deadband,PID,#21,float 32,R/W +0x1464,5221,FICA6214.Reset2,Reset 2,PID,#21,float 32,R/W +0x1466,5223,FICA6214.Rate2,Rate 2,PID,#21,float 32,R/W +0x1468,5225,FICA6214.CycleTime_Scan,Cycle Time_Scan,PID,#21,float 32,R +0x146A,5227,FICA6214.LSP1,LSP1,PID,#21,float 32,R/W +0x146C,5229,FICA6214.LSP2,LSP2,PID,#21,float 32,R/W +0x146E,5231,FICA6214.Alarm2SP1,Alarm 2 SP1,PID,#21,float 32,R/W +0x1470,5233,FICA6214.Alarm2SP2,Alarm 2 SP2,PID,#21,float 32,R/W +0x1474,5237,FICA6214.SP_LowLimit,SP_Low Limit,PID,#21,float 32,R/W +0x1476,5239,FICA6214.SP_HighLimit,SP_High Limit,PID,#21,float 32,R/W +0x147A,5243,FICA6214.Output_LowLimit,Output_Low Limit,PID,#21,float 32,R/W +0x147C,5245,FICA6214.Output_HighLimit,Output_High Limit,PID,#21,float 32,R/W +0x147E,5247,FICA6214.OutputB,Output (B),PID,#21,float 32,R/W +0x1486,5255,FICA6214.Ratio,Ratio,PID,#21,float 32,R/W +0x1488,5257,FICA6214.Bias,Bias,PID,#21,float 32,R/W +0x148A,5259,FICA6214.Deviation,Deviation,PID,#21,float 32,R +0x148E,5263,FICA6214.ManualReset,Manual Reset,PID,#21,float 32,R/W +0x1490,5265,FICA6214.FeedforwardGain,Feed forward Gain,PID,#21,float 32,R/W +0x1492,5267,FICA6214.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#21,float 32,R/W +0x1494,5269,FICA6214.FurnaceFactor,Furnace Factor,PID,#21,float 32,R/W +0x1496,5271,FICA6214.PercentHydrogen,Percent Hydrogen,PID,#21,float 32,R/W +0x1498,5273,FICA6214.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#21,float 32,R/W +0x149A,5275,FICA6214.CarbPotDewPt,Carb Pot Dew Pt,PID,#21,float 32,R/W +0x149C,5277,FICA6214.3PosStepMotorTime,3 Pos Step Motor Time,PID,#21,float 32,R/W +0x14F7,5368,FICA6214.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#21,unsigned 16,R/W +0x14F8,5369,FICA6214.DemandTuneReq,Demand Tune Req,PID,#21,unsigned 16,R/W +0x14F9,5370,FICA6214.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#21,unsigned 16,R/W +0x14FA,5371,FICA6214.AutoManState,Auto Man State,PID,#21,unsigned 16,R/W +0x14FB,5372,FICA6214.LSPSelectState,LSP Select State,PID,#21,unsigned 16,R/W +0x14FC,5373,FICA6214.RemLocSPState,Rem Loc SP State,PID,#21,unsigned 16,R/W +0x14FD,5374,FICA6214.TuneSetState,Tune Set State,PID,#21,unsigned 16,R/W +0x14FE,5375,FICA6214.LoopStatusRegister,Loop Status Register,PID,#21,unsigned 16,R + , ,FICA6216,,PID,#22,, +0x1540,5441,FICA6216.PV,PV,PID,#22,float 32,R +0x1542,5443,FICA6216.RSP_SP2,RSP_SP2,PID,#22,float 32,R/W +0x1544,5445,FICA6216.WSP,WSP,PID,#22,float 32,R/W +0x1546,5447,FICA6216.Output,Output,PID,#22,float 32,R/W +0x154A,5451,FICA6216.CarbonPotTemp,Carbon Pot Temp,PID,#22,float 32,R +0x154C,5453,FICA6216.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#22,float 32,R/W +0x154E,5455,FICA6216.Direction,Direction,PID,#22,float 32,R +0x1550,5457,FICA6216.Reset1,Reset 1,PID,#22,float 32,R/W +0x1552,5459,FICA6216.Rate1,Rate 1,PID,#22,float 32,R/W +0x1554,5461,FICA6216.ScanCycleTime,Scan Cycle Time,PID,#22,float 32,R +0x1556,5463,FICA6216.PV_LowRange,PV_Low Range,PID,#22,float 32,R +0x1558,5465,FICA6216.PV_HighRange,PV_High Range,PID,#22,float 32,R +0x155A,5467,FICA6216.Alarm1SP1,Alarm 1 SP1,PID,#22,float 32,R/W +0x155C,5469,FICA6216.Alarm1SP2,Alarm 1 SP2,PID,#22,float 32,R/W +0x1560,5473,FICA6216.Gain2_PropBand2,Gain2_Prop Band 2,PID,#22,float 32,R/W +0x1562,5475,FICA6216.3PosStepDeadband,3 Pos Step Deadband,PID,#22,float 32,R/W +0x1564,5477,FICA6216.Reset2,Reset 2,PID,#22,float 32,R/W +0x1566,5479,FICA6216.Rate2,Rate 2,PID,#22,float 32,R/W +0x1568,5481,FICA6216.CycleTime_Scan,Cycle Time_Scan,PID,#22,float 32,R +0x156A,5483,FICA6216.LSP1,LSP1,PID,#22,float 32,R/W +0x156C,5485,FICA6216.LSP2,LSP2,PID,#22,float 32,R/W +0x156E,5487,FICA6216.Alarm2SP1,Alarm 2 SP1,PID,#22,float 32,R/W +0x1570,5489,FICA6216.Alarm2SP2,Alarm 2 SP2,PID,#22,float 32,R/W +0x1574,5493,FICA6216.SP_LowLimit,SP_Low Limit,PID,#22,float 32,R/W +0x1576,5495,FICA6216.SP_HighLimit,SP_High Limit,PID,#22,float 32,R/W +0x157A,5499,FICA6216.Output_LowLimit,Output_Low Limit,PID,#22,float 32,R/W +0x157C,5501,FICA6216.Output_HighLimit,Output_High Limit,PID,#22,float 32,R/W +0x157E,5503,FICA6216.OutputB,Output (B),PID,#22,float 32,R/W +0x1586,5511,FICA6216.Ratio,Ratio,PID,#22,float 32,R/W +0x1588,5513,FICA6216.Bias,Bias,PID,#22,float 32,R/W +0x158A,5515,FICA6216.Deviation,Deviation,PID,#22,float 32,R +0x158E,5519,FICA6216.ManualReset,Manual Reset,PID,#22,float 32,R/W +0x1590,5521,FICA6216.FeedforwardGain,Feed forward Gain,PID,#22,float 32,R/W +0x1592,5523,FICA6216.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#22,float 32,R/W +0x1594,5525,FICA6216.FurnaceFactor,Furnace Factor,PID,#22,float 32,R/W +0x1596,5527,FICA6216.PercentHydrogen,Percent Hydrogen,PID,#22,float 32,R/W +0x1598,5529,FICA6216.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#22,float 32,R/W +0x159A,5531,FICA6216.CarbPotDewPt,Carb Pot Dew Pt,PID,#22,float 32,R/W +0x159C,5533,FICA6216.3PosStepMotorTime,3 Pos Step Motor Time,PID,#22,float 32,R/W +0x15F7,5624,FICA6216.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#22,unsigned 16,R/W +0x15F8,5625,FICA6216.DemandTuneReq,Demand Tune Req,PID,#22,unsigned 16,R/W +0x15F9,5626,FICA6216.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#22,unsigned 16,R/W +0x15FA,5627,FICA6216.AutoManState,Auto Man State,PID,#22,unsigned 16,R/W +0x15FB,5628,FICA6216.LSPSelectState,LSP Select State,PID,#22,unsigned 16,R/W +0x15FC,5629,FICA6216.RemLocSPState,Rem Loc SP State,PID,#22,unsigned 16,R/W +0x15FD,5630,FICA6216.TuneSetState,Tune Set State,PID,#22,unsigned 16,R/W +0x15FE,5631,FICA6216.LoopStatusRegister,Loop Status Register,PID,#22,unsigned 16,R + , ,FICA6218,,PID,#23,, +0x1640,5697,FICA6218.PV,PV,PID,#23,float 32,R +0x1642,5699,FICA6218.RSP_SP2,RSP_SP2,PID,#23,float 32,R/W +0x1644,5701,FICA6218.WSP,WSP,PID,#23,float 32,R/W +0x1646,5703,FICA6218.Output,Output,PID,#23,float 32,R/W +0x164A,5707,FICA6218.CarbonPotTemp,Carbon Pot Temp,PID,#23,float 32,R +0x164C,5709,FICA6218.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#23,float 32,R/W +0x164E,5711,FICA6218.Direction,Direction,PID,#23,float 32,R +0x1650,5713,FICA6218.Reset1,Reset 1,PID,#23,float 32,R/W +0x1652,5715,FICA6218.Rate1,Rate 1,PID,#23,float 32,R/W +0x1654,5717,FICA6218.ScanCycleTime,Scan Cycle Time,PID,#23,float 32,R +0x1656,5719,FICA6218.PV_LowRange,PV_Low Range,PID,#23,float 32,R +0x1658,5721,FICA6218.PV_HighRange,PV_High Range,PID,#23,float 32,R +0x165A,5723,FICA6218.Alarm1SP1,Alarm 1 SP1,PID,#23,float 32,R/W +0x165C,5725,FICA6218.Alarm1SP2,Alarm 1 SP2,PID,#23,float 32,R/W +0x1660,5729,FICA6218.Gain2_PropBand2,Gain2_Prop Band 2,PID,#23,float 32,R/W +0x1662,5731,FICA6218.3PosStepDeadband,3 Pos Step Deadband,PID,#23,float 32,R/W +0x1664,5733,FICA6218.Reset2,Reset 2,PID,#23,float 32,R/W +0x1666,5735,FICA6218.Rate2,Rate 2,PID,#23,float 32,R/W +0x1668,5737,FICA6218.CycleTime_Scan,Cycle Time_Scan,PID,#23,float 32,R +0x166A,5739,FICA6218.LSP1,LSP1,PID,#23,float 32,R/W +0x166C,5741,FICA6218.LSP2,LSP2,PID,#23,float 32,R/W +0x166E,5743,FICA6218.Alarm2SP1,Alarm 2 SP1,PID,#23,float 32,R/W +0x1670,5745,FICA6218.Alarm2SP2,Alarm 2 SP2,PID,#23,float 32,R/W +0x1674,5749,FICA6218.SP_LowLimit,SP_Low Limit,PID,#23,float 32,R/W +0x1676,5751,FICA6218.SP_HighLimit,SP_High Limit,PID,#23,float 32,R/W +0x167A,5755,FICA6218.Output_LowLimit,Output_Low Limit,PID,#23,float 32,R/W +0x167C,5757,FICA6218.Output_HighLimit,Output_High Limit,PID,#23,float 32,R/W +0x167E,5759,FICA6218.OutputB,Output (B),PID,#23,float 32,R/W +0x1686,5767,FICA6218.Ratio,Ratio,PID,#23,float 32,R/W +0x1688,5769,FICA6218.Bias,Bias,PID,#23,float 32,R/W +0x168A,5771,FICA6218.Deviation,Deviation,PID,#23,float 32,R +0x168E,5775,FICA6218.ManualReset,Manual Reset,PID,#23,float 32,R/W +0x1690,5777,FICA6218.FeedforwardGain,Feed forward Gain,PID,#23,float 32,R/W +0x1692,5779,FICA6218.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#23,float 32,R/W +0x1694,5781,FICA6218.FurnaceFactor,Furnace Factor,PID,#23,float 32,R/W +0x1696,5783,FICA6218.PercentHydrogen,Percent Hydrogen,PID,#23,float 32,R/W +0x1698,5785,FICA6218.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#23,float 32,R/W +0x169A,5787,FICA6218.CarbPotDewPt,Carb Pot Dew Pt,PID,#23,float 32,R/W +0x169C,5789,FICA6218.3PosStepMotorTime,3 Pos Step Motor Time,PID,#23,float 32,R/W +0x16F7,5880,FICA6218.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#23,unsigned 16,R/W +0x16F8,5881,FICA6218.DemandTuneReq,Demand Tune Req,PID,#23,unsigned 16,R/W +0x16F9,5882,FICA6218.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#23,unsigned 16,R/W +0x16FA,5883,FICA6218.AutoManState,Auto Man State,PID,#23,unsigned 16,R/W +0x16FB,5884,FICA6218.LSPSelectState,LSP Select State,PID,#23,unsigned 16,R/W +0x16FC,5885,FICA6218.RemLocSPState,Rem Loc SP State,PID,#23,unsigned 16,R/W +0x16FD,5886,FICA6218.TuneSetState,Tune Set State,PID,#23,unsigned 16,R/W +0x16FE,5887,FICA6218.LoopStatusRegister,Loop Status Register,PID,#23,unsigned 16,R + , ,TICA5111A,,PID,#24,, +0x1740,5953,TICA5111A.PV,PV,PID,#24,float 32,R +0x1742,5955,TICA5111A.RSP_SP2,RSP_SP2,PID,#24,float 32,R/W +0x1744,5957,TICA5111A.WSP,WSP,PID,#24,float 32,R/W +0x1746,5959,TICA5111A.Output,Output,PID,#24,float 32,R/W +0x174A,5963,TICA5111A.CarbonPotTemp,Carbon Pot Temp,PID,#24,float 32,R +0x174C,5965,TICA5111A.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#24,float 32,R/W +0x174E,5967,TICA5111A.Direction,Direction,PID,#24,float 32,R +0x1750,5969,TICA5111A.Reset1,Reset 1,PID,#24,float 32,R/W +0x1752,5971,TICA5111A.Rate1,Rate 1,PID,#24,float 32,R/W +0x1754,5973,TICA5111A.ScanCycleTime,Scan Cycle Time,PID,#24,float 32,R +0x1756,5975,TICA5111A.PV_LowRange,PV_Low Range,PID,#24,float 32,R +0x1758,5977,TICA5111A.PV_HighRange,PV_High Range,PID,#24,float 32,R +0x175A,5979,TICA5111A.Alarm1SP1,Alarm 1 SP1,PID,#24,float 32,R/W +0x175C,5981,TICA5111A.Alarm1SP2,Alarm 1 SP2,PID,#24,float 32,R/W +0x1760,5985,TICA5111A.Gain2_PropBand2,Gain2_Prop Band 2,PID,#24,float 32,R/W +0x1762,5987,TICA5111A.3PosStepDeadband,3 Pos Step Deadband,PID,#24,float 32,R/W +0x1764,5989,TICA5111A.Reset2,Reset 2,PID,#24,float 32,R/W +0x1766,5991,TICA5111A.Rate2,Rate 2,PID,#24,float 32,R/W +0x1768,5993,TICA5111A.CycleTime_Scan,Cycle Time_Scan,PID,#24,float 32,R +0x176A,5995,TICA5111A.LSP1,LSP1,PID,#24,float 32,R/W +0x176C,5997,TICA5111A.LSP2,LSP2,PID,#24,float 32,R/W +0x176E,5999,TICA5111A.Alarm2SP1,Alarm 2 SP1,PID,#24,float 32,R/W +0x1770,6001,TICA5111A.Alarm2SP2,Alarm 2 SP2,PID,#24,float 32,R/W +0x1774,6005,TICA5111A.SP_LowLimit,SP_Low Limit,PID,#24,float 32,R/W +0x1776,6007,TICA5111A.SP_HighLimit,SP_High Limit,PID,#24,float 32,R/W +0x177A,6011,TICA5111A.Output_LowLimit,Output_Low Limit,PID,#24,float 32,R/W +0x177C,6013,TICA5111A.Output_HighLimit,Output_High Limit,PID,#24,float 32,R/W +0x177E,6015,TICA5111A.OutputB,Output (B),PID,#24,float 32,R/W +0x1786,6023,TICA5111A.Ratio,Ratio,PID,#24,float 32,R/W +0x1788,6025,TICA5111A.Bias,Bias,PID,#24,float 32,R/W +0x178A,6027,TICA5111A.Deviation,Deviation,PID,#24,float 32,R +0x178E,6031,TICA5111A.ManualReset,Manual Reset,PID,#24,float 32,R/W +0x1790,6033,TICA5111A.FeedforwardGain,Feed forward Gain,PID,#24,float 32,R/W +0x1792,6035,TICA5111A.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#24,float 32,R/W +0x1794,6037,TICA5111A.FurnaceFactor,Furnace Factor,PID,#24,float 32,R/W +0x1796,6039,TICA5111A.PercentHydrogen,Percent Hydrogen,PID,#24,float 32,R/W +0x1798,6041,TICA5111A.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#24,float 32,R/W +0x179A,6043,TICA5111A.CarbPotDewPt,Carb Pot Dew Pt,PID,#24,float 32,R/W +0x179C,6045,TICA5111A.3PosStepMotorTime,3 Pos Step Motor Time,PID,#24,float 32,R/W +0x17F7,6136,TICA5111A.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#24,unsigned 16,R/W +0x17F8,6137,TICA5111A.DemandTuneReq,Demand Tune Req,PID,#24,unsigned 16,R/W +0x17F9,6138,TICA5111A.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#24,unsigned 16,R/W +0x17FA,6139,TICA5111A.AutoManState,Auto Man State,PID,#24,unsigned 16,R/W +0x17FB,6140,TICA5111A.LSPSelectState,LSP Select State,PID,#24,unsigned 16,R/W +0x17FC,6141,TICA5111A.RemLocSPState,Rem Loc SP State,PID,#24,unsigned 16,R/W +0x17FD,6142,TICA5111A.TuneSetState,Tune Set State,PID,#24,unsigned 16,R/W +0x17FE,6143,TICA5111A.LoopStatusRegister,Loop Status Register,PID,#24,unsigned 16,R + , ,PICA5111,,PID,#25,, +0x7840,30785,PICA5111.PV,PV,PID,#25,float 32,R +0x7842,30787,PICA5111.RSP_SP2,RSP_SP2,PID,#25,float 32,R/W +0x7844,30789,PICA5111.WSP,WSP,PID,#25,float 32,R/W +0x7846,30791,PICA5111.Output,Output,PID,#25,float 32,R/W +0x784A,30795,PICA5111.CarbonPotTemp,Carbon Pot Temp,PID,#25,float 32,R +0x784C,30797,PICA5111.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#25,float 32,R/W +0x784E,30799,PICA5111.Direction,Direction,PID,#25,float 32,R +0x7850,30801,PICA5111.Reset1,Reset 1,PID,#25,float 32,R/W +0x7852,30803,PICA5111.Rate1,Rate 1,PID,#25,float 32,R/W +0x7854,30805,PICA5111.ScanCycleTime,Scan Cycle Time,PID,#25,float 32,R +0x7856,30807,PICA5111.PV_LowRange,PV_Low Range,PID,#25,float 32,R +0x7858,30809,PICA5111.PV_HighRange,PV_High Range,PID,#25,float 32,R +0x785A,30811,PICA5111.Alarm1SP1,Alarm 1 SP1,PID,#25,float 32,R/W +0x785C,30813,PICA5111.Alarm1SP2,Alarm 1 SP2,PID,#25,float 32,R/W +0x7860,30817,PICA5111.Gain2_PropBand2,Gain2_Prop Band 2,PID,#25,float 32,R/W +0x7862,30819,PICA5111.3PosStepDeadband,3 Pos Step Deadband,PID,#25,float 32,R/W +0x7864,30821,PICA5111.Reset2,Reset 2,PID,#25,float 32,R/W +0x7866,30823,PICA5111.Rate2,Rate 2,PID,#25,float 32,R/W +0x7868,30825,PICA5111.CycleTime_Scan,Cycle Time_Scan,PID,#25,float 32,R +0x786A,30827,PICA5111.LSP1,LSP1,PID,#25,float 32,R/W +0x786C,30829,PICA5111.LSP2,LSP2,PID,#25,float 32,R/W +0x786E,30831,PICA5111.Alarm2SP1,Alarm 2 SP1,PID,#25,float 32,R/W +0x7870,30833,PICA5111.Alarm2SP2,Alarm 2 SP2,PID,#25,float 32,R/W +0x7874,30837,PICA5111.SP_LowLimit,SP_Low Limit,PID,#25,float 32,R/W +0x7876,30839,PICA5111.SP_HighLimit,SP_High Limit,PID,#25,float 32,R/W +0x787A,30843,PICA5111.Output_LowLimit,Output_Low Limit,PID,#25,float 32,R/W +0x787C,30845,PICA5111.Output_HighLimit,Output_High Limit,PID,#25,float 32,R/W +0x787E,30847,PICA5111.OutputB,Output (B),PID,#25,float 32,R/W +0x7886,30855,PICA5111.Ratio,Ratio,PID,#25,float 32,R/W +0x7888,30857,PICA5111.Bias,Bias,PID,#25,float 32,R/W +0x788A,30859,PICA5111.Deviation,Deviation,PID,#25,float 32,R +0x788E,30863,PICA5111.ManualReset,Manual Reset,PID,#25,float 32,R/W +0x7890,30865,PICA5111.FeedforwardGain,Feed forward Gain,PID,#25,float 32,R/W +0x7892,30867,PICA5111.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#25,float 32,R/W +0x7894,30869,PICA5111.FurnaceFactor,Furnace Factor,PID,#25,float 32,R/W +0x7896,30871,PICA5111.PercentHydrogen,Percent Hydrogen,PID,#25,float 32,R/W +0x7898,30873,PICA5111.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#25,float 32,R/W +0x789A,30875,PICA5111.CarbPotDewPt,Carb Pot Dew Pt,PID,#25,float 32,R/W +0x789C,30877,PICA5111.3PosStepMotorTime,3 Pos Step Motor Time,PID,#25,float 32,R/W +0x78F7,30968,PICA5111.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#25,unsigned 16,R/W +0x78F8,30969,PICA5111.DemandTuneReq,Demand Tune Req,PID,#25,unsigned 16,R/W +0x78F9,30970,PICA5111.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#25,unsigned 16,R/W +0x78FA,30971,PICA5111.AutoManState,Auto Man State,PID,#25,unsigned 16,R/W +0x78FB,30972,PICA5111.LSPSelectState,LSP Select State,PID,#25,unsigned 16,R/W +0x78FC,30973,PICA5111.RemLocSPState,Rem Loc SP State,PID,#25,unsigned 16,R/W +0x78FD,30974,PICA5111.TuneSetState,Tune Set State,PID,#25,unsigned 16,R/W +0x78FE,30975,PICA5111.LoopStatusRegister,Loop Status Register,PID,#25,unsigned 16,R + , ,FICA5101,,PID,#26,, +0x7940,31041,FICA5101.PV,PV,PID,#26,float 32,R +0x7942,31043,FICA5101.RSP_SP2,RSP_SP2,PID,#26,float 32,R/W +0x7944,31045,FICA5101.WSP,WSP,PID,#26,float 32,R/W +0x7946,31047,FICA5101.Output,Output,PID,#26,float 32,R/W +0x794A,31051,FICA5101.CarbonPotTemp,Carbon Pot Temp,PID,#26,float 32,R +0x794C,31053,FICA5101.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#26,float 32,R/W +0x794E,31055,FICA5101.Direction,Direction,PID,#26,float 32,R +0x7950,31057,FICA5101.Reset1,Reset 1,PID,#26,float 32,R/W +0x7952,31059,FICA5101.Rate1,Rate 1,PID,#26,float 32,R/W +0x7954,31061,FICA5101.ScanCycleTime,Scan Cycle Time,PID,#26,float 32,R +0x7956,31063,FICA5101.PV_LowRange,PV_Low Range,PID,#26,float 32,R +0x7958,31065,FICA5101.PV_HighRange,PV_High Range,PID,#26,float 32,R +0x795A,31067,FICA5101.Alarm1SP1,Alarm 1 SP1,PID,#26,float 32,R/W +0x795C,31069,FICA5101.Alarm1SP2,Alarm 1 SP2,PID,#26,float 32,R/W +0x7960,31073,FICA5101.Gain2_PropBand2,Gain2_Prop Band 2,PID,#26,float 32,R/W +0x7962,31075,FICA5101.3PosStepDeadband,3 Pos Step Deadband,PID,#26,float 32,R/W +0x7964,31077,FICA5101.Reset2,Reset 2,PID,#26,float 32,R/W +0x7966,31079,FICA5101.Rate2,Rate 2,PID,#26,float 32,R/W +0x7968,31081,FICA5101.CycleTime_Scan,Cycle Time_Scan,PID,#26,float 32,R +0x796A,31083,FICA5101.LSP1,LSP1,PID,#26,float 32,R/W +0x796C,31085,FICA5101.LSP2,LSP2,PID,#26,float 32,R/W +0x796E,31087,FICA5101.Alarm2SP1,Alarm 2 SP1,PID,#26,float 32,R/W +0x7970,31089,FICA5101.Alarm2SP2,Alarm 2 SP2,PID,#26,float 32,R/W +0x7974,31093,FICA5101.SP_LowLimit,SP_Low Limit,PID,#26,float 32,R/W +0x7976,31095,FICA5101.SP_HighLimit,SP_High Limit,PID,#26,float 32,R/W +0x797A,31099,FICA5101.Output_LowLimit,Output_Low Limit,PID,#26,float 32,R/W +0x797C,31101,FICA5101.Output_HighLimit,Output_High Limit,PID,#26,float 32,R/W +0x797E,31103,FICA5101.OutputB,Output (B),PID,#26,float 32,R/W +0x7986,31111,FICA5101.Ratio,Ratio,PID,#26,float 32,R/W +0x7988,31113,FICA5101.Bias,Bias,PID,#26,float 32,R/W +0x798A,31115,FICA5101.Deviation,Deviation,PID,#26,float 32,R +0x798E,31119,FICA5101.ManualReset,Manual Reset,PID,#26,float 32,R/W +0x7990,31121,FICA5101.FeedforwardGain,Feed forward Gain,PID,#26,float 32,R/W +0x7992,31123,FICA5101.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#26,float 32,R/W +0x7994,31125,FICA5101.FurnaceFactor,Furnace Factor,PID,#26,float 32,R/W +0x7996,31127,FICA5101.PercentHydrogen,Percent Hydrogen,PID,#26,float 32,R/W +0x7998,31129,FICA5101.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#26,float 32,R/W +0x799A,31131,FICA5101.CarbPotDewPt,Carb Pot Dew Pt,PID,#26,float 32,R/W +0x799C,31133,FICA5101.3PosStepMotorTime,3 Pos Step Motor Time,PID,#26,float 32,R/W +0x79F7,31224,FICA5101.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#26,unsigned 16,R/W +0x79F8,31225,FICA5101.DemandTuneReq,Demand Tune Req,PID,#26,unsigned 16,R/W +0x79F9,31226,FICA5101.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#26,unsigned 16,R/W +0x79FA,31227,FICA5101.AutoManState,Auto Man State,PID,#26,unsigned 16,R/W +0x79FB,31228,FICA5101.LSPSelectState,LSP Select State,PID,#26,unsigned 16,R/W +0x79FC,31229,FICA5101.RemLocSPState,Rem Loc SP State,PID,#26,unsigned 16,R/W +0x79FD,31230,FICA5101.TuneSetState,Tune Set State,PID,#26,unsigned 16,R/W +0x79FE,31231,FICA5101.LoopStatusRegister,Loop Status Register,PID,#26,unsigned 16,R + , ,FICA5113,,PID,#27,, +0x7A40,31297,FICA5113.PV,PV,PID,#27,float 32,R +0x7A42,31299,FICA5113.RSP_SP2,RSP_SP2,PID,#27,float 32,R/W +0x7A44,31301,FICA5113.WSP,WSP,PID,#27,float 32,R/W +0x7A46,31303,FICA5113.Output,Output,PID,#27,float 32,R/W +0x7A4A,31307,FICA5113.CarbonPotTemp,Carbon Pot Temp,PID,#27,float 32,R +0x7A4C,31309,FICA5113.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#27,float 32,R/W +0x7A4E,31311,FICA5113.Direction,Direction,PID,#27,float 32,R +0x7A50,31313,FICA5113.Reset1,Reset 1,PID,#27,float 32,R/W +0x7A52,31315,FICA5113.Rate1,Rate 1,PID,#27,float 32,R/W +0x7A54,31317,FICA5113.ScanCycleTime,Scan Cycle Time,PID,#27,float 32,R +0x7A56,31319,FICA5113.PV_LowRange,PV_Low Range,PID,#27,float 32,R +0x7A58,31321,FICA5113.PV_HighRange,PV_High Range,PID,#27,float 32,R +0x7A5A,31323,FICA5113.Alarm1SP1,Alarm 1 SP1,PID,#27,float 32,R/W +0x7A5C,31325,FICA5113.Alarm1SP2,Alarm 1 SP2,PID,#27,float 32,R/W +0x7A60,31329,FICA5113.Gain2_PropBand2,Gain2_Prop Band 2,PID,#27,float 32,R/W +0x7A62,31331,FICA5113.3PosStepDeadband,3 Pos Step Deadband,PID,#27,float 32,R/W +0x7A64,31333,FICA5113.Reset2,Reset 2,PID,#27,float 32,R/W +0x7A66,31335,FICA5113.Rate2,Rate 2,PID,#27,float 32,R/W +0x7A68,31337,FICA5113.CycleTime_Scan,Cycle Time_Scan,PID,#27,float 32,R +0x7A6A,31339,FICA5113.LSP1,LSP1,PID,#27,float 32,R/W +0x7A6C,31341,FICA5113.LSP2,LSP2,PID,#27,float 32,R/W +0x7A6E,31343,FICA5113.Alarm2SP1,Alarm 2 SP1,PID,#27,float 32,R/W +0x7A70,31345,FICA5113.Alarm2SP2,Alarm 2 SP2,PID,#27,float 32,R/W +0x7A74,31349,FICA5113.SP_LowLimit,SP_Low Limit,PID,#27,float 32,R/W +0x7A76,31351,FICA5113.SP_HighLimit,SP_High Limit,PID,#27,float 32,R/W +0x7A7A,31355,FICA5113.Output_LowLimit,Output_Low Limit,PID,#27,float 32,R/W +0x7A7C,31357,FICA5113.Output_HighLimit,Output_High Limit,PID,#27,float 32,R/W +0x7A7E,31359,FICA5113.OutputB,Output (B),PID,#27,float 32,R/W +0x7A86,31367,FICA5113.Ratio,Ratio,PID,#27,float 32,R/W +0x7A88,31369,FICA5113.Bias,Bias,PID,#27,float 32,R/W +0x7A8A,31371,FICA5113.Deviation,Deviation,PID,#27,float 32,R +0x7A8E,31375,FICA5113.ManualReset,Manual Reset,PID,#27,float 32,R/W +0x7A90,31377,FICA5113.FeedforwardGain,Feed forward Gain,PID,#27,float 32,R/W +0x7A92,31379,FICA5113.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#27,float 32,R/W +0x7A94,31381,FICA5113.FurnaceFactor,Furnace Factor,PID,#27,float 32,R/W +0x7A96,31383,FICA5113.PercentHydrogen,Percent Hydrogen,PID,#27,float 32,R/W +0x7A98,31385,FICA5113.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#27,float 32,R/W +0x7A9A,31387,FICA5113.CarbPotDewPt,Carb Pot Dew Pt,PID,#27,float 32,R/W +0x7A9C,31389,FICA5113.3PosStepMotorTime,3 Pos Step Motor Time,PID,#27,float 32,R/W +0x7AF7,31480,FICA5113.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#27,unsigned 16,R/W +0x7AF8,31481,FICA5113.DemandTuneReq,Demand Tune Req,PID,#27,unsigned 16,R/W +0x7AF9,31482,FICA5113.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#27,unsigned 16,R/W +0x7AFA,31483,FICA5113.AutoManState,Auto Man State,PID,#27,unsigned 16,R/W +0x7AFB,31484,FICA5113.LSPSelectState,LSP Select State,PID,#27,unsigned 16,R/W +0x7AFC,31485,FICA5113.RemLocSPState,Rem Loc SP State,PID,#27,unsigned 16,R/W +0x7AFD,31486,FICA5113.TuneSetState,Tune Set State,PID,#27,unsigned 16,R/W +0x7AFE,31487,FICA5113.LoopStatusRegister,Loop Status Register,PID,#27,unsigned 16,R + , ,FICA5114,,PID,#28,, +0x7B40,31553,FICA5114.PV,PV,PID,#28,float 32,R +0x7B42,31555,FICA5114.RSP_SP2,RSP_SP2,PID,#28,float 32,R/W +0x7B44,31557,FICA5114.WSP,WSP,PID,#28,float 32,R/W +0x7B46,31559,FICA5114.Output,Output,PID,#28,float 32,R/W +0x7B4A,31563,FICA5114.CarbonPotTemp,Carbon Pot Temp,PID,#28,float 32,R +0x7B4C,31565,FICA5114.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#28,float 32,R/W +0x7B4E,31567,FICA5114.Direction,Direction,PID,#28,float 32,R +0x7B50,31569,FICA5114.Reset1,Reset 1,PID,#28,float 32,R/W +0x7B52,31571,FICA5114.Rate1,Rate 1,PID,#28,float 32,R/W +0x7B54,31573,FICA5114.ScanCycleTime,Scan Cycle Time,PID,#28,float 32,R +0x7B56,31575,FICA5114.PV_LowRange,PV_Low Range,PID,#28,float 32,R +0x7B58,31577,FICA5114.PV_HighRange,PV_High Range,PID,#28,float 32,R +0x7B5A,31579,FICA5114.Alarm1SP1,Alarm 1 SP1,PID,#28,float 32,R/W +0x7B5C,31581,FICA5114.Alarm1SP2,Alarm 1 SP2,PID,#28,float 32,R/W +0x7B60,31585,FICA5114.Gain2_PropBand2,Gain2_Prop Band 2,PID,#28,float 32,R/W +0x7B62,31587,FICA5114.3PosStepDeadband,3 Pos Step Deadband,PID,#28,float 32,R/W +0x7B64,31589,FICA5114.Reset2,Reset 2,PID,#28,float 32,R/W +0x7B66,31591,FICA5114.Rate2,Rate 2,PID,#28,float 32,R/W +0x7B68,31593,FICA5114.CycleTime_Scan,Cycle Time_Scan,PID,#28,float 32,R +0x7B6A,31595,FICA5114.LSP1,LSP1,PID,#28,float 32,R/W +0x7B6C,31597,FICA5114.LSP2,LSP2,PID,#28,float 32,R/W +0x7B6E,31599,FICA5114.Alarm2SP1,Alarm 2 SP1,PID,#28,float 32,R/W +0x7B70,31601,FICA5114.Alarm2SP2,Alarm 2 SP2,PID,#28,float 32,R/W +0x7B74,31605,FICA5114.SP_LowLimit,SP_Low Limit,PID,#28,float 32,R/W +0x7B76,31607,FICA5114.SP_HighLimit,SP_High Limit,PID,#28,float 32,R/W +0x7B7A,31611,FICA5114.Output_LowLimit,Output_Low Limit,PID,#28,float 32,R/W +0x7B7C,31613,FICA5114.Output_HighLimit,Output_High Limit,PID,#28,float 32,R/W +0x7B7E,31615,FICA5114.OutputB,Output (B),PID,#28,float 32,R/W +0x7B86,31623,FICA5114.Ratio,Ratio,PID,#28,float 32,R/W +0x7B88,31625,FICA5114.Bias,Bias,PID,#28,float 32,R/W +0x7B8A,31627,FICA5114.Deviation,Deviation,PID,#28,float 32,R +0x7B8E,31631,FICA5114.ManualReset,Manual Reset,PID,#28,float 32,R/W +0x7B90,31633,FICA5114.FeedforwardGain,Feed forward Gain,PID,#28,float 32,R/W +0x7B92,31635,FICA5114.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#28,float 32,R/W +0x7B94,31637,FICA5114.FurnaceFactor,Furnace Factor,PID,#28,float 32,R/W +0x7B96,31639,FICA5114.PercentHydrogen,Percent Hydrogen,PID,#28,float 32,R/W +0x7B98,31641,FICA5114.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#28,float 32,R/W +0x7B9A,31643,FICA5114.CarbPotDewPt,Carb Pot Dew Pt,PID,#28,float 32,R/W +0x7B9C,31645,FICA5114.3PosStepMotorTime,3 Pos Step Motor Time,PID,#28,float 32,R/W +0x7BF7,31736,FICA5114.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#28,unsigned 16,R/W +0x7BF8,31737,FICA5114.DemandTuneReq,Demand Tune Req,PID,#28,unsigned 16,R/W +0x7BF9,31738,FICA5114.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#28,unsigned 16,R/W +0x7BFA,31739,FICA5114.AutoManState,Auto Man State,PID,#28,unsigned 16,R/W +0x7BFB,31740,FICA5114.LSPSelectState,LSP Select State,PID,#28,unsigned 16,R/W +0x7BFC,31741,FICA5114.RemLocSPState,Rem Loc SP State,PID,#28,unsigned 16,R/W +0x7BFD,31742,FICA5114.TuneSetState,Tune Set State,PID,#28,unsigned 16,R/W +0x7BFE,31743,FICA5114.LoopStatusRegister,Loop Status Register,PID,#28,unsigned 16,R + , ,FICA5116,,PID,#29,, +0x7C40,31809,FICA5116.PV,PV,PID,#29,float 32,R +0x7C42,31811,FICA5116.RSP_SP2,RSP_SP2,PID,#29,float 32,R/W +0x7C44,31813,FICA5116.WSP,WSP,PID,#29,float 32,R/W +0x7C46,31815,FICA5116.Output,Output,PID,#29,float 32,R/W +0x7C4A,31819,FICA5116.CarbonPotTemp,Carbon Pot Temp,PID,#29,float 32,R +0x7C4C,31821,FICA5116.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#29,float 32,R/W +0x7C4E,31823,FICA5116.Direction,Direction,PID,#29,float 32,R +0x7C50,31825,FICA5116.Reset1,Reset 1,PID,#29,float 32,R/W +0x7C52,31827,FICA5116.Rate1,Rate 1,PID,#29,float 32,R/W +0x7C54,31829,FICA5116.ScanCycleTime,Scan Cycle Time,PID,#29,float 32,R +0x7C56,31831,FICA5116.PV_LowRange,PV_Low Range,PID,#29,float 32,R +0x7C58,31833,FICA5116.PV_HighRange,PV_High Range,PID,#29,float 32,R +0x7C5A,31835,FICA5116.Alarm1SP1,Alarm 1 SP1,PID,#29,float 32,R/W +0x7C5C,31837,FICA5116.Alarm1SP2,Alarm 1 SP2,PID,#29,float 32,R/W +0x7C60,31841,FICA5116.Gain2_PropBand2,Gain2_Prop Band 2,PID,#29,float 32,R/W +0x7C62,31843,FICA5116.3PosStepDeadband,3 Pos Step Deadband,PID,#29,float 32,R/W +0x7C64,31845,FICA5116.Reset2,Reset 2,PID,#29,float 32,R/W +0x7C66,31847,FICA5116.Rate2,Rate 2,PID,#29,float 32,R/W +0x7C68,31849,FICA5116.CycleTime_Scan,Cycle Time_Scan,PID,#29,float 32,R +0x7C6A,31851,FICA5116.LSP1,LSP1,PID,#29,float 32,R/W +0x7C6C,31853,FICA5116.LSP2,LSP2,PID,#29,float 32,R/W +0x7C6E,31855,FICA5116.Alarm2SP1,Alarm 2 SP1,PID,#29,float 32,R/W +0x7C70,31857,FICA5116.Alarm2SP2,Alarm 2 SP2,PID,#29,float 32,R/W +0x7C74,31861,FICA5116.SP_LowLimit,SP_Low Limit,PID,#29,float 32,R/W +0x7C76,31863,FICA5116.SP_HighLimit,SP_High Limit,PID,#29,float 32,R/W +0x7C7A,31867,FICA5116.Output_LowLimit,Output_Low Limit,PID,#29,float 32,R/W +0x7C7C,31869,FICA5116.Output_HighLimit,Output_High Limit,PID,#29,float 32,R/W +0x7C7E,31871,FICA5116.OutputB,Output (B),PID,#29,float 32,R/W +0x7C86,31879,FICA5116.Ratio,Ratio,PID,#29,float 32,R/W +0x7C88,31881,FICA5116.Bias,Bias,PID,#29,float 32,R/W +0x7C8A,31883,FICA5116.Deviation,Deviation,PID,#29,float 32,R +0x7C8E,31887,FICA5116.ManualReset,Manual Reset,PID,#29,float 32,R/W +0x7C90,31889,FICA5116.FeedforwardGain,Feed forward Gain,PID,#29,float 32,R/W +0x7C92,31891,FICA5116.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#29,float 32,R/W +0x7C94,31893,FICA5116.FurnaceFactor,Furnace Factor,PID,#29,float 32,R/W +0x7C96,31895,FICA5116.PercentHydrogen,Percent Hydrogen,PID,#29,float 32,R/W +0x7C98,31897,FICA5116.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#29,float 32,R/W +0x7C9A,31899,FICA5116.CarbPotDewPt,Carb Pot Dew Pt,PID,#29,float 32,R/W +0x7C9C,31901,FICA5116.3PosStepMotorTime,3 Pos Step Motor Time,PID,#29,float 32,R/W +0x7CF7,31992,FICA5116.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#29,unsigned 16,R/W +0x7CF8,31993,FICA5116.DemandTuneReq,Demand Tune Req,PID,#29,unsigned 16,R/W +0x7CF9,31994,FICA5116.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#29,unsigned 16,R/W +0x7CFA,31995,FICA5116.AutoManState,Auto Man State,PID,#29,unsigned 16,R/W +0x7CFB,31996,FICA5116.LSPSelectState,LSP Select State,PID,#29,unsigned 16,R/W +0x7CFC,31997,FICA5116.RemLocSPState,Rem Loc SP State,PID,#29,unsigned 16,R/W +0x7CFD,31998,FICA5116.TuneSetState,Tune Set State,PID,#29,unsigned 16,R/W +0x7CFE,31999,FICA5116.LoopStatusRegister,Loop Status Register,PID,#29,unsigned 16,R + , ,FICA5118,,PID,#30,, +0x7D40,32065,FICA5118.PV,PV,PID,#30,float 32,R +0x7D42,32067,FICA5118.RSP_SP2,RSP_SP2,PID,#30,float 32,R/W +0x7D44,32069,FICA5118.WSP,WSP,PID,#30,float 32,R/W +0x7D46,32071,FICA5118.Output,Output,PID,#30,float 32,R/W +0x7D4A,32075,FICA5118.CarbonPotTemp,Carbon Pot Temp,PID,#30,float 32,R +0x7D4C,32077,FICA5118.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#30,float 32,R/W +0x7D4E,32079,FICA5118.Direction,Direction,PID,#30,float 32,R +0x7D50,32081,FICA5118.Reset1,Reset 1,PID,#30,float 32,R/W +0x7D52,32083,FICA5118.Rate1,Rate 1,PID,#30,float 32,R/W +0x7D54,32085,FICA5118.ScanCycleTime,Scan Cycle Time,PID,#30,float 32,R +0x7D56,32087,FICA5118.PV_LowRange,PV_Low Range,PID,#30,float 32,R +0x7D58,32089,FICA5118.PV_HighRange,PV_High Range,PID,#30,float 32,R +0x7D5A,32091,FICA5118.Alarm1SP1,Alarm 1 SP1,PID,#30,float 32,R/W +0x7D5C,32093,FICA5118.Alarm1SP2,Alarm 1 SP2,PID,#30,float 32,R/W +0x7D60,32097,FICA5118.Gain2_PropBand2,Gain2_Prop Band 2,PID,#30,float 32,R/W +0x7D62,32099,FICA5118.3PosStepDeadband,3 Pos Step Deadband,PID,#30,float 32,R/W +0x7D64,32101,FICA5118.Reset2,Reset 2,PID,#30,float 32,R/W +0x7D66,32103,FICA5118.Rate2,Rate 2,PID,#30,float 32,R/W +0x7D68,32105,FICA5118.CycleTime_Scan,Cycle Time_Scan,PID,#30,float 32,R +0x7D6A,32107,FICA5118.LSP1,LSP1,PID,#30,float 32,R/W +0x7D6C,32109,FICA5118.LSP2,LSP2,PID,#30,float 32,R/W +0x7D6E,32111,FICA5118.Alarm2SP1,Alarm 2 SP1,PID,#30,float 32,R/W +0x7D70,32113,FICA5118.Alarm2SP2,Alarm 2 SP2,PID,#30,float 32,R/W +0x7D74,32117,FICA5118.SP_LowLimit,SP_Low Limit,PID,#30,float 32,R/W +0x7D76,32119,FICA5118.SP_HighLimit,SP_High Limit,PID,#30,float 32,R/W +0x7D7A,32123,FICA5118.Output_LowLimit,Output_Low Limit,PID,#30,float 32,R/W +0x7D7C,32125,FICA5118.Output_HighLimit,Output_High Limit,PID,#30,float 32,R/W +0x7D7E,32127,FICA5118.OutputB,Output (B),PID,#30,float 32,R/W +0x7D86,32135,FICA5118.Ratio,Ratio,PID,#30,float 32,R/W +0x7D88,32137,FICA5118.Bias,Bias,PID,#30,float 32,R/W +0x7D8A,32139,FICA5118.Deviation,Deviation,PID,#30,float 32,R +0x7D8E,32143,FICA5118.ManualReset,Manual Reset,PID,#30,float 32,R/W +0x7D90,32145,FICA5118.FeedforwardGain,Feed forward Gain,PID,#30,float 32,R/W +0x7D92,32147,FICA5118.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#30,float 32,R/W +0x7D94,32149,FICA5118.FurnaceFactor,Furnace Factor,PID,#30,float 32,R/W +0x7D96,32151,FICA5118.PercentHydrogen,Percent Hydrogen,PID,#30,float 32,R/W +0x7D98,32153,FICA5118.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#30,float 32,R/W +0x7D9A,32155,FICA5118.CarbPotDewPt,Carb Pot Dew Pt,PID,#30,float 32,R/W +0x7D9C,32157,FICA5118.3PosStepMotorTime,3 Pos Step Motor Time,PID,#30,float 32,R/W +0x7DF7,32248,FICA5118.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#30,unsigned 16,R/W +0x7DF8,32249,FICA5118.DemandTuneReq,Demand Tune Req,PID,#30,unsigned 16,R/W +0x7DF9,32250,FICA5118.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#30,unsigned 16,R/W +0x7DFA,32251,FICA5118.AutoManState,Auto Man State,PID,#30,unsigned 16,R/W +0x7DFB,32252,FICA5118.LSPSelectState,LSP Select State,PID,#30,unsigned 16,R/W +0x7DFC,32253,FICA5118.RemLocSPState,Rem Loc SP State,PID,#30,unsigned 16,R/W +0x7DFD,32254,FICA5118.TuneSetState,Tune Set State,PID,#30,unsigned 16,R/W +0x7DFE,32255,FICA5118.LoopStatusRegister,Loop Status Register,PID,#30,unsigned 16,R + , ,LICA6113,,PID,#31,, +0x7E40,32321,LICA6113.PV,PV,PID,#31,float 32,R +0x7E42,32323,LICA6113.RSP_SP2,RSP_SP2,PID,#31,float 32,R/W +0x7E44,32325,LICA6113.WSP,WSP,PID,#31,float 32,R/W +0x7E46,32327,LICA6113.Output,Output,PID,#31,float 32,R/W +0x7E4A,32331,LICA6113.CarbonPotTemp,Carbon Pot Temp,PID,#31,float 32,R +0x7E4C,32333,LICA6113.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#31,float 32,R/W +0x7E4E,32335,LICA6113.Direction,Direction,PID,#31,float 32,R +0x7E50,32337,LICA6113.Reset1,Reset 1,PID,#31,float 32,R/W +0x7E52,32339,LICA6113.Rate1,Rate 1,PID,#31,float 32,R/W +0x7E54,32341,LICA6113.ScanCycleTime,Scan Cycle Time,PID,#31,float 32,R +0x7E56,32343,LICA6113.PV_LowRange,PV_Low Range,PID,#31,float 32,R +0x7E58,32345,LICA6113.PV_HighRange,PV_High Range,PID,#31,float 32,R +0x7E5A,32347,LICA6113.Alarm1SP1,Alarm 1 SP1,PID,#31,float 32,R/W +0x7E5C,32349,LICA6113.Alarm1SP2,Alarm 1 SP2,PID,#31,float 32,R/W +0x7E60,32353,LICA6113.Gain2_PropBand2,Gain2_Prop Band 2,PID,#31,float 32,R/W +0x7E62,32355,LICA6113.3PosStepDeadband,3 Pos Step Deadband,PID,#31,float 32,R/W +0x7E64,32357,LICA6113.Reset2,Reset 2,PID,#31,float 32,R/W +0x7E66,32359,LICA6113.Rate2,Rate 2,PID,#31,float 32,R/W +0x7E68,32361,LICA6113.CycleTime_Scan,Cycle Time_Scan,PID,#31,float 32,R +0x7E6A,32363,LICA6113.LSP1,LSP1,PID,#31,float 32,R/W +0x7E6C,32365,LICA6113.LSP2,LSP2,PID,#31,float 32,R/W +0x7E6E,32367,LICA6113.Alarm2SP1,Alarm 2 SP1,PID,#31,float 32,R/W +0x7E70,32369,LICA6113.Alarm2SP2,Alarm 2 SP2,PID,#31,float 32,R/W +0x7E74,32373,LICA6113.SP_LowLimit,SP_Low Limit,PID,#31,float 32,R/W +0x7E76,32375,LICA6113.SP_HighLimit,SP_High Limit,PID,#31,float 32,R/W +0x7E7A,32379,LICA6113.Output_LowLimit,Output_Low Limit,PID,#31,float 32,R/W +0x7E7C,32381,LICA6113.Output_HighLimit,Output_High Limit,PID,#31,float 32,R/W +0x7E7E,32383,LICA6113.OutputB,Output (B),PID,#31,float 32,R/W +0x7E86,32391,LICA6113.Ratio,Ratio,PID,#31,float 32,R/W +0x7E88,32393,LICA6113.Bias,Bias,PID,#31,float 32,R/W +0x7E8A,32395,LICA6113.Deviation,Deviation,PID,#31,float 32,R +0x7E8E,32399,LICA6113.ManualReset,Manual Reset,PID,#31,float 32,R/W +0x7E90,32401,LICA6113.FeedforwardGain,Feed forward Gain,PID,#31,float 32,R/W +0x7E92,32403,LICA6113.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#31,float 32,R/W +0x7E94,32405,LICA6113.FurnaceFactor,Furnace Factor,PID,#31,float 32,R/W +0x7E96,32407,LICA6113.PercentHydrogen,Percent Hydrogen,PID,#31,float 32,R/W +0x7E98,32409,LICA6113.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#31,float 32,R/W +0x7E9A,32411,LICA6113.CarbPotDewPt,Carb Pot Dew Pt,PID,#31,float 32,R/W +0x7E9C,32413,LICA6113.3PosStepMotorTime,3 Pos Step Motor Time,PID,#31,float 32,R/W +0x7EF7,32504,LICA6113.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#31,unsigned 16,R/W +0x7EF8,32505,LICA6113.DemandTuneReq,Demand Tune Req,PID,#31,unsigned 16,R/W +0x7EF9,32506,LICA6113.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#31,unsigned 16,R/W +0x7EFA,32507,LICA6113.AutoManState,Auto Man State,PID,#31,unsigned 16,R/W +0x7EFB,32508,LICA6113.LSPSelectState,LSP Select State,PID,#31,unsigned 16,R/W +0x7EFC,32509,LICA6113.RemLocSPState,Rem Loc SP State,PID,#31,unsigned 16,R/W +0x7EFD,32510,LICA6113.TuneSetState,Tune Set State,PID,#31,unsigned 16,R/W +0x7EFE,32511,LICA6113.LoopStatusRegister,Loop Status Register,PID,#31,unsigned 16,R + , ,LICA6213,,PID,#32,, +0x7F40,32577,LICA6213.PV,PV,PID,#32,float 32,R +0x7F42,32579,LICA6213.RSP_SP2,RSP_SP2,PID,#32,float 32,R/W +0x7F44,32581,LICA6213.WSP,WSP,PID,#32,float 32,R/W +0x7F46,32583,LICA6213.Output,Output,PID,#32,float 32,R/W +0x7F4A,32587,LICA6213.CarbonPotTemp,Carbon Pot Temp,PID,#32,float 32,R +0x7F4C,32589,LICA6213.Gain1_PropBand1,Gain 1_Prop Band 1,PID,#32,float 32,R/W +0x7F4E,32591,LICA6213.Direction,Direction,PID,#32,float 32,R +0x7F50,32593,LICA6213.Reset1,Reset 1,PID,#32,float 32,R/W +0x7F52,32595,LICA6213.Rate1,Rate 1,PID,#32,float 32,R/W +0x7F54,32597,LICA6213.ScanCycleTime,Scan Cycle Time,PID,#32,float 32,R +0x7F56,32599,LICA6213.PV_LowRange,PV_Low Range,PID,#32,float 32,R +0x7F58,32601,LICA6213.PV_HighRange,PV_High Range,PID,#32,float 32,R +0x7F5A,32603,LICA6213.Alarm1SP1,Alarm 1 SP1,PID,#32,float 32,R/W +0x7F5C,32605,LICA6213.Alarm1SP2,Alarm 1 SP2,PID,#32,float 32,R/W +0x7F60,32609,LICA6213.Gain2_PropBand2,Gain2_Prop Band 2,PID,#32,float 32,R/W +0x7F62,32611,LICA6213.3PosStepDeadband,3 Pos Step Deadband,PID,#32,float 32,R/W +0x7F64,32613,LICA6213.Reset2,Reset 2,PID,#32,float 32,R/W +0x7F66,32615,LICA6213.Rate2,Rate 2,PID,#32,float 32,R/W +0x7F68,32617,LICA6213.CycleTime_Scan,Cycle Time_Scan,PID,#32,float 32,R +0x7F6A,32619,LICA6213.LSP1,LSP1,PID,#32,float 32,R/W +0x7F6C,32621,LICA6213.LSP2,LSP2,PID,#32,float 32,R/W +0x7F6E,32623,LICA6213.Alarm2SP1,Alarm 2 SP1,PID,#32,float 32,R/W +0x7F70,32625,LICA6213.Alarm2SP2,Alarm 2 SP2,PID,#32,float 32,R/W +0x7F74,32629,LICA6213.SP_LowLimit,SP_Low Limit,PID,#32,float 32,R/W +0x7F76,32631,LICA6213.SP_HighLimit,SP_High Limit,PID,#32,float 32,R/W +0x7F7A,32635,LICA6213.Output_LowLimit,Output_Low Limit,PID,#32,float 32,R/W +0x7F7C,32637,LICA6213.Output_HighLimit,Output_High Limit,PID,#32,float 32,R/W +0x7F7E,32639,LICA6213.OutputB,Output (B),PID,#32,float 32,R/W +0x7F86,32647,LICA6213.Ratio,Ratio,PID,#32,float 32,R/W +0x7F88,32649,LICA6213.Bias,Bias,PID,#32,float 32,R/W +0x7F8A,32651,LICA6213.Deviation,Deviation,PID,#32,float 32,R +0x7F8E,32655,LICA6213.ManualReset,Manual Reset,PID,#32,float 32,R/W +0x7F90,32657,LICA6213.FeedforwardGain,Feed forward Gain,PID,#32,float 32,R/W +0x7F92,32659,LICA6213.LocalPercentCarbMonoxide,Local Percent Carb Monoxide,PID,#32,float 32,R/W +0x7F94,32661,LICA6213.FurnaceFactor,Furnace Factor,PID,#32,float 32,R/W +0x7F96,32663,LICA6213.PercentHydrogen,Percent Hydrogen,PID,#32,float 32,R/W +0x7F98,32665,LICA6213.OnOff_OutHysterisis,On Off_Out Hysterisis,PID,#32,float 32,R/W +0x7F9A,32667,LICA6213.CarbPotDewPt,Carb Pot Dew Pt,PID,#32,float 32,R/W +0x7F9C,32669,LICA6213.3PosStepMotorTime,3 Pos Step Motor Time,PID,#32,float 32,R/W +0x7FF7,32760,LICA6213.EnableDisableFuzzy,Enable Disable Fuzzy,PID,#32,unsigned 16,R/W +0x7FF8,32761,LICA6213.DemandTuneReq,Demand Tune Req,PID,#32,unsigned 16,R/W +0x7FF9,32762,LICA6213.AntiSootSPLimEnable,Anti Soot SP Lim Enable,PID,#32,unsigned 16,R/W +0x7FFA,32763,LICA6213.AutoManState,Auto Man State,PID,#32,unsigned 16,R/W +0x7FFB,32764,LICA6213.LSPSelectState,LSP Select State,PID,#32,unsigned 16,R/W +0x7FFC,32765,LICA6213.RemLocSPState,Rem Loc SP State,PID,#32,unsigned 16,R/W +0x7FFD,32766,LICA6213.TuneSetState,Tune Set State,PID,#32,unsigned 16,R/W +0x7FFE,32767,LICA6213.LoopStatusRegister,Loop Status Register,PID,#32,unsigned 16,R + +Hex Addr,Dec Addr,Tag Name,Description,Type,#,Data Type,EU,Decimal Places,Tag Type,'On' Label,'Off' Label,Initial/Source +0x18C0,6337,VP8117_HS,,Variable,1,float 32, , ,Digital,START,STOP,STOP +0x18C2,6339,LT3211_LSET,,Variable,2,float 32,,0,Analog, , ,0.00 +0x18C4,6341,LT8113RST,,Variable,3,float 32, , ,Digital,ON,OFF,OFF +0x18C6,6343,LT8113LSET,,Variable,4,float 32,,0,Analog, , ,0.00 +0x18C8,6345,CH8601A_HS,,Variable,5,float 32, , ,Digital,START,STOP,STOP +0x18CA,6347,P3102_HS,,Variable,6,float 32, , ,Digital,START,STOP,STOP +0x18CC,6349,TI8117HSET,,Variable,7,float 32,,0,Analog, , ,0.00 +0x18CE,6351,LT3203_LL_SET,,Variable,8,float 32,%,1,Analog, , ,0.00 +0x18D0,6353,VP3204_HS,,Variable,9,float 32, , ,Digital,START,STOP,STOP +0x18D2,6355,BL3208A_HS,,Variable,10,float 32, , ,Digital,START,STOP,STOP +0x18D4,6357,BL3208B_HS,,Variable,11,float 32, , ,Digital,START,STOP,STOP +0x18D6,6359,P3205_HS,,Variable,12,float 32, , ,Digital,START,STOP,STOP +0x18D8,6361,TI8117RST,,Variable,13,float 32, , ,Digital,ON,OFF,OFF +0x18DA,6363,P3208B_HS,,Variable,14,float 32, , ,Digital,START,STOP,STOP +0x18DC,6365,P3208A_HS,,Variable,15,float 32, , ,Digital,START,STOP,STOP +0x18DE,6367,LT3208_LL_SET,,Variable,16,float 32,%,1,Analog, , ,0.00 +0x18E0,6369,XV6123_HS,,Variable,17,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x18E2,6371,XV6124_HS,,Variable,18,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x18E4,6373,XV6223_HS,,Variable,19,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x18E6,6375,LT3207_LL_SET,,Variable,20,float 32,%,1,Analog, , ,0.00 +0x18E8,6377,XV6224_HS,,Variable,21,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x18EA,6379,TICA3202A-IL-RST,,Variable,22,float 32, , ,Digital,ON,OFF,OFF +0x18EC,6381,P6114_HS,,Variable,23,float 32, , ,Digital,START,STOP,STOP +0x18EE,6383,FIQ6113_RST,,Variable,24,float 32, , ,Digital,ON,OFF,OFF +0x18F0,6385,FIQ5320_RESET,,Variable,25,float 32, , ,Digital,ON,OFF,OFF +0x18F2,6387,VP8117_AUTO,,Variable,26,float 32, , ,Digital,AUTO,MAN,MAN +0x18F4,6389,PICA3203-IL-RST,,Variable,27,float 32, , ,Digital,ON,OFF,OFF +0x18F6,6391,TICA3403-IL-RST,,Variable,28,float 32, , ,Digital,ON,OFF,OFF +0x18F8,6393,P3102_AUTO,,Variable,29,float 32, , ,Digital,AUTO,MAN,MAN +0x18FA,6395,LICA5113-IL-RST,,Variable,30,float 32, , ,Digital,ON,OFF,OFF +0x18FC,6397,TICA5111A-IL-RST,,Variable,31,float 32, , ,Digital,ON,OFF,OFF +0x18FE,6399,PICA5111-IL-RST,,Variable,32,float 32, , ,Digital,ON,OFF,OFF +0x1900,6401,HT_SP,,Variable,33,float 32,,1,Analog, , ,0.00 +0x1902,6403,LICA6113-IL-RST,,Variable,34,float 32, , ,Digital,ON,OFF,OFF +0x1904,6405,TICA6111A-IL-RST,,Variable,35,float 32, , ,Digital,ON,OFF,OFF +0x1906,6407,PICA6111-IL-RST,,Variable,36,float 32, , ,Digital,ON,OFF,OFF +0x1908,6409,FIQ6101_RST,,Variable,37,float 32, , ,Digital,ON,OFF,OFF +0x190A,6411,LICA6213-IL-RST,,Variable,38,float 32, , ,Digital,ON,OFF,OFF +0x190C,6413,XV3202_HS,,Variable,39,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x190E,6415,AG3202_HS,,Variable,40,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1910,6417,FIQ6114_RST,,Variable,41,float 32, , ,Digital,ON,OFF,OFF +0x1912,6419,P6102_HS,,Variable,42,float 32, , ,Digital,START,STOP,STOP +0x1914,6421,TICA6211-IL-RST,,Variable,43,float 32, , ,Digital,ON,OFF,OFF +0x1916,6423,P201_HS,,Variable,44,float 32, , ,Digital,START,STOP,STOP +0x1918,6425,AG3202_AUTO,,Variable,45,float 32, , ,Digital,AUTO,MAN,MAN +0x191A,6427,PICA6211-IL-RST,,Variable,46,float 32, , ,Digital,ON,OFF,OFF +0x191C,6429,VP6117_HS,,Variable,47,float 32, , ,Digital,START,STOP,STOP +0x191E,6431,AG3208_HS,,Variable,48,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1920,6433,XV3208C_HS,,Variable,49,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1922,6435,XV3208B_HS,,Variable,50,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1924,6437,XV3208B_AUTO,,Variable,51,float 32, , ,Digital,AUTO,MAN,MAN +0x1926,6439,LT3101_LL_SET,,Variable,52,float 32,%,1,Analog, , ,0.00 +0x1928,6441,LT5111SP,,Variable,53,float 32,,0,Analog, , ,0.00 +0x192A,6443,FQ3101_RESET,,Variable,54,float 32, , ,Digital,ON,OFF,OFF +0x192C,6445,AG3202A_RPM,,Variable,55,float 32,Hz,1,Analog, , ,0.00 +0x192E,6447,LT6111SP,,Variable,56,float 32,,0,Analog, , ,0.00 +0x1930,6449,LT6211SP,,Variable,57,float 32,,0,Analog, , ,0.00 +0x1932,6451,FLT_SIM,,Variable,58,float 32, , ,Digital,ON,OFF,OFF +0x1934,6453,REM_LOCAL,,Variable,59,float 32, , ,Digital,ON,OFF,OFF +0x1936,6455,RUN_STOP,,Variable,60,float 32, , ,Digital,ON,OFF,OFF +0x1938,6457,HUNTING-RATIO,,Variable,61,float 32,,2,Analog, , ,0.10 +0x193A,6459,VAR062,,Variable,62,float 32,,2,Analog, , ,0.30 +0x1942,6467,PH_HH_SET,,Variable,66,float 32,pH,1,Analog, , ,0.00 +0x1944,6469,PH_LL_SET,,Variable,67,float 32,pH,1,Analog, , ,0.00 +0x1946,6471,FQ3208_RESET,,Variable,68,float 32, , ,Digital,ON,OFF,OFF +0x194A,6475,FQ3208_L_SET,,Variable,70,float 32,,1,Analog, , ,0.00 +0x194C,6477,P3101_START_SEL,,Variable,71,float 32, , ,Digital,B,A,A +0x1952,6483,FQ3203_RESET,,Variable,74,float 32, , ,Digital,ON,OFF,OFF +0x1954,6485,P3205A_RPM,,Variable,75,float 32,rpm,1,Analog, , ,0.00 +0x1956,6487,P3205B_RPM,,Variable,76,float 32,rpm,1,Analog, , ,0.00 +0x1958,6489,P3206A_RPM,,Variable,77,float 32,rpm,1,Analog, , ,0.00 +0x195A,6491,P3206B_RPM,,Variable,78,float 32,rpm,1,Analog, , ,0.00 +0x1960,6497,P6123_HS,,Variable,81,float 32, , ,Digital,START,STOP,STOP +0x1962,6499,P6128B_HS,,Variable,82,float 32, , ,Digital,START,STOP,STOP +0x1964,6501,P6128A_HS,,Variable,83,float 32, , ,Digital,START,STOP,STOP +0x1966,6503,P6218_HS,,Variable,84,float 32, , ,Digital,START,STOP,STOP +0x196A,6507,P6216_HS,,Variable,86,float 32, , ,Digital,START,STOP,STOP +0x196C,6509,P6214_HS,,Variable,87,float 32, , ,Digital,START,STOP,STOP +0x1978,6521,FQ3208B_RESET,,Variable,93,float 32, , ,Digital,ON,OFF,OFF +0x197A,6523,FQ3208B_SP,,Variable,94,float 32,,0,Analog, , ,0.00 +0x197C,6525,MT_FEED_START,,Variable,95,float 32, , ,Digital,ON,OFF,OFF +0x197E,6527,FIQ3101_EVE,,Variable,96,float 32,%,1,Analog, , ,0.00 +0x1980,6529,SWTEMP_L_SET,,Variable,97,float 32,degC,1,Analog, , ,0.00 +0x1982,6531,FIQ3102_EVE,,Variable,98,float 32,,0,Analog, , ,0.00 +0x1984,6533,HTR01_CMD,,Variable,99,float 32, , ,Digital,ON,OFF,OFF +0x1986,6535,TE3102A_HH_SET,,Variable,100,float 32,degC,1,Analog, , ,0.00 +0x1988,6537,TE3102A_LL_SET,,Variable,101,float 32,degC,1,Analog, , ,0.00 +0x198A,6539,TE3102B_LL_SET,,Variable,102,float 32,degC,1,Analog, , ,0.00 +0x198C,6541,TE3102B_HH_SET,,Variable,103,float 32,degC,1,Analog, , ,0.00 +0x198E,6543,HTR02_CMD,,Variable,104,float 32, , ,Digital,ON,OFF,OFF +0x1990,6545,SWTEMP_H_SET,,Variable,105,float 32,degC,1,Analog, , ,0.00 +0x1992,6547,HTR04_CMD,,Variable,106,float 32, , ,Digital,ON,OFF,OFF +0x1994,6549,FQ3401_RST,,Variable,107,float 32, , ,Digital,ON,OFF,OFF +0x1996,6551,XV3402_HS,,Variable,108,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1998,6553,XV3402_AUTO,,Variable,109,float 32, , ,Digital,AUTO,MAN,MAN +0x199A,6555,FQ3402_RST,,Variable,110,float 32, , ,Digital,ON,OFF,OFF +0x199C,6557,P6201_HS,,Variable,111,float 32, , ,Digital,START,STOP,STOP +0x199E,6559,P6223_HS,,Variable,112,float 32, , ,Digital,START,STOP,STOP +0x19A0,6561,VP6217_HS,,Variable,113,float 32, , ,Digital,START,STOP,STOP +0x19A2,6563,P6116_HS,,Variable,114,float 32, , ,Digital,START,STOP,STOP +0x19A4,6565,P203_HS,,Variable,115,float 32, , ,Digital,START,STOP,STOP +0x19A6,6567,P5118_HS,,Variable,116,float 32, , ,Digital,START,STOP,STOP +0x19A8,6569,P5115_HS,,Variable,117,float 32, , ,Digital,START,STOP,STOP +0x19AA,6571,P3401_HS,,Variable,118,float 32, , ,Digital,START,STOP,STOP +0x19AC,6573,P3402_HS,,Variable,119,float 32, , ,Digital,START,STOP,STOP +0x19AE,6575,P5114_HS,,Variable,120,float 32, , ,Digital,START,STOP,STOP +0x19B0,6577,P5101_HS,,Variable,121,float 32, , ,Digital,START,STOP,STOP +0x19B2,6579,P6118_HS,,Variable,122,float 32, , ,Digital,START,STOP,STOP +0x19B4,6581,VP5117_HS,,Variable,123,float 32, , ,Digital,START,STOP,STOP +0x19B6,6583,P2203_HS,,Variable,124,float 32, , ,Digital,START,STOP,STOP +0x19B8,6585,P5116_HS,,Variable,125,float 32, , ,Digital,START,STOP,STOP +0x19BA,6587,CH5601_HS,,Variable,126,float 32, , ,Digital,START,STOP,STOP +0x19BC,6589,FICA3102_OP,,Variable,127,float 32,%,2,Analog, , ,0.00 +0x19BE,6591,FIQ5101_RESET,,Variable,128,float 32, , ,Digital,ON,OFF,OFF +0x19C0,6593,FIQ5113_RESET,,Variable,129,float 32, , ,Digital,ON,OFF,OFF +0x19C2,6595,FIQ5114_RESET,,Variable,130,float 32, , ,Digital,ON,OFF,OFF +0x19C4,6597,FIQ6118_RST,,Variable,131,float 32, , ,Digital,ON,OFF,OFF +0x19C6,6599,FIQ6116_RST,,Variable,132,float 32, , ,Digital,ON,OFF,OFF +0x19C8,6601,FIQ6115_RST,,Variable,133,float 32, , ,Digital,ON,OFF,OFF +0x19CA,6603,FIQ6215_RST,,Variable,134,float 32, , ,Digital,ON,OFF,OFF +0x19CC,6605,FIQ6201_RST,,Variable,135,float 32, , ,Digital,ON,OFF,OFF +0x19CE,6607,FIQ6218_RST,,Variable,136,float 32, , ,Digital,ON,OFF,OFF +0x19D0,6609,FIQ6216_RST,,Variable,137,float 32, , ,Digital,ON,OFF,OFF +0x19D2,6611,FIQ6214_RST,,Variable,138,float 32, , ,Digital,ON,OFF,OFF +0x19D4,6613,FIQ6213_RST,,Variable,139,float 32, , ,Digital,ON,OFF,OFF +0x19D6,6615,LT6111_LL_SET,,Variable,140,float 32,%,1,Analog, , ,0.00 +0x19D8,6617,LT6211_LL_SET,,Variable,141,float 32,%,1,Analog, , ,0.00 +0x19DA,6619,LT5111_LL_SET,,Variable,142,float 32,%,1,Analog, , ,0.00 +0x19DC,6621,LT6128_LL_SET,,Variable,143,float 32,%,1,Analog, , ,0.00 +0x19DE,6623,FIQ6220_RESET,,Variable,144,float 32, , ,Digital,ON,OFF,OFF +0x19E0,6625,FIQ6120_RESET,,Variable,145,float 32, , ,Digital,ON,OFF,OFF +0x19E2,6627,P6123_ISC,,Variable,146,float 32,Hz,1,Analog, , ,0.00 +0x19E4,6629,FIQ5115_RESET,,Variable,147,float 32, , ,Digital,ON,OFF,OFF +0x19E6,6631,FIQ5116_RESET,,Variable,148,float 32, , ,Digital,ON,OFF,OFF +0x19E8,6633,FIQ5118_RESET,,Variable,149,float 32, , ,Digital,ON,OFF,OFF +0x19EA,6635,P6223_ISC,,Variable,150,float 32,Hz,1,Analog, , ,0.00 +0x19EC,6637,P5102_HS,,Variable,151,float 32, , ,Digital,START,STOP,STOP +0x19EE,6639,P5102_ISC,,Variable,152,float 32,Hz,1,Analog, , ,0.00 +0x19F0,6641,P6202_HS,,Variable,153,float 32, , ,Digital,START,STOP,STOP +0x19F2,6643,P6202_ISC,,Variable,154,float 32,Hz,1,Analog, , ,0.00 +0x19F4,6645,P6102_ISC,,Variable,155,float 32,Hz,1,Analog, , ,0.00 +0x19F6,6647,P8601A_HS,,Variable,156,float 32, , ,Digital,START,STOP,STOP +0x19F8,6649,P8601B_HS,,Variable,157,float 32, , ,Digital,START,STOP,STOP +0x19FA,6651,CH8601B_HS,,Variable,158,float 32, , ,Digital,START,STOP,STOP +0x19FC,6653,P8101_HS,,Variable,159,float 32, , ,Digital,START,STOP,STOP +0x19FE,6655,P8114_HS,,Variable,160,float 32, , ,Digital,START,STOP,STOP +0x1A00,6657,P8118_HS,,Variable,161,float 32, , ,Digital,START,STOP,STOP +0x1A02,6659,P8116_HS,,Variable,162,float 32, , ,Digital,START,STOP,STOP +0x1A04,6661,P8101_ISC,,Variable,163,float 32,,0,Analog, , ,0.00 +0x1A06,6663,FIQ8101_RESET,,Variable,164,float 32, , ,Digital,ON,OFF,OFF +0x1A08,6665,FIQ8115_RESET,,Variable,165,float 32, , ,Digital,ON,OFF,OFF +0x1A0A,6667,FIQ8113_RESET,,Variable,166,float 32, , ,Digital,ON,OFF,OFF +0x1A0C,6669,FIQ8118_RESET,,Variable,167,float 32, , ,Digital,ON,OFF,OFF +0x1A0E,6671,FIQ8116_RESET,,Variable,168,float 32, , ,Digital,ON,OFF,OFF +0x1A10,6673,FIQ8114_RESET,,Variable,169,float 32, , ,Digital,ON,OFF,OFF +0x2000,8193,LT3101,,Signal Tag,1,float 32,%,1,Analog, , ,Block 134 Output 4 +0x2002,8195,FT8116,,Signal Tag,2,float 32,%,1,Analog, , ,Block 135 Output 4 +0x2004,8197,FT8115,,Signal Tag,3,float 32,%,1,Analog, , ,Block 155 Output 4 +0x2006,8199,FIQ6101,,Signal Tag,4,float 32,,2,Analog, , ,Block 825 Output 1 +0x2008,8201,LT3206,,Signal Tag,5,float 32,%,1,Analog, , ,Block 138 Output 4 +0x200A,8203,LT3207,,Signal Tag,6,float 32,%,1,Analog, , ,Block 139 Output 4 +0x200C,8205,LT3210,,Signal Tag,7,float 32,%,1,Analog, , ,Block 140 Output 4 +0x200E,8207,XV3208B_REM,,Signal Tag,8,float 32, , ,Digital,ON,OFF,Block 222 Output 16 +0x2010,8209,LT3203,,Signal Tag,9,float 32,%,1,Analog, , ,Block 136 Output 4 +0x2012,8211,LT3208,,Signal Tag,10,float 32,%,1,Analog, , ,Block 143 Output 4 +0x2014,8213,TE3701,,Signal Tag,11,float 32,,0,Analog, , ,Block 164 Output 4 +0x2016,8215,TE3702,,Signal Tag,12,float 32,,0,Analog, , ,Block 165 Output 4 +0x2018,8217,TE3208,,Signal Tag,13,float 32,,0,Analog, , ,Block 156 Output 4 +0x201A,8219,LT3705,,Signal Tag,14,float 32,,0,Analog, , ,Block 157 Output 4 +0x201C,8221,PT3203,,Signal Tag,15,float 32,mmH2O,1,Analog, , ,Block 148 Output 4 +0x201E,8223,LT5113B,,Signal Tag,16,float 32,%,1,Analog, , ,Block 149 Output 4 +0x2020,8225,PT8111A,,Signal Tag,17,float 32,%,1,Analog, , ,Block 150 Output 4 +0x2022,8227,PT8111B,,Signal Tag,18,float 32,,0,Analog, , ,Block 151 Output 4 +0x2024,8229,LT3211,,Signal Tag,19,float 32,,0,Analog, , ,Block 141 Output 4 +0x2026,8231,LT3202,,Signal Tag,20,float 32,,0,Analog, , ,Block 206 Output 4 +0x2028,8233,AG3202A_IFB,,Signal Tag,21,float 32,rpm,1,Analog, , ,Block 158 Output 4 +0x202A,8235,LT6124,,Signal Tag,22,float 32,,0,Analog, , ,Block 145 Output 4 +0x202C,8237,P3205A_IFB,,Signal Tag,23,float 32,rmp,1,Analog, , ,Block 160 Output 4 +0x202E,8239,LT6224,,Signal Tag,24,float 32,,0,Analog, , ,Block 146 Output 4 +0x2030,8241,P3206A_IFB,,Signal Tag,25,float 32,rpm,1,Analog, , ,Block 162 Output 4 +0x2032,8243,P3206B_IFB,,Signal Tag,26,float 32,rpm,1,Analog, , ,Block 163 Output 4 +0x2034,8245,FT3101,,Signal Tag,27,float 32,,0,Analog, , ,Block 144 Output 4 +0x2036,8247,LT8113,,Signal Tag,28,float 32,,0,Analog, , ,Block 152 Output 4 +0x2038,8249,FIQ3208B,,Signal Tag,29,float 32,,0,Analog, , ,Block 154 Output 4 +0x203A,8251,FT3203,,Signal Tag,30,float 32,,0,Analog, , ,Block 153 Output 4 +0x203C,8253,TICA3202A-TRIP,,Signal Tag,31,float 32, , ,Digital,ON,OFF,Block 1121 Output 1 +0x203E,8255,TE3202A,,Signal Tag,32,float 32,degC,1,Analog, , ,Block 180 Output 4 +0x2040,8257,TE3202B,,Signal Tag,33,float 32,degC,1,Analog, , ,Block 181 Output 4 +0x2042,8259,TE3202C,,Signal Tag,34,float 32,degC,1,Analog, , ,Block 182 Output 4 +0x2044,8261,XV3208B_OP,,Signal Tag,35,float 32, , ,Digital,ON,OFF,Block 223 Output 9 +0x2046,8263,XV3208B_CL,,Signal Tag,36,float 32, , ,Digital,ON,OFF,Block 223 Output 10 +0x2048,8265,P6120_RUN,,Signal Tag,37,float 32, , ,Digital,ON,OFF,Block 778 Output 10 +0x204A,8267,HTR_SW_TEMP,,Signal Tag,38,float 32,deg,1,Analog, , ,Block 186 Output 4 +0x204C,8269,TE3208B,,Signal Tag,39,float 32,,0,Analog, , ,Block 187 Output 4 +0x204E,8271,LT2205,,Signal Tag,40,float 32,%,1,Analog, , ,Block 204 Output 4 +0x2050,8273,P6220_RUN,,Signal Tag,41,float 32, , ,Digital,ON,OFF,Block 778 Output 11 +0x2052,8275,PT6950B,,Signal Tag,42,float 32,,0,Analog, , ,Block 137 Output 4 +0x2054,8277,TE2205,,Signal Tag,43,float 32,,0,Analog, , ,Block 211 Output 4 +0x2056,8279,VP8117_REM,,Signal Tag,44,float 32, , ,Digital,DCS,PNL,Block 776 Output 9 +0x2058,8281,VP8117_RUN,,Signal Tag,45,float 32, , ,Digital,RUN,STOP,Block 776 Output 10 +0x205A,8283,VP8117_FLT,,Signal Tag,46,float 32, , ,Digital,FAIL,NORMAL,Block 776 Output 11 +0x205C,8285,P3101B_REM,,Signal Tag,47,float 32, , ,Digital,DCS,PNL,Block 212 Output 12 +0x205E,8287,P3101B_RUN,,Signal Tag,48,float 32, , ,Digital,RUN,STOP,Block 212 Output 13 +0x2060,8289,P3101B_FLT,,Signal Tag,49,float 32, , ,Digital,FAIL,NORMAL,Block 212 Output 14 +0x2062,8291,P3102_REM,,Signal Tag,50,float 32, , ,Digital,DCS,PNL,Block 212 Output 15 +0x2064,8293,P3102_RUN,,Signal Tag,51,float 32, , ,Digital,RUN,STOP,Block 212 Output 16 +0x2066,8295,P3102_FLT,,Signal Tag,52,float 32, , ,Digital,FAIL,NORMAL,Block 213 Output 9 +0x2068,8297,P3102B_REM,,Signal Tag,53,float 32, , ,Digital,DCS,PNL,Block 213 Output 10 +0x206A,8299,P3102B_RUN,,Signal Tag,54,float 32, , ,Digital,RUN,STOP,Block 213 Output 11 +0x206C,8301,P3102B_FLT,,Signal Tag,55,float 32, , ,Digital,FAIL,NORMAL,Block 213 Output 12 +0x206E,8303,P6601A_RUN,,Signal Tag,56,float 32, , ,Digital,DCS,PNL,Block 213 Output 13 +0x2070,8305,P6601B_RUN,,Signal Tag,57,float 32, , ,Digital,RUN,STOP,Block 213 Output 14 +0x2072,8307,CH6601A_RUN,,Signal Tag,58,float 32, , ,Digital,FAIL,NORMAL,Block 213 Output 15 +0x2074,8309,CH6601B_RUN,,Signal Tag,59,float 32, , ,Digital,DCS,PNL,Block 213 Output 16 +0x2076,8311,P3206B_RUN,,Signal Tag,60,float 32, , ,Digital,RUN,STOP,Block 214 Output 9 +0x2078,8313,P3206B_FLT,,Signal Tag,61,float 32, , ,Digital,FAIL,NORMAL,Block 214 Output 10 +0x207A,8315,P3207A_REM,,Signal Tag,62,float 32, , ,Digital,DCS,PNL,Block 214 Output 11 +0x207C,8317,P3207A_RUN,,Signal Tag,63,float 32, , ,Digital,RUN,STOP,Block 214 Output 12 +0x207E,8319,P3207A_FLT,,Signal Tag,64,float 32, , ,Digital,FAIL,NORMAL,Block 214 Output 13 +0x2080,8321,P3207B_REM,,Signal Tag,65,float 32, , ,Digital,DCS,PNL,Block 214 Output 14 +0x2082,8323,P3207B_RUN,,Signal Tag,66,float 32, , ,Digital,RUN,STOP,Block 214 Output 15 +0x2084,8325,P3207B_FLT,,Signal Tag,67,float 32, , ,Digital,FAIL,NORMAL,Block 214 Output 16 +0x2086,8327,P5102_RUN,,Signal Tag,68,float 32, , ,Digital,ON,OFF,Block 773 Output 10 +0x2088,8329,XV6120_OP,,Signal Tag,69,float 32, , ,Digital,ON,OFF,Block 778 Output 14 +0x208A,8331,XV6120_CL,,Signal Tag,70,float 32, , ,Digital,ON,OFF,Block 778 Output 15 +0x208C,8333,XV6220_OP,,Signal Tag,71,float 32, , ,Digital,ON,OFF,Block 778 Output 16 +0x208E,8335,XV6220_CL,,Signal Tag,72,float 32, , ,Digital,ON,OFF,Block 779 Output 9 +0x2090,8337,XV5320_OP,,Signal Tag,73,float 32, , ,Digital,ON,OFF,Block 779 Output 10 +0x2092,8339,P3205_REM,,Signal Tag,74,float 32, , ,Digital,DCS,PNL,Block 215 Output 15 +0x2094,8341,P3205_RUN,,Signal Tag,75,float 32, , ,Digital,RUN,STOP,Block 215 Output 16 +0x2096,8343,P3205_FLT,,Signal Tag,76,float 32, , ,Digital,FAIL,NORMAL,Block 216 Output 9 +0x2098,8345,P3205B_REM,,Signal Tag,77,float 32, , ,Digital,DCS,PNL,Block 216 Output 10 +0x209A,8347,P3205B_RUN,,Signal Tag,78,float 32, , ,Digital,RUN,STOP,Block 216 Output 11 +0x209C,8349,P3205B_FLT,,Signal Tag,79,float 32, , ,Digital,FAIL,NORMAL,Block 216 Output 12 +0x209E,8351,P3208A_REM,,Signal Tag,80,float 32, , ,Digital,DCS,PNL,Block 216 Output 13 +0x20A0,8353,P3208A_RUN,,Signal Tag,81,float 32, , ,Digital,RUN,STOP,Block 216 Output 14 +0x20A2,8355,P3208A_FLT,,Signal Tag,82,float 32, , ,Digital,FAIL,NORMAL,Block 216 Output 15 +0x20A4,8357,P3208B_REM,,Signal Tag,83,float 32, , ,Digital,DCS,PNL,Block 216 Output 16 +0x20A6,8359,P3208B_RUN,,Signal Tag,84,float 32, , ,Digital,RUN,STOP,Block 217 Output 9 +0x20A8,8361,P3208B_FLT,,Signal Tag,85,float 32, , ,Digital,FAIL,NORMAL,Block 217 Output 10 +0x20AA,8363,P3209A_REM,,Signal Tag,86,float 32, , ,Digital,DCS,PNL,Block 217 Output 11 +0x20AC,8365,P3209A_RUN,,Signal Tag,87,float 32, , ,Digital,RUN,STOP,Block 217 Output 12 +0x20AE,8367,P3209A_FLT,,Signal Tag,88,float 32, , ,Digital,FAIL,NORMAL,Block 217 Output 13 +0x20B0,8369,P3209B_REM,,Signal Tag,89,float 32, , ,Digital,DCS,PNL,Block 217 Output 14 +0x20B2,8371,P3209B_RUN,,Signal Tag,90,float 32, , ,Digital,RUN,STOP,Block 217 Output 15 +0x20B4,8373,P3209B_FLT,,Signal Tag,91,float 32, , ,Digital,FAIL,NORMAL,Block 217 Output 16 +0x20B6,8375,AG3202_REM,,Signal Tag,92,float 32, , ,Digital,DCS,PNL,Block 218 Output 9 +0x20B8,8377,AG3202_RUN,,Signal Tag,93,float 32, , ,Digital,RUN,STOP,Block 218 Output 10 +0x20BA,8379,AG3202_FLT,,Signal Tag,94,float 32, , ,Digital,FAIL,NORMAL,Block 218 Output 11 +0x20BC,8381,XV5320_CL,,Signal Tag,95,float 32, , ,Digital,ON,OFF,Block 779 Output 11 +0x20BE,8383,FIQ6113,,Signal Tag,96,float 32,,2,Analog, , ,Block 882 Output 1 +0x20C0,8385,FIQ6114,,Signal Tag,97,float 32,,2,Analog, , ,Block 885 Output 1 +0x20C2,8387,FIQ6118,,Signal Tag,98,float 32,,2,Analog, , ,Block 888 Output 1 +0x20C4,8389,FIQ6116,,Signal Tag,99,float 32,,2,Analog, , ,Block 891 Output 1 +0x20C6,8391,FIQ6115,,Signal Tag,100,float 32,,2,Analog, , ,Block 894 Output 1 +0x20C8,8393,VP3204_REM,,Signal Tag,101,float 32, , ,Digital,DCS,PNL,Block 219 Output 10 +0x20CA,8395,VP3204_RUN,,Signal Tag,102,float 32, , ,Digital,RUN,STOP,Block 219 Output 11 +0x20CC,8397,VP3204_FLT,,Signal Tag,103,float 32, , ,Digital,FAIL,NORMAL,Block 219 Output 12 +0x20CE,8399,CH8601A_REM,,Signal Tag,104,float 32, , ,Digital,DCS,PNL,Block 219 Output 13 +0x20D0,8401,CH8601A_RUN,,Signal Tag,105,float 32, , ,Digital,RUN,STOP,Block 219 Output 14 +0x20D2,8403,CH8601A_FLT,,Signal Tag,106,float 32, , ,Digital,FAIL,NORMAL,Block 219 Output 15 +0x20D4,8405,XV6123_REM,,Signal Tag,107,float 32, , ,Digital,DCS,PNL,Block 219 Output 16 +0x20D6,8407,XV6123_OP,,Signal Tag,108,float 32, , ,Digital,ON,OFF,Block 220 Output 9 +0x20D8,8409,XV6123_CL,,Signal Tag,109,float 32, , ,Digital,ON,OFF,Block 220 Output 10 +0x20DA,8411,FIQ6201,,Signal Tag,110,float 32,,2,Analog, , ,Block 899 Output 1 +0x20DC,8413,FIQ6215,,Signal Tag,111,float 32,,2,Analog, , ,Block 900 Output 1 +0x20DE,8415,FIQ6213,,Signal Tag,112,float 32,,2,Analog, , ,Block 909 Output 1 +0x20E0,8417,XV6124_REM,,Signal Tag,113,float 32, , ,Digital,DCS,PNL,Block 220 Output 14 +0x20E2,8419,XV6124_OP,,Signal Tag,114,float 32, , ,Digital,ON,OFF,Block 220 Output 15 +0x20E4,8421,XV6124_CL,,Signal Tag,115,float 32, , ,Digital,ON,OFF,Block 220 Output 16 +0x20E6,8423,XV6224_REM,,Signal Tag,116,float 32, , ,Digital,DCS,PNL,Block 221 Output 9 +0x20E8,8425,XV6224_OP,,Signal Tag,117,float 32, , ,Digital,ON,OFF,Block 221 Output 10 +0x20EA,8427,XV6224_CL,,Signal Tag,118,float 32, , ,Digital,ON,OFF,Block 221 Output 11 +0x20EC,8429,XV3210_REM,,Signal Tag,119,float 32, , ,Digital,DCS,PNL,Block 221 Output 12 +0x20EE,8431,XV3210_OP,,Signal Tag,120,float 32, , ,Digital,ON,OFF,Block 221 Output 13 +0x20F0,8433,XV3210_CL,,Signal Tag,121,float 32, , ,Digital,ON,OFF,Block 221 Output 14 +0x20F2,8435,FIQ6214,,Signal Tag,122,float 32,,2,Analog, , ,Block 910 Output 1 +0x20F4,8437,FIQ6218,,Signal Tag,123,float 32,,2,Analog, , ,Block 911 Output 1 +0x20F6,8439,FIQ6216,,Signal Tag,124,float 32,,2,Analog, , ,Block 912 Output 1 +0x20F8,8441,XV3202_REM,,Signal Tag,125,float 32, , ,Digital,DCS,PNL,Block 222 Output 10 +0x20FA,8443,XV3202_OP,,Signal Tag,126,float 32, , ,Digital,ON,OFF,Block 222 Output 11 +0x20FC,8445,XV3202_CL,,Signal Tag,127,float 32, , ,Digital,ON,OFF,Block 222 Output 12 +0x20FE,8447,XV3208_REM,,Signal Tag,128,float 32, , ,Digital,DCS,PNL,Block 222 Output 13 +0x2100,8449,XV3208_OP,,Signal Tag,129,float 32, , ,Digital,ON,OFF,Block 222 Output 14 +0x2102,8451,XV3208_CL,,Signal Tag,130,float 32, , ,Digital,ON,OFF,Block 222 Output 15 +0x2104,8453,BL3208A_RUN,,Signal Tag,131,float 32, , ,Digital,RUN,STOP,Block 224 Output 15 +0x2106,8455,P3701A_RUN,,Signal Tag,132,float 32, , ,Digital,RUN,STOP,Block 224 Output 9 +0x2108,8457,BL3208B_RUN,,Signal Tag,133,float 32, , ,Digital,RUN,STOP,Block 224 Output 16 +0x210A,8459,P3701B_RUN,,Signal Tag,134,float 32, , ,Digital,RUN,STOP,Block 224 Output 10 +0x210C,8461,P3701A_FLT,,Signal Tag,135,float 32, , ,Digital,FAIL,NORMAL,Block 224 Output 11 +0x210E,8463,P3701B_FLT,,Signal Tag,136,float 32, , ,Digital,FAIL,NORMAL,Block 224 Output 12 +0x2110,8465,H3701_BNR_RUN,,Signal Tag,137,float 32, , ,Digital,RUN,STOP,Block 224 Output 13 +0x2112,8467,HT3701_FLT,,Signal Tag,138,float 32, , ,Digital,FAIL,NORMAL,Block 224 Output 14 +0x2114,8469,P3602A_RUN,,Signal Tag,139,float 32, , ,Digital,RUN,STOP,Block 225 Output 9 +0x2116,8471,P3602B_RUN,,Signal Tag,140,float 32, , ,Digital,ON,OFF,Block 225 Output 10 +0x2118,8473,C3601_RUN,,Signal Tag,141,float 32, , ,Digital,ON,OFF,Block 225 Output 11 +0x211A,8475,C3601_TOT_ALARM,,Signal Tag,142,float 32, , ,Digital,FAIL,NORMAL,Block 225 Output 12 +0x211C,8477,LT6111_LL,,Signal Tag,143,float 32, , ,Digital,ON,OFF,Block 931 Output 1 +0x211E,8479,HT3701_STANDBY,,Signal Tag,144,float 32, , ,Digital,ON,OFF,Block 225 Output 13 +0x2120,8481,HTR01_REM,,Signal Tag,145,float 32, , ,Digital,ON,OFF,Block 226 Output 9 +0x2122,8483,HTR01_STATE,,Signal Tag,146,float 32, , ,Digital,ON,OFF,Block 226 Output 10 +0x2124,8485,HTR02_REM,,Signal Tag,147,float 32, , ,Digital,ON,OFF,Block 226 Output 11 +0x2126,8487,HTR02_STATE,,Signal Tag,148,float 32, , ,Digital,ON,OFF,Block 226 Output 12 +0x2128,8489,HTR04_REM,,Signal Tag,149,float 32, , ,Digital,ON,OFF,Block 226 Output 15 +0x212A,8491,HTR04_STATE,,Signal Tag,150,float 32, , ,Digital,ON,OFF,Block 226 Output 16 +0x212C,8493,P3401_A_SEL,,Signal Tag,151,float 32, , ,Digital,ON,OFF,Block 226 Output 13 +0x212E,8495,P3401_B_SEL,,Signal Tag,152,float 32, , ,Digital,ON,OFF,Block 226 Output 14 +0x2130,8497,LT6211_LL,,Signal Tag,153,float 32, , ,Digital,ON,OFF,Block 933 Output 1 +0x2132,8499,LT5111_LL,,Signal Tag,154,float 32, , ,Digital,ON,OFF,Block 935 Output 1 +0x2134,8501,XV3208C_REM,,Signal Tag,155,float 32, , ,Digital,DCS,PNL,Block 223 Output 11 +0x2136,8503,XV3208C_OP,,Signal Tag,156,float 32, , ,Digital,ON,OFF,Block 223 Output 12 +0x2138,8505,XV3208C_CL,,Signal Tag,157,float 32, , ,Digital,ON,OFF,Block 223 Output 13 +0x213A,8507,AG3208_REM,,Signal Tag,158,float 32, , ,Digital,DCS,PNL,Block 223 Output 14 +0x213C,8509,AG3208_RUN,,Signal Tag,159,float 32, , ,Digital,ON,OFF,Block 223 Output 15 +0x213E,8511,AG3208_FLT,,Signal Tag,160,float 32, , ,Digital,ON,OFF,Block 223 Output 16 +0x2140,8513,XV3402_REM,,Signal Tag,161,float 32, , ,Digital,ON,OFF,Block 227 Output 14 +0x2142,8515,XV3402_OP,,Signal Tag,162,float 32, , ,Digital,ON,OFF,Block 227 Output 15 +0x2144,8517,XV3402_CL,,Signal Tag,163,float 32, , ,Digital,ON,OFF,Block 227 Output 16 +0x2146,8519,P3401_REM,,Signal Tag,164,float 32, , ,Digital,ON,OFF,Block 225 Output 14 +0x2148,8521,P3401_STATE,,Signal Tag,165,float 32, , ,Digital,ON,OFF,Block 225 Output 15 +0x214A,8523,P3401_FLT,,Signal Tag,166,float 32, , ,Digital,ON,OFF,Block 225 Output 16 +0x214C,8525,P3402_REM,,Signal Tag,167,float 32, , ,Digital,ON,OFF,Block 227 Output 9 +0x214E,8527,P3402_STATE,,Signal Tag,168,float 32, , ,Digital,ON,OFF,Block 227 Output 10 +0x2150,8529,P3402_FLT,,Signal Tag,169,float 32, , ,Digital,ON,OFF,Block 227 Output 11 +0x2152,8531,P3402_A_SEL,,Signal Tag,170,float 32, , ,Digital,ON,OFF,Block 227 Output 12 +0x2154,8533,P3402_B_SEL,,Signal Tag,171,float 32, , ,Digital,ON,OFF,Block 227 Output 13 +0x2156,8535,LT3203_IL,,Signal Tag,172,float 32, , ,Digital,ON,OFF,Block 277 Output 1 +0x2158,8537,LT3208_IL,,Signal Tag,173,float 32, , ,Digital,ON,OFF,Block 299 Output 1 +0x215A,8539,TI8117HI,,Signal Tag,174,float 32, , ,Digital,ON,OFF,Block 1097 Output 1 +0x215C,8541,LT3207_IL,,Signal Tag,175,float 32, , ,Digital,ON,OFF,Block 1103 Output 1 +0x215E,8543,LT6128_LL,,Signal Tag,176,float 32, , ,Digital,ON,OFF,Block 937 Output 1 +0x2160,8545,LT3101_IL,,Signal Tag,177,float 32, , ,Digital,ON,OFF,Block 382 Output 1 +0x2162,8547,LT8113LO,,Signal Tag,178,float 32, , ,Digital,ON,OFF,Block 1098 Output 1 +0x2164,8549,FIQ3101,,Signal Tag,179,float 32,,0,Analog, , ,Block 514 Output 1 +0x2166,8551,P8118ESD,,Signal Tag,180,float 32, , ,Digital,ON,OFF,Block 1102 Output 1 +0x2168,8553,P8114ESD,,Signal Tag,181,float 32, , ,Digital,ON,OFF,Block 1100 Output 1 +0x216A,8555,P3101A_AUTO_ON,,Signal Tag,182,float 32, , ,Digital,ON,OFF,Block 409 Output 1 +0x216C,8557,PT5111B,,Signal Tag,183,float 32,,1,Analog, , ,Block 147 Output 4 +0x216E,8559,P3101B_AUTO_ON,,Signal Tag,184,float 32, , ,Digital,ON,OFF,Block 435 Output 1 +0x2170,8561,PT6111B,,Signal Tag,185,float 32,,1,Analog, , ,Block 159 Output 4 +0x2172,8563,FQ3208_TOT,,Signal Tag,186,float 32,,0,Analog, , ,Block 516 Output 1 +0x2174,8565,PT6211B,,Signal Tag,187,float 32,,1,Analog, , ,Block 161 Output 4 +0x2176,8567,XV6223_REM,,Signal Tag,188,float 32, , ,Digital,ON,OFF,Block 220 Output 11 +0x2178,8569,XV6223_OP,,Signal Tag,189,float 32, , ,Digital,ON,OFF,Block 220 Output 12 +0x217A,8571,XV6223_CL,,Signal Tag,190,float 32, , ,Digital,ON,OFF,Block 220 Output 13 +0x217C,8573,FQ3203,,Signal Tag,191,float 32,,0,Analog, , ,Block 517 Output 1 +0x217E,8575,FQ3102_DR_TOT,,Signal Tag,192,float 32,,0,Analog, , ,Block 519 Output 1 +0x2180,8577,FQ3208_DR_TOT,,Signal Tag,193,float 32,,0,Analog, , ,Block 520 Output 1 +0x2182,8579,FQ3203_DR_TOT,,Signal Tag,194,float 32,,0,Analog, , ,Block 521 Output 1 +0x2184,8581,TE6601,,Signal Tag,195,float 32,,0,Analog, , ,Block 184 Output 4 +0x2186,8583,3101TOT,,Signal Tag,196,float 32,,0,Analog, , ,Block 518 Output 1 +0x2188,8585,FQ3208B_TOT,,Signal Tag,197,float 32,,0,Analog, , ,Block 524 Output 1 +0x218A,8587,XV3208B_AUTO_ON,,Signal Tag,198,float 32, , ,Digital,ON,OFF,Block 512 Output 1 +0x218C,8589,P6102_STATE,,Signal Tag,199,float 32,,0,Analog, , ,Block 941 Output 2 +0x218E,8591,FQ3402,,Signal Tag,200,float 32,kg,1,Analog, , ,Block 602 Output 1 +0x2190,8593,FI3401,,Signal Tag,201,float 32,,1,Analog, , ,Block 571 Output 1 +0x2192,8595,FI3402,,Signal Tag,202,float 32,kg/h,1,Analog, , ,Block 577 Output 1 +0x2194,8597,P6114_STATE,,Signal Tag,203,float 32,,0,Analog, , ,Block 942 Output 2 +0x2196,8599,FQ3401,,Signal Tag,204,float 32,kg,1,Analog, , ,Block 598 Output 1 +0x2198,8601,P6118_STATE,,Signal Tag,205,float 32,,0,Analog, , ,Block 943 Output 2 +0x219A,8603,P6116_STATE,,Signal Tag,206,float 32,,0,Analog, , ,Block 944 Output 2 +0x219C,8605,VP8117A_STATE,,Signal Tag,207,float 32,,0,Analog, , ,Block 1063 Output 2 +0x219E,8607,P6123_STATE,,Signal Tag,208,float 32,,0,Analog, , ,Block 946 Output 2 +0x21A0,8609,FIT6101,FEED FLOW,Signal Tag,209,float 32,,2,Analog, , ,Block 619 Output 4 +0x21A2,8611,FIT6113,REFLUX FLOW,Signal Tag,210,float 32,,2,Analog, , ,Block 620 Output 4 +0x21A4,8613,FIT6114,TOP FLW,Signal Tag,211,float 32,,2,Analog, , ,Block 621 Output 4 +0x21A6,8615,FIT6118,SIDE FLOW,Signal Tag,212,float 32,,2,Analog, , ,Block 622 Output 4 +0x21A8,8617,FIT6116,BOTTOM FLOW,Signal Tag,213,float 32,,2,Analog, , ,Block 623 Output 4 +0x21AA,8619,FIT6115,STEAM FLOW,Signal Tag,214,float 32,,2,Analog, , ,Block 1328 Output 1 +0x21AC,8621,FIT8101,N2 FLOW,Signal Tag,215,float 32,,2,Analog, , ,Block 625 Output 4 +0x21AE,8623,FIT6128,SCRUBBER FLOW,Signal Tag,216,float 32,,2,Analog, , ,Block 626 Output 4 +0x21B0,8625,LT6111,C-6111 LEVEL,Signal Tag,217,float 32,%,1,Analog, , ,Block 1320 Output 1 +0x21B2,8627,LT6113,D-6113 LEVEL,Signal Tag,218,float 32,%,1,Analog, , ,Block 628 Output 4 +0x21B4,8629,FIT6216,BOTTOM FLOW,Signal Tag,219,float 32,,2,Analog, , ,Block 647 Output 4 +0x21B6,8631,FIT6215,STEAM FLOW,Signal Tag,220,float 32,,2,Analog, , ,Block 648 Output 4 +0x21B8,8633,LT6128,SCRUBBER SC-6128,Signal Tag,221,float 32,%,1,Analog, , ,Block 629 Output 4 +0x21BA,8635,PT6111,VACUUM PRESSURE,Signal Tag,222,float 32,mmHg,2,Analog, , ,Block 1321 Output 1 +0x21BC,8637,FIT8113,N2 FLOW,Signal Tag,223,float 32,,2,Analog, , ,Block 649 Output 4 +0x21BE,8639,LT6211,C-6111 LEVEL,Signal Tag,224,float 32,,1,Analog, , ,Block 650 Output 4 +0x21C0,8641,LT6213,D-6113 LEVEL,Signal Tag,225,float 32,%,1,Analog, , ,Block 651 Output 4 +0x21C2,8643,PT6211,VACUUM PRESSURE,Signal Tag,226,float 32,mmHg,2,Analog, , ,Block 652 Output 4 +0x21C4,8645,FIT5101,FEED FLOW,Signal Tag,227,float 32,,2,Analog, , ,Block 653 Output 4 +0x21C6,8647,FIT5113,REFLUX FLOW,Signal Tag,228,float 32,%,1,Analog, , ,Block 654 Output 4 +0x21C8,8649,FIT6201,FEED FLOW,Signal Tag,229,float 32,,2,Analog, , ,Block 643 Output 4 +0x21CA,8651,FIT6213,REFLUX FLOW,Signal Tag,230,float 32,,2,Analog, , ,Block 644 Output 4 +0x21CC,8653,FIT6214,TOP FLOW,Signal Tag,231,float 32,,2,Analog, , ,Block 645 Output 4 +0x21CE,8655,FIT6218,SIDE FLOW,Signal Tag,232,float 32,,2,Analog, , ,Block 646 Output 4 +0x21D0,8657,FIT5114,TOP FLOW,Signal Tag,233,float 32,,2,Analog, , ,Block 655 Output 4 +0x21D2,8659,FIT5118,SIDE FLOW,Signal Tag,234,float 32,,2,Analog, , ,Block 656 Output 4 +0x21D4,8661,FIT5116,BOTTOM FLOW,Signal Tag,235,float 32,,2,Analog, , ,Block 657 Output 4 +0x21D6,8663,FIT5115,STEAM FLOW,Signal Tag,236,float 32,,2,Analog, , ,Block 658 Output 4 +0x21D8,8665,FIT8114,N2 FLOW,Signal Tag,237,float 32,NL,2,Analog, , ,Block 659 Output 4 +0x21DA,8667,LT5111,C-5111 LEVEL,Signal Tag,238,float 32,%,1,Analog, , ,Block 660 Output 4 +0x21DC,8669,LT5113,D-5113 LEVEL,Signal Tag,239,float 32,%,1,Analog, , ,Block 661 Output 4 +0x21DE,8671,P8601A_STATE,,Signal Tag,240,float 32,,0,Analog, , ,Block 1064 Output 2 +0x21E0,8673,LT2203,T-2203 EL LEVEL,Signal Tag,241,float 32,%,1,Analog, , ,Block 672 Output 4 +0x21E2,8675,PT6700,STEAM PRESSURE,Signal Tag,242,float 32,Kg/Cm2,2,Analog, , ,Block 673 Output 4 +0x21E4,8677,PT6900,IA PRESSURE,Signal Tag,243,float 32,Kg/Cm2,2,Analog, , ,Block 674 Output 4 +0x21E6,8679,PT6950,N2 PRESSURE,Signal Tag,244,float 32,mmH2O,2,Analog, , ,Block 675 Output 4 +0x21E8,8681,TI6111A,C-6111 BOT TEMP,Signal Tag,245,float 32,degC,2,Analog, , ,Block 683 Output 4 +0x21EA,8683,TI6111B,C-6111 MID TEMP,Signal Tag,246,float 32,degC,2,Analog, , ,Block 1322 Output 1 +0x21EC,8685,TI6111C,C-6111 MID TEMP,Signal Tag,247,float 32,degC,2,Analog, , ,Block 1324 Output 1 +0x21EE,8687,TI6111D,C-6111 TOP TEMP,Signal Tag,248,float 32,degC,2,Analog, , ,Block 1326 Output 1 +0x21F0,8689,PT5111,VACUUM PRESSURE,Signal Tag,249,float 32,mmHg,2,Analog, , ,Block 663 Output 4 +0x21F2,8691,FIT6120,PGMEA FLOW,Signal Tag,250,float 32,,2,Analog, , ,Block 631 Output 4 +0x21F4,8693,FIT6220,HBM FLOW,Signal Tag,251,float 32,,2,Analog, , ,Block 632 Output 4 +0x21F6,8695,FIT5320,EL FLOW,Signal Tag,252,float 32,,2,Analog, , ,Block 633 Output 4 +0x21F8,8697,LT6121,T-6121 PGMEA LEV,Signal Tag,253,float 32,%,1,Analog, , ,Block 664 Output 4 +0x21FA,8699,LT6122,T-6122 PGMEA LEV,Signal Tag,254,float 32,%,1,Analog, , ,Block 665 Output 4 +0x21FC,8701,LT6123,T-6123 PGMEA BOT,Signal Tag,255,float 32,%,1,Analog, , ,Block 666 Output 4 +0x21FE,8703,LT6221,T-6221 HBM LEVEL,Signal Tag,256,float 32,%,1,Analog, , ,Block 667 Output 4 +0x2200,8705,LT6222,T-6222 HBM LEVEL,Signal Tag,257,float 32,%,1,Analog, , ,Block 668 Output 4 +0x2202,8707,LT6223,T-6221 HBM BOT,Signal Tag,258,float 32,%,1,Analog, , ,Block 669 Output 4 +0x2204,8709,LT5321,T-5321 EL LEVEL,Signal Tag,259,float 32,%,1,Analog, , ,Block 670 Output 4 +0x2206,8711,LT5322,T-5322 EL LEVEL,Signal Tag,260,float 32,%,1,Analog, , ,Block 671 Output 4 +0x2208,8713,TI6103,E-6103 TEMP,Signal Tag,261,float 32,degC,2,Analog, , ,Block 687 Output 4 +0x220A,8715,TI6117,E-6117 TEMP,Signal Tag,262,float 32,degC,2,Analog, , ,Block 688 Output 4 +0x220C,8717,PT6120A,,Signal Tag,263,float 32,,3,Analog, , ,Block 676 Output 4 +0x220E,8719,PT6120B,,Signal Tag,264,float 32,,3,Analog, , ,Block 677 Output 4 +0x2210,8721,TI2203,T-2203 TEMP,Signal Tag,265,float 32,degC,2,Analog, , ,Block 716 Output 4 +0x2212,8723,FIQ6120,,Signal Tag,266,float 32,,2,Analog, , ,Block 983 Output 1 +0x2214,8725,FIQ6220,,Signal Tag,267,float 32,,2,Analog, , ,Block 984 Output 1 +0x2216,8727,FIQ5320,,Signal Tag,268,float 32,,2,Analog, , ,Block 985 Output 1 +0x2218,8729,TI6211A,C-6211 BOT TEMP,Signal Tag,269,float 32,degC,2,Analog, , ,Block 695 Output 4 +0x221A,8731,TI6211B,C-6211 MID TEMP,Signal Tag,270,float 32,degC,2,Analog, , ,Block 696 Output 4 +0x221C,8733,TI6211C,C-6211 MID TEMP,Signal Tag,271,float 32,degC,2,Analog, , ,Block 697 Output 4 +0x221E,8735,TI6211D,C-6211 TOP TEMP,Signal Tag,272,float 32,degC,2,Analog, , ,Block 698 Output 4 +0x2220,8737,TI6203,E-6203 TEMP,Signal Tag,273,float 32,degC,2,Analog, , ,Block 699 Output 4 +0x2222,8739,TI6217,E-6217 TEMP,Signal Tag,274,float 32,degC,2,Analog, , ,Block 700 Output 4 +0x2224,8741,TI5111A,C-5111 BOT TEMP,Signal Tag,275,float 32,degC,2,Analog, , ,Block 701 Output 4 +0x2226,8743,TI5111B,C-5111 MID TEMP,Signal Tag,276,float 32,degC,2,Analog, , ,Block 702 Output 4 +0x2228,8745,VP6117_STATE,,Signal Tag,277,float 32,,0,Analog, , ,Block 947 Output 2 +0x222A,8747,TI5111D,C-5111 TOP TEMP,Signal Tag,278,float 32,degC,2,Analog, , ,Block 703 Output 4 +0x222C,8749,TE5103,E-5103 TEMP,Signal Tag,279,float 32,degC,2,Analog, , ,Block 704 Output 4 +0x222E,8751,TE5117,E-5117 TEMP,Signal Tag,280,float 32,degC,2,Analog, , ,Block 705 Output 4 +0x2230,8753,TE6121,T-6121 TEMP,Signal Tag,281,float 32,degC,2,Analog, , ,Block 706 Output 4 +0x2232,8755,TE6122,T-6122 TEMP,Signal Tag,282,float 32,degC,2,Analog, , ,Block 707 Output 4 +0x2234,8757,TE6123,T-6123 TEMP,Signal Tag,283,float 32,degC,2,Analog, , ,Block 708 Output 4 +0x2236,8759,TE6221,T-6221 TEMP,Signal Tag,284,float 32,degC,2,Analog, , ,Block 709 Output 4 +0x2238,8761,TE6222,T-6222 TEMP,Signal Tag,285,float 32,degC,2,Analog, , ,Block 710 Output 4 +0x223A,8763,TE6223,T-6223 TEMP,Signal Tag,286,float 32,degC,2,Analog, , ,Block 711 Output 4 +0x223C,8765,TE5321,T-5321 TEMP,Signal Tag,287,float 32,degC,2,Analog, , ,Block 712 Output 4 +0x223E,8767,TE5322,T-5322 TEMP,Signal Tag,288,float 32,degC,2,Analog, , ,Block 713 Output 4 +0x2240,8769,P6114_REM,PGMEA TOP PP RL,Signal Tag,289,float 32, , ,Digital,DCS,PNL,Block 764 Output 12 +0x2242,8771,P6114_RUN,PGMEA TOP PP RUN,Signal Tag,290,float 32, , ,Digital,RUN,STOP,Block 764 Output 13 +0x2244,8773,P6114_FLT,PGMEA TOP PP FLT,Signal Tag,291,float 32, , ,Digital,FAIL,NORMAL,Block 764 Output 14 +0x2246,8775,P6118_REM,PGMEA SIDE PP RN,Signal Tag,292,float 32, , ,Digital,DCS,PNL,Block 764 Output 15 +0x2248,8777,P6118_RUN,PGMEA SIDE PP RN,Signal Tag,293,float 32, , ,Digital,RUN,STOP,Block 764 Output 16 +0x224A,8779,P6118_FLT,PGMEA SIDE PP FT,Signal Tag,294,float 32, , ,Digital,FAIL,NORMAL,Block 765 Output 9 +0x224C,8781,P6116_REM,PGMEA BOT PP RL,Signal Tag,295,float 32, , ,Digital,DCS,PNL,Block 765 Output 10 +0x224E,8783,P6116_RUN,PGMEA BOT PP RUN,Signal Tag,296,float 32, , ,Digital,RUN,STOP,Block 765 Output 11 +0x2250,8785,P6116_FLT,PGMEA BOT PP FLT,Signal Tag,297,float 32, , ,Digital,FAIL,NORMAL,Block 765 Output 12 +0x2252,8787,HTR58RUN,,Signal Tag,298,float 32, , ,Digital,ON,OFF,Block 994 Output 1 +0x2254,8789,TE5601,,Signal Tag,299,float 32,,0,Analog, , ,Block 717 Output 4 +0x2256,8791,FT3401,,Signal Tag,300,float 32,,0,Analog, , ,Block 208 Output 4 +0x2258,8793,P6128A__STATE,,Signal Tag,301,float 32,,0,Analog, , ,Block 948 Output 2 +0x225A,8795,P6128B_STATE,,Signal Tag,302,float 32,,0,Analog, , ,Block 949 Output 2 +0x225C,8797,P6202_STATE,,Signal Tag,303,float 32,,0,Analog, , ,Block 950 Output 2 +0x225E,8799,P6123_REM,RECYCLE PP RL,Signal Tag,304,float 32, , ,Digital,DCS,PNL,Block 766 Output 11 +0x2260,8801,P6123_RUN,RECYCLE PP RUN,Signal Tag,305,float 32, , ,Digital,RUN,STOP,Block 766 Output 12 +0x2262,8803,P6123_FLT,RECYCLE PP FLT,Signal Tag,306,float 32, , ,Digital,FAIL,NORMAL,Block 766 Output 13 +0x2264,8805,VP6117_REM,VACUUM PP RL,Signal Tag,307,float 32, , ,Digital,DCS,PNL,Block 766 Output 14 +0x2266,8807,VP6117_RUN,VACUUM PP RUN,Signal Tag,308,float 32, , ,Digital,RUN,STOP,Block 766 Output 15 +0x2268,8809,VP6117_FLT,VACUUM PP FLT,Signal Tag,309,float 32, , ,Digital,FAIL,NORMAL,Block 766 Output 16 +0x226A,8811,P6128A_REM,SCRUBBER PP A RL,Signal Tag,310,float 32, , ,Digital,DCS,PNL,Block 767 Output 9 +0x226C,8813,P6128A_RUN,SCRUBBER PP A RN,Signal Tag,311,float 32, , ,Digital,RUN,STOP,Block 767 Output 10 +0x226E,8815,P6128A_FLT,SCRUBBER PP A FT,Signal Tag,312,float 32, , ,Digital,FAIL,NORMAL,Block 767 Output 11 +0x2270,8817,P6128B_REM,SCRUBBER PP B RL,Signal Tag,313,float 32, , ,Digital,DCS,PNL,Block 767 Output 12 +0x2272,8819,P6128B_RUN,SCRUBBER PP B RN,Signal Tag,314,float 32, , ,Digital,RUN,STOP,Block 767 Output 13 +0x2274,8821,P6128B_FLT,SCRUBBER PP B FT,Signal Tag,315,float 32, , ,Digital,FAIL,NORMAL,Block 767 Output 14 +0x2276,8823,FT3402,,Signal Tag,316,float 32,,0,Analog, , ,Block 209 Output 4 +0x2278,8825,FIQ5101,,Signal Tag,317,float 32,,2,Analog, , ,Block 999 Output 1 +0x227A,8827,FIQ5113,,Signal Tag,318,float 32,,2,Analog, , ,Block 1002 Output 1 +0x227C,8829,P6214_REM,HB TOP PP RL,Signal Tag,319,float 32, , ,Digital,DCS,PNL,Block 768 Output 10 +0x227E,8831,P6214_RUN,HBM TOP PP RUN,Signal Tag,320,float 32, , ,Digital,RUN,STOP,Block 768 Output 11 +0x2280,8833,P6214_FLT,HBM TOP PP FLT,Signal Tag,321,float 32, , ,Digital,FAIL,NORMAL,Block 768 Output 12 +0x2282,8835,P6218_REM,HBM SIDE PP RL,Signal Tag,322,float 32, , ,Digital,DCS,PNL,Block 768 Output 13 +0x2284,8837,P6218_RUN,HBM SIDE PP RUN,Signal Tag,323,float 32, , ,Digital,RUN,STOP,Block 768 Output 14 +0x2286,8839,P6218_FLT,HBM SIDE PP FLT,Signal Tag,324,float 32, , ,Digital,FAIL,NORMAL,Block 768 Output 15 +0x2288,8841,P6216_REM,HBM BOT PP RL,Signal Tag,325,float 32, , ,Digital,DCS,PNL,Block 768 Output 16 +0x228A,8843,P6216_RUN,HBM BOT PP RUN,Signal Tag,326,float 32, , ,Digital,RUN,STOP,Block 769 Output 9 +0x228C,8845,P6216_FLT,HBM BOT PP FLT,Signal Tag,327,float 32, , ,Digital,FAIL,NORMAL,Block 769 Output 10 +0x228E,8847,FIQ5114,,Signal Tag,328,float 32,,2,Analog, , ,Block 1005 Output 1 +0x2290,8849,FIQ5115,,Signal Tag,329,float 32,,2,Analog, , ,Block 1008 Output 1 +0x2292,8851,FIQ5116,,Signal Tag,330,float 32,,2,Analog, , ,Block 1011 Output 1 +0x2294,8853,P6214_STATE,,Signal Tag,331,float 32,,0,Analog, , ,Block 951 Output 2 +0x2296,8855,P6218_STATE,,Signal Tag,332,float 32,,0,Analog, , ,Block 952 Output 2 +0x2298,8857,P6216_STATE,,Signal Tag,333,float 32,,0,Analog, , ,Block 953 Output 2 +0x229A,8859,P6223_REM,RECYCLE PP RL,Signal Tag,334,float 32, , ,Digital,DCS,PNL,Block 775 Output 11 +0x229C,8861,P6223_RUN,RECYCLE PP RUN,Signal Tag,335,float 32, , ,Digital,RUN,STOP,Block 775 Output 12 +0x229E,8863,P6223_FLT,RECYCLE PP FLT,Signal Tag,336,float 32, , ,Digital,FAIL,NORMAL,Block 775 Output 13 +0x22A0,8865,VP6217_REM,VACUUM PP RL,Signal Tag,337,float 32, , ,Digital,DCS,PNL,Block 770 Output 12 +0x22A2,8867,VP6217_RUN,VACUUM PP RUN,Signal Tag,338,float 32, , ,Digital,RUN,STOP,Block 770 Output 13 +0x22A4,8869,VP6217_FLT,VACUUM PP FLT,Signal Tag,339,float 32, , ,Digital,FAIL,NORMAL,Block 770 Output 14 +0x22A6,8871,P5101_REM,EL FEED PP RL,Signal Tag,340,float 32, , ,Digital,DCS,PNL,Block 770 Output 15 +0x22A8,8873,P5101_RUN,EL FEED PP RUN,Signal Tag,341,float 32, , ,Digital,RUN,STOP,Block 770 Output 16 +0x22AA,8875,P5101_FLT,EL FEED PP FLT,Signal Tag,342,float 32, , ,Digital,FAIL,NORMAL,Block 771 Output 9 +0x22AC,8877,P5114_REM,EL TOP PP RL,Signal Tag,343,float 32, , ,Digital,DCS,PNL,Block 771 Output 10 +0x22AE,8879,P5114_RUN,EL TOP PP RUN,Signal Tag,344,float 32, , ,Digital,RUN,STOP,Block 771 Output 11 +0x22B0,8881,P5114_FLT,EL TOP PP FLT,Signal Tag,345,float 32, , ,Digital,FAIL,NORMAL,Block 771 Output 12 +0x22B2,8883,P5118_REM,EL SIDE PP RL,Signal Tag,346,float 32, , ,Digital,DCS,PNL,Block 771 Output 13 +0x22B4,8885,P5118_RUN,EL SIDE PP RUN,Signal Tag,347,float 32, , ,Digital,RUN,STOP,Block 771 Output 14 +0x22B6,8887,P5118_FLT,EL SIDE PP FLT,Signal Tag,348,float 32, , ,Digital,FAIL,NORMAL,Block 771 Output 15 +0x22B8,8889,P5115_REM,EL BOT PP RL,Signal Tag,349,float 32, , ,Digital,DCS,PNL,Block 771 Output 16 +0x22BA,8891,P5115_RUN,EL BOT PP RUN,Signal Tag,350,float 32, , ,Digital,RUN,STOP,Block 772 Output 9 +0x22BC,8893,P5115_FLT,EL BOT PP FLT,Signal Tag,351,float 32, , ,Digital,FAIL,NORMAL,Block 772 Output 10 +0x22BE,8895,P5116_REM,EL BOT PP RL,Signal Tag,352,float 32, , ,Digital,DCS,PNL,Block 772 Output 11 +0x22C0,8897,P5116_RUN,EL BOT PP RUN,Signal Tag,353,float 32, , ,Digital,RUN,STOP,Block 772 Output 12 +0x22C2,8899,P5116_FLT,EL BOT PP FLT,Signal Tag,354,float 32, , ,Digital,FAIL,NORMAL,Block 772 Output 13 +0x22C4,8901,P2203_REM,UNLOADING PP RL,Signal Tag,355,float 32, , ,Digital,DCS,PNL,Block 772 Output 14 +0x22C6,8903,P2203_RUN,UNLOADING PP RUN,Signal Tag,356,float 32, , ,Digital,RUN,STOP,Block 772 Output 15 +0x22C8,8905,P2203_FLT,UNLOADING PP FLT,Signal Tag,357,float 32, , ,Digital,FAIL,NORMAL,Block 772 Output 16 +0x22CA,8907,P8601B_STATE,,Signal Tag,358,float 32,,0,Analog, , ,Block 1065 Output 2 +0x22CC,8909,P6223_STATE,,Signal Tag,359,float 32,,0,Analog, , ,Block 955 Output 2 +0x22CE,8911,VP6217_STATE,,Signal Tag,360,float 32,,0,Analog, , ,Block 956 Output 2 +0x22D0,8913,VP5117_REM,VACUUM PP RL,Signal Tag,361,float 32, , ,Digital,DCS,PNL,Block 773 Output 12 +0x22D2,8915,VP5117_RUN,VACUUM PP RUN,Signal Tag,362,float 32, , ,Digital,RUN,STOP,Block 773 Output 13 +0x22D4,8917,VP5117_FLT,VACUUM PP FLT,Signal Tag,363,float 32, , ,Digital,FAIL,NORMAL,Block 773 Output 14 +0x22D6,8919,CH5601_REM,EL CW PP RL,Signal Tag,364,float 32, , ,Digital,DCS,PNL,Block 773 Output 15 +0x22D8,8921,CH5601_RUN,EL CW PP RUN,Signal Tag,365,float 32, , ,Digital,RUN,SOTP,Block 773 Output 16 +0x22DA,8923,CH5601_FLT,EL CW PP FLT,Signal Tag,366,float 32, , ,Digital,FAIL,NORMAL,Block 774 Output 9 +0x22DC,8925,P5101_STATE,,Signal Tag,367,float 32,,0,Analog, , ,Block 957 Output 2 +0x22DE,8927,P5114_STATE,,Signal Tag,368,float 32,,0,Analog, , ,Block 958 Output 2 +0x22E0,8929,P5118_STATE,,Signal Tag,369,float 32,,0,Analog, , ,Block 959 Output 2 +0x22E2,8931,P5115_STATE,,Signal Tag,370,float 32,,0,Analog, , ,Block 960 Output 2 +0x22E4,8933,P2203_STATE,,Signal Tag,371,float 32,,0,Analog, , ,Block 961 Output 2 +0x22E6,8935,VP5117_STATE,,Signal Tag,372,float 32,,0,Analog, , ,Block 962 Output 2 +0x22E8,8937,CH5601_STATE,,Signal Tag,373,float 32,,0,Analog, , ,Block 963 Output 2 +0x22EA,8939,HTR05_STATE,,Signal Tag,374,float 32,,0,Analog, , ,Block 964 Output 2 +0x22EC,8941,HTR06_STATE,,Signal Tag,375,float 32,,0,Analog, , ,Block 965 Output 2 +0x22EE,8943,HTR07_STATE,,Signal Tag,376,float 32,,0,Analog, , ,Block 966 Output 2 +0x22F0,8945,HTR08_STATE,,Signal Tag,377,float 32,,0,Analog, , ,Block 967 Output 2 +0x22F2,8947,XV6120_STATE,,Signal Tag,378,float 32,,0,Analog, , ,Block 968 Output 2 +0x22F4,8949,XV6220_STATE,,Signal Tag,379,float 32,,0,Analog, , ,Block 971 Output 2 +0x22F6,8951,XV5320_STATE,,Signal Tag,380,float 32,,0,Analog, , ,Block 972 Output 2 +0x22F8,8953,P5116_STATE,,Signal Tag,381,float 32,,0,Analog, , ,Block 973 Output 2 +0x22FA,8955,PT6220A,,Signal Tag,382,float 32,,3,Analog, , ,Block 678 Output 4 +0x22FC,8957,PT6220B,,Signal Tag,383,float 32,,3,Analog, , ,Block 679 Output 4 +0x22FE,8959,PT5320A,,Signal Tag,384,float 32,,3,Analog, , ,Block 680 Output 4 +0x2300,8961,PT5320B,,Signal Tag,385,float 32,,3,Analog, , ,Block 681 Output 4 +0x2302,8963,BL6100,,Signal Tag,386,float 32, , ,Digital,ON,OFF,Block 778 Output 13 +0x2304,8965,FIQ5118,,Signal Tag,387,float 32,,2,Analog, , ,Block 1014 Output 1 +0x2306,8967,LT6100,,Signal Tag,388,float 32,,0,Analog, , ,Block 635 Output 4 +0x2308,8969,LT6200,,Signal Tag,389,float 32,,0,Analog, , ,Block 636 Output 4 +0x230A,8971,TE3650,,Signal Tag,390,float 32,,0,Analog, , ,Block 637 Output 4 +0x230C,8973,TE3600,,Signal Tag,391,float 32,,0,Analog, , ,Block 638 Output 4 +0x230E,8975,P6123_IFB,,Signal Tag,392,float 32,Hz,1,Analog, , ,Block 639 Output 4 +0x2310,8977,P6223_IFB,,Signal Tag,393,float 32,Hz,1,Analog, , ,Block 640 Output 4 +0x2312,8979,P5102_REM,,Signal Tag,394,float 32, , ,Digital,ON,OFF,Block 773 Output 9 +0x2314,8981,P5102_FLT,,Signal Tag,395,float 32, , ,Digital,ON,OFF,Block 773 Output 11 +0x2316,8983,P5102_IFB,,Signal Tag,396,float 32,,0,Analog, , ,Block 641 Output 4 +0x2318,8985,HTR05_REM,PGMEA HC RL,Signal Tag,397,float 32, , ,Digital,DCS,PNL,Block 777 Output 10 +0x231A,8987,HTR05_RUN,PGMEA GC RUN,Signal Tag,398,float 32, , ,Digital,RUN,STOP,Block 777 Output 11 +0x231C,8989,HTR06_REM,HBM HC RL,Signal Tag,399,float 32, , ,Digital,DCS,PNL,Block 777 Output 12 +0x231E,8991,HTR06_RUN,HBM HC RUN,Signal Tag,400,float 32, , ,Digital,RUN,STOP,Block 777 Output 13 +0x2320,8993,HTR07_REM,EL HC RL,Signal Tag,401,float 32, , ,Digital,DCS,PNL,Block 777 Output 14 +0x2322,8995,HTR07_RUN,EL HC RUN,Signal Tag,402,float 32, , ,Digital,RUN,STOP,Block 777 Output 15 +0x2324,8997,HTR08_REM,SPARE HC RL,Signal Tag,403,float 32, , ,Digital,DCS,PNL,Block 777 Output 16 +0x2326,8999,HTR08_RUN,SPARE HC RUN,Signal Tag,404,float 32, , ,Digital,RUN,STOP,Block 778 Output 9 +0x2328,9001,P5102_STATE,,Signal Tag,405,float 32,,0,Analog, , ,Block 1022 Output 2 +0x232A,9003,P3401A_STATE,,Signal Tag,406,float 32, , ,Digital,ON,OFF,Block 1023 Output 1 +0x232C,9005,P3401B_STATE,,Signal Tag,407,float 32, , ,Digital,ON,OFF,Block 1024 Output 1 +0x232E,9007,P3402A_STATE,,Signal Tag,408,float 32, , ,Digital,ON,OFF,Block 1025 Output 1 +0x2330,9009,P3402B_STATE,,Signal Tag,409,float 32, , ,Digital,ON,OFF,Block 1026 Output 1 +0x2332,9011,P5320_RUN,,Signal Tag,410,float 32, , ,Digital,ON,OFF,Block 778 Output 12 +0x2334,9013,P6102_REM,,Signal Tag,411,float 32, , ,Digital,DCS,MCC,Block 764 Output 9 +0x2336,9015,P6102_RUN,,Signal Tag,412,float 32, , ,Digital,RUN,STOP,Block 764 Output 10 +0x2338,9017,P6102_FLT,,Signal Tag,413,float 32, , ,Digital,FAULT,NORMAL,Block 764 Output 11 +0x233A,9019,P6202_REM,,Signal Tag,414,float 32, , ,Digital,ON,OFF,Block 765 Output 16 +0x233C,9021,P6202_RUN,,Signal Tag,415,float 32, , ,Digital,ON,OFF,Block 766 Output 9 +0x233E,9023,P6202_FLT,,Signal Tag,416,float 32, , ,Digital,ON,OFF,Block 766 Output 10 +0x2340,9025,P6102_IFB,,Signal Tag,417,float 32,,1,Analog, , ,Block 634 Output 4 +0x2342,9027,P6202_IFB,,Signal Tag,418,float 32,,1,Analog, , ,Block 642 Output 4 +0x2344,9029,LT8111,,Signal Tag,419,float 32,,0,Analog, , ,Block 207 Output 4 +0x2346,9031,P8601A_REM,,Signal Tag,420,float 32, , ,Digital,ON,OFF,Block 215 Output 9 +0x2348,9033,P8601A_RUN,,Signal Tag,421,float 32, , ,Digital,ON,OFF,Block 215 Output 10 +0x234A,9035,P8601A_FLT,,Signal Tag,422,float 32, , ,Digital,ON,OFF,Block 215 Output 11 +0x234C,9037,P8601B_REM,,Signal Tag,423,float 32, , ,Digital,ON,OFF,Block 215 Output 12 +0x234E,9039,P8601B_RUN,,Signal Tag,424,float 32, , ,Digital,ON,OFF,Block 215 Output 13 +0x2350,9041,P8601B_FLT,,Signal Tag,425,float 32, , ,Digital,ON,OFF,Block 215 Output 14 +0x2352,9043,CH8601B_REM,,Signal Tag,426,float 32, , ,Digital,ON,OFF,Block 218 Output 15 +0x2354,9045,CH8601B_RUN,,Signal Tag,427,float 32, , ,Digital,ON,OFF,Block 218 Output 16 +0x2356,9047,CH8601B_FLT,,Signal Tag,428,float 32, , ,Digital,ON,OFF,Block 219 Output 9 +0x2358,9049,P8101_IFB,,Signal Tag,429,float 32,,0,Analog, , ,Block 682 Output 4 +0x235A,9051,TI8111A,,Signal Tag,430,float 32,,0,Analog, , ,Block 689 Output 4 +0x235C,9053,TI8111B,,Signal Tag,431,float 32,,0,Analog, , ,Block 690 Output 4 +0x235E,9055,TI8111C,,Signal Tag,432,float 32,,0,Analog, , ,Block 691 Output 4 +0x2360,9057,TI8111D,,Signal Tag,433,float 32,,0,Analog, , ,Block 692 Output 4 +0x2362,9059,TI8103,,Signal Tag,434,float 32,,0,Analog, , ,Block 693 Output 4 +0x2364,9061,TI8117,,Signal Tag,435,float 32,,0,Analog, , ,Block 694 Output 4 +0x2366,9063,TI8601,,Signal Tag,436,float 32,,0,Analog, , ,Block 721 Output 4 +0x2368,9065,PICA3203-TRIP,,Signal Tag,437,float 32, , ,Digital,ON,OFF,Block 1124 Output 1 +0x236A,9067,TICA3202A-HI-ESD,,Signal Tag,438,float 32, , ,Digital,ON,OFF,Block 562 Output 20 +0x236C,9069,P8114_REM,,Signal Tag,439,float 32, , ,Digital,ON,OFF,Block 774 Output 10 +0x236E,9071,P8114_RUN,,Signal Tag,440,float 32, , ,Digital,ON,OFF,Block 774 Output 11 +0x2370,9073,P8114_FLT,,Signal Tag,441,float 32, , ,Digital,ON,OFF,Block 774 Output 12 +0x2372,9075,P8118_REM,,Signal Tag,442,float 32, , ,Digital,ON,OFF,Block 774 Output 13 +0x2374,9077,P8118_RUN,,Signal Tag,443,float 32, , ,Digital,ON,OFF,Block 774 Output 14 +0x2376,9079,P8118_FLT,,Signal Tag,444,float 32, , ,Digital,ON,OFF,Block 774 Output 15 +0x2378,9081,P8101_REM,,Signal Tag,445,float 32, , ,Digital,ON,OFF,Block 774 Output 16 +0x237A,9083,P8101_RUN,,Signal Tag,446,float 32, , ,Digital,ON,OFF,Block 775 Output 9 +0x237C,9085,P8101_FLT,,Signal Tag,447,float 32, , ,Digital,ON,OFF,Block 775 Output 10 +0x237E,9087,P8116_REM,,Signal Tag,448,float 32, , ,Digital,ON,OFF,Block 775 Output 14 +0x2380,9089,P8116_RUN,,Signal Tag,449,float 32, , ,Digital,ON,OFF,Block 775 Output 15 +0x2382,9091,P8116_FLT,,Signal Tag,450,float 32, , ,Digital,ON,OFF,Block 775 Output 16 +0x2384,9093,FIT8118,,Signal Tag,451,float 32,,0,Analog, , ,Block 662 Output 4 +0x2386,9095,PT6950C,,Signal Tag,452,float 32,,0,Analog, , ,Block 142 Output 4 +0x2388,9097,TE3203,,Signal Tag,453,float 32,,0,Analog, , ,Block 183 Output 4 +0x238A,9099,CH8601B_STATE,,Signal Tag,454,float 32,,0,Analog, , ,Block 1066 Output 2 +0x238C,9101,CH8601A_STATE,,Signal Tag,455,float 32,,0,Analog, , ,Block 1067 Output 2 +0x238E,9103,P8114_STATE,,Signal Tag,456,float 32,,0,Analog, , ,Block 1068 Output 2 +0x2390,9105,P8118_STATE,,Signal Tag,457,float 32,,0,Analog, , ,Block 1069 Output 2 +0x2392,9107,P8101_STATE,,Signal Tag,458,float 32,,0,Analog, , ,Block 1070 Output 2 +0x2394,9109,P8116_STATE,,Signal Tag,459,float 32,,0,Analog, , ,Block 1071 Output 2 +0x2396,9111,FIQ8101,,Signal Tag,460,float 32,,2,Analog, , ,Block 1076 Output 1 +0x2398,9113,FIQ8115,,Signal Tag,461,float 32,,2,Analog, , ,Block 1077 Output 1 +0x239A,9115,FIQ8113,,Signal Tag,462,float 32,,2,Analog, , ,Block 1082 Output 1 +0x239C,9117,FIQ8118,,Signal Tag,463,float 32,,2,Analog, , ,Block 1083 Output 1 +0x239E,9119,FIQ8116,,Signal Tag,464,float 32,,2,Analog, , ,Block 1088 Output 1 +0x23A0,9121,FIQ8114,,Signal Tag,465,float 32,,2,Analog, , ,Block 1089 Output 1 +0x23A2,9123,TICA3202A-HI-IL,,Signal Tag,466,float 32, , ,Digital,ON,OFF,Block 562 Output 21 +0x23A4,9125,PICA3203-LO-ESD,,Signal Tag,467,float 32, , ,Digital,ON,OFF,Block 564 Output 20 +0x23A6,9127,PICA3203-LO-IL,,Signal Tag,468,float 32, , ,Digital,ON,OFF,Block 564 Output 21 +0x23A8,9129,TICA3403-TRIP,,Signal Tag,469,float 32, , ,Digital,ON,OFF,Block 1139 Output 1 +0x23AA,9131,TICA3403-HI-IL,,Signal Tag,470,float 32, , ,Digital,ON,OFF,Block 599 Output 14 +0x23AC,9133,TICA5111A-TRIP,,Signal Tag,471,float 32, , ,Digital,ON,OFF,Block 1150 Output 1 +0x23AE,9135,PICA5111-TRIP,,Signal Tag,472,float 32, , ,Digital,ON,OFF,Block 1153 Output 1 +0x23B0,9137,LICA5113-LO-ESD,,Signal Tag,473,float 32, , ,Digital,ON,OFF,Block 995 Output 20 +0x23B2,9139,LICA5113-LO-IL,,Signal Tag,474,float 32, , ,Digital,ON,OFF,Block 995 Output 21 +0x23B4,9141,LIC5113-TRIP,,Signal Tag,475,float 32, , ,Digital,ON,OFF,Block 1158 Output 1 +0x23B6,9143,5113LO-MAN-ESD,,Signal Tag,476,float 32, , ,Digital,ON,OFF,Block 1147 Output 1 +0x23B8,9145,5113-LO-ESD,,Signal Tag,477,float 32, , ,Digital,ON,OFF,Block 1161 Output 1 +0x23BA,9147,TICA5111A-HI-ESD,,Signal Tag,478,float 32, , ,Digital,ON,OFF,Block 921 Output 20 +0x23BC,9149,TICA5111A-HI-IL,,Signal Tag,479,float 32, , ,Digital,ON,OFF,Block 921 Output 21 +0x23BE,9151,PICA5111-LO-ESD,,Signal Tag,480,float 32, , ,Digital,ON,OFF,Block 922 Output 20 +0x23C0,9153,PICA5111-LO-IL,,Signal Tag,481,float 32, , ,Digital,ON,OFF,Block 922 Output 21 +0x23C2,9155,TICA6111A-TRIP,,Signal Tag,482,float 32, , ,Digital,ON,OFF,Block 1187 Output 1 +0x23C4,9157,PICA6111-TRIP,,Signal Tag,483,float 32, , ,Digital,ON,OFF,Block 1190 Output 1 +0x23C6,9159,LICA6113-LO-ESD,,Signal Tag,484,float 32, , ,Digital,ON,OFF,Block 928 Output 20 +0x23C8,9161,LICA6113-LO-IL,,Signal Tag,485,float 32, , ,Digital,ON,OFF,Block 928 Output 21 +0x23CA,9163,LICA6113-TRIP,,Signal Tag,486,float 32, , ,Digital,ON,OFF,Block 1195 Output 1 +0x23CC,9165,6113LO-MAN-ESD,,Signal Tag,487,float 32, , ,Digital,ON,OFF,Block 1184 Output 1 +0x23CE,9167,6113-LO-ESD,,Signal Tag,488,float 32, , ,Digital,ON,OFF,Block 1198 Output 1 +0x23D0,9169,TICA6111A-HI-ESD,,Signal Tag,489,float 32, , ,Digital,ON,OFF,Block 799 Output 20 +0x23D2,9171,TICA6111A-HI-IL,,Signal Tag,490,float 32, , ,Digital,ON,OFF,Block 799 Output 21 +0x23D4,9173,PICA6111-LO-ESD,,Signal Tag,491,float 32, , ,Digital,ON,OFF,Block 800 Output 20 +0x23D6,9175,PICA6111-LO-IL,,Signal Tag,492,float 32, , ,Digital,ON,OFF,Block 800 Output 21 +0x23D8,9177,TICA6211-TRIP,,Signal Tag,493,float 32, , ,Digital,ON,OFF,Block 1226 Output 1 +0x23DA,9179,PICA6211-TRIP,,Signal Tag,494,float 32, , ,Digital,ON,OFF,Block 1229 Output 1 +0x23DC,9181,LICA6213-LO-ESD,,Signal Tag,495,float 32, , ,Digital,ON,OFF,Block 929 Output 20 +0x23DE,9183,LICA6213-LO-IL,,Signal Tag,496,float 32, , ,Digital,ON,OFF,Block 929 Output 21 +0x23E0,9185,LICA6213-TRIP,,Signal Tag,497,float 32, , ,Digital,ON,OFF,Block 1234 Output 1 +0x23E2,9187,6213LO-MAN-ESD,,Signal Tag,498,float 32, , ,Digital,ON,OFF,Block 1223 Output 1 +0x23E4,9189,6213-LO-ESD,,Signal Tag,499,float 32, , ,Digital,ON,OFF,Block 1237 Output 1 +0x23E6,9191,TICA6211-HI-ESD,,Signal Tag,500,float 32, , ,Digital,ON,OFF,Block 914 Output 20 +0x23E8,9193,TICA6211-HI-IL,,Signal Tag,501,float 32, , ,Digital,ON,OFF,Block 914 Output 21 +0x23EA,9195,PICA6211-LO-ESD,,Signal Tag,502,float 32, , ,Digital,ON,OFF,Block 915 Output 20 +0x23EC,9197,PICA6211-LO-IL,,Signal Tag,503,float 32, , ,Digital,ON,OFF,Block 915 Output 21 +0x23EE,9199,TICA8111A-TRIP,,Signal Tag,504,float 32,,0,Analog, , ,Block 1096 Output 4 +0x23F0,9201,PICA8111A-TRIP,,Signal Tag,505,float 32,,0,Analog, , ,Block 1096 Output 5 +0x23F2,9203,LICA8113-TRIP,,Signal Tag,506,float 32,,0,Analog, , ,Block 1096 Output 6 +0x23F4,9205,P-3101,,Signal Tag,507,float 32,,0,Analog, , ,Block 1291 Output 2 +0x23F6,9207,P-3101R,,Signal Tag,508,float 32, , ,Digital,ON,OFF,Block 212 Output 9 +0x23F8,9209,P-3101S,,Signal Tag,509,float 32, , ,Digital,ON,OFF,Block 212 Output 10 +0x23FA,9211,P-3101T,,Signal Tag,510,float 32, , ,Digital,ON,OFF,Block 212 Output 11 +0x23FC,9213,TI-3101,,Signal Tag,511,float 32,,0,Analog, , ,Block 185 Output 4 +0x23FE,9215,GEN-BIAS,,Signal Tag,512,float 32,,0,Analog, , ,Block 1310 Output 1 +0x2400,9217,TICA6111A-WSP,,Signal Tag,513,float 32,,0,Analog, , ,Block 799 Output 17 +0x2402,9219,PICA6111-WSP,,Signal Tag,514,float 32,,0,Analog, , ,Block 800 Output 17 +0x2404,9221,FICA6101-WSP,,Signal Tag,515,float 32,,0,Analog, , ,Block 801 Output 17 +0x2406,9223,FICA6113-WSP,,Signal Tag,516,float 32,,0,Analog, , ,Block 802 Output 17 +0x2408,9225,LICA6113-WSP,,Signal Tag,517,float 32,,0,Analog, , ,Block 928 Output 17 +0x240A,9227,FICA6114-WSP,,Signal Tag,518,float 32,,0,Analog, , ,Block 803 Output 17 +0x240C,9229,FICA6116-WSP,,Signal Tag,519,float 32,,0,Analog, , ,Block 804 Output 17 +0x240E,9231,FICA6118-WSP,,Signal Tag,520,float 32,,0,Analog, , ,Block 805 Output 17 +0x2410,9233,TE-6111A-SIM,,Signal Tag,521,float 32,,0,Analog, , ,Block 1312 Output 1 +0x2412,9235,PT-6111-SIM,,Signal Tag,522,float 32,,0,Analog, , ,Block 1313 Output 1 +0x2414,9237,FT-6101-SIM,,Signal Tag,523,float 32,,0,Analog, , ,Block 1314 Output 1 +0x2416,9239,FT-6113-SIM,,Signal Tag,524,float 32,,0,Analog, , ,Block 1315 Output 1 +0x2418,9241,LT-6113-SIM,,Signal Tag,525,float 32,,0,Analog, , ,Block 1316 Output 1 +0x241A,9243,FT-6114-SIM,,Signal Tag,526,float 32,,0,Analog, , ,Block 1317 Output 1 +0x241C,9245,FT-6116-SIM,,Signal Tag,527,float 32,,0,Analog, , ,Block 1318 Output 1 +0x241E,9247,FT-6118-SIM,,Signal Tag,528,float 32,,0,Analog, , ,Block 1319 Output 1 +0x2420,9249,XV-6123,,Signal Tag,529,float 32,,0,Analog, , ,Block 1332 Output 2 +0x2422,9251,XV-6124,,Signal Tag,530,float 32,,0,Analog, , ,Block 1333 Output 2 + +Hex Addr,Dec Addr,Tag Name,Description,Type,#,Data Type,Decimal Places,Tag Type,Access diff --git a/docs/C4-All-Modbus-Map.csv b/docs/C4-All-Modbus-Map.csv new file mode 100644 index 0000000..b255add --- /dev/null +++ b/docs/C4-All-Modbus-Map.csv @@ -0,0 +1,2178 @@ +RevisionID:,9500.0036.0005.0002.0021 +File Name:,HC900-C70 Rev 7.1x : C4-20260414-FOR BACKUP +Controller Name,CONTROLLER +Title:, +Author:, +Created Date:,2020-08-26 오전 10:57:33 +Modified Date:,2026-04-13 오전 11:06:52 + +Report Title:,Modbus All Partitions Report + +Hex Addr,Dec Addr,Partition Name,Tag Name,Description,Type,#,Data Type,Access,EU,Decimal Places,Tag Type,'On' Label,'Off' Label,Initial/Source +0x0000,1,Misc. Parameters,Instrument_Mode,,System Register,,unsigned 16,R/W,,,,,, +0x0002,3,Misc. Parameters,Load_Recipe,,System Register,,float 32,W,,,,,, +0x0004,5,Misc. Parameters,Reserve_Status___C70R_Only,,System Register,,unsigned 16,R,,,,,, +0x0040,65,Loops 1-24,FIC-9101.PV,PV,PID,,float 32,R,,,,,, +0x0042,67,Loops 1-24,FIC-9101.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0044,69,Loops 1-24,FIC-9101.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0046,71,Loops 1-24,FIC-9101.Output,Output,PID,,float 32,R/W,,,,,, +0x0048,73,Loops 1-24,FIC-9101.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x004C,77,Loops 1-24,FIC-9101.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x004E,79,Loops 1-24,FIC-9101.Direction,Direction,PID,,float 32,R,,,,,, +0x0050,81,Loops 1-24,FIC-9101.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0052,83,Loops 1-24,FIC-9101.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0054,85,Loops 1-24,FIC-9101.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0056,87,Loops 1-24,FIC-9101.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0058,89,Loops 1-24,FIC-9101.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x005A,91,Loops 1-24,FIC-9101.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x005C,93,Loops 1-24,FIC-9101.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0060,97,Loops 1-24,FIC-9101.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0064,101,Loops 1-24,FIC-9101.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0066,103,Loops 1-24,FIC-9101.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0068,105,Loops 1-24,FIC-9101.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x006A,107,Loops 1-24,FIC-9101.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x006C,109,Loops 1-24,FIC-9101.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x006E,111,Loops 1-24,FIC-9101.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0070,113,Loops 1-24,FIC-9101.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0074,117,Loops 1-24,FIC-9101.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0076,119,Loops 1-24,FIC-9101.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0078,121,Loops 1-24,FIC-9101.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x007A,123,Loops 1-24,FIC-9101.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x007C,125,Loops 1-24,FIC-9101.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x007E,127,Loops 1-24,FIC-9101.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0086,135,Loops 1-24,FIC-9101.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0088,137,Loops 1-24,FIC-9101.Bias,Bias,PID,,float 32,R/W,,,,,, +0x008A,139,Loops 1-24,FIC-9101.Deviation,Deviation,PID,,float 32,R,,,,,, +0x008E,143,Loops 1-24,FIC-9101.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0090,145,Loops 1-24,FIC-9101.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x00F7,248,Loops 1-24,FIC-9101.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x00F8,249,Loops 1-24,FIC-9101.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x00FA,251,Loops 1-24,FIC-9101.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x00FB,252,Loops 1-24,FIC-9101.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x00FC,253,Loops 1-24,FIC-9101.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x00FD,254,Loops 1-24,FIC-9101.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x00FE,255,Loops 1-24,FIC-9101.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0140,321,Loops 1-24,FICQ-9114.PV,PV,PID,,float 32,R,,,,,, +0x0142,323,Loops 1-24,FICQ-9114.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0144,325,Loops 1-24,FICQ-9114.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0146,327,Loops 1-24,FICQ-9114.Output,Output,PID,,float 32,R/W,,,,,, +0x0148,329,Loops 1-24,FICQ-9114.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x014C,333,Loops 1-24,FICQ-9114.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x014E,335,Loops 1-24,FICQ-9114.Direction,Direction,PID,,float 32,R,,,,,, +0x0150,337,Loops 1-24,FICQ-9114.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0152,339,Loops 1-24,FICQ-9114.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0154,341,Loops 1-24,FICQ-9114.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0156,343,Loops 1-24,FICQ-9114.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0158,345,Loops 1-24,FICQ-9114.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x015A,347,Loops 1-24,FICQ-9114.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x015C,349,Loops 1-24,FICQ-9114.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0160,353,Loops 1-24,FICQ-9114.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0164,357,Loops 1-24,FICQ-9114.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0166,359,Loops 1-24,FICQ-9114.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0168,361,Loops 1-24,FICQ-9114.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x016A,363,Loops 1-24,FICQ-9114.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x016C,365,Loops 1-24,FICQ-9114.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x016E,367,Loops 1-24,FICQ-9114.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0170,369,Loops 1-24,FICQ-9114.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0174,373,Loops 1-24,FICQ-9114.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0176,375,Loops 1-24,FICQ-9114.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0178,377,Loops 1-24,FICQ-9114.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x017A,379,Loops 1-24,FICQ-9114.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x017C,381,Loops 1-24,FICQ-9114.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x017E,383,Loops 1-24,FICQ-9114.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0186,391,Loops 1-24,FICQ-9114.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0188,393,Loops 1-24,FICQ-9114.Bias,Bias,PID,,float 32,R/W,,,,,, +0x018A,395,Loops 1-24,FICQ-9114.Deviation,Deviation,PID,,float 32,R,,,,,, +0x018E,399,Loops 1-24,FICQ-9114.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0190,401,Loops 1-24,FICQ-9114.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x01F7,504,Loops 1-24,FICQ-9114.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x01F8,505,Loops 1-24,FICQ-9114.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x01FA,507,Loops 1-24,FICQ-9114.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x01FB,508,Loops 1-24,FICQ-9114.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x01FC,509,Loops 1-24,FICQ-9114.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x01FD,510,Loops 1-24,FICQ-9114.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x01FE,511,Loops 1-24,FICQ-9114.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0240,577,Loops 1-24,FIC-9113.PV,PV,PID,,float 32,R,,,,,, +0x0242,579,Loops 1-24,FIC-9113.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0244,581,Loops 1-24,FIC-9113.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0246,583,Loops 1-24,FIC-9113.Output,Output,PID,,float 32,R/W,,,,,, +0x0248,585,Loops 1-24,FIC-9113.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x024C,589,Loops 1-24,FIC-9113.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x024E,591,Loops 1-24,FIC-9113.Direction,Direction,PID,,float 32,R,,,,,, +0x0250,593,Loops 1-24,FIC-9113.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0252,595,Loops 1-24,FIC-9113.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0254,597,Loops 1-24,FIC-9113.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0256,599,Loops 1-24,FIC-9113.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0258,601,Loops 1-24,FIC-9113.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x025A,603,Loops 1-24,FIC-9113.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x025C,605,Loops 1-24,FIC-9113.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0260,609,Loops 1-24,FIC-9113.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0264,613,Loops 1-24,FIC-9113.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0266,615,Loops 1-24,FIC-9113.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0268,617,Loops 1-24,FIC-9113.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x026A,619,Loops 1-24,FIC-9113.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x026C,621,Loops 1-24,FIC-9113.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x026E,623,Loops 1-24,FIC-9113.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0270,625,Loops 1-24,FIC-9113.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0274,629,Loops 1-24,FIC-9113.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0276,631,Loops 1-24,FIC-9113.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0278,633,Loops 1-24,FIC-9113.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x027A,635,Loops 1-24,FIC-9113.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x027C,637,Loops 1-24,FIC-9113.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x027E,639,Loops 1-24,FIC-9113.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0286,647,Loops 1-24,FIC-9113.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0288,649,Loops 1-24,FIC-9113.Bias,Bias,PID,,float 32,R/W,,,,,, +0x028A,651,Loops 1-24,FIC-9113.Deviation,Deviation,PID,,float 32,R,,,,,, +0x028E,655,Loops 1-24,FIC-9113.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0290,657,Loops 1-24,FIC-9113.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x02F7,760,Loops 1-24,FIC-9113.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x02F8,761,Loops 1-24,FIC-9113.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x02FA,763,Loops 1-24,FIC-9113.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x02FB,764,Loops 1-24,FIC-9113.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x02FC,765,Loops 1-24,FIC-9113.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x02FD,766,Loops 1-24,FIC-9113.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x02FE,767,Loops 1-24,FIC-9113.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0340,833,Loops 1-24,FIC-9118.PV,PV,PID,,float 32,R,,,,,, +0x0342,835,Loops 1-24,FIC-9118.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0344,837,Loops 1-24,FIC-9118.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0346,839,Loops 1-24,FIC-9118.Output,Output,PID,,float 32,R/W,,,,,, +0x0348,841,Loops 1-24,FIC-9118.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x034C,845,Loops 1-24,FIC-9118.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x034E,847,Loops 1-24,FIC-9118.Direction,Direction,PID,,float 32,R,,,,,, +0x0350,849,Loops 1-24,FIC-9118.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0352,851,Loops 1-24,FIC-9118.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0354,853,Loops 1-24,FIC-9118.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0356,855,Loops 1-24,FIC-9118.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0358,857,Loops 1-24,FIC-9118.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x035A,859,Loops 1-24,FIC-9118.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x035C,861,Loops 1-24,FIC-9118.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0360,865,Loops 1-24,FIC-9118.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0364,869,Loops 1-24,FIC-9118.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0366,871,Loops 1-24,FIC-9118.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0368,873,Loops 1-24,FIC-9118.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x036A,875,Loops 1-24,FIC-9118.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x036C,877,Loops 1-24,FIC-9118.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x036E,879,Loops 1-24,FIC-9118.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0370,881,Loops 1-24,FIC-9118.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0374,885,Loops 1-24,FIC-9118.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0376,887,Loops 1-24,FIC-9118.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0378,889,Loops 1-24,FIC-9118.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x037A,891,Loops 1-24,FIC-9118.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x037C,893,Loops 1-24,FIC-9118.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x037E,895,Loops 1-24,FIC-9118.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0386,903,Loops 1-24,FIC-9118.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0388,905,Loops 1-24,FIC-9118.Bias,Bias,PID,,float 32,R/W,,,,,, +0x038A,907,Loops 1-24,FIC-9118.Deviation,Deviation,PID,,float 32,R,,,,,, +0x038E,911,Loops 1-24,FIC-9118.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0390,913,Loops 1-24,FIC-9118.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x03F7,1016,Loops 1-24,FIC-9118.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x03F8,1017,Loops 1-24,FIC-9118.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x03FA,1019,Loops 1-24,FIC-9118.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x03FB,1020,Loops 1-24,FIC-9118.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x03FC,1021,Loops 1-24,FIC-9118.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x03FD,1022,Loops 1-24,FIC-9118.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x03FE,1023,Loops 1-24,FIC-9118.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0440,1089,Loops 1-24,FIC-9116.PV,PV,PID,,float 32,R,,,,,, +0x0442,1091,Loops 1-24,FIC-9116.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0444,1093,Loops 1-24,FIC-9116.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0446,1095,Loops 1-24,FIC-9116.Output,Output,PID,,float 32,R/W,,,,,, +0x0448,1097,Loops 1-24,FIC-9116.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x044C,1101,Loops 1-24,FIC-9116.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x044E,1103,Loops 1-24,FIC-9116.Direction,Direction,PID,,float 32,R,,,,,, +0x0450,1105,Loops 1-24,FIC-9116.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0452,1107,Loops 1-24,FIC-9116.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0454,1109,Loops 1-24,FIC-9116.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0456,1111,Loops 1-24,FIC-9116.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0458,1113,Loops 1-24,FIC-9116.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x045A,1115,Loops 1-24,FIC-9116.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x045C,1117,Loops 1-24,FIC-9116.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0460,1121,Loops 1-24,FIC-9116.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0464,1125,Loops 1-24,FIC-9116.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0466,1127,Loops 1-24,FIC-9116.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0468,1129,Loops 1-24,FIC-9116.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x046A,1131,Loops 1-24,FIC-9116.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x046C,1133,Loops 1-24,FIC-9116.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x046E,1135,Loops 1-24,FIC-9116.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0470,1137,Loops 1-24,FIC-9116.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0474,1141,Loops 1-24,FIC-9116.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0476,1143,Loops 1-24,FIC-9116.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0478,1145,Loops 1-24,FIC-9116.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x047A,1147,Loops 1-24,FIC-9116.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x047C,1149,Loops 1-24,FIC-9116.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x047E,1151,Loops 1-24,FIC-9116.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0486,1159,Loops 1-24,FIC-9116.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0488,1161,Loops 1-24,FIC-9116.Bias,Bias,PID,,float 32,R/W,,,,,, +0x048A,1163,Loops 1-24,FIC-9116.Deviation,Deviation,PID,,float 32,R,,,,,, +0x048E,1167,Loops 1-24,FIC-9116.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0490,1169,Loops 1-24,FIC-9116.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x04F7,1272,Loops 1-24,FIC-9116.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x04F8,1273,Loops 1-24,FIC-9116.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x04FA,1275,Loops 1-24,FIC-9116.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x04FB,1276,Loops 1-24,FIC-9116.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x04FC,1277,Loops 1-24,FIC-9116.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x04FD,1278,Loops 1-24,FIC-9116.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x04FE,1279,Loops 1-24,FIC-9116.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0540,1345,Loops 1-24,TIC-9111A.PV,PV,PID,,float 32,R,,,,,, +0x0542,1347,Loops 1-24,TIC-9111A.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0544,1349,Loops 1-24,TIC-9111A.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0546,1351,Loops 1-24,TIC-9111A.Output,Output,PID,,float 32,R/W,,,,,, +0x0548,1353,Loops 1-24,TIC-9111A.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x054C,1357,Loops 1-24,TIC-9111A.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x054E,1359,Loops 1-24,TIC-9111A.Direction,Direction,PID,,float 32,R,,,,,, +0x0550,1361,Loops 1-24,TIC-9111A.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0552,1363,Loops 1-24,TIC-9111A.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0554,1365,Loops 1-24,TIC-9111A.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0556,1367,Loops 1-24,TIC-9111A.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0558,1369,Loops 1-24,TIC-9111A.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x055A,1371,Loops 1-24,TIC-9111A.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x055C,1373,Loops 1-24,TIC-9111A.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0560,1377,Loops 1-24,TIC-9111A.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0564,1381,Loops 1-24,TIC-9111A.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0566,1383,Loops 1-24,TIC-9111A.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0568,1385,Loops 1-24,TIC-9111A.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x056A,1387,Loops 1-24,TIC-9111A.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x056C,1389,Loops 1-24,TIC-9111A.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x056E,1391,Loops 1-24,TIC-9111A.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0570,1393,Loops 1-24,TIC-9111A.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0574,1397,Loops 1-24,TIC-9111A.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0576,1399,Loops 1-24,TIC-9111A.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0578,1401,Loops 1-24,TIC-9111A.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x057A,1403,Loops 1-24,TIC-9111A.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x057C,1405,Loops 1-24,TIC-9111A.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x057E,1407,Loops 1-24,TIC-9111A.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0586,1415,Loops 1-24,TIC-9111A.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0588,1417,Loops 1-24,TIC-9111A.Bias,Bias,PID,,float 32,R/W,,,,,, +0x058A,1419,Loops 1-24,TIC-9111A.Deviation,Deviation,PID,,float 32,R,,,,,, +0x058E,1423,Loops 1-24,TIC-9111A.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0590,1425,Loops 1-24,TIC-9111A.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x05F7,1528,Loops 1-24,TIC-9111A.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x05F8,1529,Loops 1-24,TIC-9111A.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x05FA,1531,Loops 1-24,TIC-9111A.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x05FB,1532,Loops 1-24,TIC-9111A.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x05FC,1533,Loops 1-24,TIC-9111A.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x05FD,1534,Loops 1-24,TIC-9111A.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x05FE,1535,Loops 1-24,TIC-9111A.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0640,1601,Loops 1-24,PIC-9111A.PV,PV,PID,,float 32,R,,,,,, +0x0642,1603,Loops 1-24,PIC-9111A.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0644,1605,Loops 1-24,PIC-9111A.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0646,1607,Loops 1-24,PIC-9111A.Output,Output,PID,,float 32,R/W,,,,,, +0x0648,1609,Loops 1-24,PIC-9111A.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x064C,1613,Loops 1-24,PIC-9111A.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x064E,1615,Loops 1-24,PIC-9111A.Direction,Direction,PID,,float 32,R,,,,,, +0x0650,1617,Loops 1-24,PIC-9111A.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0652,1619,Loops 1-24,PIC-9111A.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0654,1621,Loops 1-24,PIC-9111A.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0656,1623,Loops 1-24,PIC-9111A.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0658,1625,Loops 1-24,PIC-9111A.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x065A,1627,Loops 1-24,PIC-9111A.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x065C,1629,Loops 1-24,PIC-9111A.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0660,1633,Loops 1-24,PIC-9111A.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0664,1637,Loops 1-24,PIC-9111A.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0666,1639,Loops 1-24,PIC-9111A.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0668,1641,Loops 1-24,PIC-9111A.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x066A,1643,Loops 1-24,PIC-9111A.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x066C,1645,Loops 1-24,PIC-9111A.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x066E,1647,Loops 1-24,PIC-9111A.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0670,1649,Loops 1-24,PIC-9111A.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0674,1653,Loops 1-24,PIC-9111A.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0676,1655,Loops 1-24,PIC-9111A.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0678,1657,Loops 1-24,PIC-9111A.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x067A,1659,Loops 1-24,PIC-9111A.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x067C,1661,Loops 1-24,PIC-9111A.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x067E,1663,Loops 1-24,PIC-9111A.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0686,1671,Loops 1-24,PIC-9111A.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0688,1673,Loops 1-24,PIC-9111A.Bias,Bias,PID,,float 32,R/W,,,,,, +0x068A,1675,Loops 1-24,PIC-9111A.Deviation,Deviation,PID,,float 32,R,,,,,, +0x068E,1679,Loops 1-24,PIC-9111A.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0690,1681,Loops 1-24,PIC-9111A.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x06F7,1784,Loops 1-24,PIC-9111A.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x06F8,1785,Loops 1-24,PIC-9111A.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x06FA,1787,Loops 1-24,PIC-9111A.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x06FB,1788,Loops 1-24,PIC-9111A.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x06FC,1789,Loops 1-24,PIC-9111A.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x06FD,1790,Loops 1-24,PIC-9111A.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x06FE,1791,Loops 1-24,PIC-9111A.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0740,1857,Loops 1-24,FIC-9201.PV,PV,PID,,float 32,R,,,,,, +0x0742,1859,Loops 1-24,FIC-9201.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0744,1861,Loops 1-24,FIC-9201.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0746,1863,Loops 1-24,FIC-9201.Output,Output,PID,,float 32,R/W,,,,,, +0x0748,1865,Loops 1-24,FIC-9201.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x074C,1869,Loops 1-24,FIC-9201.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x074E,1871,Loops 1-24,FIC-9201.Direction,Direction,PID,,float 32,R,,,,,, +0x0750,1873,Loops 1-24,FIC-9201.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0752,1875,Loops 1-24,FIC-9201.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0754,1877,Loops 1-24,FIC-9201.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0756,1879,Loops 1-24,FIC-9201.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0758,1881,Loops 1-24,FIC-9201.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x075A,1883,Loops 1-24,FIC-9201.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x075C,1885,Loops 1-24,FIC-9201.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0760,1889,Loops 1-24,FIC-9201.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0764,1893,Loops 1-24,FIC-9201.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0766,1895,Loops 1-24,FIC-9201.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0768,1897,Loops 1-24,FIC-9201.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x076A,1899,Loops 1-24,FIC-9201.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x076C,1901,Loops 1-24,FIC-9201.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x076E,1903,Loops 1-24,FIC-9201.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0770,1905,Loops 1-24,FIC-9201.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0774,1909,Loops 1-24,FIC-9201.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0776,1911,Loops 1-24,FIC-9201.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0778,1913,Loops 1-24,FIC-9201.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x077A,1915,Loops 1-24,FIC-9201.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x077C,1917,Loops 1-24,FIC-9201.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x077E,1919,Loops 1-24,FIC-9201.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0786,1927,Loops 1-24,FIC-9201.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0788,1929,Loops 1-24,FIC-9201.Bias,Bias,PID,,float 32,R/W,,,,,, +0x078A,1931,Loops 1-24,FIC-9201.Deviation,Deviation,PID,,float 32,R,,,,,, +0x078E,1935,Loops 1-24,FIC-9201.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0790,1937,Loops 1-24,FIC-9201.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x07F7,2040,Loops 1-24,FIC-9201.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x07F8,2041,Loops 1-24,FIC-9201.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x07FA,2043,Loops 1-24,FIC-9201.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x07FB,2044,Loops 1-24,FIC-9201.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x07FC,2045,Loops 1-24,FIC-9201.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x07FD,2046,Loops 1-24,FIC-9201.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x07FE,2047,Loops 1-24,FIC-9201.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0840,2113,Loops 1-24,FIC-9213.PV,PV,PID,,float 32,R,,,,,, +0x0842,2115,Loops 1-24,FIC-9213.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0844,2117,Loops 1-24,FIC-9213.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0846,2119,Loops 1-24,FIC-9213.Output,Output,PID,,float 32,R/W,,,,,, +0x0848,2121,Loops 1-24,FIC-9213.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x084C,2125,Loops 1-24,FIC-9213.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x084E,2127,Loops 1-24,FIC-9213.Direction,Direction,PID,,float 32,R,,,,,, +0x0850,2129,Loops 1-24,FIC-9213.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0852,2131,Loops 1-24,FIC-9213.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0854,2133,Loops 1-24,FIC-9213.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0856,2135,Loops 1-24,FIC-9213.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0858,2137,Loops 1-24,FIC-9213.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x085A,2139,Loops 1-24,FIC-9213.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x085C,2141,Loops 1-24,FIC-9213.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0860,2145,Loops 1-24,FIC-9213.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0864,2149,Loops 1-24,FIC-9213.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0866,2151,Loops 1-24,FIC-9213.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0868,2153,Loops 1-24,FIC-9213.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x086A,2155,Loops 1-24,FIC-9213.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x086C,2157,Loops 1-24,FIC-9213.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x086E,2159,Loops 1-24,FIC-9213.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0870,2161,Loops 1-24,FIC-9213.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0874,2165,Loops 1-24,FIC-9213.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0876,2167,Loops 1-24,FIC-9213.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0878,2169,Loops 1-24,FIC-9213.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x087A,2171,Loops 1-24,FIC-9213.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x087C,2173,Loops 1-24,FIC-9213.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x087E,2175,Loops 1-24,FIC-9213.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0886,2183,Loops 1-24,FIC-9213.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0888,2185,Loops 1-24,FIC-9213.Bias,Bias,PID,,float 32,R/W,,,,,, +0x088A,2187,Loops 1-24,FIC-9213.Deviation,Deviation,PID,,float 32,R,,,,,, +0x088E,2191,Loops 1-24,FIC-9213.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0890,2193,Loops 1-24,FIC-9213.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x08F7,2296,Loops 1-24,FIC-9213.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x08F8,2297,Loops 1-24,FIC-9213.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x08FA,2299,Loops 1-24,FIC-9213.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x08FB,2300,Loops 1-24,FIC-9213.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x08FC,2301,Loops 1-24,FIC-9213.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x08FD,2302,Loops 1-24,FIC-9213.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x08FE,2303,Loops 1-24,FIC-9213.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0940,2369,Loops 1-24,FIC-9214.PV,PV,PID,,float 32,R,,,,,, +0x0942,2371,Loops 1-24,FIC-9214.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0944,2373,Loops 1-24,FIC-9214.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0946,2375,Loops 1-24,FIC-9214.Output,Output,PID,,float 32,R/W,,,,,, +0x0948,2377,Loops 1-24,FIC-9214.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x094C,2381,Loops 1-24,FIC-9214.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x094E,2383,Loops 1-24,FIC-9214.Direction,Direction,PID,,float 32,R,,,,,, +0x0950,2385,Loops 1-24,FIC-9214.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0952,2387,Loops 1-24,FIC-9214.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0954,2389,Loops 1-24,FIC-9214.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0956,2391,Loops 1-24,FIC-9214.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0958,2393,Loops 1-24,FIC-9214.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x095A,2395,Loops 1-24,FIC-9214.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x095C,2397,Loops 1-24,FIC-9214.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0960,2401,Loops 1-24,FIC-9214.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0964,2405,Loops 1-24,FIC-9214.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0966,2407,Loops 1-24,FIC-9214.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0968,2409,Loops 1-24,FIC-9214.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x096A,2411,Loops 1-24,FIC-9214.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x096C,2413,Loops 1-24,FIC-9214.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x096E,2415,Loops 1-24,FIC-9214.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0970,2417,Loops 1-24,FIC-9214.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0974,2421,Loops 1-24,FIC-9214.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0976,2423,Loops 1-24,FIC-9214.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0978,2425,Loops 1-24,FIC-9214.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x097A,2427,Loops 1-24,FIC-9214.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x097C,2429,Loops 1-24,FIC-9214.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x097E,2431,Loops 1-24,FIC-9214.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0986,2439,Loops 1-24,FIC-9214.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0988,2441,Loops 1-24,FIC-9214.Bias,Bias,PID,,float 32,R/W,,,,,, +0x098A,2443,Loops 1-24,FIC-9214.Deviation,Deviation,PID,,float 32,R,,,,,, +0x098E,2447,Loops 1-24,FIC-9214.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0990,2449,Loops 1-24,FIC-9214.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x09F7,2552,Loops 1-24,FIC-9214.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x09F8,2553,Loops 1-24,FIC-9214.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x09FA,2555,Loops 1-24,FIC-9214.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x09FB,2556,Loops 1-24,FIC-9214.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x09FC,2557,Loops 1-24,FIC-9214.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x09FD,2558,Loops 1-24,FIC-9214.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x09FE,2559,Loops 1-24,FIC-9214.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0A40,2625,Loops 1-24,FIC-9218.PV,PV,PID,,float 32,R,,,,,, +0x0A42,2627,Loops 1-24,FIC-9218.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0A44,2629,Loops 1-24,FIC-9218.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0A46,2631,Loops 1-24,FIC-9218.Output,Output,PID,,float 32,R/W,,,,,, +0x0A48,2633,Loops 1-24,FIC-9218.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x0A4C,2637,Loops 1-24,FIC-9218.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x0A4E,2639,Loops 1-24,FIC-9218.Direction,Direction,PID,,float 32,R,,,,,, +0x0A50,2641,Loops 1-24,FIC-9218.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0A52,2643,Loops 1-24,FIC-9218.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0A54,2645,Loops 1-24,FIC-9218.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0A56,2647,Loops 1-24,FIC-9218.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0A58,2649,Loops 1-24,FIC-9218.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x0A5A,2651,Loops 1-24,FIC-9218.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x0A5C,2653,Loops 1-24,FIC-9218.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0A60,2657,Loops 1-24,FIC-9218.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0A64,2661,Loops 1-24,FIC-9218.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0A66,2663,Loops 1-24,FIC-9218.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0A68,2665,Loops 1-24,FIC-9218.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x0A6A,2667,Loops 1-24,FIC-9218.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x0A6C,2669,Loops 1-24,FIC-9218.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x0A6E,2671,Loops 1-24,FIC-9218.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0A70,2673,Loops 1-24,FIC-9218.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0A74,2677,Loops 1-24,FIC-9218.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0A76,2679,Loops 1-24,FIC-9218.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0A78,2681,Loops 1-24,FIC-9218.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x0A7A,2683,Loops 1-24,FIC-9218.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x0A7C,2685,Loops 1-24,FIC-9218.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x0A7E,2687,Loops 1-24,FIC-9218.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0A86,2695,Loops 1-24,FIC-9218.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0A88,2697,Loops 1-24,FIC-9218.Bias,Bias,PID,,float 32,R/W,,,,,, +0x0A8A,2699,Loops 1-24,FIC-9218.Deviation,Deviation,PID,,float 32,R,,,,,, +0x0A8E,2703,Loops 1-24,FIC-9218.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0A90,2705,Loops 1-24,FIC-9218.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x0AF7,2808,Loops 1-24,FIC-9218.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x0AF8,2809,Loops 1-24,FIC-9218.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x0AFA,2811,Loops 1-24,FIC-9218.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x0AFB,2812,Loops 1-24,FIC-9218.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x0AFC,2813,Loops 1-24,FIC-9218.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x0AFD,2814,Loops 1-24,FIC-9218.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x0AFE,2815,Loops 1-24,FIC-9218.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0B40,2881,Loops 1-24,FIC-9216.PV,PV,PID,,float 32,R,,,,,, +0x0B42,2883,Loops 1-24,FIC-9216.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0B44,2885,Loops 1-24,FIC-9216.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0B46,2887,Loops 1-24,FIC-9216.Output,Output,PID,,float 32,R/W,,,,,, +0x0B48,2889,Loops 1-24,FIC-9216.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x0B4C,2893,Loops 1-24,FIC-9216.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x0B4E,2895,Loops 1-24,FIC-9216.Direction,Direction,PID,,float 32,R,,,,,, +0x0B50,2897,Loops 1-24,FIC-9216.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0B52,2899,Loops 1-24,FIC-9216.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0B54,2901,Loops 1-24,FIC-9216.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0B56,2903,Loops 1-24,FIC-9216.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0B58,2905,Loops 1-24,FIC-9216.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x0B5A,2907,Loops 1-24,FIC-9216.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x0B5C,2909,Loops 1-24,FIC-9216.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0B60,2913,Loops 1-24,FIC-9216.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0B64,2917,Loops 1-24,FIC-9216.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0B66,2919,Loops 1-24,FIC-9216.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0B68,2921,Loops 1-24,FIC-9216.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x0B6A,2923,Loops 1-24,FIC-9216.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x0B6C,2925,Loops 1-24,FIC-9216.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x0B6E,2927,Loops 1-24,FIC-9216.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0B70,2929,Loops 1-24,FIC-9216.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0B74,2933,Loops 1-24,FIC-9216.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0B76,2935,Loops 1-24,FIC-9216.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0B78,2937,Loops 1-24,FIC-9216.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x0B7A,2939,Loops 1-24,FIC-9216.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x0B7C,2941,Loops 1-24,FIC-9216.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x0B7E,2943,Loops 1-24,FIC-9216.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0B86,2951,Loops 1-24,FIC-9216.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0B88,2953,Loops 1-24,FIC-9216.Bias,Bias,PID,,float 32,R/W,,,,,, +0x0B8A,2955,Loops 1-24,FIC-9216.Deviation,Deviation,PID,,float 32,R,,,,,, +0x0B8E,2959,Loops 1-24,FIC-9216.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0B90,2961,Loops 1-24,FIC-9216.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x0BF7,3064,Loops 1-24,FIC-9216.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x0BF8,3065,Loops 1-24,FIC-9216.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x0BFA,3067,Loops 1-24,FIC-9216.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x0BFB,3068,Loops 1-24,FIC-9216.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x0BFC,3069,Loops 1-24,FIC-9216.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x0BFD,3070,Loops 1-24,FIC-9216.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x0BFE,3071,Loops 1-24,FIC-9216.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0C40,3137,Loops 1-24,TIC-9211.PV,PV,PID,,float 32,R,,,,,, +0x0C42,3139,Loops 1-24,TIC-9211.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0C44,3141,Loops 1-24,TIC-9211.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0C46,3143,Loops 1-24,TIC-9211.Output,Output,PID,,float 32,R/W,,,,,, +0x0C48,3145,Loops 1-24,TIC-9211.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x0C4C,3149,Loops 1-24,TIC-9211.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x0C4E,3151,Loops 1-24,TIC-9211.Direction,Direction,PID,,float 32,R,,,,,, +0x0C50,3153,Loops 1-24,TIC-9211.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0C52,3155,Loops 1-24,TIC-9211.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0C54,3157,Loops 1-24,TIC-9211.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0C56,3159,Loops 1-24,TIC-9211.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0C58,3161,Loops 1-24,TIC-9211.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x0C5A,3163,Loops 1-24,TIC-9211.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x0C5C,3165,Loops 1-24,TIC-9211.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0C60,3169,Loops 1-24,TIC-9211.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0C64,3173,Loops 1-24,TIC-9211.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0C66,3175,Loops 1-24,TIC-9211.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0C68,3177,Loops 1-24,TIC-9211.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x0C6A,3179,Loops 1-24,TIC-9211.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x0C6C,3181,Loops 1-24,TIC-9211.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x0C6E,3183,Loops 1-24,TIC-9211.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0C70,3185,Loops 1-24,TIC-9211.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0C74,3189,Loops 1-24,TIC-9211.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0C76,3191,Loops 1-24,TIC-9211.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0C78,3193,Loops 1-24,TIC-9211.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x0C7A,3195,Loops 1-24,TIC-9211.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x0C7C,3197,Loops 1-24,TIC-9211.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x0C7E,3199,Loops 1-24,TIC-9211.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0C86,3207,Loops 1-24,TIC-9211.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0C88,3209,Loops 1-24,TIC-9211.Bias,Bias,PID,,float 32,R/W,,,,,, +0x0C8A,3211,Loops 1-24,TIC-9211.Deviation,Deviation,PID,,float 32,R,,,,,, +0x0C8E,3215,Loops 1-24,TIC-9211.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0C90,3217,Loops 1-24,TIC-9211.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x0CF7,3320,Loops 1-24,TIC-9211.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x0CF8,3321,Loops 1-24,TIC-9211.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x0CFA,3323,Loops 1-24,TIC-9211.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x0CFB,3324,Loops 1-24,TIC-9211.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x0CFC,3325,Loops 1-24,TIC-9211.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x0CFD,3326,Loops 1-24,TIC-9211.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x0CFE,3327,Loops 1-24,TIC-9211.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0D40,3393,Loops 1-24,PIC-9211B.PV,PV,PID,,float 32,R,,,,,, +0x0D42,3395,Loops 1-24,PIC-9211B.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0D44,3397,Loops 1-24,PIC-9211B.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0D46,3399,Loops 1-24,PIC-9211B.Output,Output,PID,,float 32,R/W,,,,,, +0x0D48,3401,Loops 1-24,PIC-9211B.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x0D4C,3405,Loops 1-24,PIC-9211B.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x0D4E,3407,Loops 1-24,PIC-9211B.Direction,Direction,PID,,float 32,R,,,,,, +0x0D50,3409,Loops 1-24,PIC-9211B.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0D52,3411,Loops 1-24,PIC-9211B.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0D54,3413,Loops 1-24,PIC-9211B.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0D56,3415,Loops 1-24,PIC-9211B.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0D58,3417,Loops 1-24,PIC-9211B.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x0D5A,3419,Loops 1-24,PIC-9211B.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x0D5C,3421,Loops 1-24,PIC-9211B.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0D60,3425,Loops 1-24,PIC-9211B.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0D64,3429,Loops 1-24,PIC-9211B.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0D66,3431,Loops 1-24,PIC-9211B.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0D68,3433,Loops 1-24,PIC-9211B.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x0D6A,3435,Loops 1-24,PIC-9211B.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x0D6C,3437,Loops 1-24,PIC-9211B.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x0D6E,3439,Loops 1-24,PIC-9211B.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0D70,3441,Loops 1-24,PIC-9211B.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0D74,3445,Loops 1-24,PIC-9211B.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0D76,3447,Loops 1-24,PIC-9211B.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0D78,3449,Loops 1-24,PIC-9211B.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x0D7A,3451,Loops 1-24,PIC-9211B.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x0D7C,3453,Loops 1-24,PIC-9211B.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x0D7E,3455,Loops 1-24,PIC-9211B.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0D86,3463,Loops 1-24,PIC-9211B.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0D88,3465,Loops 1-24,PIC-9211B.Bias,Bias,PID,,float 32,R/W,,,,,, +0x0D8A,3467,Loops 1-24,PIC-9211B.Deviation,Deviation,PID,,float 32,R,,,,,, +0x0D8E,3471,Loops 1-24,PIC-9211B.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0D90,3473,Loops 1-24,PIC-9211B.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x0DF7,3576,Loops 1-24,PIC-9211B.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x0DF8,3577,Loops 1-24,PIC-9211B.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x0DFA,3579,Loops 1-24,PIC-9211B.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x0DFB,3580,Loops 1-24,PIC-9211B.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x0DFC,3581,Loops 1-24,PIC-9211B.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x0DFD,3582,Loops 1-24,PIC-9211B.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x0DFE,3583,Loops 1-24,PIC-9211B.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0E40,3649,Loops 1-24,LIC-9113.PV,PV,PID,,float 32,R,,,,,, +0x0E42,3651,Loops 1-24,LIC-9113.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0E44,3653,Loops 1-24,LIC-9113.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0E46,3655,Loops 1-24,LIC-9113.Output,Output,PID,,float 32,R/W,,,,,, +0x0E48,3657,Loops 1-24,LIC-9113.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x0E4C,3661,Loops 1-24,LIC-9113.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x0E4E,3663,Loops 1-24,LIC-9113.Direction,Direction,PID,,float 32,R,,,,,, +0x0E50,3665,Loops 1-24,LIC-9113.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0E52,3667,Loops 1-24,LIC-9113.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0E54,3669,Loops 1-24,LIC-9113.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0E56,3671,Loops 1-24,LIC-9113.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0E58,3673,Loops 1-24,LIC-9113.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x0E5A,3675,Loops 1-24,LIC-9113.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x0E5C,3677,Loops 1-24,LIC-9113.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0E60,3681,Loops 1-24,LIC-9113.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0E64,3685,Loops 1-24,LIC-9113.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0E66,3687,Loops 1-24,LIC-9113.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0E68,3689,Loops 1-24,LIC-9113.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x0E6A,3691,Loops 1-24,LIC-9113.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x0E6C,3693,Loops 1-24,LIC-9113.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x0E6E,3695,Loops 1-24,LIC-9113.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0E70,3697,Loops 1-24,LIC-9113.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0E74,3701,Loops 1-24,LIC-9113.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0E76,3703,Loops 1-24,LIC-9113.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0E78,3705,Loops 1-24,LIC-9113.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x0E7A,3707,Loops 1-24,LIC-9113.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x0E7C,3709,Loops 1-24,LIC-9113.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x0E7E,3711,Loops 1-24,LIC-9113.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0E86,3719,Loops 1-24,LIC-9113.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0E88,3721,Loops 1-24,LIC-9113.Bias,Bias,PID,,float 32,R/W,,,,,, +0x0E8A,3723,Loops 1-24,LIC-9113.Deviation,Deviation,PID,,float 32,R,,,,,, +0x0E8E,3727,Loops 1-24,LIC-9113.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0E90,3729,Loops 1-24,LIC-9113.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x0EF7,3832,Loops 1-24,LIC-9113.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x0EF8,3833,Loops 1-24,LIC-9113.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x0EFA,3835,Loops 1-24,LIC-9113.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x0EFB,3836,Loops 1-24,LIC-9113.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x0EFC,3837,Loops 1-24,LIC-9113.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x0EFD,3838,Loops 1-24,LIC-9113.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x0EFE,3839,Loops 1-24,LIC-9113.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x0F40,3905,Loops 1-24,LIC-9213.PV,PV,PID,,float 32,R,,,,,, +0x0F42,3907,Loops 1-24,LIC-9213.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x0F44,3909,Loops 1-24,LIC-9213.WSP,WSP,PID,,float 32,R/W,,,,,, +0x0F46,3911,Loops 1-24,LIC-9213.Output,Output,PID,,float 32,R/W,,,,,, +0x0F48,3913,Loops 1-24,LIC-9213.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x0F4C,3917,Loops 1-24,LIC-9213.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x0F4E,3919,Loops 1-24,LIC-9213.Direction,Direction,PID,,float 32,R,,,,,, +0x0F50,3921,Loops 1-24,LIC-9213.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x0F52,3923,Loops 1-24,LIC-9213.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x0F54,3925,Loops 1-24,LIC-9213.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x0F56,3927,Loops 1-24,LIC-9213.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x0F58,3929,Loops 1-24,LIC-9213.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x0F5A,3931,Loops 1-24,LIC-9213.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x0F5C,3933,Loops 1-24,LIC-9213.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x0F60,3937,Loops 1-24,LIC-9213.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x0F64,3941,Loops 1-24,LIC-9213.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x0F66,3943,Loops 1-24,LIC-9213.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x0F68,3945,Loops 1-24,LIC-9213.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x0F6A,3947,Loops 1-24,LIC-9213.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x0F6C,3949,Loops 1-24,LIC-9213.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x0F6E,3951,Loops 1-24,LIC-9213.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x0F70,3953,Loops 1-24,LIC-9213.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x0F74,3957,Loops 1-24,LIC-9213.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x0F76,3959,Loops 1-24,LIC-9213.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x0F78,3961,Loops 1-24,LIC-9213.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x0F7A,3963,Loops 1-24,LIC-9213.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x0F7C,3965,Loops 1-24,LIC-9213.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x0F7E,3967,Loops 1-24,LIC-9213.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x0F86,3975,Loops 1-24,LIC-9213.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x0F88,3977,Loops 1-24,LIC-9213.Bias,Bias,PID,,float 32,R/W,,,,,, +0x0F8A,3979,Loops 1-24,LIC-9213.Deviation,Deviation,PID,,float 32,R,,,,,, +0x0F8E,3983,Loops 1-24,LIC-9213.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x0F90,3985,Loops 1-24,LIC-9213.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x0FF7,4088,Loops 1-24,LIC-9213.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x0FF8,4089,Loops 1-24,LIC-9213.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x0FFA,4091,Loops 1-24,LIC-9213.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x0FFB,4092,Loops 1-24,LIC-9213.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x0FFC,4093,Loops 1-24,LIC-9213.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x0FFD,4094,Loops 1-24,LIC-9213.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x0FFE,4095,Loops 1-24,LIC-9213.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x1040,4161,Loops 1-24,FICQ-10101.PV,PV,PID,,float 32,R,,,,,, +0x1042,4163,Loops 1-24,FICQ-10101.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x1044,4165,Loops 1-24,FICQ-10101.WSP,WSP,PID,,float 32,R/W,,,,,, +0x1046,4167,Loops 1-24,FICQ-10101.Output,Output,PID,,float 32,R/W,,,,,, +0x1048,4169,Loops 1-24,FICQ-10101.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x104C,4173,Loops 1-24,FICQ-10101.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x104E,4175,Loops 1-24,FICQ-10101.Direction,Direction,PID,,float 32,R,,,,,, +0x1050,4177,Loops 1-24,FICQ-10101.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x1052,4179,Loops 1-24,FICQ-10101.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x1054,4181,Loops 1-24,FICQ-10101.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x1056,4183,Loops 1-24,FICQ-10101.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x1058,4185,Loops 1-24,FICQ-10101.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x105A,4187,Loops 1-24,FICQ-10101.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x105C,4189,Loops 1-24,FICQ-10101.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x1060,4193,Loops 1-24,FICQ-10101.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x1064,4197,Loops 1-24,FICQ-10101.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x1066,4199,Loops 1-24,FICQ-10101.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x1068,4201,Loops 1-24,FICQ-10101.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x106A,4203,Loops 1-24,FICQ-10101.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x106C,4205,Loops 1-24,FICQ-10101.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x106E,4207,Loops 1-24,FICQ-10101.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x1070,4209,Loops 1-24,FICQ-10101.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x1074,4213,Loops 1-24,FICQ-10101.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x1076,4215,Loops 1-24,FICQ-10101.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x1078,4217,Loops 1-24,FICQ-10101.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x107A,4219,Loops 1-24,FICQ-10101.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x107C,4221,Loops 1-24,FICQ-10101.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x107E,4223,Loops 1-24,FICQ-10101.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x1086,4231,Loops 1-24,FICQ-10101.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x1088,4233,Loops 1-24,FICQ-10101.Bias,Bias,PID,,float 32,R/W,,,,,, +0x108A,4235,Loops 1-24,FICQ-10101.Deviation,Deviation,PID,,float 32,R,,,,,, +0x108E,4239,Loops 1-24,FICQ-10101.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x1090,4241,Loops 1-24,FICQ-10101.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x10F7,4344,Loops 1-24,FICQ-10101.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x10F8,4345,Loops 1-24,FICQ-10101.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x10FA,4347,Loops 1-24,FICQ-10101.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x10FB,4348,Loops 1-24,FICQ-10101.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x10FC,4349,Loops 1-24,FICQ-10101.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x10FD,4350,Loops 1-24,FICQ-10101.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x10FE,4351,Loops 1-24,FICQ-10101.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x1140,4417,Loops 1-24,FICQ-10113.PV,PV,PID,,float 32,R,,,,,, +0x1142,4419,Loops 1-24,FICQ-10113.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x1144,4421,Loops 1-24,FICQ-10113.WSP,WSP,PID,,float 32,R/W,,,,,, +0x1146,4423,Loops 1-24,FICQ-10113.Output,Output,PID,,float 32,R/W,,,,,, +0x1148,4425,Loops 1-24,FICQ-10113.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x114C,4429,Loops 1-24,FICQ-10113.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x114E,4431,Loops 1-24,FICQ-10113.Direction,Direction,PID,,float 32,R,,,,,, +0x1150,4433,Loops 1-24,FICQ-10113.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x1152,4435,Loops 1-24,FICQ-10113.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x1154,4437,Loops 1-24,FICQ-10113.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x1156,4439,Loops 1-24,FICQ-10113.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x1158,4441,Loops 1-24,FICQ-10113.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x115A,4443,Loops 1-24,FICQ-10113.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x115C,4445,Loops 1-24,FICQ-10113.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x1160,4449,Loops 1-24,FICQ-10113.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x1164,4453,Loops 1-24,FICQ-10113.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x1166,4455,Loops 1-24,FICQ-10113.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x1168,4457,Loops 1-24,FICQ-10113.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x116A,4459,Loops 1-24,FICQ-10113.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x116C,4461,Loops 1-24,FICQ-10113.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x116E,4463,Loops 1-24,FICQ-10113.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x1170,4465,Loops 1-24,FICQ-10113.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x1174,4469,Loops 1-24,FICQ-10113.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x1176,4471,Loops 1-24,FICQ-10113.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x1178,4473,Loops 1-24,FICQ-10113.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x117A,4475,Loops 1-24,FICQ-10113.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x117C,4477,Loops 1-24,FICQ-10113.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x117E,4479,Loops 1-24,FICQ-10113.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x1186,4487,Loops 1-24,FICQ-10113.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x1188,4489,Loops 1-24,FICQ-10113.Bias,Bias,PID,,float 32,R/W,,,,,, +0x118A,4491,Loops 1-24,FICQ-10113.Deviation,Deviation,PID,,float 32,R,,,,,, +0x118E,4495,Loops 1-24,FICQ-10113.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x1190,4497,Loops 1-24,FICQ-10113.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x11F7,4600,Loops 1-24,FICQ-10113.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x11F8,4601,Loops 1-24,FICQ-10113.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x11FA,4603,Loops 1-24,FICQ-10113.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x11FB,4604,Loops 1-24,FICQ-10113.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x11FC,4605,Loops 1-24,FICQ-10113.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x11FD,4606,Loops 1-24,FICQ-10113.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x11FE,4607,Loops 1-24,FICQ-10113.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x1240,4673,Loops 1-24,FICQ-10114A.PV,PV,PID,,float 32,R,,,,,, +0x1242,4675,Loops 1-24,FICQ-10114A.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x1244,4677,Loops 1-24,FICQ-10114A.WSP,WSP,PID,,float 32,R/W,,,,,, +0x1246,4679,Loops 1-24,FICQ-10114A.Output,Output,PID,,float 32,R/W,,,,,, +0x1248,4681,Loops 1-24,FICQ-10114A.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x124C,4685,Loops 1-24,FICQ-10114A.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x124E,4687,Loops 1-24,FICQ-10114A.Direction,Direction,PID,,float 32,R,,,,,, +0x1250,4689,Loops 1-24,FICQ-10114A.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x1252,4691,Loops 1-24,FICQ-10114A.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x1254,4693,Loops 1-24,FICQ-10114A.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x1256,4695,Loops 1-24,FICQ-10114A.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x1258,4697,Loops 1-24,FICQ-10114A.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x125A,4699,Loops 1-24,FICQ-10114A.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x125C,4701,Loops 1-24,FICQ-10114A.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x1260,4705,Loops 1-24,FICQ-10114A.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x1264,4709,Loops 1-24,FICQ-10114A.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x1266,4711,Loops 1-24,FICQ-10114A.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x1268,4713,Loops 1-24,FICQ-10114A.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x126A,4715,Loops 1-24,FICQ-10114A.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x126C,4717,Loops 1-24,FICQ-10114A.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x126E,4719,Loops 1-24,FICQ-10114A.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x1270,4721,Loops 1-24,FICQ-10114A.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x1274,4725,Loops 1-24,FICQ-10114A.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x1276,4727,Loops 1-24,FICQ-10114A.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x1278,4729,Loops 1-24,FICQ-10114A.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x127A,4731,Loops 1-24,FICQ-10114A.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x127C,4733,Loops 1-24,FICQ-10114A.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x127E,4735,Loops 1-24,FICQ-10114A.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x1286,4743,Loops 1-24,FICQ-10114A.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x1288,4745,Loops 1-24,FICQ-10114A.Bias,Bias,PID,,float 32,R/W,,,,,, +0x128A,4747,Loops 1-24,FICQ-10114A.Deviation,Deviation,PID,,float 32,R,,,,,, +0x128E,4751,Loops 1-24,FICQ-10114A.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x1290,4753,Loops 1-24,FICQ-10114A.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x12F7,4856,Loops 1-24,FICQ-10114A.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x12F8,4857,Loops 1-24,FICQ-10114A.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x12FA,4859,Loops 1-24,FICQ-10114A.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x12FB,4860,Loops 1-24,FICQ-10114A.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x12FC,4861,Loops 1-24,FICQ-10114A.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x12FD,4862,Loops 1-24,FICQ-10114A.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x12FE,4863,Loops 1-24,FICQ-10114A.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x1340,4929,Loops 1-24,FIC-10118.PV,PV,PID,,float 32,R,,,,,, +0x1342,4931,Loops 1-24,FIC-10118.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x1344,4933,Loops 1-24,FIC-10118.WSP,WSP,PID,,float 32,R/W,,,,,, +0x1346,4935,Loops 1-24,FIC-10118.Output,Output,PID,,float 32,R/W,,,,,, +0x1348,4937,Loops 1-24,FIC-10118.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x134C,4941,Loops 1-24,FIC-10118.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x134E,4943,Loops 1-24,FIC-10118.Direction,Direction,PID,,float 32,R,,,,,, +0x1350,4945,Loops 1-24,FIC-10118.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x1352,4947,Loops 1-24,FIC-10118.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x1354,4949,Loops 1-24,FIC-10118.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x1356,4951,Loops 1-24,FIC-10118.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x1358,4953,Loops 1-24,FIC-10118.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x135A,4955,Loops 1-24,FIC-10118.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x135C,4957,Loops 1-24,FIC-10118.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x1360,4961,Loops 1-24,FIC-10118.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x1364,4965,Loops 1-24,FIC-10118.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x1366,4967,Loops 1-24,FIC-10118.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x1368,4969,Loops 1-24,FIC-10118.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x136A,4971,Loops 1-24,FIC-10118.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x136C,4973,Loops 1-24,FIC-10118.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x136E,4975,Loops 1-24,FIC-10118.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x1370,4977,Loops 1-24,FIC-10118.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x1374,4981,Loops 1-24,FIC-10118.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x1376,4983,Loops 1-24,FIC-10118.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x1378,4985,Loops 1-24,FIC-10118.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x137A,4987,Loops 1-24,FIC-10118.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x137C,4989,Loops 1-24,FIC-10118.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x137E,4991,Loops 1-24,FIC-10118.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x1386,4999,Loops 1-24,FIC-10118.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x1388,5001,Loops 1-24,FIC-10118.Bias,Bias,PID,,float 32,R/W,,,,,, +0x138A,5003,Loops 1-24,FIC-10118.Deviation,Deviation,PID,,float 32,R,,,,,, +0x138E,5007,Loops 1-24,FIC-10118.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x1390,5009,Loops 1-24,FIC-10118.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x13F7,5112,Loops 1-24,FIC-10118.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x13F8,5113,Loops 1-24,FIC-10118.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x13FA,5115,Loops 1-24,FIC-10118.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x13FB,5116,Loops 1-24,FIC-10118.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x13FC,5117,Loops 1-24,FIC-10118.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x13FD,5118,Loops 1-24,FIC-10118.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x13FE,5119,Loops 1-24,FIC-10118.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x1440,5185,Loops 1-24,LICA-10113.PV,PV,PID,,float 32,R,,,,,, +0x1442,5187,Loops 1-24,LICA-10113.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x1444,5189,Loops 1-24,LICA-10113.WSP,WSP,PID,,float 32,R/W,,,,,, +0x1446,5191,Loops 1-24,LICA-10113.Output,Output,PID,,float 32,R/W,,,,,, +0x1448,5193,Loops 1-24,LICA-10113.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x144C,5197,Loops 1-24,LICA-10113.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x144E,5199,Loops 1-24,LICA-10113.Direction,Direction,PID,,float 32,R,,,,,, +0x1450,5201,Loops 1-24,LICA-10113.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x1452,5203,Loops 1-24,LICA-10113.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x1454,5205,Loops 1-24,LICA-10113.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x1456,5207,Loops 1-24,LICA-10113.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x1458,5209,Loops 1-24,LICA-10113.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x145A,5211,Loops 1-24,LICA-10113.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x145C,5213,Loops 1-24,LICA-10113.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x1460,5217,Loops 1-24,LICA-10113.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x1464,5221,Loops 1-24,LICA-10113.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x1466,5223,Loops 1-24,LICA-10113.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x1468,5225,Loops 1-24,LICA-10113.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x146A,5227,Loops 1-24,LICA-10113.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x146C,5229,Loops 1-24,LICA-10113.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x146E,5231,Loops 1-24,LICA-10113.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x1470,5233,Loops 1-24,LICA-10113.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x1474,5237,Loops 1-24,LICA-10113.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x1476,5239,Loops 1-24,LICA-10113.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x1478,5241,Loops 1-24,LICA-10113.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x147A,5243,Loops 1-24,LICA-10113.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x147C,5245,Loops 1-24,LICA-10113.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x147E,5247,Loops 1-24,LICA-10113.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x1486,5255,Loops 1-24,LICA-10113.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x1488,5257,Loops 1-24,LICA-10113.Bias,Bias,PID,,float 32,R/W,,,,,, +0x148A,5259,Loops 1-24,LICA-10113.Deviation,Deviation,PID,,float 32,R,,,,,, +0x148E,5263,Loops 1-24,LICA-10113.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x1490,5265,Loops 1-24,LICA-10113.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x14F7,5368,Loops 1-24,LICA-10113.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x14F8,5369,Loops 1-24,LICA-10113.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x14FA,5371,Loops 1-24,LICA-10113.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x14FB,5372,Loops 1-24,LICA-10113.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x14FC,5373,Loops 1-24,LICA-10113.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x14FD,5374,Loops 1-24,LICA-10113.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x14FE,5375,Loops 1-24,LICA-10113.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x1540,5441,Loops 1-24,FICQ-10116.PV,PV,PID,,float 32,R,,,,,, +0x1542,5443,Loops 1-24,FICQ-10116.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x1544,5445,Loops 1-24,FICQ-10116.WSP,WSP,PID,,float 32,R/W,,,,,, +0x1546,5447,Loops 1-24,FICQ-10116.Output,Output,PID,,float 32,R/W,,,,,, +0x1548,5449,Loops 1-24,FICQ-10116.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x154C,5453,Loops 1-24,FICQ-10116.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x154E,5455,Loops 1-24,FICQ-10116.Direction,Direction,PID,,float 32,R,,,,,, +0x1550,5457,Loops 1-24,FICQ-10116.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x1552,5459,Loops 1-24,FICQ-10116.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x1554,5461,Loops 1-24,FICQ-10116.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x1556,5463,Loops 1-24,FICQ-10116.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x1558,5465,Loops 1-24,FICQ-10116.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x155A,5467,Loops 1-24,FICQ-10116.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x155C,5469,Loops 1-24,FICQ-10116.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x1560,5473,Loops 1-24,FICQ-10116.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x1564,5477,Loops 1-24,FICQ-10116.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x1566,5479,Loops 1-24,FICQ-10116.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x1568,5481,Loops 1-24,FICQ-10116.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x156A,5483,Loops 1-24,FICQ-10116.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x156C,5485,Loops 1-24,FICQ-10116.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x156E,5487,Loops 1-24,FICQ-10116.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x1570,5489,Loops 1-24,FICQ-10116.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x1574,5493,Loops 1-24,FICQ-10116.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x1576,5495,Loops 1-24,FICQ-10116.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x1578,5497,Loops 1-24,FICQ-10116.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x157A,5499,Loops 1-24,FICQ-10116.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x157C,5501,Loops 1-24,FICQ-10116.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x157E,5503,Loops 1-24,FICQ-10116.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x1586,5511,Loops 1-24,FICQ-10116.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x1588,5513,Loops 1-24,FICQ-10116.Bias,Bias,PID,,float 32,R/W,,,,,, +0x158A,5515,Loops 1-24,FICQ-10116.Deviation,Deviation,PID,,float 32,R,,,,,, +0x158E,5519,Loops 1-24,FICQ-10116.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x1590,5521,Loops 1-24,FICQ-10116.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x15F7,5624,Loops 1-24,FICQ-10116.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x15F8,5625,Loops 1-24,FICQ-10116.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x15FA,5627,Loops 1-24,FICQ-10116.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x15FB,5628,Loops 1-24,FICQ-10116.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x15FC,5629,Loops 1-24,FICQ-10116.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x15FD,5630,Loops 1-24,FICQ-10116.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x15FE,5631,Loops 1-24,FICQ-10116.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x1640,5697,Loops 1-24,TIC-10111A.PV,PV,PID,,float 32,R,,,,,, +0x1642,5699,Loops 1-24,TIC-10111A.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x1644,5701,Loops 1-24,TIC-10111A.WSP,WSP,PID,,float 32,R/W,,,,,, +0x1646,5703,Loops 1-24,TIC-10111A.Output,Output,PID,,float 32,R/W,,,,,, +0x1648,5705,Loops 1-24,TIC-10111A.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x164C,5709,Loops 1-24,TIC-10111A.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x164E,5711,Loops 1-24,TIC-10111A.Direction,Direction,PID,,float 32,R,,,,,, +0x1650,5713,Loops 1-24,TIC-10111A.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x1652,5715,Loops 1-24,TIC-10111A.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x1654,5717,Loops 1-24,TIC-10111A.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x1656,5719,Loops 1-24,TIC-10111A.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x1658,5721,Loops 1-24,TIC-10111A.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x165A,5723,Loops 1-24,TIC-10111A.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x165C,5725,Loops 1-24,TIC-10111A.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x1660,5729,Loops 1-24,TIC-10111A.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x1664,5733,Loops 1-24,TIC-10111A.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x1666,5735,Loops 1-24,TIC-10111A.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x1668,5737,Loops 1-24,TIC-10111A.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x166A,5739,Loops 1-24,TIC-10111A.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x166C,5741,Loops 1-24,TIC-10111A.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x166E,5743,Loops 1-24,TIC-10111A.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x1670,5745,Loops 1-24,TIC-10111A.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x1674,5749,Loops 1-24,TIC-10111A.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x1676,5751,Loops 1-24,TIC-10111A.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x1678,5753,Loops 1-24,TIC-10111A.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x167A,5755,Loops 1-24,TIC-10111A.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x167C,5757,Loops 1-24,TIC-10111A.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x167E,5759,Loops 1-24,TIC-10111A.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x1686,5767,Loops 1-24,TIC-10111A.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x1688,5769,Loops 1-24,TIC-10111A.Bias,Bias,PID,,float 32,R/W,,,,,, +0x168A,5771,Loops 1-24,TIC-10111A.Deviation,Deviation,PID,,float 32,R,,,,,, +0x168E,5775,Loops 1-24,TIC-10111A.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x1690,5777,Loops 1-24,TIC-10111A.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x16F7,5880,Loops 1-24,TIC-10111A.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x16F8,5881,Loops 1-24,TIC-10111A.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x16FA,5883,Loops 1-24,TIC-10111A.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x16FB,5884,Loops 1-24,TIC-10111A.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x16FC,5885,Loops 1-24,TIC-10111A.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x16FD,5886,Loops 1-24,TIC-10111A.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x16FE,5887,Loops 1-24,TIC-10111A.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x1740,5953,Loops 1-24,PIC-10111A.PV,PV,PID,,float 32,R,,,,,, +0x1742,5955,Loops 1-24,PIC-10111A.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x1744,5957,Loops 1-24,PIC-10111A.WSP,WSP,PID,,float 32,R/W,,,,,, +0x1746,5959,Loops 1-24,PIC-10111A.Output,Output,PID,,float 32,R/W,,,,,, +0x1748,5961,Loops 1-24,PIC-10111A.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x174C,5965,Loops 1-24,PIC-10111A.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x174E,5967,Loops 1-24,PIC-10111A.Direction,Direction,PID,,float 32,R,,,,,, +0x1750,5969,Loops 1-24,PIC-10111A.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x1752,5971,Loops 1-24,PIC-10111A.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x1754,5973,Loops 1-24,PIC-10111A.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x1756,5975,Loops 1-24,PIC-10111A.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x1758,5977,Loops 1-24,PIC-10111A.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x175A,5979,Loops 1-24,PIC-10111A.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x175C,5981,Loops 1-24,PIC-10111A.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x1760,5985,Loops 1-24,PIC-10111A.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x1764,5989,Loops 1-24,PIC-10111A.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x1766,5991,Loops 1-24,PIC-10111A.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x1768,5993,Loops 1-24,PIC-10111A.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x176A,5995,Loops 1-24,PIC-10111A.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x176C,5997,Loops 1-24,PIC-10111A.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x176E,5999,Loops 1-24,PIC-10111A.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x1770,6001,Loops 1-24,PIC-10111A.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x1774,6005,Loops 1-24,PIC-10111A.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x1776,6007,Loops 1-24,PIC-10111A.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x1778,6009,Loops 1-24,PIC-10111A.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x177A,6011,Loops 1-24,PIC-10111A.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x177C,6013,Loops 1-24,PIC-10111A.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x177E,6015,Loops 1-24,PIC-10111A.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x1786,6023,Loops 1-24,PIC-10111A.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x1788,6025,Loops 1-24,PIC-10111A.Bias,Bias,PID,,float 32,R/W,,,,,, +0x178A,6027,Loops 1-24,PIC-10111A.Deviation,Deviation,PID,,float 32,R,,,,,, +0x178E,6031,Loops 1-24,PIC-10111A.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x1790,6033,Loops 1-24,PIC-10111A.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x17F7,6136,Loops 1-24,PIC-10111A.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x17F8,6137,Loops 1-24,PIC-10111A.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x17FA,6139,Loops 1-24,PIC-10111A.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x17FB,6140,Loops 1-24,PIC-10111A.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x17FC,6141,Loops 1-24,PIC-10111A.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x17FD,6142,Loops 1-24,PIC-10111A.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x17FE,6143,Loops 1-24,PIC-10111A.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x18C0,6337,Variables 1-600,XV9101AUTO,,Variable,1,float 32,R/W,,0,Digital,ON,OFF, +0x18C2,6339,Variables 1-600,P9101ON,,Variable,2,float 32,R/W,,0,Digital,ON,OFF, +0x18C4,6341,Variables 1-600,F9601_HZ_SET,,Variable,3,float 32,R/W,,0,Analog,,, +0x18C6,6343,Variables 1-600,P9_LAMP_SCHEDULE,,Variable,4,float 32,R/W,,0,Digital,ON,OFF, +0x18C8,6345,Variables 1-600,P9114ON,,Variable,5,float 32,R/W,,0,Digital,ON,OFF, +0x18CA,6347,Variables 1-600,P9Z1_AM_SEL,,Variable,6,float 32,R/W,,0,Digital,ON,OFF, +0x18CC,6349,Variables 1-600,P9118ON,,Variable,7,float 32,R/W,,0,Digital,ON,OFF, +0x18CE,6351,Variables 1-600,P9Z2_AM_SEL,,Variable,8,float 32,R/W,,0,Digital,ON,OFF, +0x18D0,6353,Variables 1-600,P9116ON,,Variable,9,float 32,R/W,,0,Digital,ON,OFF, +0x18D2,6355,Variables 1-600,P9Z3_AM_SEL,,Variable,10,float 32,R/W,,0,Digital,ON,OFF, +0x18D4,6357,Variables 1-600,P9121ON,,Variable,11,float 32,R/W,,0,Digital,ON,OFF, +0x18D6,6359,Variables 1-600,P9Z4_AM_SEL,,Variable,12,float 32,R/W,,0,Digital,ON,OFF, +0x18D8,6361,Variables 1-600,P9122ON,,Variable,13,float 32,R/W,,0,Digital,ON,OFF, +0x18DA,6363,Variables 1-600,LI9121_LOW_SET,,Variable,14,float 32,R/W,,1,Analog,,, +0x18DC,6365,Variables 1-600,LI9122_LOW_SET,,Variable,15,float 32,R/W,,1,Analog,,, +0x18DE,6367,Variables 1-600,P9Z1_MAN_ON,,Variable,16,float 32,R/W,,0,Digital,ON,OFF, +0x18E0,6369,Variables 1-600,P9201ON,,Variable,17,float 32,R/W,,0,Digital,ON,OFF, +0x18E2,6371,Variables 1-600,P9Z2_MAN_ON,,Variable,18,float 32,R/W,,0,Digital,ON,OFF, +0x18E4,6373,Variables 1-600,P9214ON,,Variable,19,float 32,R/W,,0,Digital,ON,OFF, +0x18E6,6375,Variables 1-600,P9Z3_MAN_ON,,Variable,20,float 32,R/W,,0,Digital,ON,OFF, +0x18E8,6377,Variables 1-600,P9218ON,,Variable,21,float 32,R/W,,0,Digital,ON,OFF, +0x18EA,6379,Variables 1-600,P9Z4_MAN_ON,,Variable,22,float 32,R/W,,0,Digital,ON,OFF, +0x18EC,6381,Variables 1-600,P9216ON,,Variable,23,float 32,R/W,,0,Digital,ON,OFF, +0x18EE,6383,Variables 1-600,LI_9111SP,,Variable,24,float 32,R/W,,1,Analog,,, +0x18F0,6385,Variables 1-600,P9221ON,,Variable,25,float 32,R/W,,0,Digital,ON,OFF, +0x18F2,6387,Variables 1-600,LI9221_LOW_SET,,Variable,26,float 32,R/W,,1,Analog,,, +0x18F4,6389,Variables 1-600,LI_9211SP,,Variable,27,float 32,R/W,,1,Analog,,, +0x18F6,6391,Variables 1-600,P9118_HZ_SET,,Variable,28,float 32,R/W,,1,Analog,,, +0x18F8,6393,Variables 1-600,VP9117ON,,Variable,29,float 32,R/W,,0,Digital,ON,OFF, +0x18FA,6395,Variables 1-600,XV_6121_ON,,Variable,30,float 32,R/W,,0,Digital,ON,OFF, +0x18FC,6397,Variables 1-600,VP9217ON,,Variable,31,float 32,R/W,,0,Digital,ON,OFF, +0x18FE,6399,Variables 1-600,P_9102ON,,Variable,32,float 32,R/W,,0,Digital,ON,OFF, +0x1900,6401,Variables 1-600,P9601AON,,Variable,33,float 32,R/W,,0,Digital,ON,OFF, +0x1902,6403,Variables 1-600,XV_6122_ON,,Variable,34,float 32,R/W,,0,Digital,ON,OFF, +0x1904,6405,Variables 1-600,P9601BON,,Variable,35,float 32,R/W,,0,Digital,ON,OFF, +0x1906,6407,Variables 1-600,XV_6125A_ON,,Variable,36,float 32,R/W,,0,Digital,ON,OFF, +0x1908,6409,Variables 1-600,F9601ON,,Variable,37,float 32,R/W,,0,Digital,ON,OFF, +0x190A,6411,Variables 1-600,XV_6221_ON,,Variable,38,float 32,R/W,,0,Digital,ON,OFF, +0x190C,6413,Variables 1-600,P9128AON,,Variable,39,float 32,R/W,,0,Digital,ON,OFF, +0x190E,6415,Variables 1-600,XV_6126A_ON,,Variable,40,float 32,R/W,,0,Digital,ON,OFF, +0x1910,6417,Variables 1-600,P9128BON,,Variable,41,float 32,R/W,,0,Digital,ON,OFF, +0x1912,6419,Variables 1-600,XV9101ON,,Variable,42,float 32,R/W,,0,Digital,ON,OFF, +0x1914,6421,Variables 1-600,XV_6222_ON,,Variable,43,float 32,R/W,,0,Digital,ON,OFF, +0x1916,6423,Variables 1-600,LI9101_LOW_SET,,Variable,44,float 32,R/W,%,1,Analog,,, +0x1918,6425,Variables 1-600,LI9101_HIGH_SET,,Variable,45,float 32,R/W,%,1,Analog,,, +0x191A,6427,Variables 1-600,XV_6225A_ON,,Variable,46,float 32,R/W,,0,Digital,ON,OFF, +0x191C,6429,Variables 1-600,P9C1_MAN_ESD,,Variable,47,float 32,R/W,,0,Digital,ON,OFF, +0x191E,6431,Variables 1-600,9100_ESD_RST,,Variable,48,float 32,R/W,,0,Digital,ON,OFF, +0x1920,6433,Variables 1-600,TIC9111A_IL_RST,,Variable,49,float 32,R/W,,0,Digital,ON,OFF, +0x1922,6435,Variables 1-600,PIC9111A_IL_RST,,Variable,50,float 32,R/W,,0,Digital,ON,OFF, +0x1924,6437,Variables 1-600,LIC9113_IL_RST,,Variable,51,float 32,R/W,,0,Digital,ON,OFF, +0x1926,6439,Variables 1-600,XV_9128_ON,,Variable,52,float 32,R/W,,0,Digital,ON,OFF, +0x1928,6441,Variables 1-600,TIC9211A_IL_RST,,Variable,53,float 32,R/W,,0,Digital,ON,OFF, +0x192A,6443,Variables 1-600,PIC9211A_IL_RST,,Variable,54,float 32,R/W,,0,Digital,ON,OFF, +0x192C,6445,Variables 1-600,LIC9213_IL_RST,,Variable,55,float 32,R/W,,0,Digital,ON,OFF, +0x192E,6447,Variables 1-600,XV_6226A_ON,,Variable,56,float 32,R/W,,0,Digital,ON,OFF, +0x1930,6449,Variables 1-600,P9101_HZ_SET,,Variable,57,float 32,R/W,,1,Analog,,, +0x1932,6451,Variables 1-600,P9C2_MAN_ESD,,Variable,58,float 32,R/W,,0,Digital,ON,OFF, +0x1934,6453,Variables 1-600,9200_ESD_RST,,Variable,59,float 32,R/W,,0,Digital,ON,OFF, +0x1936,6455,Variables 1-600,FQ_9100_RST,,Variable,60,float 32,R/W,,0,Digital,ON,OFF, +0x1938,6457,Variables 1-600,FQ_9101_RST,,Variable,61,float 32,R/W,,0,Digital,ON,OFF, +0x193A,6459,Variables 1-600,FQ_9113_RST,,Variable,62,float 32,R/W,,0,Digital,ON,OFF, +0x193C,6461,Variables 1-600,FQ_9115_RST,,Variable,63,float 32,R/W,,0,Digital,ON,OFF, +0x193E,6463,Variables 1-600,FQ_9118_RST,,Variable,64,float 32,R/W,,0,Digital,ON,OFF, +0x1940,6465,Variables 1-600,FT_9201_RST,,Variable,65,float 32,R/W,,0,Digital,ON,OFF, +0x1942,6467,Variables 1-600,FQ_9116_RST,,Variable,66,float 32,R/W,,0,Digital,ON,OFF, +0x1944,6469,Variables 1-600,FQ_9114_RST,,Variable,67,float 32,R/W,,0,Digital,ON,OFF, +0x1946,6471,Variables 1-600,FT_9218_RST,,Variable,68,float 32,R/W,,0,Digital,ON,OFF, +0x1948,6473,Variables 1-600,FT_9216_RST,,Variable,69,float 32,R/W,,0,Digital,ON,OFF, +0x194A,6475,Variables 1-600,FT_9213_RST,,Variable,70,float 32,R/W,,0,Digital,ON,OFF, +0x194C,6477,Variables 1-600,FT_9215_RST,,Variable,71,float 32,R/W,,0,Digital,ON,OFF, +0x194E,6479,Variables 1-600,FT_9214_RST,,Variable,72,float 32,R/W,,0,Digital,ON,OFF, +0x1950,6481,Variables 1-600,P9201_HZ_SET,,Variable,73,float 32,R/W,,0,Analog,,, +0x1952,6483,Variables 1-600,FT_6127_RST,,Variable,74,float 32,R/W,,0,Digital,ON,OFF, +0x1954,6485,Variables 1-600,FT_6227_RST,,Variable,75,float 32,R/W,,0,Digital,ON,OFF, +0x1956,6487,Variables 1-600,FT_9120_RST,,Variable,76,float 32,R/W,,0,Digital,ON,OFF, +0x1958,6489,Variables 1-600,XV_9125_ON,,Variable,77,float 32,R/W,,0,Digital,ON,OFF, +0x195A,6491,Variables 1-600,P_10101ON,,Variable,78,float 32,R/W,,0,Digital,ON,OFF, +0x195C,6493,Variables 1-600,P_10114ON,,Variable,79,float 32,R/W,,0,Digital,ON,OFF, +0x195E,6495,Variables 1-600,P_10118ON,,Variable,80,float 32,R/W,,0,Digital,ON,OFF, +0x1960,6497,Variables 1-600,P_10116ON,,Variable,81,float 32,R/W,,0,Digital,ON,OFF, +0x1962,6499,Variables 1-600,P_10201ON,,Variable,82,float 32,R/W,,0,Digital,ON,OFF, +0x1964,6501,Variables 1-600,P_10214ON,,Variable,83,float 32,R/W,,0,Digital,ON,OFF, +0x1966,6503,Variables 1-600,P_10218ON,,Variable,84,float 32,R/W,,0,Digital,ON,OFF, +0x1968,6505,Variables 1-600,P_10216ON,,Variable,85,float 32,R/W,,0,Digital,ON,OFF, +0x196A,6507,Variables 1-600,VP_10117ON,,Variable,86,float 32,R/W,,0,Digital,ON,OFF, +0x196C,6509,Variables 1-600,VP_10217ON,,Variable,87,float 32,R/W,,0,Digital,ON,OFF, +0x196E,6511,Variables 1-600,P_10128AON,,Variable,88,float 32,R/W,,0,Digital,ON,OFF, +0x1970,6513,Variables 1-600,P_10128BON,,Variable,89,float 32,R/W,,0,Digital,ON,OFF, +0x1972,6515,Variables 1-600,TIC10111A_IL_RST,,Variable,90,float 32,R/W,,0,Digital,ON,OFF, +0x1974,6517,Variables 1-600,PIC10111A_IL_RST,,Variable,91,float 32,R/W,,0,Digital,ON,OFF, +0x1976,6519,Variables 1-600,LIC10113_IL_RST,,Variable,92,float 32,R/W,,0,Digital,ON,OFF, +0x1978,6521,Variables 1-600,TIC10211A_IL_RST,,Variable,93,float 32,R/W,,0,Digital,ON,OFF, +0x197A,6523,Variables 1-600,PIC10211A_IL_RST,,Variable,94,float 32,R/W,,0,Digital,ON,OFF, +0x197C,6525,Variables 1-600,LIC10213_IL_RST,,Variable,95,float 32,R/W,,0,Digital,ON,OFF, +0x197E,6527,Variables 1-600,P_10221ON,,Variable,96,float 32,R/W,,0,Digital,ON,OFF, +0x1980,6529,Variables 1-600,P_10800A_ON,,Variable,97,float 32,R/W,,0,Digital,ON,OFF, +0x1982,6531,Variables 1-600,FQ_10213_RST,,Variable,98,float 32,R/W,,0,Digital,ON,OFF, +0x1984,6533,Variables 1-600,LIA_10111_SP,,Variable,99,float 32,R/W,,0,Analog,,, +0x1986,6535,Variables 1-600,INVALIDTAG,,,,float 32,,,,,,, +0x1988,6537,Variables 1-600,XV_10111_HS,,Variable,101,float 32,R/W,,0,Digital,CLOSE,OPEN, +0x198A,6539,Variables 1-600,XV_10211_HS,,Variable,102,float 32,R/W,,0,Digital,CLOSE,OPEN, +0x198C,6541,Variables 1-600,P10C1_MAN_ESD,,Variable,103,float 32,R/W,,0,Digital,ON,OFF, +0x198E,6543,Variables 1-600,10100_ESD_RST,,Variable,104,float 32,R/W,,0,Digital,ON,OFF, +0x1990,6545,Variables 1-600,P10C2_MAN_ESD,,Variable,105,float 32,R/W,,0,Digital,ON,OFF, +0x1992,6547,Variables 1-600,10200_ESD_RST,,Variable,106,float 32,R/W,,0,Digital,ON,OFF, +0x1994,6549,Variables 1-600,P_10800B_ON,,Variable,107,float 32,R/W,,0,Digital,ON,OFF, +0x1996,6551,Variables 1-600,FQ_10114B_RST,,Variable,108,float 32,R/W,,0,Digital,ON,OFF, +0x1998,6553,Variables 1-600,FQ_10101_RST,,Variable,109,float 32,R/W,,0,Digital,ON,OFF, +0x199A,6555,Variables 1-600,FQ_10113_RST,,Variable,110,float 32,R/W,,0,Digital,ON,OFF, +0x199C,6557,Variables 1-600,FQ_10115_RST,,Variable,111,float 32,R/W,,0,Digital,ON,OFF, +0x199E,6559,Variables 1-600,FQ_10118_RST,,Variable,112,float 32,R/W,,0,Digital,ON,OFF, +0x19A0,6561,Variables 1-600,FQ_10201_RST,,Variable,113,float 32,R/W,,0,Digital,ON,OFF, +0x19A2,6563,Variables 1-600,FQ_10116_RST,,Variable,114,float 32,R/W,,0,Digital,ON,OFF, +0x19A4,6565,Variables 1-600,FQ_10114A_RST,,Variable,115,float 32,R/W,,0,Digital,ON,OFF, +0x19A6,6567,Variables 1-600,FQ_10215_RST,,Variable,116,float 32,R/W,,0,Digital,ON,OFF, +0x19A8,6569,Variables 1-600,FQ_10218_RST,,Variable,117,float 32,R/W,,0,Digital,ON,OFF, +0x19AA,6571,Variables 1-600,FQ_10206_RST,,Variable,118,float 32,R/W,,0,Digital,ON,OFF, +0x19AC,6573,Variables 1-600,FQ_10214_RST,,Variable,119,float 32,R/W,,0,Digital,ON,OFF, +0x19AE,6575,Variables 1-600,FCV_9116B,,Variable,125,float 32,R/W,,1,Analog,,, +0x19B0,6577,Variables 1-600,FCV_10116B,,Variable,126,float 32,R/W,,1,Analog,,, +0x19B2,6579,Variables 1-600,XV_10128_ON,,Variable,128,float 32,R/W,,0,Digital,ON,OFF, +0x19B4,6581,Variables 1-600,P_9116B_START,,Variable,127,float 32,R/W,,0,Digital,ON,OFF, +0x19B6,6583,Variables 1-600,FQ_9116B_RST,,Variable,122,float 32,R/W,,0,Digital,ON,OFF, +0x19B8,6585,Variables 1-600,FQ_10116B_RST,,Variable,121,float 32,R/W,,0,Digital,ON,OFF, +0x1DF0,7665,Time,Time_Hours,,System Register,,unsigned 16,R/W,,,,,, +0x1DF1,7666,Time,Time_Minutes,,System Register,,unsigned 16,R/W,,,,,, +0x1DF2,7667,Time,Time_Seconds,,System Register,,unsigned 16,R/W,,,,,, +0x1DF3,7668,Time,Time_Month,,System Register,,unsigned 16,R/W,,,,,, +0x1DF4,7669,Time,Time_Day,,System Register,,unsigned 16,R/W,,,,,, +0x1DF5,7670,Time,Time_Year,,System Register,,unsigned 16,R/W,,,,,, +0x1DF6,7671,Time,Time_Day_of_Week,,System Register,,unsigned 16,R/W,,,,,, +0x2000,8193,Signal Tags 1-1000,FI_9100,,Signal Tag,1,float 32,R,kg/hr,1,Analog,,,Block 326 Output 1 +0x2002,8195,Signal Tags 1-1000,LI_9100,,Signal Tag,2,float 32,R,,0,Analog,,,Block 114 Output 4 +0x2004,8197,Signal Tags 1-1000,LI_9111,,Signal Tag,3,float 32,R,,0,Analog,,,Block 115 Output 4 +0x2006,8199,Signal Tags 1-1000,LI_9128,,Signal Tag,4,float 32,R,%,1,Analog,,,Block 117 Output 4 +0x2008,8201,Signal Tags 1-1000,LI_9101,T-9101 LEVEL,Signal Tag,5,float 32,R,%,1,Analog,,,Block 118 Output 4 +0x200A,8203,Signal Tags 1-1000,LI_9121,,Signal Tag,6,float 32,R,%,1,Analog,,,Block 119 Output 4 +0x200C,8205,Signal Tags 1-1000,LI_9122,,Signal Tag,7,float 32,R,%,1,Analog,,,Block 120 Output 4 +0x200E,8207,Signal Tags 1-1000,LI_9123,T-9123,Signal Tag,8,float 32,R,%,1,Analog,,,Block 121 Output 4 +0x2010,8209,Signal Tags 1-1000,LI_9124,,Signal Tag,9,float 32,R,,0,Analog,,,Block 122 Output 4 +0x2012,8211,Signal Tags 1-1000,LI_9200,T-9200,Signal Tag,10,float 32,R,%,1,Analog,,,Block 125 Output 4 +0x2014,8213,Signal Tags 1-1000,PI_9111B,,Signal Tag,11,float 32,R,mmHg,1,Analog,,,Block 123 Output 4 +0x2016,8215,Signal Tags 1-1000,LI_9211,C-9211,Signal Tag,12,float 32,R,%,1,Analog,,,Block 126 Output 4 +0x2018,8217,Signal Tags 1-1000,LI_9201,,Signal Tag,13,float 32,R,%,1,Analog,,,Block 128 Output 4 +0x201A,8219,Signal Tags 1-1000,LI_9221,,Signal Tag,14,float 32,R,,0,Analog,,,Block 129 Output 4 +0x201C,8221,Signal Tags 1-1000,F9601_HZ,,Signal Tag,15,float 32,R,Hz,0,Analog,,,Block 132 Output 4 +0x201E,8223,Signal Tags 1-1000,PI_9211B,,Signal Tag,16,float 32,R,mmHg,1,Analog,,,Block 130 Output 4 +0x2020,8225,Signal Tags 1-1000,TI_9111B,,Signal Tag,17,float 32,R,degC,1,Analog,,,Block 150 Output 4 +0x2022,8227,Signal Tags 1-1000,TI_9111C,,Signal Tag,18,float 32,R,degC,1,Analog,,,Block 151 Output 4 +0x2024,8229,Signal Tags 1-1000,TI_9111D,,Signal Tag,19,float 32,R,degC,1,Analog,,,Block 152 Output 4 +0x2026,8231,Signal Tags 1-1000,TI_9103,,Signal Tag,20,float 32,R,degC,1,Analog,,,Block 153 Output 4 +0x2028,8233,Signal Tags 1-1000,TI_9117,,Signal Tag,21,float 32,R,degC,1,Analog,,,Block 154 Output 4 +0x202A,8235,Signal Tags 1-1000,TI_9600,,Signal Tag,22,float 32,R,degC,1,Analog,,,Block 155 Output 4 +0x202C,8237,Signal Tags 1-1000,TI_9650,,Signal Tag,23,float 32,R,degC,1,Analog,,,Block 156 Output 4 +0x202E,8239,Signal Tags 1-1000,TI_9211B,,Signal Tag,24,float 32,R,degC,1,Analog,,,Block 158 Output 4 +0x2030,8241,Signal Tags 1-1000,TI_9211C,,Signal Tag,25,float 32,R,degC,1,Analog,,,Block 159 Output 4 +0x2032,8243,Signal Tags 1-1000,TI_9211D,,Signal Tag,26,float 32,R,degC,1,Analog,,,Block 160 Output 4 +0x2034,8245,Signal Tags 1-1000,TI_9203,,Signal Tag,27,float 32,R,degC,1,Analog,,,Block 161 Output 4 +0x2036,8247,Signal Tags 1-1000,TI_9217,,Signal Tag,28,float 32,R,degC,1,Analog,,,Block 162 Output 4 +0x2038,8249,Signal Tags 1-1000,C4P1_DC24_A_OK,,Signal Tag,29,float 32,R,,0,Digital,ON,OFF,Block 172 Output 15 +0x203A,8251,Signal Tags 1-1000,C4P1_DC24_B_OK,,Signal Tag,30,float 32,R,,0,Digital,ON,OFF,Block 172 Output 16 +0x203C,8253,Signal Tags 1-1000,P_9101,,Signal Tag,31,float 32,R,,0,Analog,,,Block 177 Output 2 +0x203E,8255,Signal Tags 1-1000,P_9114,,Signal Tag,32,float 32,R,,0,Analog,,,Block 178 Output 2 +0x2040,8257,Signal Tags 1-1000,P_9118,,Signal Tag,33,float 32,R,,0,Analog,,,Block 179 Output 2 +0x2042,8259,Signal Tags 1-1000,P_9116,,Signal Tag,34,float 32,R,,0,Analog,,,Block 180 Output 2 +0x2044,8261,Signal Tags 1-1000,P_9121,,Signal Tag,35,float 32,R,,0,Analog,,,Block 181 Output 2 +0x2046,8263,Signal Tags 1-1000,P_9122,,Signal Tag,36,float 32,R,,0,Analog,,,Block 182 Output 2 +0x2048,8265,Signal Tags 1-1000,P_6101,,Signal Tag,37,float 32,R,,0,Analog,,,Block 183 Output 2 +0x204A,8267,Signal Tags 1-1000,P_9201,,Signal Tag,38,float 32,R,,0,Analog,,,Block 184 Output 2 +0x204C,8269,Signal Tags 1-1000,P_9214,,Signal Tag,39,float 32,R,,0,Analog,,,Block 185 Output 2 +0x204E,8271,Signal Tags 1-1000,P_9218,,Signal Tag,40,float 32,R,,0,Analog,,,Block 186 Output 2 +0x2050,8273,Signal Tags 1-1000,P_9216,,Signal Tag,41,float 32,R,,0,Analog,,,Block 187 Output 2 +0x2052,8275,Signal Tags 1-1000,P_9221,,Signal Tag,42,float 32,R,,0,Analog,,,Block 188 Output 2 +0x2054,8277,Signal Tags 1-1000,FI_10215,,Signal Tag,43,float 32,R,,0,Analog,,,Block 895 Output 1 +0x2056,8279,Signal Tags 1-1000,VP_9117,,Signal Tag,44,float 32,R,,0,Analog,,,Block 190 Output 2 +0x2058,8281,Signal Tags 1-1000,VP_9217,,Signal Tag,45,float 32,R,,0,Analog,,,Block 191 Output 2 +0x205A,8283,Signal Tags 1-1000,P_9602A,,Signal Tag,46,float 32,R,,0,Analog,,,Block 192 Output 2 +0x205C,8285,Signal Tags 1-1000,P_9602B,,Signal Tag,47,float 32,R,,0,Analog,,,Block 193 Output 2 +0x205E,8287,Signal Tags 1-1000,F_9601,,Signal Tag,48,float 32,R,,0,Analog,,,Block 194 Output 2 +0x2060,8289,Signal Tags 1-1000,P_9128A,,Signal Tag,49,float 32,R,,0,Analog,,,Block 195 Output 2 +0x2062,8291,Signal Tags 1-1000,P_9128B,,Signal Tag,50,float 32,R,,0,Analog,,,Block 196 Output 2 +0x2064,8293,Signal Tags 1-1000,XV_9101,,Signal Tag,51,float 32,R,,0,Analog,,,Block 197 Output 2 +0x2066,8295,Signal Tags 1-1000,LIC9113_LO_ESD,,Signal Tag,52,float 32,R,,0,Digital,ON,OFF,Block 291 Output 20 +0x2068,8297,Signal Tags 1-1000,PIC9111A_LO_IL,,Signal Tag,53,float 32,R,,0,Digital,ON,OFF,Block 257 Output 21 +0x206A,8299,Signal Tags 1-1000,TIC9111A_HI_IL,,Signal Tag,54,float 32,R,,0,Digital,ON,OFF,Block 256 Output 21 +0x206C,8301,Signal Tags 1-1000,TIC9111A_HI_ESD,,Signal Tag,55,float 32,R,,0,Digital,ON,OFF,Block 256 Output 20 +0x206E,8303,Signal Tags 1-1000,9100_MAN_ESD,,Signal Tag,56,float 32,R,,0,Digital,ON,OFF,Block 275 Output 1 +0x2070,8305,Signal Tags 1-1000,PIC9111A_LO_ESD,,Signal Tag,57,float 32,R,,0,Digital,ON,OFF,Block 257 Output 20 +0x2072,8307,Signal Tags 1-1000,LIC9113_LO_IL,,Signal Tag,58,float 32,R,,0,Digital,ON,OFF,Block 291 Output 21 +0x2074,8309,Signal Tags 1-1000,LIC9213_LO_ESD,,Signal Tag,59,float 32,R,,0,Digital,ON,OFF,Block 308 Output 20 +0x2076,8311,Signal Tags 1-1000,LIC9213_LO_IL,,Signal Tag,60,float 32,R,,0,Digital,ON,OFF,Block 308 Output 21 +0x2078,8313,Signal Tags 1-1000,TIC9211A_HI_ESD,,Signal Tag,61,float 32,R,,0,Digital,ON,OFF,Block 263 Output 20 +0x207A,8315,Signal Tags 1-1000,TIC9211A_HI_IL,,Signal Tag,62,float 32,R,,0,Digital,ON,OFF,Block 263 Output 21 +0x207C,8317,Signal Tags 1-1000,PIC9211A_LO_ESD,,Signal Tag,63,float 32,R,,0,Digital,ON,OFF,Block 264 Output 20 +0x207E,8319,Signal Tags 1-1000,PIC9211A_LO_IL,,Signal Tag,64,float 32,R,,0,Digital,ON,OFF,Block 264 Output 21 +0x2080,8321,Signal Tags 1-1000,9200_MAN_ESD,,Signal Tag,65,float 32,R,,0,Digital,ON,OFF,Block 311 Output 1 +0x2082,8323,Signal Tags 1-1000,TIC9111A_TRIP,,Signal Tag,66,float 32,R,,0,Digital,ON,OFF,Block 280 Output 1 +0x2084,8325,Signal Tags 1-1000,PIC9111A_TRIP,,Signal Tag,67,float 32,R,,0,Digital,ON,OFF,Block 283 Output 1 +0x2086,8327,Signal Tags 1-1000,LIC91113_TRIP,,Signal Tag,68,float 32,R,,0,Digital,ON,OFF,Block 288 Output 1 +0x2088,8329,Signal Tags 1-1000,TIC9211A_TRIP,,Signal Tag,69,float 32,R,,0,Digital,ON,OFF,Block 297 Output 1 +0x208A,8331,Signal Tags 1-1000,PIC9211B_TRIP,,Signal Tag,70,float 32,R,,0,Digital,ON,OFF,Block 300 Output 1 +0x208C,8333,Signal Tags 1-1000,LIC9213_TRIP,,Signal Tag,71,float 32,R,,0,Digital,ON,OFF,Block 304 Output 1 +0x208E,8335,Signal Tags 1-1000,9113LO_MAN_ESD,,Signal Tag,72,float 32,R,,0,Digital,ON,OFF,Block 317 Output 1 +0x2090,8337,Signal Tags 1-1000,9113_LO_ESD,,Signal Tag,73,float 32,R,,0,Digital,ON,OFF,Block 318 Output 1 +0x2092,8339,Signal Tags 1-1000,FQ_9100,,Signal Tag,74,float 32,R,,3,Analog,,,Block 327 Output 1 +0x2094,8341,Signal Tags 1-1000,FQ_9101,,Signal Tag,75,float 32,R,,3,Analog,,,Block 330 Output 1 +0x2096,8343,Signal Tags 1-1000,FQ_9115,,Signal Tag,76,float 32,R,,3,Analog,,,Block 335 Output 1 +0x2098,8345,Signal Tags 1-1000,FQ_9113,,Signal Tag,77,float 32,R,,3,Analog,,,Block 339 Output 1 +0x209A,8347,Signal Tags 1-1000,FQ_9215,,Signal Tag,78,float 32,R,,3,Analog,,,Block 359 Output 1 +0x209C,8349,Signal Tags 1-1000,FI_9115,,Signal Tag,79,float 32,R,,0,Analog,,,Block 334 Output 1 +0x209E,8351,Signal Tags 1-1000,FQ_9114,,Signal Tag,80,float 32,R,,3,Analog,,,Block 343 Output 1 +0x20A0,8353,Signal Tags 1-1000,FQ_9116,,Signal Tag,81,float 32,R,,3,Analog,,,Block 347 Output 1 +0x20A2,8355,Signal Tags 1-1000,FQ_9118,,Signal Tag,82,float 32,R,,3,Analog,,,Block 351 Output 1 +0x20A4,8357,Signal Tags 1-1000,FQ_9201,,Signal Tag,83,float 32,R,,3,Analog,,,Block 355 Output 1 +0x20A6,8359,Signal Tags 1-1000,FQ_9213,,Signal Tag,84,float 32,R,,3,Analog,,,Block 363 Output 1 +0x20A8,8361,Signal Tags 1-1000,FQ_9218,,Signal Tag,85,float 32,R,,3,Analog,,,Block 367 Output 1 +0x20AA,8363,Signal Tags 1-1000,FQ_9216,,Signal Tag,86,float 32,R,,3,Analog,,,Block 371 Output 1 +0x20AC,8365,Signal Tags 1-1000,FQ_9214,,Signal Tag,87,float 32,R,,3,Analog,,,Block 375 Output 1 +0x20AE,8367,Signal Tags 1-1000,9100_ESD,,Signal Tag,88,float 32,R,,0,Digital,ON,OFF,Block 292 Output 1 +0x20B0,8369,Signal Tags 1-1000,9200_ESD,,Signal Tag,89,float 32,R,,0,Digital,ON,OFF,Block 309 Output 1 +0x20B2,8371,Signal Tags 1-1000,F9601_RUN,,Signal Tag,90,float 32,R,,0,Digital,ON,OFF,Block 171 Output 15 +0x20B4,8373,Signal Tags 1-1000,P9Z1_LAMP,,Signal Tag,91,float 32,R,,0,Digital,ON,OFF,Block 441 Output 1 +0x20B6,8375,Signal Tags 1-1000,P9Z2_LAMP,,Signal Tag,92,float 32,R,,0,Digital,ON,OFF,Block 444 Output 1 +0x20B8,8377,Signal Tags 1-1000,P9Z3_LAMP,,Signal Tag,93,float 32,R,,0,Digital,ON,OFF,Block 447 Output 1 +0x20BA,8379,Signal Tags 1-1000,P9Z4_LAMP,,Signal Tag,94,float 32,R,,0,Digital,ON,OFF,Block 450 Output 1 +0x20BC,8381,Signal Tags 1-1000,FI_9215,,Signal Tag,95,float 32,R,,0,Analog,,,Block 358 Output 1 +0x20BE,8383,Signal Tags 1-1000,P9118_HZ,,Signal Tag,96,float 32,R,,1,Analog,,,Block 163 Output 4 +0x20C0,8385,Signal Tags 1-1000,C4P2_DC24V_A_OK,,Signal Tag,97,float 32,R,,0,Digital,ON,OFF,Block 458 Output 15 +0x20C2,8387,Signal Tags 1-1000,C4P2_DC24V_B_OK,,Signal Tag,98,float 32,R,,0,Digital,ON,OFF,Block 458 Output 16 +0x20C4,8389,Signal Tags 1-1000,XV_6121,,Signal Tag,99,float 32,R,,0,Analog,,,Block 459 Output 2 +0x20C6,8391,Signal Tags 1-1000,XV_6122,,Signal Tag,100,float 32,R,,0,Analog,,,Block 460 Output 2 +0x20C8,8393,Signal Tags 1-1000,XV_6221,,Signal Tag,101,float 32,R,,0,Analog,,,Block 461 Output 2 +0x20CA,8395,Signal Tags 1-1000,XV_6222,,Signal Tag,102,float 32,R,,0,Analog,,,Block 462 Output 2 +0x20CC,8397,Signal Tags 1-1000,XV_9128,,Signal Tag,103,float 32,R,,0,Analog,,,Block 463 Output 2 +0x20CE,8399,Signal Tags 1-1000,LT_8121,,Signal Tag,104,float 32,R,%,1,Analog,,,Block 502 Output 4 +0x20D0,8401,Signal Tags 1-1000,LT_8122,,Signal Tag,105,float 32,R,,1,Analog,,,Block 503 Output 4 +0x20D2,8403,Signal Tags 1-1000,P_9101_HZ,,Signal Tag,106,float 32,R,Hz,1,Analog,,,Block 474 Output 4 +0x20D4,8405,Signal Tags 1-1000,P_9201_HZ,,Signal Tag,107,float 32,R,Hz,1,Analog,,,Block 475 Output 4 +0x20D6,8407,Signal Tags 1-1000,LT_6125,,Signal Tag,108,float 32,R,,1,Analog,,,Block 504 Output 4 +0x20D8,8409,Signal Tags 1-1000,LT_6126,,Signal Tag,109,float 32,R,,1,Analog,,,Block 505 Output 4 +0x20DA,8411,Signal Tags 1-1000,LT_6225,,Signal Tag,110,float 32,R,,1,Analog,,,Block 506 Output 4 +0x20DC,8413,Signal Tags 1-1000,LT_6226,,Signal Tag,111,float 32,R,,1,Analog,,,Block 507 Output 4 +0x20DE,8415,Signal Tags 1-1000,LT_3101,,Signal Tag,112,float 32,R,,1,Analog,,,Block 508 Output 4 +0x20E0,8417,Signal Tags 1-1000,LT_9125,,Signal Tag,113,float 32,R,,1,Analog,,,Block 509 Output 4 +0x20E2,8419,Signal Tags 1-1000,DPT_6127A,,Signal Tag,114,float 32,R,%,1,Analog,,,Block 510 Output 4 +0x20E4,8421,Signal Tags 1-1000,DPT_6127B,,Signal Tag,115,float 32,R,,1,Analog,,,Block 511 Output 4 +0x20E6,8423,Signal Tags 1-1000,DPT_6227A,,Signal Tag,116,float 32,R,,1,Analog,,,Block 512 Output 4 +0x20E8,8425,Signal Tags 1-1000,DPT_6227B,,Signal Tag,117,float 32,R,,1,Analog,,,Block 513 Output 4 +0x20EA,8427,Signal Tags 1-1000,DPT_8120A,,Signal Tag,118,float 32,R,,1,Analog,,,Block 514 Output 4 +0x20EC,8429,Signal Tags 1-1000,DPT_8120B,,Signal Tag,119,float 32,R,,1,Analog,,,Block 515 Output 4 +0x20EE,8431,Signal Tags 1-1000,DPT_8120C,,Signal Tag,120,float 32,R,,1,Analog,,,Block 516 Output 4 +0x20F0,8433,Signal Tags 1-1000,DPT_8120D,,Signal Tag,121,float 32,R,,1,Analog,,,Block 517 Output 4 +0x20F2,8435,Signal Tags 1-1000,DPT_9120A,,Signal Tag,122,float 32,R,%,1,Analog,,,Block 518 Output 4 +0x20F4,8437,Signal Tags 1-1000,DPT_9120B,,Signal Tag,123,float 32,R,,1,Analog,,,Block 519 Output 4 +0x20F6,8439,Signal Tags 1-1000,PT_6903A,,Signal Tag,124,float 32,R,,1,Analog,,,Block 520 Output 4 +0x20F8,8441,Signal Tags 1-1000,PT_6903B,,Signal Tag,125,float 32,R,,1,Analog,,,Block 521 Output 4 +0x20FA,8443,Signal Tags 1-1000,PT_6903C,,Signal Tag,126,float 32,R,,1,Analog,,,Block 522 Output 4 +0x20FC,8445,Signal Tags 1-1000,FT_6127,,Signal Tag,127,float 32,R,%,1,Analog,,,Block 526 Output 4 +0x20FE,8447,Signal Tags 1-1000,FT_6227,,Signal Tag,128,float 32,R,,1,Analog,,,Block 527 Output 4 +0x2100,8449,Signal Tags 1-1000,FT_9120,,Signal Tag,129,float 32,R,,1,Analog,,,Block 528 Output 4 +0x2102,8451,Signal Tags 1-1000,TE_6125,,Signal Tag,130,float 32,R,%,1,Analog,,,Block 534 Output 4 +0x2104,8453,Signal Tags 1-1000,TE_6126,,Signal Tag,131,float 32,R,,1,Analog,,,Block 535 Output 4 +0x2106,8455,Signal Tags 1-1000,TE_6225,,Signal Tag,132,float 32,R,,1,Analog,,,Block 536 Output 4 +0x2108,8457,Signal Tags 1-1000,TE_6226,,Signal Tag,133,float 32,R,,1,Analog,,,Block 537 Output 4 +0x210A,8459,Signal Tags 1-1000,TE_3101,,Signal Tag,134,float 32,R,,1,Analog,,,Block 538 Output 4 +0x210C,8461,Signal Tags 1-1000,TE_8121,,Signal Tag,135,float 32,R,,1,Analog,,,Block 539 Output 4 +0x210E,8463,Signal Tags 1-1000,TE_8122,,Signal Tag,136,float 32,R,,1,Analog,,,Block 540 Output 4 +0x2110,8465,Signal Tags 1-1000,TE_9125,,Signal Tag,137,float 32,R,,1,Analog,,,Block 541 Output 4 +0x2112,8467,Signal Tags 1-1000,XV_6125A_OP,,Signal Tag,138,float 32,R,,0,Digital,ON,OFF,Block 542 Output 9 +0x2114,8469,Signal Tags 1-1000,XV_6125A_CL,,Signal Tag,139,float 32,R,,0,Digital,ON,OFF,Block 542 Output 10 +0x2116,8471,Signal Tags 1-1000,XV_6125B_OP,,Signal Tag,140,float 32,R,,0,Digital,ON,OFF,Block 542 Output 11 +0x2118,8473,Signal Tags 1-1000,XV_6125B_CL,,Signal Tag,141,float 32,R,,0,Digital,ON,OFF,Block 542 Output 12 +0x211A,8475,Signal Tags 1-1000,XV_6126A_OP,,Signal Tag,142,float 32,R,,0,Digital,ON,OFF,Block 542 Output 13 +0x211C,8477,Signal Tags 1-1000,XV_6126A_CL,,Signal Tag,143,float 32,R,,0,Digital,ON,OFF,Block 542 Output 14 +0x211E,8479,Signal Tags 1-1000,XV_6126B_OP,,Signal Tag,144,float 32,R,,0,Digital,ON,OFF,Block 542 Output 15 +0x2120,8481,Signal Tags 1-1000,XV_6126B_CL,,Signal Tag,145,float 32,R,,0,Digital,ON,OFF,Block 542 Output 16 +0x2122,8483,Signal Tags 1-1000,XV_6225A_OP,,Signal Tag,146,float 32,R,,0,Digital,ON,OFF,Block 543 Output 9 +0x2124,8485,Signal Tags 1-1000,XV_6225A_CL,,Signal Tag,147,float 32,R,,0,Digital,ON,OFF,Block 543 Output 10 +0x2126,8487,Signal Tags 1-1000,XV_6225B_OP,,Signal Tag,148,float 32,R,,0,Digital,ON,OFF,Block 543 Output 11 +0x2128,8489,Signal Tags 1-1000,XV_6225B_CL,,Signal Tag,149,float 32,R,,0,Digital,ON,OFF,Block 543 Output 12 +0x212A,8491,Signal Tags 1-1000,XV_6226A_OP,,Signal Tag,150,float 32,R,,0,Digital,ON,OFF,Block 543 Output 13 +0x212C,8493,Signal Tags 1-1000,XV_6226A_CL,,Signal Tag,151,float 32,R,,0,Digital,ON,OFF,Block 543 Output 14 +0x212E,8495,Signal Tags 1-1000,XV_6226B_OP,,Signal Tag,152,float 32,R,,0,Digital,ON,OFF,Block 543 Output 15 +0x2130,8497,Signal Tags 1-1000,XV_6226B_CL,,Signal Tag,153,float 32,R,,0,Digital,ON,OFF,Block 543 Output 16 +0x2132,8499,Signal Tags 1-1000,XV_6127_OP,,Signal Tag,154,float 32,R,,0,Digital,ON,OFF,Block 544 Output 9 +0x2134,8501,Signal Tags 1-1000,XV_6127_CL,,Signal Tag,155,float 32,R,,0,Digital,ON,OFF,Block 544 Output 10 +0x2136,8503,Signal Tags 1-1000,XV_6227_OP,,Signal Tag,156,float 32,R,,0,Digital,ON,OFF,Block 544 Output 11 +0x2138,8505,Signal Tags 1-1000,XV_6227_CL,,Signal Tag,157,float 32,R,,0,Digital,ON,OFF,Block 544 Output 12 +0x213A,8507,Signal Tags 1-1000,XV_9120_OP,,Signal Tag,158,float 32,R,,0,Digital,ON,OFF,Block 544 Output 13 +0x213C,8509,Signal Tags 1-1000,XV_9120_CL,,Signal Tag,159,float 32,R,,0,Digital,ON,OFF,Block 544 Output 14 +0x213E,8511,Signal Tags 1-1000,P_6127S,,Signal Tag,160,float 32,R,,0,Digital,ON,OFF,Block 455 Output 9 +0x2140,8513,Signal Tags 1-1000,FQ_6127,,Signal Tag,161,float 32,R,,3,Analog,,,Block 581 Output 1 +0x2142,8515,Signal Tags 1-1000,P_6227S,,Signal Tag,162,float 32,R,,0,Digital,ON,OFF,Block 455 Output 10 +0x2144,8517,Signal Tags 1-1000,FQ_6227,,Signal Tag,163,float 32,R,,3,Analog,,,Block 585 Output 1 +0x2146,8519,Signal Tags 1-1000,P_9120S,,Signal Tag,164,float 32,R,,0,Digital,ON,OFF,Block 455 Output 11 +0x2148,8521,Signal Tags 1-1000,FQ_9120,,Signal Tag,165,float 32,R,,3,Analog,,,Block 589 Output 1 +0x214A,8523,Signal Tags 1-1000,P_8120AS,,Signal Tag,166,float 32,R,,0,Digital,ON,OFF,Block 455 Output 12 +0x214C,8525,Signal Tags 1-1000,XV_9125,,Signal Tag,167,float 32,R,,0,Analog,,,Block 591 Output 2 +0x214E,8527,Signal Tags 1-1000,BL_6300A,,Signal Tag,168,float 32,R,,0,Digital,ON,OFF,Block 455 Output 14 +0x2150,8529,Signal Tags 1-1000,P_9102,,Signal Tag,169,float 32,R,,0,Analog,,,Block 594 Output 2 +0x2152,8531,Signal Tags 1-1000,BL_6300B,,Signal Tag,170,float 32,R,,0,Digital,ON,OFF,Block 455 Output 15 +0x2154,8533,Signal Tags 1-1000,WT_DFU1,,Signal Tag,171,float 32,R,kg,1,Analog,,,Block 596 Output 3 +0x2156,8535,Signal Tags 1-1000,XV_6125A,,Signal Tag,172,float 32,R,,0,Analog,,,Block 546 Output 2 +0x2158,8537,Signal Tags 1-1000,XV_6125B,,Signal Tag,173,float 32,R,,0,Analog,,,Block 547 Output 2 +0x215A,8539,Signal Tags 1-1000,XV_6126A,,Signal Tag,174,float 32,R,,0,Analog,,,Block 548 Output 2 +0x215C,8541,Signal Tags 1-1000,XV_6126B,,Signal Tag,175,float 32,R,,0,Analog,,,Block 549 Output 2 +0x215E,8543,Signal Tags 1-1000,XV_6225A,,Signal Tag,176,float 32,R,,0,Analog,,,Block 550 Output 2 +0x2160,8545,Signal Tags 1-1000,XV_6225B,,Signal Tag,177,float 32,R,,0,Analog,,,Block 551 Output 2 +0x2162,8547,Signal Tags 1-1000,XV_6226A,,Signal Tag,178,float 32,R,,0,Analog,,,Block 552 Output 2 +0x2164,8549,Signal Tags 1-1000,XV_6226B,,Signal Tag,179,float 32,R,,0,Analog,,,Block 553 Output 2 +0x2166,8551,Signal Tags 1-1000,XV_6127,,Signal Tag,180,float 32,R,,0,Analog,,,Block 554 Output 2 +0x2168,8553,Signal Tags 1-1000,XV_6227,,Signal Tag,181,float 32,R,,0,Analog,,,Block 555 Output 2 +0x216A,8555,Signal Tags 1-1000,XV_9120,,Signal Tag,182,float 32,R,,0,Analog,,,Block 556 Output 2 +0x216C,8557,Signal Tags 1-1000,P_6127,,Signal Tag,183,float 32,R,,0,Analog,,,Block 557 Output 2 +0x216E,8559,Signal Tags 1-1000,P_6227,,Signal Tag,184,float 32,R,,0,Analog,,,Block 558 Output 2 +0x2170,8561,Signal Tags 1-1000,P_9120,,Signal Tag,185,float 32,R,,0,Analog,,,Block 559 Output 2 +0x2172,8563,Signal Tags 1-1000,P_8120A,,Signal Tag,186,float 32,R,,0,Analog,,,Block 560 Output 2 +0x2174,8565,Signal Tags 1-1000,PT_10900G,,Signal Tag,187,float 32,R,,0,Analog,,,Block 523 Output 4 +0x2176,8567,Signal Tags 1-1000,PT_10900H,,Signal Tag,188,float 32,R,,0,Analog,,,Block 524 Output 4 +0x2178,8569,Signal Tags 1-1000,BL_6400AS,,Signal Tag,189,float 32,R,,0,Digital,ON,OFF,Block 455 Output 16 +0x217A,8571,Signal Tags 1-1000,WT_DFU2,,Signal Tag,190,float 32,R,kg,1,Analog,,,Block 596 Output 4 +0x217C,8573,Signal Tags 1-1000,BL_6400BS,,Signal Tag,191,float 32,R,,0,Digital,ON,OFF,Block 456 Output 9 +0x217E,8575,Signal Tags 1-1000,WT_DFU3,,Signal Tag,192,float 32,R,kg,1,Analog,,,Block 596 Output 5 +0x2180,8577,Signal Tags 1-1000,XV_9125_OP,,Signal Tag,193,float 32,R,,0,Digital,ON,OFF,Block 544 Output 15 +0x2182,8579,Signal Tags 1-1000,XV_9125_CL,,Signal Tag,194,float 32,R,,0,Digital,ON,OFF,Block 544 Output 16 +0x2184,8581,Signal Tags 1-1000,P_9102S,,Signal Tag,195,float 32,R,,0,Digital,ON,OFF,Block 545 Output 10 +0x2186,8583,Signal Tags 1-1000,P_9102T,,Signal Tag,196,float 32,R,,0,Digital,ON,OFF,Block 545 Output 11 +0x2188,8585,Signal Tags 1-1000,P_8120BS,,Signal Tag,197,float 32,R,,0,Digital,ON,OFF,Block 455 Output 13 +0x218A,8587,Signal Tags 1-1000,WT_DFU4,,Signal Tag,198,float 32,R,kg,1,Analog,,,Block 596 Output 6 +0x218C,8589,Signal Tags 1-1000,P_9102R,,Signal Tag,199,float 32,R,,0,Digital,ON,OFF,Block 545 Output 9 +0x218E,8591,Signal Tags 1-1000,BL_6400A,,Signal Tag,200,float 32,R,,0,Analog,,,Block 576 Output 2 +0x2190,8593,Signal Tags 1-1000,BL_6400B,,Signal Tag,201,float 32,R,,0,Analog,,,Block 577 Output 2 +0x2192,8595,Signal Tags 1-1000,WT_DFU5,,Signal Tag,202,float 32,R,,0,Analog,,,Block 595 Output 1 +0x2194,8597,Signal Tags 1-1000,XV_DFU1,,Signal Tag,203,float 32,R,,0,Analog,,,Block 595 Output 2 +0x2196,8599,Signal Tags 1-1000,XV_DFU2,,Signal Tag,204,float 32,R,,0,Analog,,,Block 595 Output 3 +0x2198,8601,Signal Tags 1-1000,XV_DFU3,,Signal Tag,205,float 32,R,,0,Analog,,,Block 595 Output 4 +0x219A,8603,Signal Tags 1-1000,XV_DFU4,,Signal Tag,206,float 32,R,,0,Analog,,,Block 595 Output 5 +0x219C,8605,Signal Tags 1-1000,XV_DFU5A,,Signal Tag,207,float 32,R,,0,Analog,,,Block 595 Output 6 +0x219E,8607,Signal Tags 1-1000,P_8120B,,Signal Tag,208,float 32,R,,0,Analog,,,Block 578 Output 2 +0x21A0,8609,Signal Tags 1-1000,XV_DFU5B,,Signal Tag,209,float 32,R,,0,Analog,,,Block 595 Output 7 +0x21A2,8611,Signal Tags 1-1000,LD_DFU01,,Signal Tag,210,float 32,R,,0,Analog,,,Block 595 Output 8 +0x21A4,8613,Signal Tags 1-1000,LD_DFU02,,Signal Tag,211,float 32,R,,0,Analog,,,Block 595 Output 9 +0x21A6,8615,Signal Tags 1-1000,LD_DFU03,,Signal Tag,212,float 32,R,,0,Analog,,,Block 595 Output 10 +0x21A8,8617,Signal Tags 1-1000,LD_DFU04,,Signal Tag,213,float 32,R,,0,Analog,,,Block 595 Output 11 +0x21AA,8619,Signal Tags 1-1000,LD_DFU05,,Signal Tag,214,float 32,R,,0,Analog,,,Block 595 Output 12 +0x21AC,8621,Signal Tags 1-1000,LT_10100,,Signal Tag,215,float 32,R,,0,Analog,,,Block 610 Output 4 +0x21AE,8623,Signal Tags 1-1000,LT_10111,,Signal Tag,216,float 32,R,,0,Analog,,,Block 611 Output 4 +0x21B0,8625,Signal Tags 1-1000,PT_10900,,Signal Tag,217,float 32,R,,0,Analog,,,Block 626 Output 4 +0x21B2,8627,Signal Tags 1-1000,PT_10900E,,Signal Tag,218,float 32,R,,0,Analog,,,Block 627 Output 4 +0x21B4,8629,Signal Tags 1-1000,PT_10952,,Signal Tag,219,float 32,R,,0,Analog,,,Block 529 Output 4 +0x21B6,8631,Signal Tags 1-1000,TE_10111A,,Signal Tag,220,float 32,R,%,1,Analog,,,Block 645 Output 4 +0x21B8,8633,Signal Tags 1-1000,TE_10111B,,Signal Tag,221,float 32,R,,1,Analog,,,Block 646 Output 4 +0x21BA,8635,Signal Tags 1-1000,TE_10111C,,Signal Tag,222,float 32,R,,1,Analog,,,Block 647 Output 4 +0x21BC,8637,Signal Tags 1-1000,TE_10111D,,Signal Tag,223,float 32,R,,1,Analog,,,Block 648 Output 4 +0x21BE,8639,Signal Tags 1-1000,TE_10103,,Signal Tag,224,float 32,R,,1,Analog,,,Block 649 Output 4 +0x21C0,8641,Signal Tags 1-1000,TE_10117,,Signal Tag,225,float 32,R,,1,Analog,,,Block 650 Output 4 +0x21C2,8643,Signal Tags 1-1000,TE_10211A,,Signal Tag,226,float 32,R,,1,Analog,,,Block 651 Output 4 +0x21C4,8645,Signal Tags 1-1000,TE_10211B,,Signal Tag,227,float 32,R,,1,Analog,,,Block 652 Output 4 +0x21C6,8647,Signal Tags 1-1000,TE_10211C,,Signal Tag,228,float 32,R,%,1,Analog,,,Block 653 Output 4 +0x21C8,8649,Signal Tags 1-1000,TE_10211D,,Signal Tag,229,float 32,R,,1,Analog,,,Block 654 Output 4 +0x21CA,8651,Signal Tags 1-1000,TE_10203,,Signal Tag,230,float 32,R,,1,Analog,,,Block 655 Output 4 +0x21CC,8653,Signal Tags 1-1000,TE_10217,,Signal Tag,231,float 32,R,,1,Analog,,,Block 656 Output 4 +0x21CE,8655,Signal Tags 1-1000,TE_10600,,Signal Tag,232,float 32,R,,1,Analog,,,Block 657 Output 4 +0x21D0,8657,Signal Tags 1-1000,TE_10650,,Signal Tag,233,float 32,R,,1,Analog,,,Block 658 Output 4 +0x21D2,8659,Signal Tags 1-1000,0841_004,,Signal Tag,234,float 32,R,,1,Analog,,,Block 659 Output 4 +0x21D4,8661,Signal Tags 1-1000,0842_004,,Signal Tag,235,float 32,R,,1,Analog,,,Block 660 Output 4 +0x21D6,8663,Signal Tags 1-1000,FCV_10101,,Signal Tag,236,float 32,R,,0,Analog,,,Block 669 Output 18 +0x21D8,8665,Signal Tags 1-1000,FCV_10113,,Signal Tag,237,float 32,R,,0,Analog,,,Block 670 Output 18 +0x21DA,8667,Signal Tags 1-1000,LIC10113_LO_ESD,,Signal Tag,238,float 32,R,,0,Digital,ON,OFF,Block 673 Output 20 +0x21DC,8669,Signal Tags 1-1000,LIC10113_LO_IL,,Signal Tag,239,float 32,R,,0,Digital,ON,OFF,Block 673 Output 21 +0x21DE,8671,Signal Tags 1-1000,PIC10111A_LO_IL,,Signal Tag,240,float 32,R,,0,Digital,ON,OFF,Block 676 Output 21 +0x21E0,8673,Signal Tags 1-1000,TIC10111A_HI_IL,,Signal Tag,241,float 32,R,,0,Digital,ON,OFF,Block 675 Output 21 +0x21E2,8675,Signal Tags 1-1000,TIC10111A_HI_ESD,,Signal Tag,242,float 32,R,,0,Digital,ON,OFF,Block 675 Output 20 +0x21E4,8677,Signal Tags 1-1000,PIC10111A_LO_ESD,,Signal Tag,243,float 32,R,,0,Digital,ON,OFF,Block 676 Output 20 +0x21E6,8679,Signal Tags 1-1000,FCV_10116,,Signal Tag,244,float 32,R,,0,Analog,,,Block 674 Output 18 +0x21E8,8681,Signal Tags 1-1000,TCV_10111,,Signal Tag,245,float 32,R,,0,Analog,,,Block 675 Output 18 +0x21EA,8683,Signal Tags 1-1000,PCV_10111A,,Signal Tag,246,float 32,R,,0,Analog,,,Block 676 Output 18 +0x21EC,8685,Signal Tags 1-1000,FCV_10114A,,Signal Tag,247,float 32,R,,0,Analog,,,Block 671 Output 18 +0x21EE,8687,Signal Tags 1-1000,FCV_10118,,Signal Tag,248,float 32,R,,0,Analog,,,Block 672 Output 18 +0x21F0,8689,Signal Tags 1-1000,PT_10111A,,Signal Tag,249,float 32,R,,0,Analog,,,Block 621 Output 4 +0x21F2,8691,Signal Tags 1-1000,PT_10111B,,Signal Tag,250,float 32,R,,0,Analog,,,Block 622 Output 4 +0x21F4,8693,Signal Tags 1-1000,FCV_9201,,Signal Tag,251,float 32,R,,0,Analog,,,Block 258 Output 18 +0x21F6,8695,Signal Tags 1-1000,FCV_9213,,Signal Tag,252,float 32,R,,0,Analog,,,Block 259 Output 18 +0x21F8,8697,Signal Tags 1-1000,FCV_9214,,Signal Tag,253,float 32,R,,0,Analog,,,Block 260 Output 18 +0x21FA,8699,Signal Tags 1-1000,FCV_9218,,Signal Tag,254,float 32,R,,0,Analog,,,Block 261 Output 18 +0x21FC,8701,Signal Tags 1-1000,FT_10114A,,Signal Tag,255,float 32,R,,0,Analog,,,Block 599 Output 4 +0x21FE,8703,Signal Tags 1-1000,FT_10114B,,Signal Tag,256,float 32,R,,0,Analog,,,Block 600 Output 4 +0x2200,8705,Signal Tags 1-1000,PT_10211A,,Signal Tag,257,float 32,R,,0,Analog,,,Block 623 Output 4 +0x2202,8707,Signal Tags 1-1000,PT_10211B,,Signal Tag,258,float 32,R,,0,Analog,,,Block 624 Output 4 +0x2204,8709,Signal Tags 1-1000,LIC10213_LO_ESD,,Signal Tag,259,float 32,R,,0,Digital,ON,OFF,Block 681 Output 20 +0x2206,8711,Signal Tags 1-1000,LIC10213_LO_IL,,Signal Tag,260,float 32,R,,0,Digital,ON,OFF,Block 681 Output 21 +0x2208,8713,Signal Tags 1-1000,FCV_10201,,Signal Tag,261,float 32,R,,0,Analog,,,Block 677 Output 18 +0x220A,8715,Signal Tags 1-1000,FCV_10213,,Signal Tag,262,float 32,R,,0,Analog,,,Block 678 Output 18 +0x220C,8717,Signal Tags 1-1000,FCV_10214,,Signal Tag,263,float 32,R,,0,Analog,,,Block 679 Output 18 +0x220E,8719,Signal Tags 1-1000,FCV_10218,,Signal Tag,264,float 32,R,,0,Analog,,,Block 680 Output 18 +0x2210,8721,Signal Tags 1-1000,FCV_9216,,Signal Tag,265,float 32,R,,0,Analog,,,Block 262 Output 18 +0x2212,8723,Signal Tags 1-1000,PCV_9211,,Signal Tag,266,float 32,R,,0,Analog,,,Block 264 Output 18 +0x2214,8725,Signal Tags 1-1000,TCV_9211,,Signal Tag,267,float 32,R,,0,Analog,,,Block 263 Output 18 +0x2216,8727,Signal Tags 1-1000,TIC10211A_HI_ESD,,Signal Tag,268,float 32,R,,0,Digital,ON,OFF,Block 683 Output 20 +0x2218,8729,Signal Tags 1-1000,TIC10211A_HI_IL,,Signal Tag,269,float 32,R,,0,Digital,ON,OFF,Block 683 Output 21 +0x221A,8731,Signal Tags 1-1000,PIC10211A_LO_ESD,,Signal Tag,270,float 32,R,,0,Digital,ON,OFF,Block 684 Output 20 +0x221C,8733,Signal Tags 1-1000,PIC10211A_LO_IL,,Signal Tag,271,float 32,R,,0,Digital,ON,OFF,Block 684 Output 21 +0x221E,8735,Signal Tags 1-1000,FCV_10216,,Signal Tag,272,float 32,R,,0,Analog,,,Block 682 Output 18 +0x2220,8737,Signal Tags 1-1000,PCV_10211,,Signal Tag,273,float 32,R,,0,Analog,,,Block 684 Output 18 +0x2222,8739,Signal Tags 1-1000,TCV_10211,,Signal Tag,274,float 32,R,,0,Analog,,,Block 683 Output 18 +0x2224,8741,Signal Tags 1-1000,P_10101,,Signal Tag,275,float 32,R,,0,Analog,,,Block 685 Output 2 +0x2226,8743,Signal Tags 1-1000,P_10114,,Signal Tag,276,float 32,R,,0,Analog,,,Block 686 Output 2 +0x2228,8745,Signal Tags 1-1000,P_10118,,Signal Tag,277,float 32,R,,0,Analog,,,Block 687 Output 2 +0x222A,8747,Signal Tags 1-1000,P_10116,,Signal Tag,278,float 32,R,,0,Analog,,,Block 688 Output 2 +0x222C,8749,Signal Tags 1-1000,P_10128A,,Signal Tag,279,float 32,R,,0,Analog,,,Block 689 Output 2 +0x222E,8751,Signal Tags 1-1000,P_10128B,,Signal Tag,280,float 32,R,,0,Analog,,,Block 690 Output 2 +0x2230,8753,Signal Tags 1-1000,VP_10117,,Signal Tag,281,float 32,R,,0,Analog,,,Block 691 Output 2 +0x2232,8755,Signal Tags 1-1000,P_10800A,,Signal Tag,282,float 32,R,,0,Analog,,,Block 692 Output 2 +0x2234,8757,Signal Tags 1-1000,P_10201,,Signal Tag,283,float 32,R,,0,Analog,,,Block 693 Output 2 +0x2236,8759,Signal Tags 1-1000,P_10214,,Signal Tag,284,float 32,R,,0,Analog,,,Block 694 Output 2 +0x2238,8761,Signal Tags 1-1000,P_10218,,Signal Tag,285,float 32,R,,0,Analog,,,Block 695 Output 2 +0x223A,8763,Signal Tags 1-1000,P_10216,,Signal Tag,286,float 32,R,,0,Analog,,,Block 696 Output 2 +0x223C,8765,Signal Tags 1-1000,P_10602A,,Signal Tag,287,float 32,R,,0,Analog,,,Block 697 Output 2 +0x223E,8767,Signal Tags 1-1000,P_10602B,,Signal Tag,288,float 32,R,,0,Analog,,,Block 698 Output 2 +0x2240,8769,Signal Tags 1-1000,VP_10217,,Signal Tag,289,float 32,R,,0,Analog,,,Block 699 Output 2 +0x2242,8771,Signal Tags 1-1000,F_10602,,Signal Tag,290,float 32,R,,0,Analog,,,Block 700 Output 2 +0x2244,8773,Signal Tags 1-1000,P_10101_CMD,,Signal Tag,291,float 32,R,,0,Digital,ON,OFF,Block 701 Output 1 +0x2246,8775,Signal Tags 1-1000,P_10114_CMD,,Signal Tag,292,float 32,R,,0,Digital,ON,OFF,Block 704 Output 1 +0x2248,8777,Signal Tags 1-1000,P_10118_CMD,,Signal Tag,293,float 32,R,,0,Digital,ON,OFF,Block 707 Output 1 +0x224A,8779,Signal Tags 1-1000,P_10116_CMD,,Signal Tag,294,float 32,R,,0,Digital,ON,OFF,Block 710 Output 1 +0x224C,8781,Signal Tags 1-1000,P_10201_CMD,,Signal Tag,295,float 32,R,,0,Digital,ON,OFF,Block 721 Output 1 +0x224E,8783,Signal Tags 1-1000,P_10214_CMD,,Signal Tag,296,float 32,R,,0,Digital,ON,OFF,Block 724 Output 1 +0x2250,8785,Signal Tags 1-1000,P_10218_CMD,,Signal Tag,297,float 32,R,,0,Digital,ON,OFF,Block 842 Output 1 +0x2252,8787,Signal Tags 1-1000,P_10216_CMD,,Signal Tag,298,float 32,R,,0,Digital,ON,OFF,Block 727 Output 1 +0x2254,8789,Signal Tags 1-1000,VP_10117_CMD,,Signal Tag,299,float 32,R,,0,Digital,ON,OFF,Block 736 Output 1 +0x2256,8791,Signal Tags 1-1000,VP_10217_CMD,,Signal Tag,300,float 32,R,,0,Digital,ON,OFF,Block 739 Output 1 +0x2258,8793,Signal Tags 1-1000,P_10128A_CMD,,Signal Tag,301,float 32,R,,0,Digital,ON,OFF,Block 746 Output 1 +0x225A,8795,Signal Tags 1-1000,P_10128B_CMD,,Signal Tag,302,float 32,R,,0,Digital,ON,OFF,Block 749 Output 1 +0x225C,8797,Signal Tags 1-1000,TIC10111A_TRIP,,Signal Tag,303,float 32,R,,0,Digital,ON,OFF,Block 760 Output 1 +0x225E,8799,Signal Tags 1-1000,PIC10111A_TRIP,,Signal Tag,304,float 32,R,,0,Digital,ON,OFF,Block 763 Output 1 +0x2260,8801,Signal Tags 1-1000,PT_10111A_FAIL,,Signal Tag,305,float 32,R,,0,Digital,ON,OFF,Block 621 Output 5 +0x2262,8803,Signal Tags 1-1000,PT_10211A_FAIL,,Signal Tag,306,float 32,R,,0,Digital,ON,OFF,Block 623 Output 5 +0x2264,8805,Signal Tags 1-1000,LIC101113_TRIP,,Signal Tag,307,float 32,R,,0,Digital,ON,OFF,Block 773 Output 1 +0x2266,8807,Signal Tags 1-1000,10113LO_MAN_ESD,,Signal Tag,308,float 32,R,,0,Digital,ON,OFF,Block 770 Output 1 +0x2268,8809,Signal Tags 1-1000,10113_LO_ESD,,Signal Tag,309,float 32,R,,0,Digital,ON,OFF,Block 776 Output 1 +0x226A,8811,Signal Tags 1-1000,TIC10211A_TRIP,,Signal Tag,310,float 32,R,,0,Digital,ON,OFF,Block 781 Output 1 +0x226C,8813,Signal Tags 1-1000,PIC10211B_TRIP,,Signal Tag,311,float 32,R,,0,Digital,ON,OFF,Block 784 Output 1 +0x226E,8815,Signal Tags 1-1000,LIC10213_TRIP,,Signal Tag,312,float 32,R,,0,Digital,ON,OFF,Block 788 Output 1 +0x2270,8817,Signal Tags 1-1000,P_10221_CMD,,Signal Tag,313,float 32,R,,0,Digital,ON,OFF,Block 822 Output 1 +0x2272,8819,Signal Tags 1-1000,P_10800A_CMD,,Signal Tag,314,float 32,R,,0,Digital,ON,OFF,Block 827 Output 1 +0x2274,8821,Signal Tags 1-1000,PT_10900I,,Signal Tag,315,float 32,R,,0,Analog,,,Block 525 Output 4 +0x2276,8823,Signal Tags 1-1000,PT_10900F,,Signal Tag,316,float 32,R,,0,Analog,,,Block 628 Output 4 +0x2278,8825,Signal Tags 1-1000,PT_10700,,Signal Tag,317,float 32,R,,0,Analog,,,Block 625 Output 4 +0x227A,8827,Signal Tags 1-1000,XV_10111_CMD,,Signal Tag,318,float 32,R,,0,Digital,ON,OFF,Block 840 Output 1 +0x227C,8829,Signal Tags 1-1000,XV_10211_CMD,,Signal Tag,319,float 32,R,,0,Digital,ON,OFF,Block 841 Output 1 +0x227E,8831,Signal Tags 1-1000,XV_10111_OPEN,,Signal Tag,320,float 32,R,,0,Digital,ON,OFF,Block 667 Output 15 +0x2280,8833,Signal Tags 1-1000,XV_10111_CLOSE,,Signal Tag,321,float 32,R,,0,Digital,ON,OFF,Block 667 Output 16 +0x2282,8835,Signal Tags 1-1000,XV_10211_OPEN,,Signal Tag,322,float 32,R,,0,Digital,ON,OFF,Block 668 Output 9 +0x2284,8837,Signal Tags 1-1000,XV_10211_CLOSE,,Signal Tag,323,float 32,R,,0,Digital,ON,OFF,Block 668 Output 10 +0x2286,8839,Signal Tags 1-1000,LI_10128,,Signal Tag,324,float 32,R,,0,Analog,,,Block 613 Output 4 +0x2288,8841,Signal Tags 1-1000,LI_10101,,Signal Tag,325,float 32,R,,0,Analog,,,Block 614 Output 4 +0x228A,8843,Signal Tags 1-1000,9100ESDT,,Signal Tag,326,float 32,R,,0,Digital,ON,OFF,Block 312 Output 1 +0x228C,8845,Signal Tags 1-1000,9200ESDT,,Signal Tag,327,float 32,R,,0,Digital,ON,OFF,Block 313 Output 1 +0x228E,8847,Signal Tags 1-1000,10100_MAN_ESD,,Signal Tag,328,float 32,R,,0,Digital,ON,OFF,Block 850 Output 1 +0x2290,8849,Signal Tags 1-1000,10200_MAN_ESD,,Signal Tag,329,float 32,R,,0,Digital,ON,OFF,Block 855 Output 1 +0x2292,8851,Signal Tags 1-1000,10100_ESD,,Signal Tag,330,float 32,R,,0,Digital,ON,OFF,Block 847 Output 1 +0x2294,8853,Signal Tags 1-1000,10200_ESD,,Signal Tag,331,float 32,R,,0,Digital,ON,OFF,Block 853 Output 1 +0x2296,8855,Signal Tags 1-1000,10100ESDT,,Signal Tag,332,float 32,R,,0,Digital,ON,OFF,Block 856 Output 1 +0x2298,8857,Signal Tags 1-1000,10200ESDT,,Signal Tag,333,float 32,R,,0,Digital,ON,OFF,Block 857 Output 1 +0x229A,8859,Signal Tags 1-1000,C4P3_DC24V_A_OK,,Signal Tag,334,float 32,R,,0,Digital,ON,OFF,Block 668 Output 15 +0x229C,8861,Signal Tags 1-1000,C4P3_DC24V_B_OK,,Signal Tag,335,float 32,R,,0,Digital,ON,OFF,Block 668 Output 16 +0x229E,8863,Signal Tags 1-1000,POJANG_NOSCAN,,Signal Tag,336,float 32,R,,0,Digital,ON,OFF,Block 596 Output 1 +0x22A0,8865,Signal Tags 1-1000,POJANG_BAD_COM,,Signal Tag,337,float 32,R,,0,Digital,ON,OFF,Block 596 Output 2 +0x22A2,8867,Signal Tags 1-1000,P_10800B,,Signal Tag,338,float 32,R,,0,Analog,,,Block 859 Output 2 +0x22A4,8869,Signal Tags 1-1000,P_10800B_CMD,,Signal Tag,339,float 32,R,,0,Digital,ON,OFF,Block 860 Output 1 +0x22A6,8871,Signal Tags 1-1000,LI_10200,,Signal Tag,340,float 32,R,,0,Analog,,,Block 615 Output 4 +0x22A8,8873,Signal Tags 1-1000,XV_10111,,Signal Tag,341,float 32,R,,0,Analog,,,Block 866 Output 2 +0x22AA,8875,Signal Tags 1-1000,XV_10211,,Signal Tag,342,float 32,R,,0,Analog,,,Block 867 Output 2 +0x22AC,8877,Signal Tags 1-1000,LIA_10211,,Signal Tag,343,float 32,R,,0,Analog,,,Block 616 Output 4 +0x22AE,8879,Signal Tags 1-1000,LI_10201,,Signal Tag,344,float 32,R,,0,Analog,,,Block 618 Output 4 +0x22B0,8881,Signal Tags 1-1000,LI_10221,,Signal Tag,345,float 32,R,,0,Analog,,,Block 619 Output 4 +0x22B2,8883,Signal Tags 1-1000,LI_10800,,Signal Tag,346,float 32,R,,0,Analog,,,Block 620 Output 4 +0x22B4,8885,Signal Tags 1-1000,FQ_10213,,Signal Tag,347,float 32,R,,3,Analog,,,Block 909 Output 1 +0x22B6,8887,Signal Tags 1-1000,PT_10702,,Signal Tag,348,float 32,R,,0,Analog,,,Block 532 Output 4 +0x22B8,8889,Signal Tags 1-1000,P_10221,,Signal Tag,349,float 32,R,,0,Analog,,,Block 870 Output 2 +0x22BA,8891,Signal Tags 1-1000,PT_9211A_FAIL,,Signal Tag,350,float 32,R,,0,Digital,ON,OFF,Block 131 Output 5 +0x22BC,8893,Signal Tags 1-1000,FQ_10114B,,Signal Tag,351,float 32,R,,3,Analog,,,Block 890 Output 1 +0x22BE,8895,Signal Tags 1-1000,PT_9111A_FAIL,,Signal Tag,352,float 32,R,,0,Digital,ON,OFF,Block 124 Output 5 +0x22C0,8897,Signal Tags 1-1000,FQ_10215,,Signal Tag,353,float 32,R,,3,Analog,,,Block 896 Output 1 +0x22C2,8899,Signal Tags 1-1000,FQ_10101,,Signal Tag,354,float 32,R,,3,Analog,,,Block 871 Output 1 +0x22C4,8901,Signal Tags 1-1000,FQ_10115,,Signal Tag,355,float 32,R,,3,Analog,,,Block 873 Output 1 +0x22C6,8903,Signal Tags 1-1000,FQ_10113,,Signal Tag,356,float 32,R,,3,Analog,,,Block 875 Output 1 +0x22C8,8905,Signal Tags 1-1000,FI_10115,,Signal Tag,357,float 32,R,,0,Analog,,,Block 886 Output 1 +0x22CA,8907,Signal Tags 1-1000,FQ_10114A,,Signal Tag,358,float 32,R,,3,Analog,,,Block 877 Output 1 +0x22CC,8909,Signal Tags 1-1000,FQ_10116,,Signal Tag,359,float 32,R,,3,Analog,,,Block 879 Output 1 +0x22CE,8911,Signal Tags 1-1000,FQ_10118,,Signal Tag,360,float 32,R,,3,Analog,,,Block 881 Output 1 +0x22D0,8913,Signal Tags 1-1000,FQ_10201,,Signal Tag,361,float 32,R,,3,Analog,,,Block 883 Output 1 +0x22D2,8915,Signal Tags 1-1000,FQ_10206,,Signal Tag,362,float 32,R,,3,Analog,,,Block 902 Output 1 +0x22D4,8917,Signal Tags 1-1000,FQ_10218,,Signal Tag,363,float 32,R,,3,Analog,,,Block 900 Output 1 +0x22D6,8919,Signal Tags 1-1000,XV_10128,,Signal Tag,364,float 32,R,,0,Analog,,,Block 915 Output 2 +0x22D8,8921,Signal Tags 1-1000,FQ_10214,,Signal Tag,365,float 32,R,,3,Analog,,,Block 906 Output 1 +0x22DA,8923,Signal Tags 1-1000,FIQ_9116B,,Signal Tag,367,float 32,R,,0,Analog,,,Block 919 Output 1 +0x22DC,8925,Signal Tags 1-1000,FIQ_10116B,,Signal Tag,375,float 32,R,,0,Analog,,,Block 916 Output 1 +0x22DE,8927,Signal Tags 1-1000,FQ_9116B,,Signal Tag,370,float 32,R,,3,Analog,,,Block 920 Output 1 +0x22E0,8929,Signal Tags 1-1000,FQ_10116B,,Signal Tag,369,float 32,R,,3,Analog,,,Block 917 Output 1 +0x22E2,8931,Signal Tags 1-1000,XV_10128,,Signal Tag,364,float 32,R,,0,Analog,,,Block 915 Output 2 +0x22E4,8933,Signal Tags 1-1000,P_9116B,,Signal Tag,366,float 32,R,,0,Analog,,,Block 934 Output 2 +0x22E6,8935,Signal Tags 1-1000,PT_6701,,Signal Tag,368,float 32,R,,0,Analog,,,Block 533 Output 4 +0x22E8,8937,Signal Tags 1-1000,PT_6702,,Signal Tag,371,float 32,R,,0,Analog,,,Block 468 Output 4 +0x22EA,8939,Signal Tags 1-1000,PT_8701,,Signal Tag,372,float 32,R,,0,Analog,,,Block 469 Output 4 +0x22EC,8941,Signal Tags 1-1000,PT_9701,,Signal Tag,373,float 32,R,,0,Analog,,,Block 470 Output 4 +0x22EE,8943,Signal Tags 1-1000,PT_9702,,Signal Tag,376,float 32,R,,0,Analog,,,Block 471 Output 4 +0x22F0,8945,Signal Tags 1-1000,PT_10701,,Signal Tag,377,float 32,R,,0,Analog,,,Block 472 Output 4 +0x22F2,8947,Signal Tags 1-1000,PT_10702,,Signal Tag,348,float 32,R,,0,Analog,,,Block 532 Output 4 +0x3B60,15201,Signal Tags 1-4000,FI_9100,,Signal Tag,1,float 32,R,kg/hr,1,Analog,,,Block 326 Output 1 +0x3B62,15203,Signal Tags 1-4000,LI_9100,,Signal Tag,2,float 32,R,,0,Analog,,,Block 114 Output 4 +0x3B64,15205,Signal Tags 1-4000,LI_9111,,Signal Tag,3,float 32,R,,0,Analog,,,Block 115 Output 4 +0x3B66,15207,Signal Tags 1-4000,LI_9128,,Signal Tag,4,float 32,R,%,1,Analog,,,Block 117 Output 4 +0x3B68,15209,Signal Tags 1-4000,LI_9101,T-9101 LEVEL,Signal Tag,5,float 32,R,%,1,Analog,,,Block 118 Output 4 +0x3B6A,15211,Signal Tags 1-4000,LI_9121,,Signal Tag,6,float 32,R,%,1,Analog,,,Block 119 Output 4 +0x3B6C,15213,Signal Tags 1-4000,LI_9122,,Signal Tag,7,float 32,R,%,1,Analog,,,Block 120 Output 4 +0x3B6E,15215,Signal Tags 1-4000,LI_9123,T-9123,Signal Tag,8,float 32,R,%,1,Analog,,,Block 121 Output 4 +0x3B70,15217,Signal Tags 1-4000,LI_9124,,Signal Tag,9,float 32,R,,0,Analog,,,Block 122 Output 4 +0x3B72,15219,Signal Tags 1-4000,LI_9200,T-9200,Signal Tag,10,float 32,R,%,1,Analog,,,Block 125 Output 4 +0x3B74,15221,Signal Tags 1-4000,PI_9111B,,Signal Tag,11,float 32,R,mmHg,1,Analog,,,Block 123 Output 4 +0x3B76,15223,Signal Tags 1-4000,LI_9211,C-9211,Signal Tag,12,float 32,R,%,1,Analog,,,Block 126 Output 4 +0x3B78,15225,Signal Tags 1-4000,LI_9201,,Signal Tag,13,float 32,R,%,1,Analog,,,Block 128 Output 4 +0x3B7A,15227,Signal Tags 1-4000,LI_9221,,Signal Tag,14,float 32,R,,0,Analog,,,Block 129 Output 4 +0x3B7C,15229,Signal Tags 1-4000,F9601_HZ,,Signal Tag,15,float 32,R,Hz,0,Analog,,,Block 132 Output 4 +0x3B7E,15231,Signal Tags 1-4000,PI_9211B,,Signal Tag,16,float 32,R,mmHg,1,Analog,,,Block 130 Output 4 +0x3B80,15233,Signal Tags 1-4000,TI_9111B,,Signal Tag,17,float 32,R,degC,1,Analog,,,Block 150 Output 4 +0x3B82,15235,Signal Tags 1-4000,TI_9111C,,Signal Tag,18,float 32,R,degC,1,Analog,,,Block 151 Output 4 +0x3B84,15237,Signal Tags 1-4000,TI_9111D,,Signal Tag,19,float 32,R,degC,1,Analog,,,Block 152 Output 4 +0x3B86,15239,Signal Tags 1-4000,TI_9103,,Signal Tag,20,float 32,R,degC,1,Analog,,,Block 153 Output 4 +0x3B88,15241,Signal Tags 1-4000,TI_9117,,Signal Tag,21,float 32,R,degC,1,Analog,,,Block 154 Output 4 +0x3B8A,15243,Signal Tags 1-4000,TI_9600,,Signal Tag,22,float 32,R,degC,1,Analog,,,Block 155 Output 4 +0x3B8C,15245,Signal Tags 1-4000,TI_9650,,Signal Tag,23,float 32,R,degC,1,Analog,,,Block 156 Output 4 +0x3B8E,15247,Signal Tags 1-4000,TI_9211B,,Signal Tag,24,float 32,R,degC,1,Analog,,,Block 158 Output 4 +0x3B90,15249,Signal Tags 1-4000,TI_9211C,,Signal Tag,25,float 32,R,degC,1,Analog,,,Block 159 Output 4 +0x3B92,15251,Signal Tags 1-4000,TI_9211D,,Signal Tag,26,float 32,R,degC,1,Analog,,,Block 160 Output 4 +0x3B94,15253,Signal Tags 1-4000,TI_9203,,Signal Tag,27,float 32,R,degC,1,Analog,,,Block 161 Output 4 +0x3B96,15255,Signal Tags 1-4000,TI_9217,,Signal Tag,28,float 32,R,degC,1,Analog,,,Block 162 Output 4 +0x3B98,15257,Signal Tags 1-4000,C4P1_DC24_A_OK,,Signal Tag,29,float 32,R,,0,Digital,ON,OFF,Block 172 Output 15 +0x3B9A,15259,Signal Tags 1-4000,C4P1_DC24_B_OK,,Signal Tag,30,float 32,R,,0,Digital,ON,OFF,Block 172 Output 16 +0x3B9C,15261,Signal Tags 1-4000,P_9101,,Signal Tag,31,float 32,R,,0,Analog,,,Block 177 Output 2 +0x3B9E,15263,Signal Tags 1-4000,P_9114,,Signal Tag,32,float 32,R,,0,Analog,,,Block 178 Output 2 +0x3BA0,15265,Signal Tags 1-4000,P_9118,,Signal Tag,33,float 32,R,,0,Analog,,,Block 179 Output 2 +0x3BA2,15267,Signal Tags 1-4000,P_9116,,Signal Tag,34,float 32,R,,0,Analog,,,Block 180 Output 2 +0x3BA4,15269,Signal Tags 1-4000,P_9121,,Signal Tag,35,float 32,R,,0,Analog,,,Block 181 Output 2 +0x3BA6,15271,Signal Tags 1-4000,P_9122,,Signal Tag,36,float 32,R,,0,Analog,,,Block 182 Output 2 +0x3BA8,15273,Signal Tags 1-4000,P_6101,,Signal Tag,37,float 32,R,,0,Analog,,,Block 183 Output 2 +0x3BAA,15275,Signal Tags 1-4000,P_9201,,Signal Tag,38,float 32,R,,0,Analog,,,Block 184 Output 2 +0x3BAC,15277,Signal Tags 1-4000,P_9214,,Signal Tag,39,float 32,R,,0,Analog,,,Block 185 Output 2 +0x3BAE,15279,Signal Tags 1-4000,P_9218,,Signal Tag,40,float 32,R,,0,Analog,,,Block 186 Output 2 +0x3BB0,15281,Signal Tags 1-4000,P_9216,,Signal Tag,41,float 32,R,,0,Analog,,,Block 187 Output 2 +0x3BB2,15283,Signal Tags 1-4000,P_9221,,Signal Tag,42,float 32,R,,0,Analog,,,Block 188 Output 2 +0x3BB4,15285,Signal Tags 1-4000,FI_10215,,Signal Tag,43,float 32,R,,0,Analog,,,Block 895 Output 1 +0x3BB6,15287,Signal Tags 1-4000,VP_9117,,Signal Tag,44,float 32,R,,0,Analog,,,Block 190 Output 2 +0x3BB8,15289,Signal Tags 1-4000,VP_9217,,Signal Tag,45,float 32,R,,0,Analog,,,Block 191 Output 2 +0x3BBA,15291,Signal Tags 1-4000,P_9602A,,Signal Tag,46,float 32,R,,0,Analog,,,Block 192 Output 2 +0x3BBC,15293,Signal Tags 1-4000,P_9602B,,Signal Tag,47,float 32,R,,0,Analog,,,Block 193 Output 2 +0x3BBE,15295,Signal Tags 1-4000,F_9601,,Signal Tag,48,float 32,R,,0,Analog,,,Block 194 Output 2 +0x3BC0,15297,Signal Tags 1-4000,P_9128A,,Signal Tag,49,float 32,R,,0,Analog,,,Block 195 Output 2 +0x3BC2,15299,Signal Tags 1-4000,P_9128B,,Signal Tag,50,float 32,R,,0,Analog,,,Block 196 Output 2 +0x3BC4,15301,Signal Tags 1-4000,XV_9101,,Signal Tag,51,float 32,R,,0,Analog,,,Block 197 Output 2 +0x3BC6,15303,Signal Tags 1-4000,LIC9113_LO_ESD,,Signal Tag,52,float 32,R,,0,Digital,ON,OFF,Block 291 Output 20 +0x3BC8,15305,Signal Tags 1-4000,PIC9111A_LO_IL,,Signal Tag,53,float 32,R,,0,Digital,ON,OFF,Block 257 Output 21 +0x3BCA,15307,Signal Tags 1-4000,TIC9111A_HI_IL,,Signal Tag,54,float 32,R,,0,Digital,ON,OFF,Block 256 Output 21 +0x3BCC,15309,Signal Tags 1-4000,TIC9111A_HI_ESD,,Signal Tag,55,float 32,R,,0,Digital,ON,OFF,Block 256 Output 20 +0x3BCE,15311,Signal Tags 1-4000,9100_MAN_ESD,,Signal Tag,56,float 32,R,,0,Digital,ON,OFF,Block 275 Output 1 +0x3BD0,15313,Signal Tags 1-4000,PIC9111A_LO_ESD,,Signal Tag,57,float 32,R,,0,Digital,ON,OFF,Block 257 Output 20 +0x3BD2,15315,Signal Tags 1-4000,LIC9113_LO_IL,,Signal Tag,58,float 32,R,,0,Digital,ON,OFF,Block 291 Output 21 +0x3BD4,15317,Signal Tags 1-4000,LIC9213_LO_ESD,,Signal Tag,59,float 32,R,,0,Digital,ON,OFF,Block 308 Output 20 +0x3BD6,15319,Signal Tags 1-4000,LIC9213_LO_IL,,Signal Tag,60,float 32,R,,0,Digital,ON,OFF,Block 308 Output 21 +0x3BD8,15321,Signal Tags 1-4000,TIC9211A_HI_ESD,,Signal Tag,61,float 32,R,,0,Digital,ON,OFF,Block 263 Output 20 +0x3BDA,15323,Signal Tags 1-4000,TIC9211A_HI_IL,,Signal Tag,62,float 32,R,,0,Digital,ON,OFF,Block 263 Output 21 +0x3BDC,15325,Signal Tags 1-4000,PIC9211A_LO_ESD,,Signal Tag,63,float 32,R,,0,Digital,ON,OFF,Block 264 Output 20 +0x3BDE,15327,Signal Tags 1-4000,PIC9211A_LO_IL,,Signal Tag,64,float 32,R,,0,Digital,ON,OFF,Block 264 Output 21 +0x3BE0,15329,Signal Tags 1-4000,9200_MAN_ESD,,Signal Tag,65,float 32,R,,0,Digital,ON,OFF,Block 311 Output 1 +0x3BE2,15331,Signal Tags 1-4000,TIC9111A_TRIP,,Signal Tag,66,float 32,R,,0,Digital,ON,OFF,Block 280 Output 1 +0x3BE4,15333,Signal Tags 1-4000,PIC9111A_TRIP,,Signal Tag,67,float 32,R,,0,Digital,ON,OFF,Block 283 Output 1 +0x3BE6,15335,Signal Tags 1-4000,LIC91113_TRIP,,Signal Tag,68,float 32,R,,0,Digital,ON,OFF,Block 288 Output 1 +0x3BE8,15337,Signal Tags 1-4000,TIC9211A_TRIP,,Signal Tag,69,float 32,R,,0,Digital,ON,OFF,Block 297 Output 1 +0x3BEA,15339,Signal Tags 1-4000,PIC9211B_TRIP,,Signal Tag,70,float 32,R,,0,Digital,ON,OFF,Block 300 Output 1 +0x3BEC,15341,Signal Tags 1-4000,LIC9213_TRIP,,Signal Tag,71,float 32,R,,0,Digital,ON,OFF,Block 304 Output 1 +0x3BEE,15343,Signal Tags 1-4000,9113LO_MAN_ESD,,Signal Tag,72,float 32,R,,0,Digital,ON,OFF,Block 317 Output 1 +0x3BF0,15345,Signal Tags 1-4000,9113_LO_ESD,,Signal Tag,73,float 32,R,,0,Digital,ON,OFF,Block 318 Output 1 +0x3BF2,15347,Signal Tags 1-4000,FQ_9100,,Signal Tag,74,float 32,R,,3,Analog,,,Block 327 Output 1 +0x3BF4,15349,Signal Tags 1-4000,FQ_9101,,Signal Tag,75,float 32,R,,3,Analog,,,Block 330 Output 1 +0x3BF6,15351,Signal Tags 1-4000,FQ_9115,,Signal Tag,76,float 32,R,,3,Analog,,,Block 335 Output 1 +0x3BF8,15353,Signal Tags 1-4000,FQ_9113,,Signal Tag,77,float 32,R,,3,Analog,,,Block 339 Output 1 +0x3BFA,15355,Signal Tags 1-4000,FQ_9215,,Signal Tag,78,float 32,R,,3,Analog,,,Block 359 Output 1 +0x3BFC,15357,Signal Tags 1-4000,FI_9115,,Signal Tag,79,float 32,R,,0,Analog,,,Block 334 Output 1 +0x3BFE,15359,Signal Tags 1-4000,FQ_9114,,Signal Tag,80,float 32,R,,3,Analog,,,Block 343 Output 1 +0x3C00,15361,Signal Tags 1-4000,FQ_9116,,Signal Tag,81,float 32,R,,3,Analog,,,Block 347 Output 1 +0x3C02,15363,Signal Tags 1-4000,FQ_9118,,Signal Tag,82,float 32,R,,3,Analog,,,Block 351 Output 1 +0x3C04,15365,Signal Tags 1-4000,FQ_9201,,Signal Tag,83,float 32,R,,3,Analog,,,Block 355 Output 1 +0x3C06,15367,Signal Tags 1-4000,FQ_9213,,Signal Tag,84,float 32,R,,3,Analog,,,Block 363 Output 1 +0x3C08,15369,Signal Tags 1-4000,FQ_9218,,Signal Tag,85,float 32,R,,3,Analog,,,Block 367 Output 1 +0x3C0A,15371,Signal Tags 1-4000,FQ_9216,,Signal Tag,86,float 32,R,,3,Analog,,,Block 371 Output 1 +0x3C0C,15373,Signal Tags 1-4000,FQ_9214,,Signal Tag,87,float 32,R,,3,Analog,,,Block 375 Output 1 +0x3C0E,15375,Signal Tags 1-4000,9100_ESD,,Signal Tag,88,float 32,R,,0,Digital,ON,OFF,Block 292 Output 1 +0x3C10,15377,Signal Tags 1-4000,9200_ESD,,Signal Tag,89,float 32,R,,0,Digital,ON,OFF,Block 309 Output 1 +0x3C12,15379,Signal Tags 1-4000,F9601_RUN,,Signal Tag,90,float 32,R,,0,Digital,ON,OFF,Block 171 Output 15 +0x3C14,15381,Signal Tags 1-4000,P9Z1_LAMP,,Signal Tag,91,float 32,R,,0,Digital,ON,OFF,Block 441 Output 1 +0x3C16,15383,Signal Tags 1-4000,P9Z2_LAMP,,Signal Tag,92,float 32,R,,0,Digital,ON,OFF,Block 444 Output 1 +0x3C18,15385,Signal Tags 1-4000,P9Z3_LAMP,,Signal Tag,93,float 32,R,,0,Digital,ON,OFF,Block 447 Output 1 +0x3C1A,15387,Signal Tags 1-4000,P9Z4_LAMP,,Signal Tag,94,float 32,R,,0,Digital,ON,OFF,Block 450 Output 1 +0x3C1C,15389,Signal Tags 1-4000,FI_9215,,Signal Tag,95,float 32,R,,0,Analog,,,Block 358 Output 1 +0x3C1E,15391,Signal Tags 1-4000,P9118_HZ,,Signal Tag,96,float 32,R,,1,Analog,,,Block 163 Output 4 +0x3C20,15393,Signal Tags 1-4000,C4P2_DC24V_A_OK,,Signal Tag,97,float 32,R,,0,Digital,ON,OFF,Block 458 Output 15 +0x3C22,15395,Signal Tags 1-4000,C4P2_DC24V_B_OK,,Signal Tag,98,float 32,R,,0,Digital,ON,OFF,Block 458 Output 16 +0x3C24,15397,Signal Tags 1-4000,XV_6121,,Signal Tag,99,float 32,R,,0,Analog,,,Block 459 Output 2 +0x3C26,15399,Signal Tags 1-4000,XV_6122,,Signal Tag,100,float 32,R,,0,Analog,,,Block 460 Output 2 +0x3C28,15401,Signal Tags 1-4000,XV_6221,,Signal Tag,101,float 32,R,,0,Analog,,,Block 461 Output 2 +0x3C2A,15403,Signal Tags 1-4000,XV_6222,,Signal Tag,102,float 32,R,,0,Analog,,,Block 462 Output 2 +0x3C2C,15405,Signal Tags 1-4000,XV_9128,,Signal Tag,103,float 32,R,,0,Analog,,,Block 463 Output 2 +0x3C2E,15407,Signal Tags 1-4000,LT_8121,,Signal Tag,104,float 32,R,%,1,Analog,,,Block 502 Output 4 +0x3C30,15409,Signal Tags 1-4000,LT_8122,,Signal Tag,105,float 32,R,,1,Analog,,,Block 503 Output 4 +0x3C32,15411,Signal Tags 1-4000,P_9101_HZ,,Signal Tag,106,float 32,R,Hz,1,Analog,,,Block 474 Output 4 +0x3C34,15413,Signal Tags 1-4000,P_9201_HZ,,Signal Tag,107,float 32,R,Hz,1,Analog,,,Block 475 Output 4 +0x3C36,15415,Signal Tags 1-4000,LT_6125,,Signal Tag,108,float 32,R,,1,Analog,,,Block 504 Output 4 +0x3C38,15417,Signal Tags 1-4000,LT_6126,,Signal Tag,109,float 32,R,,1,Analog,,,Block 505 Output 4 +0x3C3A,15419,Signal Tags 1-4000,LT_6225,,Signal Tag,110,float 32,R,,1,Analog,,,Block 506 Output 4 +0x3C3C,15421,Signal Tags 1-4000,LT_6226,,Signal Tag,111,float 32,R,,1,Analog,,,Block 507 Output 4 +0x3C3E,15423,Signal Tags 1-4000,LT_3101,,Signal Tag,112,float 32,R,,1,Analog,,,Block 508 Output 4 +0x3C40,15425,Signal Tags 1-4000,LT_9125,,Signal Tag,113,float 32,R,,1,Analog,,,Block 509 Output 4 +0x3C42,15427,Signal Tags 1-4000,DPT_6127A,,Signal Tag,114,float 32,R,%,1,Analog,,,Block 510 Output 4 +0x3C44,15429,Signal Tags 1-4000,DPT_6127B,,Signal Tag,115,float 32,R,,1,Analog,,,Block 511 Output 4 +0x3C46,15431,Signal Tags 1-4000,DPT_6227A,,Signal Tag,116,float 32,R,,1,Analog,,,Block 512 Output 4 +0x3C48,15433,Signal Tags 1-4000,DPT_6227B,,Signal Tag,117,float 32,R,,1,Analog,,,Block 513 Output 4 +0x3C4A,15435,Signal Tags 1-4000,DPT_8120A,,Signal Tag,118,float 32,R,,1,Analog,,,Block 514 Output 4 +0x3C4C,15437,Signal Tags 1-4000,DPT_8120B,,Signal Tag,119,float 32,R,,1,Analog,,,Block 515 Output 4 +0x3C4E,15439,Signal Tags 1-4000,DPT_8120C,,Signal Tag,120,float 32,R,,1,Analog,,,Block 516 Output 4 +0x3C50,15441,Signal Tags 1-4000,DPT_8120D,,Signal Tag,121,float 32,R,,1,Analog,,,Block 517 Output 4 +0x3C52,15443,Signal Tags 1-4000,DPT_9120A,,Signal Tag,122,float 32,R,%,1,Analog,,,Block 518 Output 4 +0x3C54,15445,Signal Tags 1-4000,DPT_9120B,,Signal Tag,123,float 32,R,,1,Analog,,,Block 519 Output 4 +0x3C56,15447,Signal Tags 1-4000,PT_6903A,,Signal Tag,124,float 32,R,,1,Analog,,,Block 520 Output 4 +0x3C58,15449,Signal Tags 1-4000,PT_6903B,,Signal Tag,125,float 32,R,,1,Analog,,,Block 521 Output 4 +0x3C5A,15451,Signal Tags 1-4000,PT_6903C,,Signal Tag,126,float 32,R,,1,Analog,,,Block 522 Output 4 +0x3C5C,15453,Signal Tags 1-4000,FT_6127,,Signal Tag,127,float 32,R,%,1,Analog,,,Block 526 Output 4 +0x3C5E,15455,Signal Tags 1-4000,FT_6227,,Signal Tag,128,float 32,R,,1,Analog,,,Block 527 Output 4 +0x3C60,15457,Signal Tags 1-4000,FT_9120,,Signal Tag,129,float 32,R,,1,Analog,,,Block 528 Output 4 +0x3C62,15459,Signal Tags 1-4000,TE_6125,,Signal Tag,130,float 32,R,%,1,Analog,,,Block 534 Output 4 +0x3C64,15461,Signal Tags 1-4000,TE_6126,,Signal Tag,131,float 32,R,,1,Analog,,,Block 535 Output 4 +0x3C66,15463,Signal Tags 1-4000,TE_6225,,Signal Tag,132,float 32,R,,1,Analog,,,Block 536 Output 4 +0x3C68,15465,Signal Tags 1-4000,TE_6226,,Signal Tag,133,float 32,R,,1,Analog,,,Block 537 Output 4 +0x3C6A,15467,Signal Tags 1-4000,TE_3101,,Signal Tag,134,float 32,R,,1,Analog,,,Block 538 Output 4 +0x3C6C,15469,Signal Tags 1-4000,TE_8121,,Signal Tag,135,float 32,R,,1,Analog,,,Block 539 Output 4 +0x3C6E,15471,Signal Tags 1-4000,TE_8122,,Signal Tag,136,float 32,R,,1,Analog,,,Block 540 Output 4 +0x3C70,15473,Signal Tags 1-4000,TE_9125,,Signal Tag,137,float 32,R,,1,Analog,,,Block 541 Output 4 +0x3C72,15475,Signal Tags 1-4000,XV_6125A_OP,,Signal Tag,138,float 32,R,,0,Digital,ON,OFF,Block 542 Output 9 +0x3C74,15477,Signal Tags 1-4000,XV_6125A_CL,,Signal Tag,139,float 32,R,,0,Digital,ON,OFF,Block 542 Output 10 +0x3C76,15479,Signal Tags 1-4000,XV_6125B_OP,,Signal Tag,140,float 32,R,,0,Digital,ON,OFF,Block 542 Output 11 +0x3C78,15481,Signal Tags 1-4000,XV_6125B_CL,,Signal Tag,141,float 32,R,,0,Digital,ON,OFF,Block 542 Output 12 +0x3C7A,15483,Signal Tags 1-4000,XV_6126A_OP,,Signal Tag,142,float 32,R,,0,Digital,ON,OFF,Block 542 Output 13 +0x3C7C,15485,Signal Tags 1-4000,XV_6126A_CL,,Signal Tag,143,float 32,R,,0,Digital,ON,OFF,Block 542 Output 14 +0x3C7E,15487,Signal Tags 1-4000,XV_6126B_OP,,Signal Tag,144,float 32,R,,0,Digital,ON,OFF,Block 542 Output 15 +0x3C80,15489,Signal Tags 1-4000,XV_6126B_CL,,Signal Tag,145,float 32,R,,0,Digital,ON,OFF,Block 542 Output 16 +0x3C82,15491,Signal Tags 1-4000,XV_6225A_OP,,Signal Tag,146,float 32,R,,0,Digital,ON,OFF,Block 543 Output 9 +0x3C84,15493,Signal Tags 1-4000,XV_6225A_CL,,Signal Tag,147,float 32,R,,0,Digital,ON,OFF,Block 543 Output 10 +0x3C86,15495,Signal Tags 1-4000,XV_6225B_OP,,Signal Tag,148,float 32,R,,0,Digital,ON,OFF,Block 543 Output 11 +0x3C88,15497,Signal Tags 1-4000,XV_6225B_CL,,Signal Tag,149,float 32,R,,0,Digital,ON,OFF,Block 543 Output 12 +0x3C8A,15499,Signal Tags 1-4000,XV_6226A_OP,,Signal Tag,150,float 32,R,,0,Digital,ON,OFF,Block 543 Output 13 +0x3C8C,15501,Signal Tags 1-4000,XV_6226A_CL,,Signal Tag,151,float 32,R,,0,Digital,ON,OFF,Block 543 Output 14 +0x3C8E,15503,Signal Tags 1-4000,XV_6226B_OP,,Signal Tag,152,float 32,R,,0,Digital,ON,OFF,Block 543 Output 15 +0x3C90,15505,Signal Tags 1-4000,XV_6226B_CL,,Signal Tag,153,float 32,R,,0,Digital,ON,OFF,Block 543 Output 16 +0x3C92,15507,Signal Tags 1-4000,XV_6127_OP,,Signal Tag,154,float 32,R,,0,Digital,ON,OFF,Block 544 Output 9 +0x3C94,15509,Signal Tags 1-4000,XV_6127_CL,,Signal Tag,155,float 32,R,,0,Digital,ON,OFF,Block 544 Output 10 +0x3C96,15511,Signal Tags 1-4000,XV_6227_OP,,Signal Tag,156,float 32,R,,0,Digital,ON,OFF,Block 544 Output 11 +0x3C98,15513,Signal Tags 1-4000,XV_6227_CL,,Signal Tag,157,float 32,R,,0,Digital,ON,OFF,Block 544 Output 12 +0x3C9A,15515,Signal Tags 1-4000,XV_9120_OP,,Signal Tag,158,float 32,R,,0,Digital,ON,OFF,Block 544 Output 13 +0x3C9C,15517,Signal Tags 1-4000,XV_9120_CL,,Signal Tag,159,float 32,R,,0,Digital,ON,OFF,Block 544 Output 14 +0x3C9E,15519,Signal Tags 1-4000,P_6127S,,Signal Tag,160,float 32,R,,0,Digital,ON,OFF,Block 455 Output 9 +0x3CA0,15521,Signal Tags 1-4000,FQ_6127,,Signal Tag,161,float 32,R,,3,Analog,,,Block 581 Output 1 +0x3CA2,15523,Signal Tags 1-4000,P_6227S,,Signal Tag,162,float 32,R,,0,Digital,ON,OFF,Block 455 Output 10 +0x3CA4,15525,Signal Tags 1-4000,FQ_6227,,Signal Tag,163,float 32,R,,3,Analog,,,Block 585 Output 1 +0x3CA6,15527,Signal Tags 1-4000,P_9120S,,Signal Tag,164,float 32,R,,0,Digital,ON,OFF,Block 455 Output 11 +0x3CA8,15529,Signal Tags 1-4000,FQ_9120,,Signal Tag,165,float 32,R,,3,Analog,,,Block 589 Output 1 +0x3CAA,15531,Signal Tags 1-4000,P_8120AS,,Signal Tag,166,float 32,R,,0,Digital,ON,OFF,Block 455 Output 12 +0x3CAC,15533,Signal Tags 1-4000,XV_9125,,Signal Tag,167,float 32,R,,0,Analog,,,Block 591 Output 2 +0x3CAE,15535,Signal Tags 1-4000,BL_6300A,,Signal Tag,168,float 32,R,,0,Digital,ON,OFF,Block 455 Output 14 +0x3CB0,15537,Signal Tags 1-4000,P_9102,,Signal Tag,169,float 32,R,,0,Analog,,,Block 594 Output 2 +0x3CB2,15539,Signal Tags 1-4000,BL_6300B,,Signal Tag,170,float 32,R,,0,Digital,ON,OFF,Block 455 Output 15 +0x3CB4,15541,Signal Tags 1-4000,WT_DFU1,,Signal Tag,171,float 32,R,kg,1,Analog,,,Block 596 Output 3 +0x3CB6,15543,Signal Tags 1-4000,XV_6125A,,Signal Tag,172,float 32,R,,0,Analog,,,Block 546 Output 2 +0x3CB8,15545,Signal Tags 1-4000,XV_6125B,,Signal Tag,173,float 32,R,,0,Analog,,,Block 547 Output 2 +0x3CBA,15547,Signal Tags 1-4000,XV_6126A,,Signal Tag,174,float 32,R,,0,Analog,,,Block 548 Output 2 +0x3CBC,15549,Signal Tags 1-4000,XV_6126B,,Signal Tag,175,float 32,R,,0,Analog,,,Block 549 Output 2 +0x3CBE,15551,Signal Tags 1-4000,XV_6225A,,Signal Tag,176,float 32,R,,0,Analog,,,Block 550 Output 2 +0x3CC0,15553,Signal Tags 1-4000,XV_6225B,,Signal Tag,177,float 32,R,,0,Analog,,,Block 551 Output 2 +0x3CC2,15555,Signal Tags 1-4000,XV_6226A,,Signal Tag,178,float 32,R,,0,Analog,,,Block 552 Output 2 +0x3CC4,15557,Signal Tags 1-4000,XV_6226B,,Signal Tag,179,float 32,R,,0,Analog,,,Block 553 Output 2 +0x3CC6,15559,Signal Tags 1-4000,XV_6127,,Signal Tag,180,float 32,R,,0,Analog,,,Block 554 Output 2 +0x3CC8,15561,Signal Tags 1-4000,XV_6227,,Signal Tag,181,float 32,R,,0,Analog,,,Block 555 Output 2 +0x3CCA,15563,Signal Tags 1-4000,XV_9120,,Signal Tag,182,float 32,R,,0,Analog,,,Block 556 Output 2 +0x3CCC,15565,Signal Tags 1-4000,P_6127,,Signal Tag,183,float 32,R,,0,Analog,,,Block 557 Output 2 +0x3CCE,15567,Signal Tags 1-4000,P_6227,,Signal Tag,184,float 32,R,,0,Analog,,,Block 558 Output 2 +0x3CD0,15569,Signal Tags 1-4000,P_9120,,Signal Tag,185,float 32,R,,0,Analog,,,Block 559 Output 2 +0x3CD2,15571,Signal Tags 1-4000,P_8120A,,Signal Tag,186,float 32,R,,0,Analog,,,Block 560 Output 2 +0x3CD4,15573,Signal Tags 1-4000,PT_10900G,,Signal Tag,187,float 32,R,,0,Analog,,,Block 523 Output 4 +0x3CD6,15575,Signal Tags 1-4000,PT_10900H,,Signal Tag,188,float 32,R,,0,Analog,,,Block 524 Output 4 +0x3CD8,15577,Signal Tags 1-4000,BL_6400AS,,Signal Tag,189,float 32,R,,0,Digital,ON,OFF,Block 455 Output 16 +0x3CDA,15579,Signal Tags 1-4000,WT_DFU2,,Signal Tag,190,float 32,R,kg,1,Analog,,,Block 596 Output 4 +0x3CDC,15581,Signal Tags 1-4000,BL_6400BS,,Signal Tag,191,float 32,R,,0,Digital,ON,OFF,Block 456 Output 9 +0x3CDE,15583,Signal Tags 1-4000,WT_DFU3,,Signal Tag,192,float 32,R,kg,1,Analog,,,Block 596 Output 5 +0x3CE0,15585,Signal Tags 1-4000,XV_9125_OP,,Signal Tag,193,float 32,R,,0,Digital,ON,OFF,Block 544 Output 15 +0x3CE2,15587,Signal Tags 1-4000,XV_9125_CL,,Signal Tag,194,float 32,R,,0,Digital,ON,OFF,Block 544 Output 16 +0x3CE4,15589,Signal Tags 1-4000,P_9102S,,Signal Tag,195,float 32,R,,0,Digital,ON,OFF,Block 545 Output 10 +0x3CE6,15591,Signal Tags 1-4000,P_9102T,,Signal Tag,196,float 32,R,,0,Digital,ON,OFF,Block 545 Output 11 +0x3CE8,15593,Signal Tags 1-4000,P_8120BS,,Signal Tag,197,float 32,R,,0,Digital,ON,OFF,Block 455 Output 13 +0x3CEA,15595,Signal Tags 1-4000,WT_DFU4,,Signal Tag,198,float 32,R,kg,1,Analog,,,Block 596 Output 6 +0x3CEC,15597,Signal Tags 1-4000,P_9102R,,Signal Tag,199,float 32,R,,0,Digital,ON,OFF,Block 545 Output 9 +0x3CEE,15599,Signal Tags 1-4000,BL_6400A,,Signal Tag,200,float 32,R,,0,Analog,,,Block 576 Output 2 +0x3CF0,15601,Signal Tags 1-4000,BL_6400B,,Signal Tag,201,float 32,R,,0,Analog,,,Block 577 Output 2 +0x3CF2,15603,Signal Tags 1-4000,WT_DFU5,,Signal Tag,202,float 32,R,,0,Analog,,,Block 595 Output 1 +0x3CF4,15605,Signal Tags 1-4000,XV_DFU1,,Signal Tag,203,float 32,R,,0,Analog,,,Block 595 Output 2 +0x3CF6,15607,Signal Tags 1-4000,XV_DFU2,,Signal Tag,204,float 32,R,,0,Analog,,,Block 595 Output 3 +0x3CF8,15609,Signal Tags 1-4000,XV_DFU3,,Signal Tag,205,float 32,R,,0,Analog,,,Block 595 Output 4 +0x3CFA,15611,Signal Tags 1-4000,XV_DFU4,,Signal Tag,206,float 32,R,,0,Analog,,,Block 595 Output 5 +0x3CFC,15613,Signal Tags 1-4000,XV_DFU5A,,Signal Tag,207,float 32,R,,0,Analog,,,Block 595 Output 6 +0x3CFE,15615,Signal Tags 1-4000,P_8120B,,Signal Tag,208,float 32,R,,0,Analog,,,Block 578 Output 2 +0x3D00,15617,Signal Tags 1-4000,XV_DFU5B,,Signal Tag,209,float 32,R,,0,Analog,,,Block 595 Output 7 +0x3D02,15619,Signal Tags 1-4000,LD_DFU01,,Signal Tag,210,float 32,R,,0,Analog,,,Block 595 Output 8 +0x3D04,15621,Signal Tags 1-4000,LD_DFU02,,Signal Tag,211,float 32,R,,0,Analog,,,Block 595 Output 9 +0x3D06,15623,Signal Tags 1-4000,LD_DFU03,,Signal Tag,212,float 32,R,,0,Analog,,,Block 595 Output 10 +0x3D08,15625,Signal Tags 1-4000,LD_DFU04,,Signal Tag,213,float 32,R,,0,Analog,,,Block 595 Output 11 +0x3D0A,15627,Signal Tags 1-4000,LD_DFU05,,Signal Tag,214,float 32,R,,0,Analog,,,Block 595 Output 12 +0x3D0C,15629,Signal Tags 1-4000,LT_10100,,Signal Tag,215,float 32,R,,0,Analog,,,Block 610 Output 4 +0x3D0E,15631,Signal Tags 1-4000,LT_10111,,Signal Tag,216,float 32,R,,0,Analog,,,Block 611 Output 4 +0x3D10,15633,Signal Tags 1-4000,PT_10900,,Signal Tag,217,float 32,R,,0,Analog,,,Block 626 Output 4 +0x3D12,15635,Signal Tags 1-4000,PT_10900E,,Signal Tag,218,float 32,R,,0,Analog,,,Block 627 Output 4 +0x3D14,15637,Signal Tags 1-4000,PT_10952,,Signal Tag,219,float 32,R,,0,Analog,,,Block 529 Output 4 +0x3D16,15639,Signal Tags 1-4000,TE_10111A,,Signal Tag,220,float 32,R,%,1,Analog,,,Block 645 Output 4 +0x3D18,15641,Signal Tags 1-4000,TE_10111B,,Signal Tag,221,float 32,R,,1,Analog,,,Block 646 Output 4 +0x3D1A,15643,Signal Tags 1-4000,TE_10111C,,Signal Tag,222,float 32,R,,1,Analog,,,Block 647 Output 4 +0x3D1C,15645,Signal Tags 1-4000,TE_10111D,,Signal Tag,223,float 32,R,,1,Analog,,,Block 648 Output 4 +0x3D1E,15647,Signal Tags 1-4000,TE_10103,,Signal Tag,224,float 32,R,,1,Analog,,,Block 649 Output 4 +0x3D20,15649,Signal Tags 1-4000,TE_10117,,Signal Tag,225,float 32,R,,1,Analog,,,Block 650 Output 4 +0x3D22,15651,Signal Tags 1-4000,TE_10211A,,Signal Tag,226,float 32,R,,1,Analog,,,Block 651 Output 4 +0x3D24,15653,Signal Tags 1-4000,TE_10211B,,Signal Tag,227,float 32,R,,1,Analog,,,Block 652 Output 4 +0x3D26,15655,Signal Tags 1-4000,TE_10211C,,Signal Tag,228,float 32,R,%,1,Analog,,,Block 653 Output 4 +0x3D28,15657,Signal Tags 1-4000,TE_10211D,,Signal Tag,229,float 32,R,,1,Analog,,,Block 654 Output 4 +0x3D2A,15659,Signal Tags 1-4000,TE_10203,,Signal Tag,230,float 32,R,,1,Analog,,,Block 655 Output 4 +0x3D2C,15661,Signal Tags 1-4000,TE_10217,,Signal Tag,231,float 32,R,,1,Analog,,,Block 656 Output 4 +0x3D2E,15663,Signal Tags 1-4000,TE_10600,,Signal Tag,232,float 32,R,,1,Analog,,,Block 657 Output 4 +0x3D30,15665,Signal Tags 1-4000,TE_10650,,Signal Tag,233,float 32,R,,1,Analog,,,Block 658 Output 4 +0x3D32,15667,Signal Tags 1-4000,0841_004,,Signal Tag,234,float 32,R,,1,Analog,,,Block 659 Output 4 +0x3D34,15669,Signal Tags 1-4000,0842_004,,Signal Tag,235,float 32,R,,1,Analog,,,Block 660 Output 4 +0x3D36,15671,Signal Tags 1-4000,FCV_10101,,Signal Tag,236,float 32,R,,0,Analog,,,Block 669 Output 18 +0x3D38,15673,Signal Tags 1-4000,FCV_10113,,Signal Tag,237,float 32,R,,0,Analog,,,Block 670 Output 18 +0x3D3A,15675,Signal Tags 1-4000,LIC10113_LO_ESD,,Signal Tag,238,float 32,R,,0,Digital,ON,OFF,Block 673 Output 20 +0x3D3C,15677,Signal Tags 1-4000,LIC10113_LO_IL,,Signal Tag,239,float 32,R,,0,Digital,ON,OFF,Block 673 Output 21 +0x3D3E,15679,Signal Tags 1-4000,PIC10111A_LO_IL,,Signal Tag,240,float 32,R,,0,Digital,ON,OFF,Block 676 Output 21 +0x3D40,15681,Signal Tags 1-4000,TIC10111A_HI_IL,,Signal Tag,241,float 32,R,,0,Digital,ON,OFF,Block 675 Output 21 +0x3D42,15683,Signal Tags 1-4000,TIC10111A_HI_ESD,,Signal Tag,242,float 32,R,,0,Digital,ON,OFF,Block 675 Output 20 +0x3D44,15685,Signal Tags 1-4000,PIC10111A_LO_ESD,,Signal Tag,243,float 32,R,,0,Digital,ON,OFF,Block 676 Output 20 +0x3D46,15687,Signal Tags 1-4000,FCV_10116,,Signal Tag,244,float 32,R,,0,Analog,,,Block 674 Output 18 +0x3D48,15689,Signal Tags 1-4000,TCV_10111,,Signal Tag,245,float 32,R,,0,Analog,,,Block 675 Output 18 +0x3D4A,15691,Signal Tags 1-4000,PCV_10111A,,Signal Tag,246,float 32,R,,0,Analog,,,Block 676 Output 18 +0x3D4C,15693,Signal Tags 1-4000,FCV_10114A,,Signal Tag,247,float 32,R,,0,Analog,,,Block 671 Output 18 +0x3D4E,15695,Signal Tags 1-4000,FCV_10118,,Signal Tag,248,float 32,R,,0,Analog,,,Block 672 Output 18 +0x3D50,15697,Signal Tags 1-4000,PT_10111A,,Signal Tag,249,float 32,R,,0,Analog,,,Block 621 Output 4 +0x3D52,15699,Signal Tags 1-4000,PT_10111B,,Signal Tag,250,float 32,R,,0,Analog,,,Block 622 Output 4 +0x3D54,15701,Signal Tags 1-4000,FCV_9201,,Signal Tag,251,float 32,R,,0,Analog,,,Block 258 Output 18 +0x3D56,15703,Signal Tags 1-4000,FCV_9213,,Signal Tag,252,float 32,R,,0,Analog,,,Block 259 Output 18 +0x3D58,15705,Signal Tags 1-4000,FCV_9214,,Signal Tag,253,float 32,R,,0,Analog,,,Block 260 Output 18 +0x3D5A,15707,Signal Tags 1-4000,FCV_9218,,Signal Tag,254,float 32,R,,0,Analog,,,Block 261 Output 18 +0x3D5C,15709,Signal Tags 1-4000,FT_10114A,,Signal Tag,255,float 32,R,,0,Analog,,,Block 599 Output 4 +0x3D5E,15711,Signal Tags 1-4000,FT_10114B,,Signal Tag,256,float 32,R,,0,Analog,,,Block 600 Output 4 +0x3D60,15713,Signal Tags 1-4000,PT_10211A,,Signal Tag,257,float 32,R,,0,Analog,,,Block 623 Output 4 +0x3D62,15715,Signal Tags 1-4000,PT_10211B,,Signal Tag,258,float 32,R,,0,Analog,,,Block 624 Output 4 +0x3D64,15717,Signal Tags 1-4000,LIC10213_LO_ESD,,Signal Tag,259,float 32,R,,0,Digital,ON,OFF,Block 681 Output 20 +0x3D66,15719,Signal Tags 1-4000,LIC10213_LO_IL,,Signal Tag,260,float 32,R,,0,Digital,ON,OFF,Block 681 Output 21 +0x3D68,15721,Signal Tags 1-4000,FCV_10201,,Signal Tag,261,float 32,R,,0,Analog,,,Block 677 Output 18 +0x3D6A,15723,Signal Tags 1-4000,FCV_10213,,Signal Tag,262,float 32,R,,0,Analog,,,Block 678 Output 18 +0x3D6C,15725,Signal Tags 1-4000,FCV_10214,,Signal Tag,263,float 32,R,,0,Analog,,,Block 679 Output 18 +0x3D6E,15727,Signal Tags 1-4000,FCV_10218,,Signal Tag,264,float 32,R,,0,Analog,,,Block 680 Output 18 +0x3D70,15729,Signal Tags 1-4000,FCV_9216,,Signal Tag,265,float 32,R,,0,Analog,,,Block 262 Output 18 +0x3D72,15731,Signal Tags 1-4000,PCV_9211,,Signal Tag,266,float 32,R,,0,Analog,,,Block 264 Output 18 +0x3D74,15733,Signal Tags 1-4000,TCV_9211,,Signal Tag,267,float 32,R,,0,Analog,,,Block 263 Output 18 +0x3D76,15735,Signal Tags 1-4000,TIC10211A_HI_ESD,,Signal Tag,268,float 32,R,,0,Digital,ON,OFF,Block 683 Output 20 +0x3D78,15737,Signal Tags 1-4000,TIC10211A_HI_IL,,Signal Tag,269,float 32,R,,0,Digital,ON,OFF,Block 683 Output 21 +0x3D7A,15739,Signal Tags 1-4000,PIC10211A_LO_ESD,,Signal Tag,270,float 32,R,,0,Digital,ON,OFF,Block 684 Output 20 +0x3D7C,15741,Signal Tags 1-4000,PIC10211A_LO_IL,,Signal Tag,271,float 32,R,,0,Digital,ON,OFF,Block 684 Output 21 +0x3D7E,15743,Signal Tags 1-4000,FCV_10216,,Signal Tag,272,float 32,R,,0,Analog,,,Block 682 Output 18 +0x3D80,15745,Signal Tags 1-4000,PCV_10211,,Signal Tag,273,float 32,R,,0,Analog,,,Block 684 Output 18 +0x3D82,15747,Signal Tags 1-4000,TCV_10211,,Signal Tag,274,float 32,R,,0,Analog,,,Block 683 Output 18 +0x3D84,15749,Signal Tags 1-4000,P_10101,,Signal Tag,275,float 32,R,,0,Analog,,,Block 685 Output 2 +0x3D86,15751,Signal Tags 1-4000,P_10114,,Signal Tag,276,float 32,R,,0,Analog,,,Block 686 Output 2 +0x3D88,15753,Signal Tags 1-4000,P_10118,,Signal Tag,277,float 32,R,,0,Analog,,,Block 687 Output 2 +0x3D8A,15755,Signal Tags 1-4000,P_10116,,Signal Tag,278,float 32,R,,0,Analog,,,Block 688 Output 2 +0x3D8C,15757,Signal Tags 1-4000,P_10128A,,Signal Tag,279,float 32,R,,0,Analog,,,Block 689 Output 2 +0x3D8E,15759,Signal Tags 1-4000,P_10128B,,Signal Tag,280,float 32,R,,0,Analog,,,Block 690 Output 2 +0x3D90,15761,Signal Tags 1-4000,VP_10117,,Signal Tag,281,float 32,R,,0,Analog,,,Block 691 Output 2 +0x3D92,15763,Signal Tags 1-4000,P_10800A,,Signal Tag,282,float 32,R,,0,Analog,,,Block 692 Output 2 +0x3D94,15765,Signal Tags 1-4000,P_10201,,Signal Tag,283,float 32,R,,0,Analog,,,Block 693 Output 2 +0x3D96,15767,Signal Tags 1-4000,P_10214,,Signal Tag,284,float 32,R,,0,Analog,,,Block 694 Output 2 +0x3D98,15769,Signal Tags 1-4000,P_10218,,Signal Tag,285,float 32,R,,0,Analog,,,Block 695 Output 2 +0x3D9A,15771,Signal Tags 1-4000,P_10216,,Signal Tag,286,float 32,R,,0,Analog,,,Block 696 Output 2 +0x3D9C,15773,Signal Tags 1-4000,P_10602A,,Signal Tag,287,float 32,R,,0,Analog,,,Block 697 Output 2 +0x3D9E,15775,Signal Tags 1-4000,P_10602B,,Signal Tag,288,float 32,R,,0,Analog,,,Block 698 Output 2 +0x3DA0,15777,Signal Tags 1-4000,VP_10217,,Signal Tag,289,float 32,R,,0,Analog,,,Block 699 Output 2 +0x3DA2,15779,Signal Tags 1-4000,F_10602,,Signal Tag,290,float 32,R,,0,Analog,,,Block 700 Output 2 +0x3DA4,15781,Signal Tags 1-4000,P_10101_CMD,,Signal Tag,291,float 32,R,,0,Digital,ON,OFF,Block 701 Output 1 +0x3DA6,15783,Signal Tags 1-4000,P_10114_CMD,,Signal Tag,292,float 32,R,,0,Digital,ON,OFF,Block 704 Output 1 +0x3DA8,15785,Signal Tags 1-4000,P_10118_CMD,,Signal Tag,293,float 32,R,,0,Digital,ON,OFF,Block 707 Output 1 +0x3DAA,15787,Signal Tags 1-4000,P_10116_CMD,,Signal Tag,294,float 32,R,,0,Digital,ON,OFF,Block 710 Output 1 +0x3DAC,15789,Signal Tags 1-4000,P_10201_CMD,,Signal Tag,295,float 32,R,,0,Digital,ON,OFF,Block 721 Output 1 +0x3DAE,15791,Signal Tags 1-4000,P_10214_CMD,,Signal Tag,296,float 32,R,,0,Digital,ON,OFF,Block 724 Output 1 +0x3DB0,15793,Signal Tags 1-4000,P_10218_CMD,,Signal Tag,297,float 32,R,,0,Digital,ON,OFF,Block 842 Output 1 +0x3DB2,15795,Signal Tags 1-4000,P_10216_CMD,,Signal Tag,298,float 32,R,,0,Digital,ON,OFF,Block 727 Output 1 +0x3DB4,15797,Signal Tags 1-4000,VP_10117_CMD,,Signal Tag,299,float 32,R,,0,Digital,ON,OFF,Block 736 Output 1 +0x3DB6,15799,Signal Tags 1-4000,VP_10217_CMD,,Signal Tag,300,float 32,R,,0,Digital,ON,OFF,Block 739 Output 1 +0x3DB8,15801,Signal Tags 1-4000,P_10128A_CMD,,Signal Tag,301,float 32,R,,0,Digital,ON,OFF,Block 746 Output 1 +0x3DBA,15803,Signal Tags 1-4000,P_10128B_CMD,,Signal Tag,302,float 32,R,,0,Digital,ON,OFF,Block 749 Output 1 +0x3DBC,15805,Signal Tags 1-4000,TIC10111A_TRIP,,Signal Tag,303,float 32,R,,0,Digital,ON,OFF,Block 760 Output 1 +0x3DBE,15807,Signal Tags 1-4000,PIC10111A_TRIP,,Signal Tag,304,float 32,R,,0,Digital,ON,OFF,Block 763 Output 1 +0x3DC0,15809,Signal Tags 1-4000,PT_10111A_FAIL,,Signal Tag,305,float 32,R,,0,Digital,ON,OFF,Block 621 Output 5 +0x3DC2,15811,Signal Tags 1-4000,PT_10211A_FAIL,,Signal Tag,306,float 32,R,,0,Digital,ON,OFF,Block 623 Output 5 +0x3DC4,15813,Signal Tags 1-4000,LIC101113_TRIP,,Signal Tag,307,float 32,R,,0,Digital,ON,OFF,Block 773 Output 1 +0x3DC6,15815,Signal Tags 1-4000,10113LO_MAN_ESD,,Signal Tag,308,float 32,R,,0,Digital,ON,OFF,Block 770 Output 1 +0x3DC8,15817,Signal Tags 1-4000,10113_LO_ESD,,Signal Tag,309,float 32,R,,0,Digital,ON,OFF,Block 776 Output 1 +0x3DCA,15819,Signal Tags 1-4000,TIC10211A_TRIP,,Signal Tag,310,float 32,R,,0,Digital,ON,OFF,Block 781 Output 1 +0x3DCC,15821,Signal Tags 1-4000,PIC10211B_TRIP,,Signal Tag,311,float 32,R,,0,Digital,ON,OFF,Block 784 Output 1 +0x3DCE,15823,Signal Tags 1-4000,LIC10213_TRIP,,Signal Tag,312,float 32,R,,0,Digital,ON,OFF,Block 788 Output 1 +0x3DD0,15825,Signal Tags 1-4000,P_10221_CMD,,Signal Tag,313,float 32,R,,0,Digital,ON,OFF,Block 822 Output 1 +0x3DD2,15827,Signal Tags 1-4000,P_10800A_CMD,,Signal Tag,314,float 32,R,,0,Digital,ON,OFF,Block 827 Output 1 +0x3DD4,15829,Signal Tags 1-4000,PT_10900I,,Signal Tag,315,float 32,R,,0,Analog,,,Block 525 Output 4 +0x3DD6,15831,Signal Tags 1-4000,PT_10900F,,Signal Tag,316,float 32,R,,0,Analog,,,Block 628 Output 4 +0x3DD8,15833,Signal Tags 1-4000,PT_10700,,Signal Tag,317,float 32,R,,0,Analog,,,Block 625 Output 4 +0x3DDA,15835,Signal Tags 1-4000,XV_10111_CMD,,Signal Tag,318,float 32,R,,0,Digital,ON,OFF,Block 840 Output 1 +0x3DDC,15837,Signal Tags 1-4000,XV_10211_CMD,,Signal Tag,319,float 32,R,,0,Digital,ON,OFF,Block 841 Output 1 +0x3DDE,15839,Signal Tags 1-4000,XV_10111_OPEN,,Signal Tag,320,float 32,R,,0,Digital,ON,OFF,Block 667 Output 15 +0x3DE0,15841,Signal Tags 1-4000,XV_10111_CLOSE,,Signal Tag,321,float 32,R,,0,Digital,ON,OFF,Block 667 Output 16 +0x3DE2,15843,Signal Tags 1-4000,XV_10211_OPEN,,Signal Tag,322,float 32,R,,0,Digital,ON,OFF,Block 668 Output 9 +0x3DE4,15845,Signal Tags 1-4000,XV_10211_CLOSE,,Signal Tag,323,float 32,R,,0,Digital,ON,OFF,Block 668 Output 10 +0x3DE6,15847,Signal Tags 1-4000,LI_10128,,Signal Tag,324,float 32,R,,0,Analog,,,Block 613 Output 4 +0x3DE8,15849,Signal Tags 1-4000,LI_10101,,Signal Tag,325,float 32,R,,0,Analog,,,Block 614 Output 4 +0x3DEA,15851,Signal Tags 1-4000,9100ESDT,,Signal Tag,326,float 32,R,,0,Digital,ON,OFF,Block 312 Output 1 +0x3DEC,15853,Signal Tags 1-4000,9200ESDT,,Signal Tag,327,float 32,R,,0,Digital,ON,OFF,Block 313 Output 1 +0x3DEE,15855,Signal Tags 1-4000,10100_MAN_ESD,,Signal Tag,328,float 32,R,,0,Digital,ON,OFF,Block 850 Output 1 +0x3DF0,15857,Signal Tags 1-4000,10200_MAN_ESD,,Signal Tag,329,float 32,R,,0,Digital,ON,OFF,Block 855 Output 1 +0x3DF2,15859,Signal Tags 1-4000,10100_ESD,,Signal Tag,330,float 32,R,,0,Digital,ON,OFF,Block 847 Output 1 +0x3DF4,15861,Signal Tags 1-4000,10200_ESD,,Signal Tag,331,float 32,R,,0,Digital,ON,OFF,Block 853 Output 1 +0x3DF6,15863,Signal Tags 1-4000,10100ESDT,,Signal Tag,332,float 32,R,,0,Digital,ON,OFF,Block 856 Output 1 +0x3DF8,15865,Signal Tags 1-4000,10200ESDT,,Signal Tag,333,float 32,R,,0,Digital,ON,OFF,Block 857 Output 1 +0x3DFA,15867,Signal Tags 1-4000,C4P3_DC24V_A_OK,,Signal Tag,334,float 32,R,,0,Digital,ON,OFF,Block 668 Output 15 +0x3DFC,15869,Signal Tags 1-4000,C4P3_DC24V_B_OK,,Signal Tag,335,float 32,R,,0,Digital,ON,OFF,Block 668 Output 16 +0x3DFE,15871,Signal Tags 1-4000,POJANG_NOSCAN,,Signal Tag,336,float 32,R,,0,Digital,ON,OFF,Block 596 Output 1 +0x3E00,15873,Signal Tags 1-4000,POJANG_BAD_COM,,Signal Tag,337,float 32,R,,0,Digital,ON,OFF,Block 596 Output 2 +0x3E02,15875,Signal Tags 1-4000,P_10800B,,Signal Tag,338,float 32,R,,0,Analog,,,Block 859 Output 2 +0x3E04,15877,Signal Tags 1-4000,P_10800B_CMD,,Signal Tag,339,float 32,R,,0,Digital,ON,OFF,Block 860 Output 1 +0x3E06,15879,Signal Tags 1-4000,LI_10200,,Signal Tag,340,float 32,R,,0,Analog,,,Block 615 Output 4 +0x3E08,15881,Signal Tags 1-4000,XV_10111,,Signal Tag,341,float 32,R,,0,Analog,,,Block 866 Output 2 +0x3E0A,15883,Signal Tags 1-4000,XV_10211,,Signal Tag,342,float 32,R,,0,Analog,,,Block 867 Output 2 +0x3E0C,15885,Signal Tags 1-4000,LIA_10211,,Signal Tag,343,float 32,R,,0,Analog,,,Block 616 Output 4 +0x3E0E,15887,Signal Tags 1-4000,LI_10201,,Signal Tag,344,float 32,R,,0,Analog,,,Block 618 Output 4 +0x3E10,15889,Signal Tags 1-4000,LI_10221,,Signal Tag,345,float 32,R,,0,Analog,,,Block 619 Output 4 +0x3E12,15891,Signal Tags 1-4000,LI_10800,,Signal Tag,346,float 32,R,,0,Analog,,,Block 620 Output 4 +0x3E14,15893,Signal Tags 1-4000,FQ_10213,,Signal Tag,347,float 32,R,,3,Analog,,,Block 909 Output 1 +0x3E16,15895,Signal Tags 1-4000,PT_10702,,Signal Tag,348,float 32,R,,0,Analog,,,Block 532 Output 4 +0x3E18,15897,Signal Tags 1-4000,P_10221,,Signal Tag,349,float 32,R,,0,Analog,,,Block 870 Output 2 +0x3E1A,15899,Signal Tags 1-4000,PT_9211A_FAIL,,Signal Tag,350,float 32,R,,0,Digital,ON,OFF,Block 131 Output 5 +0x3E1C,15901,Signal Tags 1-4000,FQ_10114B,,Signal Tag,351,float 32,R,,3,Analog,,,Block 890 Output 1 +0x3E1E,15903,Signal Tags 1-4000,PT_9111A_FAIL,,Signal Tag,352,float 32,R,,0,Digital,ON,OFF,Block 124 Output 5 +0x3E20,15905,Signal Tags 1-4000,FQ_10215,,Signal Tag,353,float 32,R,,3,Analog,,,Block 896 Output 1 +0x3E22,15907,Signal Tags 1-4000,FQ_10101,,Signal Tag,354,float 32,R,,3,Analog,,,Block 871 Output 1 +0x3E24,15909,Signal Tags 1-4000,FQ_10115,,Signal Tag,355,float 32,R,,3,Analog,,,Block 873 Output 1 +0x3E26,15911,Signal Tags 1-4000,FQ_10113,,Signal Tag,356,float 32,R,,3,Analog,,,Block 875 Output 1 +0x3E28,15913,Signal Tags 1-4000,FI_10115,,Signal Tag,357,float 32,R,,0,Analog,,,Block 886 Output 1 +0x3E2A,15915,Signal Tags 1-4000,FQ_10114A,,Signal Tag,358,float 32,R,,3,Analog,,,Block 877 Output 1 +0x3E2C,15917,Signal Tags 1-4000,FQ_10116,,Signal Tag,359,float 32,R,,3,Analog,,,Block 879 Output 1 +0x3E2E,15919,Signal Tags 1-4000,FQ_10118,,Signal Tag,360,float 32,R,,3,Analog,,,Block 881 Output 1 +0x3E30,15921,Signal Tags 1-4000,FQ_10201,,Signal Tag,361,float 32,R,,3,Analog,,,Block 883 Output 1 +0x3E32,15923,Signal Tags 1-4000,FQ_10206,,Signal Tag,362,float 32,R,,3,Analog,,,Block 902 Output 1 +0x3E34,15925,Signal Tags 1-4000,FQ_10218,,Signal Tag,363,float 32,R,,3,Analog,,,Block 900 Output 1 +0x3E36,15927,Signal Tags 1-4000,XV_10128,,Signal Tag,364,float 32,R,,0,Analog,,,Block 915 Output 2 +0x3E38,15929,Signal Tags 1-4000,FQ_10214,,Signal Tag,365,float 32,R,,3,Analog,,,Block 906 Output 1 +0x7840,30785,Loops 25-32,FICQ-10201.PV,PV,PID,,float 32,R,,,,,, +0x7842,30787,Loops 25-32,FICQ-10201.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x7844,30789,Loops 25-32,FICQ-10201.WSP,WSP,PID,,float 32,R/W,,,,,, +0x7846,30791,Loops 25-32,FICQ-10201.Output,Output,PID,,float 32,R/W,,,,,, +0x7848,30793,Loops 25-32,FICQ-10201.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x784C,30797,Loops 25-32,FICQ-10201.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x784E,30799,Loops 25-32,FICQ-10201.Direction,Direction,PID,,float 32,R,,,,,, +0x7850,30801,Loops 25-32,FICQ-10201.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x7852,30803,Loops 25-32,FICQ-10201.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x7854,30805,Loops 25-32,FICQ-10201.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x7856,30807,Loops 25-32,FICQ-10201.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x7858,30809,Loops 25-32,FICQ-10201.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x785A,30811,Loops 25-32,FICQ-10201.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x785C,30813,Loops 25-32,FICQ-10201.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x7860,30817,Loops 25-32,FICQ-10201.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x7864,30821,Loops 25-32,FICQ-10201.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x7866,30823,Loops 25-32,FICQ-10201.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x7868,30825,Loops 25-32,FICQ-10201.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x786A,30827,Loops 25-32,FICQ-10201.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x786C,30829,Loops 25-32,FICQ-10201.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x786E,30831,Loops 25-32,FICQ-10201.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x7870,30833,Loops 25-32,FICQ-10201.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x7874,30837,Loops 25-32,FICQ-10201.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x7876,30839,Loops 25-32,FICQ-10201.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x7878,30841,Loops 25-32,FICQ-10201.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x787A,30843,Loops 25-32,FICQ-10201.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x787C,30845,Loops 25-32,FICQ-10201.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x787E,30847,Loops 25-32,FICQ-10201.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x7886,30855,Loops 25-32,FICQ-10201.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x7888,30857,Loops 25-32,FICQ-10201.Bias,Bias,PID,,float 32,R/W,,,,,, +0x788A,30859,Loops 25-32,FICQ-10201.Deviation,Deviation,PID,,float 32,R,,,,,, +0x788E,30863,Loops 25-32,FICQ-10201.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x7890,30865,Loops 25-32,FICQ-10201.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x78A0,30881,Loops 25-32,TAGGED_ITEM_DELETED___,* TAGGED ITEM DELETED * ,,,float 32,,,,,,, +0x78A2,30883,Loops 25-32,TAGGED_ITEM_DELETED___,* TAGGED ITEM DELETED * ,,,float 32,,,,,,, +0x78A4,30885,Loops 25-32,TAGGED_ITEM_DELETED___,* TAGGED ITEM DELETED * ,,,float 32,,,,,,, +0x78A6,30887,Loops 25-32,TAGGED_ITEM_DELETED___,* TAGGED ITEM DELETED * ,,,float 32,,,,,,, +0x78A8,30889,Loops 25-32,TAGGED_ITEM_DELETED___,* TAGGED ITEM DELETED * ,,,float 32,,,,,,, +0x78AA,30891,Loops 25-32,TAGGED_ITEM_DELETED___,* TAGGED ITEM DELETED * ,,,float 32,,,,,,, +0x78AC,30893,Loops 25-32,TAGGED_ITEM_DELETED___,* TAGGED ITEM DELETED * ,,,float 32,,,,,,, +0x78AE,30895,Loops 25-32,TAGGED_ITEM_DELETED___,* TAGGED ITEM DELETED * ,,,float 32,,,,,,, +0x78B0,30897,Loops 25-32,TAGGED_ITEM_DELETED___,* TAGGED ITEM DELETED * ,,,unsigned 16,,,,,,, +0x78F7,30968,Loops 25-32,FICQ-10201.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x78F8,30969,Loops 25-32,FICQ-10201.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x78FA,30971,Loops 25-32,FICQ-10201.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x78FB,30972,Loops 25-32,FICQ-10201.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x78FC,30973,Loops 25-32,FICQ-10201.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x78FD,30974,Loops 25-32,FICQ-10201.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x78FE,30975,Loops 25-32,FICQ-10201.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x7940,31041,Loops 25-32,FICQ-10213.PV,PV,PID,,float 32,R,,,,,, +0x7942,31043,Loops 25-32,FICQ-10213.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x7944,31045,Loops 25-32,FICQ-10213.WSP,WSP,PID,,float 32,R/W,,,,,, +0x7946,31047,Loops 25-32,FICQ-10213.Output,Output,PID,,float 32,R/W,,,,,, +0x7948,31049,Loops 25-32,FICQ-10213.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x794C,31053,Loops 25-32,FICQ-10213.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x794E,31055,Loops 25-32,FICQ-10213.Direction,Direction,PID,,float 32,R,,,,,, +0x7950,31057,Loops 25-32,FICQ-10213.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x7952,31059,Loops 25-32,FICQ-10213.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x7954,31061,Loops 25-32,FICQ-10213.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x7956,31063,Loops 25-32,FICQ-10213.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x7958,31065,Loops 25-32,FICQ-10213.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x795A,31067,Loops 25-32,FICQ-10213.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x795C,31069,Loops 25-32,FICQ-10213.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x7960,31073,Loops 25-32,FICQ-10213.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x7964,31077,Loops 25-32,FICQ-10213.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x7966,31079,Loops 25-32,FICQ-10213.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x7968,31081,Loops 25-32,FICQ-10213.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x796A,31083,Loops 25-32,FICQ-10213.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x796C,31085,Loops 25-32,FICQ-10213.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x796E,31087,Loops 25-32,FICQ-10213.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x7970,31089,Loops 25-32,FICQ-10213.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x7974,31093,Loops 25-32,FICQ-10213.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x7976,31095,Loops 25-32,FICQ-10213.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x7978,31097,Loops 25-32,FICQ-10213.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x797A,31099,Loops 25-32,FICQ-10213.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x797C,31101,Loops 25-32,FICQ-10213.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x797E,31103,Loops 25-32,FICQ-10213.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x7986,31111,Loops 25-32,FICQ-10213.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x7988,31113,Loops 25-32,FICQ-10213.Bias,Bias,PID,,float 32,R/W,,,,,, +0x798A,31115,Loops 25-32,FICQ-10213.Deviation,Deviation,PID,,float 32,R,,,,,, +0x798E,31119,Loops 25-32,FICQ-10213.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x7990,31121,Loops 25-32,FICQ-10213.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x79F7,31224,Loops 25-32,FICQ-10213.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x79F8,31225,Loops 25-32,FICQ-10213.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x79FA,31227,Loops 25-32,FICQ-10213.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x79FB,31228,Loops 25-32,FICQ-10213.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x79FC,31229,Loops 25-32,FICQ-10213.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x79FD,31230,Loops 25-32,FICQ-10213.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x79FE,31231,Loops 25-32,FICQ-10213.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x7A40,31297,Loops 25-32,FICQ-10214.PV,PV,PID,,float 32,R,,,,,, +0x7A42,31299,Loops 25-32,FICQ-10214.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x7A44,31301,Loops 25-32,FICQ-10214.WSP,WSP,PID,,float 32,R/W,,,,,, +0x7A46,31303,Loops 25-32,FICQ-10214.Output,Output,PID,,float 32,R/W,,,,,, +0x7A48,31305,Loops 25-32,FICQ-10214.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x7A4C,31309,Loops 25-32,FICQ-10214.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x7A4E,31311,Loops 25-32,FICQ-10214.Direction,Direction,PID,,float 32,R,,,,,, +0x7A50,31313,Loops 25-32,FICQ-10214.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x7A52,31315,Loops 25-32,FICQ-10214.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x7A54,31317,Loops 25-32,FICQ-10214.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x7A56,31319,Loops 25-32,FICQ-10214.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x7A58,31321,Loops 25-32,FICQ-10214.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x7A5A,31323,Loops 25-32,FICQ-10214.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x7A5C,31325,Loops 25-32,FICQ-10214.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x7A60,31329,Loops 25-32,FICQ-10214.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x7A64,31333,Loops 25-32,FICQ-10214.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x7A66,31335,Loops 25-32,FICQ-10214.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x7A68,31337,Loops 25-32,FICQ-10214.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x7A6A,31339,Loops 25-32,FICQ-10214.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x7A6C,31341,Loops 25-32,FICQ-10214.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x7A6E,31343,Loops 25-32,FICQ-10214.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x7A70,31345,Loops 25-32,FICQ-10214.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x7A74,31349,Loops 25-32,FICQ-10214.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x7A76,31351,Loops 25-32,FICQ-10214.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x7A78,31353,Loops 25-32,FICQ-10214.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x7A7A,31355,Loops 25-32,FICQ-10214.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x7A7C,31357,Loops 25-32,FICQ-10214.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x7A7E,31359,Loops 25-32,FICQ-10214.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x7A86,31367,Loops 25-32,FICQ-10214.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x7A88,31369,Loops 25-32,FICQ-10214.Bias,Bias,PID,,float 32,R/W,,,,,, +0x7A8A,31371,Loops 25-32,FICQ-10214.Deviation,Deviation,PID,,float 32,R,,,,,, +0x7A8E,31375,Loops 25-32,FICQ-10214.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x7A90,31377,Loops 25-32,FICQ-10214.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x7AF7,31480,Loops 25-32,FICQ-10214.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x7AF8,31481,Loops 25-32,FICQ-10214.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x7AFA,31483,Loops 25-32,FICQ-10214.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x7AFB,31484,Loops 25-32,FICQ-10214.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x7AFC,31485,Loops 25-32,FICQ-10214.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x7AFD,31486,Loops 25-32,FICQ-10214.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x7AFE,31487,Loops 25-32,FICQ-10214.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x7B40,31553,Loops 25-32,FICQ-10218.PV,PV,PID,,float 32,R,,,,,, +0x7B42,31555,Loops 25-32,FICQ-10218.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x7B44,31557,Loops 25-32,FICQ-10218.WSP,WSP,PID,,float 32,R/W,,,,,, +0x7B46,31559,Loops 25-32,FICQ-10218.Output,Output,PID,,float 32,R/W,,,,,, +0x7B48,31561,Loops 25-32,FICQ-10218.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x7B4C,31565,Loops 25-32,FICQ-10218.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x7B4E,31567,Loops 25-32,FICQ-10218.Direction,Direction,PID,,float 32,R,,,,,, +0x7B50,31569,Loops 25-32,FICQ-10218.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x7B52,31571,Loops 25-32,FICQ-10218.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x7B54,31573,Loops 25-32,FICQ-10218.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x7B56,31575,Loops 25-32,FICQ-10218.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x7B58,31577,Loops 25-32,FICQ-10218.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x7B5A,31579,Loops 25-32,FICQ-10218.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x7B5C,31581,Loops 25-32,FICQ-10218.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x7B60,31585,Loops 25-32,FICQ-10218.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x7B64,31589,Loops 25-32,FICQ-10218.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x7B66,31591,Loops 25-32,FICQ-10218.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x7B68,31593,Loops 25-32,FICQ-10218.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x7B6A,31595,Loops 25-32,FICQ-10218.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x7B6C,31597,Loops 25-32,FICQ-10218.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x7B6E,31599,Loops 25-32,FICQ-10218.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x7B70,31601,Loops 25-32,FICQ-10218.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x7B74,31605,Loops 25-32,FICQ-10218.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x7B76,31607,Loops 25-32,FICQ-10218.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x7B78,31609,Loops 25-32,FICQ-10218.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x7B7A,31611,Loops 25-32,FICQ-10218.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x7B7C,31613,Loops 25-32,FICQ-10218.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x7B7E,31615,Loops 25-32,FICQ-10218.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x7B86,31623,Loops 25-32,FICQ-10218.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x7B88,31625,Loops 25-32,FICQ-10218.Bias,Bias,PID,,float 32,R/W,,,,,, +0x7B8A,31627,Loops 25-32,FICQ-10218.Deviation,Deviation,PID,,float 32,R,,,,,, +0x7B8E,31631,Loops 25-32,FICQ-10218.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x7B90,31633,Loops 25-32,FICQ-10218.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x7BF7,31736,Loops 25-32,FICQ-10218.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x7BF8,31737,Loops 25-32,FICQ-10218.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x7BFA,31739,Loops 25-32,FICQ-10218.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x7BFB,31740,Loops 25-32,FICQ-10218.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x7BFC,31741,Loops 25-32,FICQ-10218.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x7BFD,31742,Loops 25-32,FICQ-10218.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x7BFE,31743,Loops 25-32,FICQ-10218.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x7C40,31809,Loops 25-32,LIC-10213.PV,PV,PID,,float 32,R,,,,,, +0x7C42,31811,Loops 25-32,LIC-10213.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x7C44,31813,Loops 25-32,LIC-10213.WSP,WSP,PID,,float 32,R/W,,,,,, +0x7C46,31815,Loops 25-32,LIC-10213.Output,Output,PID,,float 32,R/W,,,,,, +0x7C48,31817,Loops 25-32,LIC-10213.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x7C4C,31821,Loops 25-32,LIC-10213.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x7C4E,31823,Loops 25-32,LIC-10213.Direction,Direction,PID,,float 32,R,,,,,, +0x7C50,31825,Loops 25-32,LIC-10213.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x7C52,31827,Loops 25-32,LIC-10213.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x7C54,31829,Loops 25-32,LIC-10213.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x7C56,31831,Loops 25-32,LIC-10213.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x7C58,31833,Loops 25-32,LIC-10213.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x7C5A,31835,Loops 25-32,LIC-10213.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x7C5C,31837,Loops 25-32,LIC-10213.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x7C60,31841,Loops 25-32,LIC-10213.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x7C64,31845,Loops 25-32,LIC-10213.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x7C66,31847,Loops 25-32,LIC-10213.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x7C68,31849,Loops 25-32,LIC-10213.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x7C6A,31851,Loops 25-32,LIC-10213.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x7C6C,31853,Loops 25-32,LIC-10213.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x7C6E,31855,Loops 25-32,LIC-10213.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x7C70,31857,Loops 25-32,LIC-10213.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x7C74,31861,Loops 25-32,LIC-10213.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x7C76,31863,Loops 25-32,LIC-10213.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x7C78,31865,Loops 25-32,LIC-10213.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x7C7A,31867,Loops 25-32,LIC-10213.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x7C7C,31869,Loops 25-32,LIC-10213.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x7C7E,31871,Loops 25-32,LIC-10213.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x7C86,31879,Loops 25-32,LIC-10213.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x7C88,31881,Loops 25-32,LIC-10213.Bias,Bias,PID,,float 32,R/W,,,,,, +0x7C8A,31883,Loops 25-32,LIC-10213.Deviation,Deviation,PID,,float 32,R,,,,,, +0x7C8E,31887,Loops 25-32,LIC-10213.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x7C90,31889,Loops 25-32,LIC-10213.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x7CF7,31992,Loops 25-32,LIC-10213.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x7CF8,31993,Loops 25-32,LIC-10213.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x7CFA,31995,Loops 25-32,LIC-10213.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x7CFB,31996,Loops 25-32,LIC-10213.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x7CFC,31997,Loops 25-32,LIC-10213.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x7CFD,31998,Loops 25-32,LIC-10213.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x7CFE,31999,Loops 25-32,LIC-10213.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x7D40,32065,Loops 25-32,FIC-10216.PV,PV,PID,,float 32,R,,,,,, +0x7D42,32067,Loops 25-32,FIC-10216.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x7D44,32069,Loops 25-32,FIC-10216.WSP,WSP,PID,,float 32,R/W,,,,,, +0x7D46,32071,Loops 25-32,FIC-10216.Output,Output,PID,,float 32,R/W,,,,,, +0x7D48,32073,Loops 25-32,FIC-10216.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x7D4C,32077,Loops 25-32,FIC-10216.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x7D4E,32079,Loops 25-32,FIC-10216.Direction,Direction,PID,,float 32,R,,,,,, +0x7D50,32081,Loops 25-32,FIC-10216.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x7D52,32083,Loops 25-32,FIC-10216.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x7D54,32085,Loops 25-32,FIC-10216.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x7D56,32087,Loops 25-32,FIC-10216.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x7D58,32089,Loops 25-32,FIC-10216.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x7D5A,32091,Loops 25-32,FIC-10216.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x7D5C,32093,Loops 25-32,FIC-10216.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x7D60,32097,Loops 25-32,FIC-10216.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x7D64,32101,Loops 25-32,FIC-10216.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x7D66,32103,Loops 25-32,FIC-10216.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x7D68,32105,Loops 25-32,FIC-10216.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x7D6A,32107,Loops 25-32,FIC-10216.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x7D6C,32109,Loops 25-32,FIC-10216.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x7D6E,32111,Loops 25-32,FIC-10216.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x7D70,32113,Loops 25-32,FIC-10216.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x7D74,32117,Loops 25-32,FIC-10216.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x7D76,32119,Loops 25-32,FIC-10216.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x7D78,32121,Loops 25-32,FIC-10216.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x7D7A,32123,Loops 25-32,FIC-10216.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x7D7C,32125,Loops 25-32,FIC-10216.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x7D7E,32127,Loops 25-32,FIC-10216.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x7D86,32135,Loops 25-32,FIC-10216.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x7D88,32137,Loops 25-32,FIC-10216.Bias,Bias,PID,,float 32,R/W,,,,,, +0x7D8A,32139,Loops 25-32,FIC-10216.Deviation,Deviation,PID,,float 32,R,,,,,, +0x7D8E,32143,Loops 25-32,FIC-10216.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x7D90,32145,Loops 25-32,FIC-10216.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x7DF7,32248,Loops 25-32,FIC-10216.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x7DF8,32249,Loops 25-32,FIC-10216.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x7DFA,32251,Loops 25-32,FIC-10216.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x7DFB,32252,Loops 25-32,FIC-10216.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x7DFC,32253,Loops 25-32,FIC-10216.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x7DFD,32254,Loops 25-32,FIC-10216.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x7DFE,32255,Loops 25-32,FIC-10216.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x7E40,32321,Loops 25-32,TIC-10211.PV,PV,PID,,float 32,R,,,,,, +0x7E42,32323,Loops 25-32,TIC-10211.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x7E44,32325,Loops 25-32,TIC-10211.WSP,WSP,PID,,float 32,R/W,,,,,, +0x7E46,32327,Loops 25-32,TIC-10211.Output,Output,PID,,float 32,R/W,,,,,, +0x7E48,32329,Loops 25-32,TIC-10211.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x7E4C,32333,Loops 25-32,TIC-10211.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x7E4E,32335,Loops 25-32,TIC-10211.Direction,Direction,PID,,float 32,R,,,,,, +0x7E50,32337,Loops 25-32,TIC-10211.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x7E52,32339,Loops 25-32,TIC-10211.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x7E54,32341,Loops 25-32,TIC-10211.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x7E56,32343,Loops 25-32,TIC-10211.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x7E58,32345,Loops 25-32,TIC-10211.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x7E5A,32347,Loops 25-32,TIC-10211.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x7E5C,32349,Loops 25-32,TIC-10211.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x7E60,32353,Loops 25-32,TIC-10211.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x7E64,32357,Loops 25-32,TIC-10211.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x7E66,32359,Loops 25-32,TIC-10211.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x7E68,32361,Loops 25-32,TIC-10211.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x7E6A,32363,Loops 25-32,TIC-10211.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x7E6C,32365,Loops 25-32,TIC-10211.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x7E6E,32367,Loops 25-32,TIC-10211.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x7E70,32369,Loops 25-32,TIC-10211.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x7E74,32373,Loops 25-32,TIC-10211.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x7E76,32375,Loops 25-32,TIC-10211.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x7E78,32377,Loops 25-32,TIC-10211.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x7E7A,32379,Loops 25-32,TIC-10211.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x7E7C,32381,Loops 25-32,TIC-10211.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x7E7E,32383,Loops 25-32,TIC-10211.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x7E86,32391,Loops 25-32,TIC-10211.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x7E88,32393,Loops 25-32,TIC-10211.Bias,Bias,PID,,float 32,R/W,,,,,, +0x7E8A,32395,Loops 25-32,TIC-10211.Deviation,Deviation,PID,,float 32,R,,,,,, +0x7E8E,32399,Loops 25-32,TIC-10211.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x7E90,32401,Loops 25-32,TIC-10211.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x7EF7,32504,Loops 25-32,TIC-10211.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x7EF8,32505,Loops 25-32,TIC-10211.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x7EFA,32507,Loops 25-32,TIC-10211.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x7EFB,32508,Loops 25-32,TIC-10211.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x7EFC,32509,Loops 25-32,TIC-10211.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x7EFD,32510,Loops 25-32,TIC-10211.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x7EFE,32511,Loops 25-32,TIC-10211.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, +0x7F40,32577,Loops 25-32,PIC-10211A.PV,PV,PID,,float 32,R,,,,,, +0x7F42,32579,Loops 25-32,PIC-10211A.RSP_SP2,RSP SP2,PID,,float 32,R/W,,,,,, +0x7F44,32581,Loops 25-32,PIC-10211A.WSP,WSP,PID,,float 32,R/W,,,,,, +0x7F46,32583,Loops 25-32,PIC-10211A.Output,Output,PID,,float 32,R/W,,,,,, +0x7F48,32585,Loops 25-32,PIC-10211A.PV__B_,PV (B),PID,,float 32,R,,,,,, +0x7F4C,32589,Loops 25-32,PIC-10211A.Gain_1_Prop_Band_1,Gain 1_Prop Band 1,PID,,float 32,R/W,,,,,, +0x7F4E,32591,Loops 25-32,PIC-10211A.Direction,Direction,PID,,float 32,R,,,,,, +0x7F50,32593,Loops 25-32,PIC-10211A.Reset_1,Reset 1,PID,,float 32,R/W,,,,,, +0x7F52,32595,Loops 25-32,PIC-10211A.Rate_1,Rate 1,PID,,float 32,R/W,,,,,, +0x7F54,32597,Loops 25-32,PIC-10211A.Scan_Cycle_Time,Scan Cycle Time,PID,,float 32,R,,,,,, +0x7F56,32599,Loops 25-32,PIC-10211A.PV_low_range,PV low range,PID,,float 32,R,,,,,, +0x7F58,32601,Loops 25-32,PIC-10211A.PV_high_range,PV high range,PID,,float 32,R,,,,,, +0x7F5A,32603,Loops 25-32,PIC-10211A.Alarm_1_SP1,Alarm 1 SP1,PID,,float 32,R/W,,,,,, +0x7F5C,32605,Loops 25-32,PIC-10211A.Alarm_1_SP2,Alarm 1 SP2,PID,,float 32,R/W,,,,,, +0x7F60,32609,Loops 25-32,PIC-10211A.Gain2_Prop_Band_2,Gain2_Prop Band 2,PID,,float 32,R/W,,,,,, +0x7F64,32613,Loops 25-32,PIC-10211A.Reset_2,Reset 2,PID,,float 32,R/W,,,,,, +0x7F66,32615,Loops 25-32,PIC-10211A.Rate_2,Rate 2,PID,,float 32,R/W,,,,,, +0x7F68,32617,Loops 25-32,PIC-10211A.Scan_Cycle_Time__B_,Scan Cycle Time (B),PID,,float 32,R,,,,,, +0x7F6A,32619,Loops 25-32,PIC-10211A.LSP1,LSP1,PID,,float 32,R/W,,,,,, +0x7F6C,32621,Loops 25-32,PIC-10211A.LSP2,LSP2,PID,,float 32,R/W,,,,,, +0x7F6E,32623,Loops 25-32,PIC-10211A.Alarm_2_SP1,Alarm 2 SP1,PID,,float 32,R/W,,,,,, +0x7F70,32625,Loops 25-32,PIC-10211A.Alarm_2_SP2,Alarm 2 SP2,PID,,float 32,R/W,,,,,, +0x7F74,32629,Loops 25-32,PIC-10211A.SP_low_limit,SP low limit,PID,,float 32,R/W,,,,,, +0x7F76,32631,Loops 25-32,PIC-10211A.SP_high_limit,SP high limit,PID,,float 32,R/W,,,,,, +0x7F78,32633,Loops 25-32,PIC-10211A.WSP__B_,WSP (B),PID,,float 32,R/W,,,,,, +0x7F7A,32635,Loops 25-32,PIC-10211A.Output_Low_Limit,Output Low Limit,PID,,float 32,R/W,,,,,, +0x7F7C,32637,Loops 25-32,PIC-10211A.Output_High_Limit,Output High Limit,PID,,float 32,R/W,,,,,, +0x7F7E,32639,Loops 25-32,PIC-10211A.Output__B_,Output (B),PID,,float 32,R/W,,,,,, +0x7F86,32647,Loops 25-32,PIC-10211A.Ratio,Ratio,PID,,float 32,R/W,,,,,, +0x7F88,32649,Loops 25-32,PIC-10211A.Bias,Bias,PID,,float 32,R/W,,,,,, +0x7F8A,32651,Loops 25-32,PIC-10211A.Deviation,Deviation,PID,,float 32,R,,,,,, +0x7F8E,32655,Loops 25-32,PIC-10211A.Manual_Reset,Manual Reset,PID,,float 32,R/W,,,,,, +0x7F90,32657,Loops 25-32,PIC-10211A.Feed_forward_Gain,Feed forward Gain,PID,,float 32,R/W,,,,,, +0x7FF7,32760,Loops 25-32,PIC-10211A.Enable_Disable_Fuzzy,Enable Disable Fuzzy,PID,,unsigned 16,R/W,,,,,, +0x7FF8,32761,Loops 25-32,PIC-10211A.Demand_Tune_Req,Demand Tune Req,PID,,unsigned 16,R/W,,,,,, +0x7FFA,32763,Loops 25-32,PIC-10211A.Auto_Man_State,Auto Man State,PID,,unsigned 16,R/W,,,,,, +0x7FFB,32764,Loops 25-32,PIC-10211A.LSP_Select_State,LSP Select State,PID,,unsigned 16,R/W,,,,,, +0x7FFC,32765,Loops 25-32,PIC-10211A.Rem_Loc_SP_State,Rem Loc SP State,PID,,unsigned 16,R/W,,,,,, +0x7FFD,32766,Loops 25-32,PIC-10211A.Tune_Set_State,Tune Set State,PID,,unsigned 16,R/W,,,,,, +0x7FFE,32767,Loops 25-32,PIC-10211A.Loop_Status_Register,Loop Status Register,PID,,unsigned 16,R,,,,,, diff --git a/docs/SignalTags.csv b/docs/SignalTags.csv new file mode 100644 index 0000000..63d2591 --- /dev/null +++ b/docs/SignalTags.csv @@ -0,0 +1,541 @@ +RevisionID:,0117.0032.0005.0002.0011 +File Name:,HC900-C70 Rev 4.4x : Config1 +Controller Name,CONTROLLER +Title:, +Author:, +Created Date:,2014-02-25 오전 10:01:30 +Modified Date:,2026-06-01 오후 4:41:08 + +Report Title:,Modbus Signal Tags Report + +Hex Addr,Dec Addr,Tag Name,Description,Type,#,Data Type,EU,Decimal Places,Tag Type,'On' Label,'Off' Label,Initial/Source +0x2000,8193,LT3101,,Signal Tag,1,float 32,%,1,Analog, , ,Block 134 Output 4 +0x2002,8195,FT8116,,Signal Tag,2,float 32,%,1,Analog, , ,Block 135 Output 4 +0x2004,8197,FT8115,,Signal Tag,3,float 32,%,1,Analog, , ,Block 155 Output 4 +0x2006,8199,FIQ6101,,Signal Tag,4,float 32,,2,Analog, , ,Block 825 Output 1 +0x2008,8201,LT3206,,Signal Tag,5,float 32,%,1,Analog, , ,Block 138 Output 4 +0x200A,8203,LT3207,,Signal Tag,6,float 32,%,1,Analog, , ,Block 139 Output 4 +0x200C,8205,LT3210,,Signal Tag,7,float 32,%,1,Analog, , ,Block 140 Output 4 +0x200E,8207,XV3208B_REM,,Signal Tag,8,float 32, , ,Digital,ON,OFF,Block 222 Output 16 +0x2010,8209,LT3203,,Signal Tag,9,float 32,%,1,Analog, , ,Block 136 Output 4 +0x2012,8211,LT3208,,Signal Tag,10,float 32,%,1,Analog, , ,Block 143 Output 4 +0x2014,8213,TE3701,,Signal Tag,11,float 32,,0,Analog, , ,Block 164 Output 4 +0x2016,8215,TE3702,,Signal Tag,12,float 32,,0,Analog, , ,Block 165 Output 4 +0x2018,8217,TE3208,,Signal Tag,13,float 32,,0,Analog, , ,Block 156 Output 4 +0x201A,8219,LT3705,,Signal Tag,14,float 32,,0,Analog, , ,Block 157 Output 4 +0x201C,8221,PT3203,,Signal Tag,15,float 32,mmH2O,1,Analog, , ,Block 148 Output 4 +0x201E,8223,LT5113B,,Signal Tag,16,float 32,%,1,Analog, , ,Block 149 Output 4 +0x2020,8225,PT8111A,,Signal Tag,17,float 32,%,1,Analog, , ,Block 150 Output 4 +0x2022,8227,PT8111B,,Signal Tag,18,float 32,,0,Analog, , ,Block 151 Output 4 +0x2024,8229,LT3211,,Signal Tag,19,float 32,,0,Analog, , ,Block 141 Output 4 +0x2026,8231,LT3202,,Signal Tag,20,float 32,,0,Analog, , ,Block 206 Output 4 +0x2028,8233,AG3202A_IFB,,Signal Tag,21,float 32,rpm,1,Analog, , ,Block 158 Output 4 +0x202A,8235,LT6124,,Signal Tag,22,float 32,,0,Analog, , ,Block 145 Output 4 +0x202C,8237,P3205A_IFB,,Signal Tag,23,float 32,rmp,1,Analog, , ,Block 160 Output 4 +0x202E,8239,LT6224,,Signal Tag,24,float 32,,0,Analog, , ,Block 146 Output 4 +0x2030,8241,P3206A_IFB,,Signal Tag,25,float 32,rpm,1,Analog, , ,Block 162 Output 4 +0x2032,8243,P3206B_IFB,,Signal Tag,26,float 32,rpm,1,Analog, , ,Block 163 Output 4 +0x2034,8245,FT3101,,Signal Tag,27,float 32,,0,Analog, , ,Block 144 Output 4 +0x2036,8247,LT8113,,Signal Tag,28,float 32,,0,Analog, , ,Block 152 Output 4 +0x2038,8249,FIQ3208B,,Signal Tag,29,float 32,,0,Analog, , ,Block 154 Output 4 +0x203A,8251,FT3203,,Signal Tag,30,float 32,,0,Analog, , ,Block 153 Output 4 +0x203C,8253,TICA3202A-TRIP,,Signal Tag,31,float 32, , ,Digital,ON,OFF,Block 1121 Output 1 +0x203E,8255,TE3202A,,Signal Tag,32,float 32,degC,1,Analog, , ,Block 180 Output 4 +0x2040,8257,TE3202B,,Signal Tag,33,float 32,degC,1,Analog, , ,Block 181 Output 4 +0x2042,8259,TE3202C,,Signal Tag,34,float 32,degC,1,Analog, , ,Block 182 Output 4 +0x2044,8261,XV3208B_OP,,Signal Tag,35,float 32, , ,Digital,ON,OFF,Block 223 Output 9 +0x2046,8263,XV3208B_CL,,Signal Tag,36,float 32, , ,Digital,ON,OFF,Block 223 Output 10 +0x2048,8265,P6120_RUN,,Signal Tag,37,float 32, , ,Digital,ON,OFF,Block 778 Output 10 +0x204A,8267,HTR_SW_TEMP,,Signal Tag,38,float 32,deg,1,Analog, , ,Block 186 Output 4 +0x204C,8269,TE3208B,,Signal Tag,39,float 32,,0,Analog, , ,Block 187 Output 4 +0x204E,8271,LT2205,,Signal Tag,40,float 32,%,1,Analog, , ,Block 204 Output 4 +0x2050,8273,P6220_RUN,,Signal Tag,41,float 32, , ,Digital,ON,OFF,Block 778 Output 11 +0x2052,8275,PT6950B,,Signal Tag,42,float 32,,0,Analog, , ,Block 137 Output 4 +0x2054,8277,TE2205,,Signal Tag,43,float 32,,0,Analog, , ,Block 211 Output 4 +0x2056,8279,VP8117_REM,,Signal Tag,44,float 32, , ,Digital,DCS,PNL,Block 776 Output 9 +0x2058,8281,VP8117_RUN,,Signal Tag,45,float 32, , ,Digital,RUN,STOP,Block 776 Output 10 +0x205A,8283,VP8117_FLT,,Signal Tag,46,float 32, , ,Digital,FAIL,NORMAL,Block 776 Output 11 +0x205C,8285,P3101B_REM,,Signal Tag,47,float 32, , ,Digital,DCS,PNL,Block 212 Output 12 +0x205E,8287,P3101B_RUN,,Signal Tag,48,float 32, , ,Digital,RUN,STOP,Block 212 Output 13 +0x2060,8289,P3101B_FLT,,Signal Tag,49,float 32, , ,Digital,FAIL,NORMAL,Block 212 Output 14 +0x2062,8291,P3102_REM,,Signal Tag,50,float 32, , ,Digital,DCS,PNL,Block 212 Output 15 +0x2064,8293,P3102_RUN,,Signal Tag,51,float 32, , ,Digital,RUN,STOP,Block 212 Output 16 +0x2066,8295,P3102_FLT,,Signal Tag,52,float 32, , ,Digital,FAIL,NORMAL,Block 213 Output 9 +0x2068,8297,P3102B_REM,,Signal Tag,53,float 32, , ,Digital,DCS,PNL,Block 213 Output 10 +0x206A,8299,P3102B_RUN,,Signal Tag,54,float 32, , ,Digital,RUN,STOP,Block 213 Output 11 +0x206C,8301,P3102B_FLT,,Signal Tag,55,float 32, , ,Digital,FAIL,NORMAL,Block 213 Output 12 +0x206E,8303,P6601A_RUN,,Signal Tag,56,float 32, , ,Digital,DCS,PNL,Block 213 Output 13 +0x2070,8305,P6601B_RUN,,Signal Tag,57,float 32, , ,Digital,RUN,STOP,Block 213 Output 14 +0x2072,8307,CH6601A_RUN,,Signal Tag,58,float 32, , ,Digital,FAIL,NORMAL,Block 213 Output 15 +0x2074,8309,CH6601B_RUN,,Signal Tag,59,float 32, , ,Digital,DCS,PNL,Block 213 Output 16 +0x2076,8311,P3206B_RUN,,Signal Tag,60,float 32, , ,Digital,RUN,STOP,Block 214 Output 9 +0x2078,8313,P3206B_FLT,,Signal Tag,61,float 32, , ,Digital,FAIL,NORMAL,Block 214 Output 10 +0x207A,8315,P3207A_REM,,Signal Tag,62,float 32, , ,Digital,DCS,PNL,Block 214 Output 11 +0x207C,8317,P3207A_RUN,,Signal Tag,63,float 32, , ,Digital,RUN,STOP,Block 214 Output 12 +0x207E,8319,P3207A_FLT,,Signal Tag,64,float 32, , ,Digital,FAIL,NORMAL,Block 214 Output 13 +0x2080,8321,P3207B_REM,,Signal Tag,65,float 32, , ,Digital,DCS,PNL,Block 214 Output 14 +0x2082,8323,P3207B_RUN,,Signal Tag,66,float 32, , ,Digital,RUN,STOP,Block 214 Output 15 +0x2084,8325,P3207B_FLT,,Signal Tag,67,float 32, , ,Digital,FAIL,NORMAL,Block 214 Output 16 +0x2086,8327,P5102_RUN,,Signal Tag,68,float 32, , ,Digital,ON,OFF,Block 773 Output 10 +0x2088,8329,XV6120_OP,,Signal Tag,69,float 32, , ,Digital,ON,OFF,Block 778 Output 14 +0x208A,8331,XV6120_CL,,Signal Tag,70,float 32, , ,Digital,ON,OFF,Block 778 Output 15 +0x208C,8333,XV6220_OP,,Signal Tag,71,float 32, , ,Digital,ON,OFF,Block 778 Output 16 +0x208E,8335,XV6220_CL,,Signal Tag,72,float 32, , ,Digital,ON,OFF,Block 779 Output 9 +0x2090,8337,XV5320_OP,,Signal Tag,73,float 32, , ,Digital,ON,OFF,Block 779 Output 10 +0x2092,8339,P3205_REM,,Signal Tag,74,float 32, , ,Digital,DCS,PNL,Block 215 Output 15 +0x2094,8341,P3205_RUN,,Signal Tag,75,float 32, , ,Digital,RUN,STOP,Block 215 Output 16 +0x2096,8343,P3205_FLT,,Signal Tag,76,float 32, , ,Digital,FAIL,NORMAL,Block 216 Output 9 +0x2098,8345,P3205B_REM,,Signal Tag,77,float 32, , ,Digital,DCS,PNL,Block 216 Output 10 +0x209A,8347,P3205B_RUN,,Signal Tag,78,float 32, , ,Digital,RUN,STOP,Block 216 Output 11 +0x209C,8349,P3205B_FLT,,Signal Tag,79,float 32, , ,Digital,FAIL,NORMAL,Block 216 Output 12 +0x209E,8351,P3208A_REM,,Signal Tag,80,float 32, , ,Digital,DCS,PNL,Block 216 Output 13 +0x20A0,8353,P3208A_RUN,,Signal Tag,81,float 32, , ,Digital,RUN,STOP,Block 216 Output 14 +0x20A2,8355,P3208A_FLT,,Signal Tag,82,float 32, , ,Digital,FAIL,NORMAL,Block 216 Output 15 +0x20A4,8357,P3208B_REM,,Signal Tag,83,float 32, , ,Digital,DCS,PNL,Block 216 Output 16 +0x20A6,8359,P3208B_RUN,,Signal Tag,84,float 32, , ,Digital,RUN,STOP,Block 217 Output 9 +0x20A8,8361,P3208B_FLT,,Signal Tag,85,float 32, , ,Digital,FAIL,NORMAL,Block 217 Output 10 +0x20AA,8363,P3209A_REM,,Signal Tag,86,float 32, , ,Digital,DCS,PNL,Block 217 Output 11 +0x20AC,8365,P3209A_RUN,,Signal Tag,87,float 32, , ,Digital,RUN,STOP,Block 217 Output 12 +0x20AE,8367,P3209A_FLT,,Signal Tag,88,float 32, , ,Digital,FAIL,NORMAL,Block 217 Output 13 +0x20B0,8369,P3209B_REM,,Signal Tag,89,float 32, , ,Digital,DCS,PNL,Block 217 Output 14 +0x20B2,8371,P3209B_RUN,,Signal Tag,90,float 32, , ,Digital,RUN,STOP,Block 217 Output 15 +0x20B4,8373,P3209B_FLT,,Signal Tag,91,float 32, , ,Digital,FAIL,NORMAL,Block 217 Output 16 +0x20B6,8375,AG3202_REM,,Signal Tag,92,float 32, , ,Digital,DCS,PNL,Block 218 Output 9 +0x20B8,8377,AG3202_RUN,,Signal Tag,93,float 32, , ,Digital,RUN,STOP,Block 218 Output 10 +0x20BA,8379,AG3202_FLT,,Signal Tag,94,float 32, , ,Digital,FAIL,NORMAL,Block 218 Output 11 +0x20BC,8381,XV5320_CL,,Signal Tag,95,float 32, , ,Digital,ON,OFF,Block 779 Output 11 +0x20BE,8383,FIQ6113,,Signal Tag,96,float 32,,2,Analog, , ,Block 882 Output 1 +0x20C0,8385,FIQ6114,,Signal Tag,97,float 32,,2,Analog, , ,Block 885 Output 1 +0x20C2,8387,FIQ6118,,Signal Tag,98,float 32,,2,Analog, , ,Block 888 Output 1 +0x20C4,8389,FIQ6116,,Signal Tag,99,float 32,,2,Analog, , ,Block 891 Output 1 +0x20C6,8391,FIQ6115,,Signal Tag,100,float 32,,2,Analog, , ,Block 894 Output 1 +0x20C8,8393,VP3204_REM,,Signal Tag,101,float 32, , ,Digital,DCS,PNL,Block 219 Output 10 +0x20CA,8395,VP3204_RUN,,Signal Tag,102,float 32, , ,Digital,RUN,STOP,Block 219 Output 11 +0x20CC,8397,VP3204_FLT,,Signal Tag,103,float 32, , ,Digital,FAIL,NORMAL,Block 219 Output 12 +0x20CE,8399,CH8601A_REM,,Signal Tag,104,float 32, , ,Digital,DCS,PNL,Block 219 Output 13 +0x20D0,8401,CH8601A_RUN,,Signal Tag,105,float 32, , ,Digital,RUN,STOP,Block 219 Output 14 +0x20D2,8403,CH8601A_FLT,,Signal Tag,106,float 32, , ,Digital,FAIL,NORMAL,Block 219 Output 15 +0x20D4,8405,XV6123_REM,,Signal Tag,107,float 32, , ,Digital,DCS,PNL,Block 219 Output 16 +0x20D6,8407,XV6123_OP,,Signal Tag,108,float 32, , ,Digital,ON,OFF,Block 220 Output 9 +0x20D8,8409,XV6123_CL,,Signal Tag,109,float 32, , ,Digital,ON,OFF,Block 220 Output 10 +0x20DA,8411,FIQ6201,,Signal Tag,110,float 32,,2,Analog, , ,Block 899 Output 1 +0x20DC,8413,FIQ6215,,Signal Tag,111,float 32,,2,Analog, , ,Block 900 Output 1 +0x20DE,8415,FIQ6213,,Signal Tag,112,float 32,,2,Analog, , ,Block 909 Output 1 +0x20E0,8417,XV6124_REM,,Signal Tag,113,float 32, , ,Digital,DCS,PNL,Block 220 Output 14 +0x20E2,8419,XV6124_OP,,Signal Tag,114,float 32, , ,Digital,ON,OFF,Block 220 Output 15 +0x20E4,8421,XV6124_CL,,Signal Tag,115,float 32, , ,Digital,ON,OFF,Block 220 Output 16 +0x20E6,8423,XV6224_REM,,Signal Tag,116,float 32, , ,Digital,DCS,PNL,Block 221 Output 9 +0x20E8,8425,XV6224_OP,,Signal Tag,117,float 32, , ,Digital,ON,OFF,Block 221 Output 10 +0x20EA,8427,XV6224_CL,,Signal Tag,118,float 32, , ,Digital,ON,OFF,Block 221 Output 11 +0x20EC,8429,XV3210_REM,,Signal Tag,119,float 32, , ,Digital,DCS,PNL,Block 221 Output 12 +0x20EE,8431,XV3210_OP,,Signal Tag,120,float 32, , ,Digital,ON,OFF,Block 221 Output 13 +0x20F0,8433,XV3210_CL,,Signal Tag,121,float 32, , ,Digital,ON,OFF,Block 221 Output 14 +0x20F2,8435,FIQ6214,,Signal Tag,122,float 32,,2,Analog, , ,Block 910 Output 1 +0x20F4,8437,FIQ6218,,Signal Tag,123,float 32,,2,Analog, , ,Block 911 Output 1 +0x20F6,8439,FIQ6216,,Signal Tag,124,float 32,,2,Analog, , ,Block 912 Output 1 +0x20F8,8441,XV3202_REM,,Signal Tag,125,float 32, , ,Digital,DCS,PNL,Block 222 Output 10 +0x20FA,8443,XV3202_OP,,Signal Tag,126,float 32, , ,Digital,ON,OFF,Block 222 Output 11 +0x20FC,8445,XV3202_CL,,Signal Tag,127,float 32, , ,Digital,ON,OFF,Block 222 Output 12 +0x20FE,8447,XV3208_REM,,Signal Tag,128,float 32, , ,Digital,DCS,PNL,Block 222 Output 13 +0x2100,8449,XV3208_OP,,Signal Tag,129,float 32, , ,Digital,ON,OFF,Block 222 Output 14 +0x2102,8451,XV3208_CL,,Signal Tag,130,float 32, , ,Digital,ON,OFF,Block 222 Output 15 +0x2104,8453,BL3208A_RUN,,Signal Tag,131,float 32, , ,Digital,RUN,STOP,Block 224 Output 15 +0x2106,8455,P3701A_RUN,,Signal Tag,132,float 32, , ,Digital,RUN,STOP,Block 224 Output 9 +0x2108,8457,BL3208B_RUN,,Signal Tag,133,float 32, , ,Digital,RUN,STOP,Block 224 Output 16 +0x210A,8459,P3701B_RUN,,Signal Tag,134,float 32, , ,Digital,RUN,STOP,Block 224 Output 10 +0x210C,8461,P3701A_FLT,,Signal Tag,135,float 32, , ,Digital,FAIL,NORMAL,Block 224 Output 11 +0x210E,8463,P3701B_FLT,,Signal Tag,136,float 32, , ,Digital,FAIL,NORMAL,Block 224 Output 12 +0x2110,8465,H3701_BNR_RUN,,Signal Tag,137,float 32, , ,Digital,RUN,STOP,Block 224 Output 13 +0x2112,8467,HT3701_FLT,,Signal Tag,138,float 32, , ,Digital,FAIL,NORMAL,Block 224 Output 14 +0x2114,8469,P3602A_RUN,,Signal Tag,139,float 32, , ,Digital,RUN,STOP,Block 225 Output 9 +0x2116,8471,P3602B_RUN,,Signal Tag,140,float 32, , ,Digital,ON,OFF,Block 225 Output 10 +0x2118,8473,C3601_RUN,,Signal Tag,141,float 32, , ,Digital,ON,OFF,Block 225 Output 11 +0x211A,8475,C3601_TOT_ALARM,,Signal Tag,142,float 32, , ,Digital,FAIL,NORMAL,Block 225 Output 12 +0x211C,8477,LT6111_LL,,Signal Tag,143,float 32, , ,Digital,ON,OFF,Block 931 Output 1 +0x211E,8479,HT3701_STANDBY,,Signal Tag,144,float 32, , ,Digital,ON,OFF,Block 225 Output 13 +0x2120,8481,HTR01_REM,,Signal Tag,145,float 32, , ,Digital,ON,OFF,Block 226 Output 9 +0x2122,8483,HTR01_STATE,,Signal Tag,146,float 32, , ,Digital,ON,OFF,Block 226 Output 10 +0x2124,8485,HTR02_REM,,Signal Tag,147,float 32, , ,Digital,ON,OFF,Block 226 Output 11 +0x2126,8487,HTR02_STATE,,Signal Tag,148,float 32, , ,Digital,ON,OFF,Block 226 Output 12 +0x2128,8489,HTR04_REM,,Signal Tag,149,float 32, , ,Digital,ON,OFF,Block 226 Output 15 +0x212A,8491,HTR04_STATE,,Signal Tag,150,float 32, , ,Digital,ON,OFF,Block 226 Output 16 +0x212C,8493,P3401_A_SEL,,Signal Tag,151,float 32, , ,Digital,ON,OFF,Block 226 Output 13 +0x212E,8495,P3401_B_SEL,,Signal Tag,152,float 32, , ,Digital,ON,OFF,Block 226 Output 14 +0x2130,8497,LT6211_LL,,Signal Tag,153,float 32, , ,Digital,ON,OFF,Block 933 Output 1 +0x2132,8499,LT5111_LL,,Signal Tag,154,float 32, , ,Digital,ON,OFF,Block 935 Output 1 +0x2134,8501,XV3208C_REM,,Signal Tag,155,float 32, , ,Digital,DCS,PNL,Block 223 Output 11 +0x2136,8503,XV3208C_OP,,Signal Tag,156,float 32, , ,Digital,ON,OFF,Block 223 Output 12 +0x2138,8505,XV3208C_CL,,Signal Tag,157,float 32, , ,Digital,ON,OFF,Block 223 Output 13 +0x213A,8507,AG3208_REM,,Signal Tag,158,float 32, , ,Digital,DCS,PNL,Block 223 Output 14 +0x213C,8509,AG3208_RUN,,Signal Tag,159,float 32, , ,Digital,ON,OFF,Block 223 Output 15 +0x213E,8511,AG3208_FLT,,Signal Tag,160,float 32, , ,Digital,ON,OFF,Block 223 Output 16 +0x2140,8513,XV3402_REM,,Signal Tag,161,float 32, , ,Digital,ON,OFF,Block 227 Output 14 +0x2142,8515,XV3402_OP,,Signal Tag,162,float 32, , ,Digital,ON,OFF,Block 227 Output 15 +0x2144,8517,XV3402_CL,,Signal Tag,163,float 32, , ,Digital,ON,OFF,Block 227 Output 16 +0x2146,8519,P3401_REM,,Signal Tag,164,float 32, , ,Digital,ON,OFF,Block 225 Output 14 +0x2148,8521,P3401_STATE,,Signal Tag,165,float 32, , ,Digital,ON,OFF,Block 225 Output 15 +0x214A,8523,P3401_FLT,,Signal Tag,166,float 32, , ,Digital,ON,OFF,Block 225 Output 16 +0x214C,8525,P3402_REM,,Signal Tag,167,float 32, , ,Digital,ON,OFF,Block 227 Output 9 +0x214E,8527,P3402_STATE,,Signal Tag,168,float 32, , ,Digital,ON,OFF,Block 227 Output 10 +0x2150,8529,P3402_FLT,,Signal Tag,169,float 32, , ,Digital,ON,OFF,Block 227 Output 11 +0x2152,8531,P3402_A_SEL,,Signal Tag,170,float 32, , ,Digital,ON,OFF,Block 227 Output 12 +0x2154,8533,P3402_B_SEL,,Signal Tag,171,float 32, , ,Digital,ON,OFF,Block 227 Output 13 +0x2156,8535,LT3203_IL,,Signal Tag,172,float 32, , ,Digital,ON,OFF,Block 277 Output 1 +0x2158,8537,LT3208_IL,,Signal Tag,173,float 32, , ,Digital,ON,OFF,Block 299 Output 1 +0x215A,8539,TI8117HI,,Signal Tag,174,float 32, , ,Digital,ON,OFF,Block 1097 Output 1 +0x215C,8541,LT3207_IL,,Signal Tag,175,float 32, , ,Digital,ON,OFF,Block 1103 Output 1 +0x215E,8543,LT6128_LL,,Signal Tag,176,float 32, , ,Digital,ON,OFF,Block 937 Output 1 +0x2160,8545,LT3101_IL,,Signal Tag,177,float 32, , ,Digital,ON,OFF,Block 382 Output 1 +0x2162,8547,LT8113LO,,Signal Tag,178,float 32, , ,Digital,ON,OFF,Block 1098 Output 1 +0x2164,8549,FIQ3101,,Signal Tag,179,float 32,,0,Analog, , ,Block 514 Output 1 +0x2166,8551,P8118ESD,,Signal Tag,180,float 32, , ,Digital,ON,OFF,Block 1102 Output 1 +0x2168,8553,P8114ESD,,Signal Tag,181,float 32, , ,Digital,ON,OFF,Block 1100 Output 1 +0x216A,8555,P3101A_AUTO_ON,,Signal Tag,182,float 32, , ,Digital,ON,OFF,Block 409 Output 1 +0x216C,8557,PT5111B,,Signal Tag,183,float 32,,1,Analog, , ,Block 147 Output 4 +0x216E,8559,P3101B_AUTO_ON,,Signal Tag,184,float 32, , ,Digital,ON,OFF,Block 435 Output 1 +0x2170,8561,PT6111B,,Signal Tag,185,float 32,,1,Analog, , ,Block 159 Output 4 +0x2172,8563,FQ3208_TOT,,Signal Tag,186,float 32,,0,Analog, , ,Block 516 Output 1 +0x2174,8565,PT6211B,,Signal Tag,187,float 32,,1,Analog, , ,Block 161 Output 4 +0x2176,8567,XV6223_REM,,Signal Tag,188,float 32, , ,Digital,ON,OFF,Block 220 Output 11 +0x2178,8569,XV6223_OP,,Signal Tag,189,float 32, , ,Digital,ON,OFF,Block 220 Output 12 +0x217A,8571,XV6223_CL,,Signal Tag,190,float 32, , ,Digital,ON,OFF,Block 220 Output 13 +0x217C,8573,FQ3203,,Signal Tag,191,float 32,,0,Analog, , ,Block 517 Output 1 +0x217E,8575,FQ3102_DR_TOT,,Signal Tag,192,float 32,,0,Analog, , ,Block 519 Output 1 +0x2180,8577,FQ3208_DR_TOT,,Signal Tag,193,float 32,,0,Analog, , ,Block 520 Output 1 +0x2182,8579,FQ3203_DR_TOT,,Signal Tag,194,float 32,,0,Analog, , ,Block 521 Output 1 +0x2184,8581,TE6601,,Signal Tag,195,float 32,,0,Analog, , ,Block 184 Output 4 +0x2186,8583,3101TOT,,Signal Tag,196,float 32,,0,Analog, , ,Block 518 Output 1 +0x2188,8585,FQ3208B_TOT,,Signal Tag,197,float 32,,0,Analog, , ,Block 524 Output 1 +0x218A,8587,XV3208B_AUTO_ON,,Signal Tag,198,float 32, , ,Digital,ON,OFF,Block 512 Output 1 +0x218C,8589,P6102_STATE,,Signal Tag,199,float 32,,0,Analog, , ,Block 941 Output 2 +0x218E,8591,FQ3402,,Signal Tag,200,float 32,kg,1,Analog, , ,Block 602 Output 1 +0x2190,8593,FI3401,,Signal Tag,201,float 32,,1,Analog, , ,Block 571 Output 1 +0x2192,8595,FI3402,,Signal Tag,202,float 32,kg/h,1,Analog, , ,Block 577 Output 1 +0x2194,8597,P6114_STATE,,Signal Tag,203,float 32,,0,Analog, , ,Block 942 Output 2 +0x2196,8599,FQ3401,,Signal Tag,204,float 32,kg,1,Analog, , ,Block 598 Output 1 +0x2198,8601,P6118_STATE,,Signal Tag,205,float 32,,0,Analog, , ,Block 943 Output 2 +0x219A,8603,P6116_STATE,,Signal Tag,206,float 32,,0,Analog, , ,Block 944 Output 2 +0x219C,8605,VP8117A_STATE,,Signal Tag,207,float 32,,0,Analog, , ,Block 1063 Output 2 +0x219E,8607,P6123_STATE,,Signal Tag,208,float 32,,0,Analog, , ,Block 946 Output 2 +0x21A0,8609,FIT6101,FEED FLOW,Signal Tag,209,float 32,,2,Analog, , ,Block 619 Output 4 +0x21A2,8611,FIT6113,REFLUX FLOW,Signal Tag,210,float 32,,2,Analog, , ,Block 620 Output 4 +0x21A4,8613,FIT6114,TOP FLW,Signal Tag,211,float 32,,2,Analog, , ,Block 621 Output 4 +0x21A6,8615,FIT6118,SIDE FLOW,Signal Tag,212,float 32,,2,Analog, , ,Block 622 Output 4 +0x21A8,8617,FIT6116,BOTTOM FLOW,Signal Tag,213,float 32,,2,Analog, , ,Block 623 Output 4 +0x21AA,8619,FIT6115,STEAM FLOW,Signal Tag,214,float 32,,2,Analog, , ,Block 1328 Output 1 +0x21AC,8621,FIT8101,N2 FLOW,Signal Tag,215,float 32,,2,Analog, , ,Block 625 Output 4 +0x21AE,8623,FIT6128,SCRUBBER FLOW,Signal Tag,216,float 32,,2,Analog, , ,Block 626 Output 4 +0x21B0,8625,LT6111,C-6111 LEVEL,Signal Tag,217,float 32,%,1,Analog, , ,Block 1320 Output 1 +0x21B2,8627,LT6113,D-6113 LEVEL,Signal Tag,218,float 32,%,1,Analog, , ,Block 628 Output 4 +0x21B4,8629,FIT6216,BOTTOM FLOW,Signal Tag,219,float 32,,2,Analog, , ,Block 647 Output 4 +0x21B6,8631,FIT6215,STEAM FLOW,Signal Tag,220,float 32,,2,Analog, , ,Block 648 Output 4 +0x21B8,8633,LT6128,SCRUBBER SC-6128,Signal Tag,221,float 32,%,1,Analog, , ,Block 629 Output 4 +0x21BA,8635,PT6111,VACUUM PRESSURE,Signal Tag,222,float 32,mmHg,2,Analog, , ,Block 1321 Output 1 +0x21BC,8637,FIT8113,N2 FLOW,Signal Tag,223,float 32,,2,Analog, , ,Block 649 Output 4 +0x21BE,8639,LT6211,C-6111 LEVEL,Signal Tag,224,float 32,,1,Analog, , ,Block 650 Output 4 +0x21C0,8641,LT6213,D-6113 LEVEL,Signal Tag,225,float 32,%,1,Analog, , ,Block 651 Output 4 +0x21C2,8643,PT6211,VACUUM PRESSURE,Signal Tag,226,float 32,mmHg,2,Analog, , ,Block 652 Output 4 +0x21C4,8645,FIT5101,FEED FLOW,Signal Tag,227,float 32,,2,Analog, , ,Block 653 Output 4 +0x21C6,8647,FIT5113,REFLUX FLOW,Signal Tag,228,float 32,%,1,Analog, , ,Block 654 Output 4 +0x21C8,8649,FIT6201,FEED FLOW,Signal Tag,229,float 32,,2,Analog, , ,Block 643 Output 4 +0x21CA,8651,FIT6213,REFLUX FLOW,Signal Tag,230,float 32,,2,Analog, , ,Block 644 Output 4 +0x21CC,8653,FIT6214,TOP FLOW,Signal Tag,231,float 32,,2,Analog, , ,Block 645 Output 4 +0x21CE,8655,FIT6218,SIDE FLOW,Signal Tag,232,float 32,,2,Analog, , ,Block 646 Output 4 +0x21D0,8657,FIT5114,TOP FLOW,Signal Tag,233,float 32,,2,Analog, , ,Block 655 Output 4 +0x21D2,8659,FIT5118,SIDE FLOW,Signal Tag,234,float 32,,2,Analog, , ,Block 656 Output 4 +0x21D4,8661,FIT5116,BOTTOM FLOW,Signal Tag,235,float 32,,2,Analog, , ,Block 657 Output 4 +0x21D6,8663,FIT5115,STEAM FLOW,Signal Tag,236,float 32,,2,Analog, , ,Block 658 Output 4 +0x21D8,8665,FIT8114,N2 FLOW,Signal Tag,237,float 32,NL,2,Analog, , ,Block 659 Output 4 +0x21DA,8667,LT5111,C-5111 LEVEL,Signal Tag,238,float 32,%,1,Analog, , ,Block 660 Output 4 +0x21DC,8669,LT5113,D-5113 LEVEL,Signal Tag,239,float 32,%,1,Analog, , ,Block 661 Output 4 +0x21DE,8671,P8601A_STATE,,Signal Tag,240,float 32,,0,Analog, , ,Block 1064 Output 2 +0x21E0,8673,LT2203,T-2203 EL LEVEL,Signal Tag,241,float 32,%,1,Analog, , ,Block 672 Output 4 +0x21E2,8675,PT6700,STEAM PRESSURE,Signal Tag,242,float 32,Kg/Cm2,2,Analog, , ,Block 673 Output 4 +0x21E4,8677,PT6900,IA PRESSURE,Signal Tag,243,float 32,Kg/Cm2,2,Analog, , ,Block 674 Output 4 +0x21E6,8679,PT6950,N2 PRESSURE,Signal Tag,244,float 32,mmH2O,2,Analog, , ,Block 675 Output 4 +0x21E8,8681,TI6111A,C-6111 BOT TEMP,Signal Tag,245,float 32,degC,2,Analog, , ,Block 683 Output 4 +0x21EA,8683,TI6111B,C-6111 MID TEMP,Signal Tag,246,float 32,degC,2,Analog, , ,Block 1322 Output 1 +0x21EC,8685,TI6111C,C-6111 MID TEMP,Signal Tag,247,float 32,degC,2,Analog, , ,Block 1324 Output 1 +0x21EE,8687,TI6111D,C-6111 TOP TEMP,Signal Tag,248,float 32,degC,2,Analog, , ,Block 1326 Output 1 +0x21F0,8689,PT5111,VACUUM PRESSURE,Signal Tag,249,float 32,mmHg,2,Analog, , ,Block 663 Output 4 +0x21F2,8691,FIT6120,PGMEA FLOW,Signal Tag,250,float 32,,2,Analog, , ,Block 631 Output 4 +0x21F4,8693,FIT6220,HBM FLOW,Signal Tag,251,float 32,,2,Analog, , ,Block 632 Output 4 +0x21F6,8695,FIT5320,EL FLOW,Signal Tag,252,float 32,,2,Analog, , ,Block 633 Output 4 +0x21F8,8697,LT6121,T-6121 PGMEA LEV,Signal Tag,253,float 32,%,1,Analog, , ,Block 664 Output 4 +0x21FA,8699,LT6122,T-6122 PGMEA LEV,Signal Tag,254,float 32,%,1,Analog, , ,Block 665 Output 4 +0x21FC,8701,LT6123,T-6123 PGMEA BOT,Signal Tag,255,float 32,%,1,Analog, , ,Block 666 Output 4 +0x21FE,8703,LT6221,T-6221 HBM LEVEL,Signal Tag,256,float 32,%,1,Analog, , ,Block 667 Output 4 +0x2200,8705,LT6222,T-6222 HBM LEVEL,Signal Tag,257,float 32,%,1,Analog, , ,Block 668 Output 4 +0x2202,8707,LT6223,T-6221 HBM BOT,Signal Tag,258,float 32,%,1,Analog, , ,Block 669 Output 4 +0x2204,8709,LT5321,T-5321 EL LEVEL,Signal Tag,259,float 32,%,1,Analog, , ,Block 670 Output 4 +0x2206,8711,LT5322,T-5322 EL LEVEL,Signal Tag,260,float 32,%,1,Analog, , ,Block 671 Output 4 +0x2208,8713,TI6103,E-6103 TEMP,Signal Tag,261,float 32,degC,2,Analog, , ,Block 687 Output 4 +0x220A,8715,TI6117,E-6117 TEMP,Signal Tag,262,float 32,degC,2,Analog, , ,Block 688 Output 4 +0x220C,8717,PT6120A,,Signal Tag,263,float 32,,3,Analog, , ,Block 676 Output 4 +0x220E,8719,PT6120B,,Signal Tag,264,float 32,,3,Analog, , ,Block 677 Output 4 +0x2210,8721,TI2203,T-2203 TEMP,Signal Tag,265,float 32,degC,2,Analog, , ,Block 716 Output 4 +0x2212,8723,FIQ6120,,Signal Tag,266,float 32,,2,Analog, , ,Block 983 Output 1 +0x2214,8725,FIQ6220,,Signal Tag,267,float 32,,2,Analog, , ,Block 984 Output 1 +0x2216,8727,FIQ5320,,Signal Tag,268,float 32,,2,Analog, , ,Block 985 Output 1 +0x2218,8729,TI6211A,C-6211 BOT TEMP,Signal Tag,269,float 32,degC,2,Analog, , ,Block 695 Output 4 +0x221A,8731,TI6211B,C-6211 MID TEMP,Signal Tag,270,float 32,degC,2,Analog, , ,Block 696 Output 4 +0x221C,8733,TI6211C,C-6211 MID TEMP,Signal Tag,271,float 32,degC,2,Analog, , ,Block 697 Output 4 +0x221E,8735,TI6211D,C-6211 TOP TEMP,Signal Tag,272,float 32,degC,2,Analog, , ,Block 698 Output 4 +0x2220,8737,TI6203,E-6203 TEMP,Signal Tag,273,float 32,degC,2,Analog, , ,Block 699 Output 4 +0x2222,8739,TI6217,E-6217 TEMP,Signal Tag,274,float 32,degC,2,Analog, , ,Block 700 Output 4 +0x2224,8741,TI5111A,C-5111 BOT TEMP,Signal Tag,275,float 32,degC,2,Analog, , ,Block 701 Output 4 +0x2226,8743,TI5111B,C-5111 MID TEMP,Signal Tag,276,float 32,degC,2,Analog, , ,Block 702 Output 4 +0x2228,8745,VP6117_STATE,,Signal Tag,277,float 32,,0,Analog, , ,Block 947 Output 2 +0x222A,8747,TI5111D,C-5111 TOP TEMP,Signal Tag,278,float 32,degC,2,Analog, , ,Block 703 Output 4 +0x222C,8749,TE5103,E-5103 TEMP,Signal Tag,279,float 32,degC,2,Analog, , ,Block 704 Output 4 +0x222E,8751,TE5117,E-5117 TEMP,Signal Tag,280,float 32,degC,2,Analog, , ,Block 705 Output 4 +0x2230,8753,TE6121,T-6121 TEMP,Signal Tag,281,float 32,degC,2,Analog, , ,Block 706 Output 4 +0x2232,8755,TE6122,T-6122 TEMP,Signal Tag,282,float 32,degC,2,Analog, , ,Block 707 Output 4 +0x2234,8757,TE6123,T-6123 TEMP,Signal Tag,283,float 32,degC,2,Analog, , ,Block 708 Output 4 +0x2236,8759,TE6221,T-6221 TEMP,Signal Tag,284,float 32,degC,2,Analog, , ,Block 709 Output 4 +0x2238,8761,TE6222,T-6222 TEMP,Signal Tag,285,float 32,degC,2,Analog, , ,Block 710 Output 4 +0x223A,8763,TE6223,T-6223 TEMP,Signal Tag,286,float 32,degC,2,Analog, , ,Block 711 Output 4 +0x223C,8765,TE5321,T-5321 TEMP,Signal Tag,287,float 32,degC,2,Analog, , ,Block 712 Output 4 +0x223E,8767,TE5322,T-5322 TEMP,Signal Tag,288,float 32,degC,2,Analog, , ,Block 713 Output 4 +0x2240,8769,P6114_REM,PGMEA TOP PP RL,Signal Tag,289,float 32, , ,Digital,DCS,PNL,Block 764 Output 12 +0x2242,8771,P6114_RUN,PGMEA TOP PP RUN,Signal Tag,290,float 32, , ,Digital,RUN,STOP,Block 764 Output 13 +0x2244,8773,P6114_FLT,PGMEA TOP PP FLT,Signal Tag,291,float 32, , ,Digital,FAIL,NORMAL,Block 764 Output 14 +0x2246,8775,P6118_REM,PGMEA SIDE PP RN,Signal Tag,292,float 32, , ,Digital,DCS,PNL,Block 764 Output 15 +0x2248,8777,P6118_RUN,PGMEA SIDE PP RN,Signal Tag,293,float 32, , ,Digital,RUN,STOP,Block 764 Output 16 +0x224A,8779,P6118_FLT,PGMEA SIDE PP FT,Signal Tag,294,float 32, , ,Digital,FAIL,NORMAL,Block 765 Output 9 +0x224C,8781,P6116_REM,PGMEA BOT PP RL,Signal Tag,295,float 32, , ,Digital,DCS,PNL,Block 765 Output 10 +0x224E,8783,P6116_RUN,PGMEA BOT PP RUN,Signal Tag,296,float 32, , ,Digital,RUN,STOP,Block 765 Output 11 +0x2250,8785,P6116_FLT,PGMEA BOT PP FLT,Signal Tag,297,float 32, , ,Digital,FAIL,NORMAL,Block 765 Output 12 +0x2252,8787,HTR58RUN,,Signal Tag,298,float 32, , ,Digital,ON,OFF,Block 994 Output 1 +0x2254,8789,TE5601,,Signal Tag,299,float 32,,0,Analog, , ,Block 717 Output 4 +0x2256,8791,FT3401,,Signal Tag,300,float 32,,0,Analog, , ,Block 208 Output 4 +0x2258,8793,P6128A__STATE,,Signal Tag,301,float 32,,0,Analog, , ,Block 948 Output 2 +0x225A,8795,P6128B_STATE,,Signal Tag,302,float 32,,0,Analog, , ,Block 949 Output 2 +0x225C,8797,P6202_STATE,,Signal Tag,303,float 32,,0,Analog, , ,Block 950 Output 2 +0x225E,8799,P6123_REM,RECYCLE PP RL,Signal Tag,304,float 32, , ,Digital,DCS,PNL,Block 766 Output 11 +0x2260,8801,P6123_RUN,RECYCLE PP RUN,Signal Tag,305,float 32, , ,Digital,RUN,STOP,Block 766 Output 12 +0x2262,8803,P6123_FLT,RECYCLE PP FLT,Signal Tag,306,float 32, , ,Digital,FAIL,NORMAL,Block 766 Output 13 +0x2264,8805,VP6117_REM,VACUUM PP RL,Signal Tag,307,float 32, , ,Digital,DCS,PNL,Block 766 Output 14 +0x2266,8807,VP6117_RUN,VACUUM PP RUN,Signal Tag,308,float 32, , ,Digital,RUN,STOP,Block 766 Output 15 +0x2268,8809,VP6117_FLT,VACUUM PP FLT,Signal Tag,309,float 32, , ,Digital,FAIL,NORMAL,Block 766 Output 16 +0x226A,8811,P6128A_REM,SCRUBBER PP A RL,Signal Tag,310,float 32, , ,Digital,DCS,PNL,Block 767 Output 9 +0x226C,8813,P6128A_RUN,SCRUBBER PP A RN,Signal Tag,311,float 32, , ,Digital,RUN,STOP,Block 767 Output 10 +0x226E,8815,P6128A_FLT,SCRUBBER PP A FT,Signal Tag,312,float 32, , ,Digital,FAIL,NORMAL,Block 767 Output 11 +0x2270,8817,P6128B_REM,SCRUBBER PP B RL,Signal Tag,313,float 32, , ,Digital,DCS,PNL,Block 767 Output 12 +0x2272,8819,P6128B_RUN,SCRUBBER PP B RN,Signal Tag,314,float 32, , ,Digital,RUN,STOP,Block 767 Output 13 +0x2274,8821,P6128B_FLT,SCRUBBER PP B FT,Signal Tag,315,float 32, , ,Digital,FAIL,NORMAL,Block 767 Output 14 +0x2276,8823,FT3402,,Signal Tag,316,float 32,,0,Analog, , ,Block 209 Output 4 +0x2278,8825,FIQ5101,,Signal Tag,317,float 32,,2,Analog, , ,Block 999 Output 1 +0x227A,8827,FIQ5113,,Signal Tag,318,float 32,,2,Analog, , ,Block 1002 Output 1 +0x227C,8829,P6214_REM,HB TOP PP RL,Signal Tag,319,float 32, , ,Digital,DCS,PNL,Block 768 Output 10 +0x227E,8831,P6214_RUN,HBM TOP PP RUN,Signal Tag,320,float 32, , ,Digital,RUN,STOP,Block 768 Output 11 +0x2280,8833,P6214_FLT,HBM TOP PP FLT,Signal Tag,321,float 32, , ,Digital,FAIL,NORMAL,Block 768 Output 12 +0x2282,8835,P6218_REM,HBM SIDE PP RL,Signal Tag,322,float 32, , ,Digital,DCS,PNL,Block 768 Output 13 +0x2284,8837,P6218_RUN,HBM SIDE PP RUN,Signal Tag,323,float 32, , ,Digital,RUN,STOP,Block 768 Output 14 +0x2286,8839,P6218_FLT,HBM SIDE PP FLT,Signal Tag,324,float 32, , ,Digital,FAIL,NORMAL,Block 768 Output 15 +0x2288,8841,P6216_REM,HBM BOT PP RL,Signal Tag,325,float 32, , ,Digital,DCS,PNL,Block 768 Output 16 +0x228A,8843,P6216_RUN,HBM BOT PP RUN,Signal Tag,326,float 32, , ,Digital,RUN,STOP,Block 769 Output 9 +0x228C,8845,P6216_FLT,HBM BOT PP FLT,Signal Tag,327,float 32, , ,Digital,FAIL,NORMAL,Block 769 Output 10 +0x228E,8847,FIQ5114,,Signal Tag,328,float 32,,2,Analog, , ,Block 1005 Output 1 +0x2290,8849,FIQ5115,,Signal Tag,329,float 32,,2,Analog, , ,Block 1008 Output 1 +0x2292,8851,FIQ5116,,Signal Tag,330,float 32,,2,Analog, , ,Block 1011 Output 1 +0x2294,8853,P6214_STATE,,Signal Tag,331,float 32,,0,Analog, , ,Block 951 Output 2 +0x2296,8855,P6218_STATE,,Signal Tag,332,float 32,,0,Analog, , ,Block 952 Output 2 +0x2298,8857,P6216_STATE,,Signal Tag,333,float 32,,0,Analog, , ,Block 953 Output 2 +0x229A,8859,P6223_REM,RECYCLE PP RL,Signal Tag,334,float 32, , ,Digital,DCS,PNL,Block 775 Output 11 +0x229C,8861,P6223_RUN,RECYCLE PP RUN,Signal Tag,335,float 32, , ,Digital,RUN,STOP,Block 775 Output 12 +0x229E,8863,P6223_FLT,RECYCLE PP FLT,Signal Tag,336,float 32, , ,Digital,FAIL,NORMAL,Block 775 Output 13 +0x22A0,8865,VP6217_REM,VACUUM PP RL,Signal Tag,337,float 32, , ,Digital,DCS,PNL,Block 770 Output 12 +0x22A2,8867,VP6217_RUN,VACUUM PP RUN,Signal Tag,338,float 32, , ,Digital,RUN,STOP,Block 770 Output 13 +0x22A4,8869,VP6217_FLT,VACUUM PP FLT,Signal Tag,339,float 32, , ,Digital,FAIL,NORMAL,Block 770 Output 14 +0x22A6,8871,P5101_REM,EL FEED PP RL,Signal Tag,340,float 32, , ,Digital,DCS,PNL,Block 770 Output 15 +0x22A8,8873,P5101_RUN,EL FEED PP RUN,Signal Tag,341,float 32, , ,Digital,RUN,STOP,Block 770 Output 16 +0x22AA,8875,P5101_FLT,EL FEED PP FLT,Signal Tag,342,float 32, , ,Digital,FAIL,NORMAL,Block 771 Output 9 +0x22AC,8877,P5114_REM,EL TOP PP RL,Signal Tag,343,float 32, , ,Digital,DCS,PNL,Block 771 Output 10 +0x22AE,8879,P5114_RUN,EL TOP PP RUN,Signal Tag,344,float 32, , ,Digital,RUN,STOP,Block 771 Output 11 +0x22B0,8881,P5114_FLT,EL TOP PP FLT,Signal Tag,345,float 32, , ,Digital,FAIL,NORMAL,Block 771 Output 12 +0x22B2,8883,P5118_REM,EL SIDE PP RL,Signal Tag,346,float 32, , ,Digital,DCS,PNL,Block 771 Output 13 +0x22B4,8885,P5118_RUN,EL SIDE PP RUN,Signal Tag,347,float 32, , ,Digital,RUN,STOP,Block 771 Output 14 +0x22B6,8887,P5118_FLT,EL SIDE PP FLT,Signal Tag,348,float 32, , ,Digital,FAIL,NORMAL,Block 771 Output 15 +0x22B8,8889,P5115_REM,EL BOT PP RL,Signal Tag,349,float 32, , ,Digital,DCS,PNL,Block 771 Output 16 +0x22BA,8891,P5115_RUN,EL BOT PP RUN,Signal Tag,350,float 32, , ,Digital,RUN,STOP,Block 772 Output 9 +0x22BC,8893,P5115_FLT,EL BOT PP FLT,Signal Tag,351,float 32, , ,Digital,FAIL,NORMAL,Block 772 Output 10 +0x22BE,8895,P5116_REM,EL BOT PP RL,Signal Tag,352,float 32, , ,Digital,DCS,PNL,Block 772 Output 11 +0x22C0,8897,P5116_RUN,EL BOT PP RUN,Signal Tag,353,float 32, , ,Digital,RUN,STOP,Block 772 Output 12 +0x22C2,8899,P5116_FLT,EL BOT PP FLT,Signal Tag,354,float 32, , ,Digital,FAIL,NORMAL,Block 772 Output 13 +0x22C4,8901,P2203_REM,UNLOADING PP RL,Signal Tag,355,float 32, , ,Digital,DCS,PNL,Block 772 Output 14 +0x22C6,8903,P2203_RUN,UNLOADING PP RUN,Signal Tag,356,float 32, , ,Digital,RUN,STOP,Block 772 Output 15 +0x22C8,8905,P2203_FLT,UNLOADING PP FLT,Signal Tag,357,float 32, , ,Digital,FAIL,NORMAL,Block 772 Output 16 +0x22CA,8907,P8601B_STATE,,Signal Tag,358,float 32,,0,Analog, , ,Block 1065 Output 2 +0x22CC,8909,P6223_STATE,,Signal Tag,359,float 32,,0,Analog, , ,Block 955 Output 2 +0x22CE,8911,VP6217_STATE,,Signal Tag,360,float 32,,0,Analog, , ,Block 956 Output 2 +0x22D0,8913,VP5117_REM,VACUUM PP RL,Signal Tag,361,float 32, , ,Digital,DCS,PNL,Block 773 Output 12 +0x22D2,8915,VP5117_RUN,VACUUM PP RUN,Signal Tag,362,float 32, , ,Digital,RUN,STOP,Block 773 Output 13 +0x22D4,8917,VP5117_FLT,VACUUM PP FLT,Signal Tag,363,float 32, , ,Digital,FAIL,NORMAL,Block 773 Output 14 +0x22D6,8919,CH5601_REM,EL CW PP RL,Signal Tag,364,float 32, , ,Digital,DCS,PNL,Block 773 Output 15 +0x22D8,8921,CH5601_RUN,EL CW PP RUN,Signal Tag,365,float 32, , ,Digital,RUN,SOTP,Block 773 Output 16 +0x22DA,8923,CH5601_FLT,EL CW PP FLT,Signal Tag,366,float 32, , ,Digital,FAIL,NORMAL,Block 774 Output 9 +0x22DC,8925,P5101_STATE,,Signal Tag,367,float 32,,0,Analog, , ,Block 957 Output 2 +0x22DE,8927,P5114_STATE,,Signal Tag,368,float 32,,0,Analog, , ,Block 958 Output 2 +0x22E0,8929,P5118_STATE,,Signal Tag,369,float 32,,0,Analog, , ,Block 959 Output 2 +0x22E2,8931,P5115_STATE,,Signal Tag,370,float 32,,0,Analog, , ,Block 960 Output 2 +0x22E4,8933,P2203_STATE,,Signal Tag,371,float 32,,0,Analog, , ,Block 961 Output 2 +0x22E6,8935,VP5117_STATE,,Signal Tag,372,float 32,,0,Analog, , ,Block 962 Output 2 +0x22E8,8937,CH5601_STATE,,Signal Tag,373,float 32,,0,Analog, , ,Block 963 Output 2 +0x22EA,8939,HTR05_STATE,,Signal Tag,374,float 32,,0,Analog, , ,Block 964 Output 2 +0x22EC,8941,HTR06_STATE,,Signal Tag,375,float 32,,0,Analog, , ,Block 965 Output 2 +0x22EE,8943,HTR07_STATE,,Signal Tag,376,float 32,,0,Analog, , ,Block 966 Output 2 +0x22F0,8945,HTR08_STATE,,Signal Tag,377,float 32,,0,Analog, , ,Block 967 Output 2 +0x22F2,8947,XV6120_STATE,,Signal Tag,378,float 32,,0,Analog, , ,Block 968 Output 2 +0x22F4,8949,XV6220_STATE,,Signal Tag,379,float 32,,0,Analog, , ,Block 971 Output 2 +0x22F6,8951,XV5320_STATE,,Signal Tag,380,float 32,,0,Analog, , ,Block 972 Output 2 +0x22F8,8953,P5116_STATE,,Signal Tag,381,float 32,,0,Analog, , ,Block 973 Output 2 +0x22FA,8955,PT6220A,,Signal Tag,382,float 32,,3,Analog, , ,Block 678 Output 4 +0x22FC,8957,PT6220B,,Signal Tag,383,float 32,,3,Analog, , ,Block 679 Output 4 +0x22FE,8959,PT5320A,,Signal Tag,384,float 32,,3,Analog, , ,Block 680 Output 4 +0x2300,8961,PT5320B,,Signal Tag,385,float 32,,3,Analog, , ,Block 681 Output 4 +0x2302,8963,BL6100,,Signal Tag,386,float 32, , ,Digital,ON,OFF,Block 778 Output 13 +0x2304,8965,FIQ5118,,Signal Tag,387,float 32,,2,Analog, , ,Block 1014 Output 1 +0x2306,8967,LT6100,,Signal Tag,388,float 32,,0,Analog, , ,Block 635 Output 4 +0x2308,8969,LT6200,,Signal Tag,389,float 32,,0,Analog, , ,Block 636 Output 4 +0x230A,8971,TE3650,,Signal Tag,390,float 32,,0,Analog, , ,Block 637 Output 4 +0x230C,8973,TE3600,,Signal Tag,391,float 32,,0,Analog, , ,Block 638 Output 4 +0x230E,8975,P6123_IFB,,Signal Tag,392,float 32,Hz,1,Analog, , ,Block 639 Output 4 +0x2310,8977,P6223_IFB,,Signal Tag,393,float 32,Hz,1,Analog, , ,Block 640 Output 4 +0x2312,8979,P5102_REM,,Signal Tag,394,float 32, , ,Digital,ON,OFF,Block 773 Output 9 +0x2314,8981,P5102_FLT,,Signal Tag,395,float 32, , ,Digital,ON,OFF,Block 773 Output 11 +0x2316,8983,P5102_IFB,,Signal Tag,396,float 32,,0,Analog, , ,Block 641 Output 4 +0x2318,8985,HTR05_REM,PGMEA HC RL,Signal Tag,397,float 32, , ,Digital,DCS,PNL,Block 777 Output 10 +0x231A,8987,HTR05_RUN,PGMEA GC RUN,Signal Tag,398,float 32, , ,Digital,RUN,STOP,Block 777 Output 11 +0x231C,8989,HTR06_REM,HBM HC RL,Signal Tag,399,float 32, , ,Digital,DCS,PNL,Block 777 Output 12 +0x231E,8991,HTR06_RUN,HBM HC RUN,Signal Tag,400,float 32, , ,Digital,RUN,STOP,Block 777 Output 13 +0x2320,8993,HTR07_REM,EL HC RL,Signal Tag,401,float 32, , ,Digital,DCS,PNL,Block 777 Output 14 +0x2322,8995,HTR07_RUN,EL HC RUN,Signal Tag,402,float 32, , ,Digital,RUN,STOP,Block 777 Output 15 +0x2324,8997,HTR08_REM,SPARE HC RL,Signal Tag,403,float 32, , ,Digital,DCS,PNL,Block 777 Output 16 +0x2326,8999,HTR08_RUN,SPARE HC RUN,Signal Tag,404,float 32, , ,Digital,RUN,STOP,Block 778 Output 9 +0x2328,9001,P5102_STATE,,Signal Tag,405,float 32,,0,Analog, , ,Block 1022 Output 2 +0x232A,9003,P3401A_STATE,,Signal Tag,406,float 32, , ,Digital,ON,OFF,Block 1023 Output 1 +0x232C,9005,P3401B_STATE,,Signal Tag,407,float 32, , ,Digital,ON,OFF,Block 1024 Output 1 +0x232E,9007,P3402A_STATE,,Signal Tag,408,float 32, , ,Digital,ON,OFF,Block 1025 Output 1 +0x2330,9009,P3402B_STATE,,Signal Tag,409,float 32, , ,Digital,ON,OFF,Block 1026 Output 1 +0x2332,9011,P5320_RUN,,Signal Tag,410,float 32, , ,Digital,ON,OFF,Block 778 Output 12 +0x2334,9013,P6102_REM,,Signal Tag,411,float 32, , ,Digital,DCS,MCC,Block 764 Output 9 +0x2336,9015,P6102_RUN,,Signal Tag,412,float 32, , ,Digital,RUN,STOP,Block 764 Output 10 +0x2338,9017,P6102_FLT,,Signal Tag,413,float 32, , ,Digital,FAULT,NORMAL,Block 764 Output 11 +0x233A,9019,P6202_REM,,Signal Tag,414,float 32, , ,Digital,ON,OFF,Block 765 Output 16 +0x233C,9021,P6202_RUN,,Signal Tag,415,float 32, , ,Digital,ON,OFF,Block 766 Output 9 +0x233E,9023,P6202_FLT,,Signal Tag,416,float 32, , ,Digital,ON,OFF,Block 766 Output 10 +0x2340,9025,P6102_IFB,,Signal Tag,417,float 32,,1,Analog, , ,Block 634 Output 4 +0x2342,9027,P6202_IFB,,Signal Tag,418,float 32,,1,Analog, , ,Block 642 Output 4 +0x2344,9029,LT8111,,Signal Tag,419,float 32,,0,Analog, , ,Block 207 Output 4 +0x2346,9031,P8601A_REM,,Signal Tag,420,float 32, , ,Digital,ON,OFF,Block 215 Output 9 +0x2348,9033,P8601A_RUN,,Signal Tag,421,float 32, , ,Digital,ON,OFF,Block 215 Output 10 +0x234A,9035,P8601A_FLT,,Signal Tag,422,float 32, , ,Digital,ON,OFF,Block 215 Output 11 +0x234C,9037,P8601B_REM,,Signal Tag,423,float 32, , ,Digital,ON,OFF,Block 215 Output 12 +0x234E,9039,P8601B_RUN,,Signal Tag,424,float 32, , ,Digital,ON,OFF,Block 215 Output 13 +0x2350,9041,P8601B_FLT,,Signal Tag,425,float 32, , ,Digital,ON,OFF,Block 215 Output 14 +0x2352,9043,CH8601B_REM,,Signal Tag,426,float 32, , ,Digital,ON,OFF,Block 218 Output 15 +0x2354,9045,CH8601B_RUN,,Signal Tag,427,float 32, , ,Digital,ON,OFF,Block 218 Output 16 +0x2356,9047,CH8601B_FLT,,Signal Tag,428,float 32, , ,Digital,ON,OFF,Block 219 Output 9 +0x2358,9049,P8101_IFB,,Signal Tag,429,float 32,,0,Analog, , ,Block 682 Output 4 +0x235A,9051,TI8111A,,Signal Tag,430,float 32,,0,Analog, , ,Block 689 Output 4 +0x235C,9053,TI8111B,,Signal Tag,431,float 32,,0,Analog, , ,Block 690 Output 4 +0x235E,9055,TI8111C,,Signal Tag,432,float 32,,0,Analog, , ,Block 691 Output 4 +0x2360,9057,TI8111D,,Signal Tag,433,float 32,,0,Analog, , ,Block 692 Output 4 +0x2362,9059,TI8103,,Signal Tag,434,float 32,,0,Analog, , ,Block 693 Output 4 +0x2364,9061,TI8117,,Signal Tag,435,float 32,,0,Analog, , ,Block 694 Output 4 +0x2366,9063,TI8601,,Signal Tag,436,float 32,,0,Analog, , ,Block 721 Output 4 +0x2368,9065,PICA3203-TRIP,,Signal Tag,437,float 32, , ,Digital,ON,OFF,Block 1124 Output 1 +0x236A,9067,TICA3202A-HI-ESD,,Signal Tag,438,float 32, , ,Digital,ON,OFF,Block 562 Output 20 +0x236C,9069,P8114_REM,,Signal Tag,439,float 32, , ,Digital,ON,OFF,Block 774 Output 10 +0x236E,9071,P8114_RUN,,Signal Tag,440,float 32, , ,Digital,ON,OFF,Block 774 Output 11 +0x2370,9073,P8114_FLT,,Signal Tag,441,float 32, , ,Digital,ON,OFF,Block 774 Output 12 +0x2372,9075,P8118_REM,,Signal Tag,442,float 32, , ,Digital,ON,OFF,Block 774 Output 13 +0x2374,9077,P8118_RUN,,Signal Tag,443,float 32, , ,Digital,ON,OFF,Block 774 Output 14 +0x2376,9079,P8118_FLT,,Signal Tag,444,float 32, , ,Digital,ON,OFF,Block 774 Output 15 +0x2378,9081,P8101_REM,,Signal Tag,445,float 32, , ,Digital,ON,OFF,Block 774 Output 16 +0x237A,9083,P8101_RUN,,Signal Tag,446,float 32, , ,Digital,ON,OFF,Block 775 Output 9 +0x237C,9085,P8101_FLT,,Signal Tag,447,float 32, , ,Digital,ON,OFF,Block 775 Output 10 +0x237E,9087,P8116_REM,,Signal Tag,448,float 32, , ,Digital,ON,OFF,Block 775 Output 14 +0x2380,9089,P8116_RUN,,Signal Tag,449,float 32, , ,Digital,ON,OFF,Block 775 Output 15 +0x2382,9091,P8116_FLT,,Signal Tag,450,float 32, , ,Digital,ON,OFF,Block 775 Output 16 +0x2384,9093,FIT8118,,Signal Tag,451,float 32,,0,Analog, , ,Block 662 Output 4 +0x2386,9095,PT6950C,,Signal Tag,452,float 32,,0,Analog, , ,Block 142 Output 4 +0x2388,9097,TE3203,,Signal Tag,453,float 32,,0,Analog, , ,Block 183 Output 4 +0x238A,9099,CH8601B_STATE,,Signal Tag,454,float 32,,0,Analog, , ,Block 1066 Output 2 +0x238C,9101,CH8601A_STATE,,Signal Tag,455,float 32,,0,Analog, , ,Block 1067 Output 2 +0x238E,9103,P8114_STATE,,Signal Tag,456,float 32,,0,Analog, , ,Block 1068 Output 2 +0x2390,9105,P8118_STATE,,Signal Tag,457,float 32,,0,Analog, , ,Block 1069 Output 2 +0x2392,9107,P8101_STATE,,Signal Tag,458,float 32,,0,Analog, , ,Block 1070 Output 2 +0x2394,9109,P8116_STATE,,Signal Tag,459,float 32,,0,Analog, , ,Block 1071 Output 2 +0x2396,9111,FIQ8101,,Signal Tag,460,float 32,,2,Analog, , ,Block 1076 Output 1 +0x2398,9113,FIQ8115,,Signal Tag,461,float 32,,2,Analog, , ,Block 1077 Output 1 +0x239A,9115,FIQ8113,,Signal Tag,462,float 32,,2,Analog, , ,Block 1082 Output 1 +0x239C,9117,FIQ8118,,Signal Tag,463,float 32,,2,Analog, , ,Block 1083 Output 1 +0x239E,9119,FIQ8116,,Signal Tag,464,float 32,,2,Analog, , ,Block 1088 Output 1 +0x23A0,9121,FIQ8114,,Signal Tag,465,float 32,,2,Analog, , ,Block 1089 Output 1 +0x23A2,9123,TICA3202A-HI-IL,,Signal Tag,466,float 32, , ,Digital,ON,OFF,Block 562 Output 21 +0x23A4,9125,PICA3203-LO-ESD,,Signal Tag,467,float 32, , ,Digital,ON,OFF,Block 564 Output 20 +0x23A6,9127,PICA3203-LO-IL,,Signal Tag,468,float 32, , ,Digital,ON,OFF,Block 564 Output 21 +0x23A8,9129,TICA3403-TRIP,,Signal Tag,469,float 32, , ,Digital,ON,OFF,Block 1139 Output 1 +0x23AA,9131,TICA3403-HI-IL,,Signal Tag,470,float 32, , ,Digital,ON,OFF,Block 599 Output 14 +0x23AC,9133,TICA5111A-TRIP,,Signal Tag,471,float 32, , ,Digital,ON,OFF,Block 1150 Output 1 +0x23AE,9135,PICA5111-TRIP,,Signal Tag,472,float 32, , ,Digital,ON,OFF,Block 1153 Output 1 +0x23B0,9137,LICA5113-LO-ESD,,Signal Tag,473,float 32, , ,Digital,ON,OFF,Block 995 Output 20 +0x23B2,9139,LICA5113-LO-IL,,Signal Tag,474,float 32, , ,Digital,ON,OFF,Block 995 Output 21 +0x23B4,9141,LIC5113-TRIP,,Signal Tag,475,float 32, , ,Digital,ON,OFF,Block 1158 Output 1 +0x23B6,9143,5113LO-MAN-ESD,,Signal Tag,476,float 32, , ,Digital,ON,OFF,Block 1147 Output 1 +0x23B8,9145,5113-LO-ESD,,Signal Tag,477,float 32, , ,Digital,ON,OFF,Block 1161 Output 1 +0x23BA,9147,TICA5111A-HI-ESD,,Signal Tag,478,float 32, , ,Digital,ON,OFF,Block 921 Output 20 +0x23BC,9149,TICA5111A-HI-IL,,Signal Tag,479,float 32, , ,Digital,ON,OFF,Block 921 Output 21 +0x23BE,9151,PICA5111-LO-ESD,,Signal Tag,480,float 32, , ,Digital,ON,OFF,Block 922 Output 20 +0x23C0,9153,PICA5111-LO-IL,,Signal Tag,481,float 32, , ,Digital,ON,OFF,Block 922 Output 21 +0x23C2,9155,TICA6111A-TRIP,,Signal Tag,482,float 32, , ,Digital,ON,OFF,Block 1187 Output 1 +0x23C4,9157,PICA6111-TRIP,,Signal Tag,483,float 32, , ,Digital,ON,OFF,Block 1190 Output 1 +0x23C6,9159,LICA6113-LO-ESD,,Signal Tag,484,float 32, , ,Digital,ON,OFF,Block 928 Output 20 +0x23C8,9161,LICA6113-LO-IL,,Signal Tag,485,float 32, , ,Digital,ON,OFF,Block 928 Output 21 +0x23CA,9163,LICA6113-TRIP,,Signal Tag,486,float 32, , ,Digital,ON,OFF,Block 1195 Output 1 +0x23CC,9165,6113LO-MAN-ESD,,Signal Tag,487,float 32, , ,Digital,ON,OFF,Block 1184 Output 1 +0x23CE,9167,6113-LO-ESD,,Signal Tag,488,float 32, , ,Digital,ON,OFF,Block 1198 Output 1 +0x23D0,9169,TICA6111A-HI-ESD,,Signal Tag,489,float 32, , ,Digital,ON,OFF,Block 799 Output 20 +0x23D2,9171,TICA6111A-HI-IL,,Signal Tag,490,float 32, , ,Digital,ON,OFF,Block 799 Output 21 +0x23D4,9173,PICA6111-LO-ESD,,Signal Tag,491,float 32, , ,Digital,ON,OFF,Block 800 Output 20 +0x23D6,9175,PICA6111-LO-IL,,Signal Tag,492,float 32, , ,Digital,ON,OFF,Block 800 Output 21 +0x23D8,9177,TICA6211-TRIP,,Signal Tag,493,float 32, , ,Digital,ON,OFF,Block 1226 Output 1 +0x23DA,9179,PICA6211-TRIP,,Signal Tag,494,float 32, , ,Digital,ON,OFF,Block 1229 Output 1 +0x23DC,9181,LICA6213-LO-ESD,,Signal Tag,495,float 32, , ,Digital,ON,OFF,Block 929 Output 20 +0x23DE,9183,LICA6213-LO-IL,,Signal Tag,496,float 32, , ,Digital,ON,OFF,Block 929 Output 21 +0x23E0,9185,LICA6213-TRIP,,Signal Tag,497,float 32, , ,Digital,ON,OFF,Block 1234 Output 1 +0x23E2,9187,6213LO-MAN-ESD,,Signal Tag,498,float 32, , ,Digital,ON,OFF,Block 1223 Output 1 +0x23E4,9189,6213-LO-ESD,,Signal Tag,499,float 32, , ,Digital,ON,OFF,Block 1237 Output 1 +0x23E6,9191,TICA6211-HI-ESD,,Signal Tag,500,float 32, , ,Digital,ON,OFF,Block 914 Output 20 +0x23E8,9193,TICA6211-HI-IL,,Signal Tag,501,float 32, , ,Digital,ON,OFF,Block 914 Output 21 +0x23EA,9195,PICA6211-LO-ESD,,Signal Tag,502,float 32, , ,Digital,ON,OFF,Block 915 Output 20 +0x23EC,9197,PICA6211-LO-IL,,Signal Tag,503,float 32, , ,Digital,ON,OFF,Block 915 Output 21 +0x23EE,9199,TICA8111A-TRIP,,Signal Tag,504,float 32,,0,Analog, , ,Block 1096 Output 4 +0x23F0,9201,PICA8111A-TRIP,,Signal Tag,505,float 32,,0,Analog, , ,Block 1096 Output 5 +0x23F2,9203,LICA8113-TRIP,,Signal Tag,506,float 32,,0,Analog, , ,Block 1096 Output 6 +0x23F4,9205,P-3101,,Signal Tag,507,float 32,,0,Analog, , ,Block 1291 Output 2 +0x23F6,9207,P-3101R,,Signal Tag,508,float 32, , ,Digital,ON,OFF,Block 212 Output 9 +0x23F8,9209,P-3101S,,Signal Tag,509,float 32, , ,Digital,ON,OFF,Block 212 Output 10 +0x23FA,9211,P-3101T,,Signal Tag,510,float 32, , ,Digital,ON,OFF,Block 212 Output 11 +0x23FC,9213,TI-3101,,Signal Tag,511,float 32,,0,Analog, , ,Block 185 Output 4 +0x23FE,9215,GEN-BIAS,,Signal Tag,512,float 32,,0,Analog, , ,Block 1310 Output 1 +0x2400,9217,TICA6111A-WSP,,Signal Tag,513,float 32,,0,Analog, , ,Block 799 Output 17 +0x2402,9219,PICA6111-WSP,,Signal Tag,514,float 32,,0,Analog, , ,Block 800 Output 17 +0x2404,9221,FICA6101-WSP,,Signal Tag,515,float 32,,0,Analog, , ,Block 801 Output 17 +0x2406,9223,FICA6113-WSP,,Signal Tag,516,float 32,,0,Analog, , ,Block 802 Output 17 +0x2408,9225,LICA6113-WSP,,Signal Tag,517,float 32,,0,Analog, , ,Block 928 Output 17 +0x240A,9227,FICA6114-WSP,,Signal Tag,518,float 32,,0,Analog, , ,Block 803 Output 17 +0x240C,9229,FICA6116-WSP,,Signal Tag,519,float 32,,0,Analog, , ,Block 804 Output 17 +0x240E,9231,FICA6118-WSP,,Signal Tag,520,float 32,,0,Analog, , ,Block 805 Output 17 +0x2410,9233,TE-6111A-SIM,,Signal Tag,521,float 32,,0,Analog, , ,Block 1312 Output 1 +0x2412,9235,PT-6111-SIM,,Signal Tag,522,float 32,,0,Analog, , ,Block 1313 Output 1 +0x2414,9237,FT-6101-SIM,,Signal Tag,523,float 32,,0,Analog, , ,Block 1314 Output 1 +0x2416,9239,FT-6113-SIM,,Signal Tag,524,float 32,,0,Analog, , ,Block 1315 Output 1 +0x2418,9241,LT-6113-SIM,,Signal Tag,525,float 32,,0,Analog, , ,Block 1316 Output 1 +0x241A,9243,FT-6114-SIM,,Signal Tag,526,float 32,,0,Analog, , ,Block 1317 Output 1 +0x241C,9245,FT-6116-SIM,,Signal Tag,527,float 32,,0,Analog, , ,Block 1318 Output 1 +0x241E,9247,FT-6118-SIM,,Signal Tag,528,float 32,,0,Analog, , ,Block 1319 Output 1 +0x2420,9249,XV-6123,,Signal Tag,529,float 32,,0,Analog, , ,Block 1332 Output 2 +0x2422,9251,XV-6124,,Signal Tag,530,float 32,,0,Analog, , ,Block 1333 Output 2 diff --git a/docs/Sinam_Tag_all.xlsx b/docs/Sinam_Tag_all.xlsx new file mode 100644 index 0000000..4ef6f59 Binary files /dev/null and b/docs/Sinam_Tag_all.xlsx differ diff --git a/docs/SummaryFucntionBlockReport.csv b/docs/SummaryFucntionBlockReport.csv new file mode 100644 index 0000000..43988f2 --- /dev/null +++ b/docs/SummaryFucntionBlockReport.csv @@ -0,0 +1,44 @@ +RevisionID:,0119.0032.0005.0002.0011 +File Name:,HC900-C70 Rev 4.4x : Config1 +Controller Name,CONTROLLER +Title:, +Author:, +Created Date:,2014-02-25 오전 10:01:30 +Modified Date:,2026-06-01 오후 4:41:08 + +Report Title:,Modbus Function Block Summary Report + +Hex Addr,Dec Addr,Tag Name,Description,Type,# +Loop Blocks, , , , , +0x0040,0065,FICQ3101,,PID,#01 +0x0140,0321,LICA5113,,PID,#02 +0x0240,0577,FICA3203,,PID,#03 +0x0340,0833,TICA3202A,,PID,#04 +0x0440,1089,TICA6111A,,PID,#05 +0x0540,1345,PICA3203,,PID,#06 +0x0640,1601,LICA3705,,PID,#07 +0x0740,1857,TICA3403,,PID,#08 +0x0840,2113,LICA3403,,PID,#09 +0x0940,2369,PICA6111,,PID,#10 +0x0A40,2625,FICA6101,,PID,#11 +0x0B40,2881,FICA6113,,PID,#12 +0x0C40,3137,FICA6114,,PID,#13 +0x0D40,3393,FICA6116,,PID,#14 +0x0E40,3649,FICA6118,,PID,#15 +0x0F40,3905,LICA6128,,PID,#16 +0x1040,4161,TICA6211,,PID,#17 +0x1140,4417,PICA6211,,PID,#18 +0x1240,4673,FICA6201,,PID,#19 +0x1340,4929,FICA6213,,PID,#20 +0x1440,5185,FICA6214,,PID,#21 +0x1540,5441,FICA6216,,PID,#22 +0x1640,5697,FICA6218,,PID,#23 +0x1740,5953,TICA5111A,,PID,#24 +0x7840,30785,PICA5111,,PID,#25 +0x7940,31041,FICA5101,,PID,#26 +0x7A40,31297,FICA5113,,PID,#27 +0x7B40,31553,FICA5114,,PID,#28 +0x7C40,31809,FICA5116,,PID,#29 +0x7D40,32065,FICA5118,,PID,#30 +0x7E40,32321,LICA6113,,PID,#31 +0x7F40,32577,LICA6213,,PID,#32 diff --git a/docs/Variables.csv b/docs/Variables.csv new file mode 100644 index 0000000..0a5a74a --- /dev/null +++ b/docs/Variables.csv @@ -0,0 +1,166 @@ +RevisionID:,0118.0032.0005.0002.0011 +File Name:,HC900-C70 Rev 4.4x : Config1 +Controller Name,CONTROLLER +Title:, +Author:, +Created Date:,2014-02-25 오전 10:01:30 +Modified Date:,2026-06-01 오후 4:41:08 + +Report Title:,Modbus Variables Report + +Hex Addr,Dec Addr,Tag Name,Description,Type,#,Data Type,EU,Decimal Places,Tag Type,'On' Label,'Off' Label,Initial/Source +0x18C0,6337,VP8117_HS,,Variable,1,float 32, , ,Digital,START,STOP,STOP +0x18C2,6339,LT3211_LSET,,Variable,2,float 32,,0,Analog, , ,0.00 +0x18C4,6341,LT8113RST,,Variable,3,float 32, , ,Digital,ON,OFF,OFF +0x18C6,6343,LT8113LSET,,Variable,4,float 32,,0,Analog, , ,0.00 +0x18C8,6345,CH8601A_HS,,Variable,5,float 32, , ,Digital,START,STOP,STOP +0x18CA,6347,P3102_HS,,Variable,6,float 32, , ,Digital,START,STOP,STOP +0x18CC,6349,TI8117HSET,,Variable,7,float 32,,0,Analog, , ,0.00 +0x18CE,6351,LT3203_LL_SET,,Variable,8,float 32,%,1,Analog, , ,0.00 +0x18D0,6353,VP3204_HS,,Variable,9,float 32, , ,Digital,START,STOP,STOP +0x18D2,6355,BL3208A_HS,,Variable,10,float 32, , ,Digital,START,STOP,STOP +0x18D4,6357,BL3208B_HS,,Variable,11,float 32, , ,Digital,START,STOP,STOP +0x18D6,6359,P3205_HS,,Variable,12,float 32, , ,Digital,START,STOP,STOP +0x18D8,6361,TI8117RST,,Variable,13,float 32, , ,Digital,ON,OFF,OFF +0x18DA,6363,P3208B_HS,,Variable,14,float 32, , ,Digital,START,STOP,STOP +0x18DC,6365,P3208A_HS,,Variable,15,float 32, , ,Digital,START,STOP,STOP +0x18DE,6367,LT3208_LL_SET,,Variable,16,float 32,%,1,Analog, , ,0.00 +0x18E0,6369,XV6123_HS,,Variable,17,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x18E2,6371,XV6124_HS,,Variable,18,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x18E4,6373,XV6223_HS,,Variable,19,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x18E6,6375,LT3207_LL_SET,,Variable,20,float 32,%,1,Analog, , ,0.00 +0x18E8,6377,XV6224_HS,,Variable,21,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x18EA,6379,TICA3202A-IL-RST,,Variable,22,float 32, , ,Digital,ON,OFF,OFF +0x18EC,6381,P6114_HS,,Variable,23,float 32, , ,Digital,START,STOP,STOP +0x18EE,6383,FIQ6113_RST,,Variable,24,float 32, , ,Digital,ON,OFF,OFF +0x18F0,6385,FIQ5320_RESET,,Variable,25,float 32, , ,Digital,ON,OFF,OFF +0x18F2,6387,VP8117_AUTO,,Variable,26,float 32, , ,Digital,AUTO,MAN,MAN +0x18F4,6389,PICA3203-IL-RST,,Variable,27,float 32, , ,Digital,ON,OFF,OFF +0x18F6,6391,TICA3403-IL-RST,,Variable,28,float 32, , ,Digital,ON,OFF,OFF +0x18F8,6393,P3102_AUTO,,Variable,29,float 32, , ,Digital,AUTO,MAN,MAN +0x18FA,6395,LICA5113-IL-RST,,Variable,30,float 32, , ,Digital,ON,OFF,OFF +0x18FC,6397,TICA5111A-IL-RST,,Variable,31,float 32, , ,Digital,ON,OFF,OFF +0x18FE,6399,PICA5111-IL-RST,,Variable,32,float 32, , ,Digital,ON,OFF,OFF +0x1900,6401,HT_SP,,Variable,33,float 32,,1,Analog, , ,0.00 +0x1902,6403,LICA6113-IL-RST,,Variable,34,float 32, , ,Digital,ON,OFF,OFF +0x1904,6405,TICA6111A-IL-RST,,Variable,35,float 32, , ,Digital,ON,OFF,OFF +0x1906,6407,PICA6111-IL-RST,,Variable,36,float 32, , ,Digital,ON,OFF,OFF +0x1908,6409,FIQ6101_RST,,Variable,37,float 32, , ,Digital,ON,OFF,OFF +0x190A,6411,LICA6213-IL-RST,,Variable,38,float 32, , ,Digital,ON,OFF,OFF +0x190C,6413,XV3202_HS,,Variable,39,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x190E,6415,AG3202_HS,,Variable,40,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1910,6417,FIQ6114_RST,,Variable,41,float 32, , ,Digital,ON,OFF,OFF +0x1912,6419,P6102_HS,,Variable,42,float 32, , ,Digital,START,STOP,STOP +0x1914,6421,TICA6211-IL-RST,,Variable,43,float 32, , ,Digital,ON,OFF,OFF +0x1916,6423,P201_HS,,Variable,44,float 32, , ,Digital,START,STOP,STOP +0x1918,6425,AG3202_AUTO,,Variable,45,float 32, , ,Digital,AUTO,MAN,MAN +0x191A,6427,PICA6211-IL-RST,,Variable,46,float 32, , ,Digital,ON,OFF,OFF +0x191C,6429,VP6117_HS,,Variable,47,float 32, , ,Digital,START,STOP,STOP +0x191E,6431,AG3208_HS,,Variable,48,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1920,6433,XV3208C_HS,,Variable,49,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1922,6435,XV3208B_HS,,Variable,50,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1924,6437,XV3208B_AUTO,,Variable,51,float 32, , ,Digital,AUTO,MAN,MAN +0x1926,6439,LT3101_LL_SET,,Variable,52,float 32,%,1,Analog, , ,0.00 +0x1928,6441,LT5111SP,,Variable,53,float 32,,0,Analog, , ,0.00 +0x192A,6443,FQ3101_RESET,,Variable,54,float 32, , ,Digital,ON,OFF,OFF +0x192C,6445,AG3202A_RPM,,Variable,55,float 32,Hz,1,Analog, , ,0.00 +0x192E,6447,LT6111SP,,Variable,56,float 32,,0,Analog, , ,0.00 +0x1930,6449,LT6211SP,,Variable,57,float 32,,0,Analog, , ,0.00 +0x1932,6451,FLT_SIM,,Variable,58,float 32, , ,Digital,ON,OFF,OFF +0x1934,6453,REM_LOCAL,,Variable,59,float 32, , ,Digital,ON,OFF,OFF +0x1936,6455,RUN_STOP,,Variable,60,float 32, , ,Digital,ON,OFF,OFF +0x1938,6457,HUNTING-RATIO,,Variable,61,float 32,,2,Analog, , ,0.10 +0x193A,6459,VAR062,,Variable,62,float 32,,2,Analog, , ,0.30 +0x1942,6467,PH_HH_SET,,Variable,66,float 32,pH,1,Analog, , ,0.00 +0x1944,6469,PH_LL_SET,,Variable,67,float 32,pH,1,Analog, , ,0.00 +0x1946,6471,FQ3208_RESET,,Variable,68,float 32, , ,Digital,ON,OFF,OFF +0x194A,6475,FQ3208_L_SET,,Variable,70,float 32,,1,Analog, , ,0.00 +0x194C,6477,P3101_START_SEL,,Variable,71,float 32, , ,Digital,B,A,A +0x1952,6483,FQ3203_RESET,,Variable,74,float 32, , ,Digital,ON,OFF,OFF +0x1954,6485,P3205A_RPM,,Variable,75,float 32,rpm,1,Analog, , ,0.00 +0x1956,6487,P3205B_RPM,,Variable,76,float 32,rpm,1,Analog, , ,0.00 +0x1958,6489,P3206A_RPM,,Variable,77,float 32,rpm,1,Analog, , ,0.00 +0x195A,6491,P3206B_RPM,,Variable,78,float 32,rpm,1,Analog, , ,0.00 +0x1960,6497,P6123_HS,,Variable,81,float 32, , ,Digital,START,STOP,STOP +0x1962,6499,P6128B_HS,,Variable,82,float 32, , ,Digital,START,STOP,STOP +0x1964,6501,P6128A_HS,,Variable,83,float 32, , ,Digital,START,STOP,STOP +0x1966,6503,P6218_HS,,Variable,84,float 32, , ,Digital,START,STOP,STOP +0x196A,6507,P6216_HS,,Variable,86,float 32, , ,Digital,START,STOP,STOP +0x196C,6509,P6214_HS,,Variable,87,float 32, , ,Digital,START,STOP,STOP +0x1978,6521,FQ3208B_RESET,,Variable,93,float 32, , ,Digital,ON,OFF,OFF +0x197A,6523,FQ3208B_SP,,Variable,94,float 32,,0,Analog, , ,0.00 +0x197C,6525,MT_FEED_START,,Variable,95,float 32, , ,Digital,ON,OFF,OFF +0x197E,6527,FIQ3101_EVE,,Variable,96,float 32,%,1,Analog, , ,0.00 +0x1980,6529,SWTEMP_L_SET,,Variable,97,float 32,degC,1,Analog, , ,0.00 +0x1982,6531,FIQ3102_EVE,,Variable,98,float 32,,0,Analog, , ,0.00 +0x1984,6533,HTR01_CMD,,Variable,99,float 32, , ,Digital,ON,OFF,OFF +0x1986,6535,TE3102A_HH_SET,,Variable,100,float 32,degC,1,Analog, , ,0.00 +0x1988,6537,TE3102A_LL_SET,,Variable,101,float 32,degC,1,Analog, , ,0.00 +0x198A,6539,TE3102B_LL_SET,,Variable,102,float 32,degC,1,Analog, , ,0.00 +0x198C,6541,TE3102B_HH_SET,,Variable,103,float 32,degC,1,Analog, , ,0.00 +0x198E,6543,HTR02_CMD,,Variable,104,float 32, , ,Digital,ON,OFF,OFF +0x1990,6545,SWTEMP_H_SET,,Variable,105,float 32,degC,1,Analog, , ,0.00 +0x1992,6547,HTR04_CMD,,Variable,106,float 32, , ,Digital,ON,OFF,OFF +0x1994,6549,FQ3401_RST,,Variable,107,float 32, , ,Digital,ON,OFF,OFF +0x1996,6551,XV3402_HS,,Variable,108,float 32, , ,Digital,OPEN,CLOSE,CLOSE +0x1998,6553,XV3402_AUTO,,Variable,109,float 32, , ,Digital,AUTO,MAN,MAN +0x199A,6555,FQ3402_RST,,Variable,110,float 32, , ,Digital,ON,OFF,OFF +0x199C,6557,P6201_HS,,Variable,111,float 32, , ,Digital,START,STOP,STOP +0x199E,6559,P6223_HS,,Variable,112,float 32, , ,Digital,START,STOP,STOP +0x19A0,6561,VP6217_HS,,Variable,113,float 32, , ,Digital,START,STOP,STOP +0x19A2,6563,P6116_HS,,Variable,114,float 32, , ,Digital,START,STOP,STOP +0x19A4,6565,P203_HS,,Variable,115,float 32, , ,Digital,START,STOP,STOP +0x19A6,6567,P5118_HS,,Variable,116,float 32, , ,Digital,START,STOP,STOP +0x19A8,6569,P5115_HS,,Variable,117,float 32, , ,Digital,START,STOP,STOP +0x19AA,6571,P3401_HS,,Variable,118,float 32, , ,Digital,START,STOP,STOP +0x19AC,6573,P3402_HS,,Variable,119,float 32, , ,Digital,START,STOP,STOP +0x19AE,6575,P5114_HS,,Variable,120,float 32, , ,Digital,START,STOP,STOP +0x19B0,6577,P5101_HS,,Variable,121,float 32, , ,Digital,START,STOP,STOP +0x19B2,6579,P6118_HS,,Variable,122,float 32, , ,Digital,START,STOP,STOP +0x19B4,6581,VP5117_HS,,Variable,123,float 32, , ,Digital,START,STOP,STOP +0x19B6,6583,P2203_HS,,Variable,124,float 32, , ,Digital,START,STOP,STOP +0x19B8,6585,P5116_HS,,Variable,125,float 32, , ,Digital,START,STOP,STOP +0x19BA,6587,CH5601_HS,,Variable,126,float 32, , ,Digital,START,STOP,STOP +0x19BC,6589,FICA3102_OP,,Variable,127,float 32,%,2,Analog, , ,0.00 +0x19BE,6591,FIQ5101_RESET,,Variable,128,float 32, , ,Digital,ON,OFF,OFF +0x19C0,6593,FIQ5113_RESET,,Variable,129,float 32, , ,Digital,ON,OFF,OFF +0x19C2,6595,FIQ5114_RESET,,Variable,130,float 32, , ,Digital,ON,OFF,OFF +0x19C4,6597,FIQ6118_RST,,Variable,131,float 32, , ,Digital,ON,OFF,OFF +0x19C6,6599,FIQ6116_RST,,Variable,132,float 32, , ,Digital,ON,OFF,OFF +0x19C8,6601,FIQ6115_RST,,Variable,133,float 32, , ,Digital,ON,OFF,OFF +0x19CA,6603,FIQ6215_RST,,Variable,134,float 32, , ,Digital,ON,OFF,OFF +0x19CC,6605,FIQ6201_RST,,Variable,135,float 32, , ,Digital,ON,OFF,OFF +0x19CE,6607,FIQ6218_RST,,Variable,136,float 32, , ,Digital,ON,OFF,OFF +0x19D0,6609,FIQ6216_RST,,Variable,137,float 32, , ,Digital,ON,OFF,OFF +0x19D2,6611,FIQ6214_RST,,Variable,138,float 32, , ,Digital,ON,OFF,OFF +0x19D4,6613,FIQ6213_RST,,Variable,139,float 32, , ,Digital,ON,OFF,OFF +0x19D6,6615,LT6111_LL_SET,,Variable,140,float 32,%,1,Analog, , ,0.00 +0x19D8,6617,LT6211_LL_SET,,Variable,141,float 32,%,1,Analog, , ,0.00 +0x19DA,6619,LT5111_LL_SET,,Variable,142,float 32,%,1,Analog, , ,0.00 +0x19DC,6621,LT6128_LL_SET,,Variable,143,float 32,%,1,Analog, , ,0.00 +0x19DE,6623,FIQ6220_RESET,,Variable,144,float 32, , ,Digital,ON,OFF,OFF +0x19E0,6625,FIQ6120_RESET,,Variable,145,float 32, , ,Digital,ON,OFF,OFF +0x19E2,6627,P6123_ISC,,Variable,146,float 32,Hz,1,Analog, , ,0.00 +0x19E4,6629,FIQ5115_RESET,,Variable,147,float 32, , ,Digital,ON,OFF,OFF +0x19E6,6631,FIQ5116_RESET,,Variable,148,float 32, , ,Digital,ON,OFF,OFF +0x19E8,6633,FIQ5118_RESET,,Variable,149,float 32, , ,Digital,ON,OFF,OFF +0x19EA,6635,P6223_ISC,,Variable,150,float 32,Hz,1,Analog, , ,0.00 +0x19EC,6637,P5102_HS,,Variable,151,float 32, , ,Digital,START,STOP,STOP +0x19EE,6639,P5102_ISC,,Variable,152,float 32,Hz,1,Analog, , ,0.00 +0x19F0,6641,P6202_HS,,Variable,153,float 32, , ,Digital,START,STOP,STOP +0x19F2,6643,P6202_ISC,,Variable,154,float 32,Hz,1,Analog, , ,0.00 +0x19F4,6645,P6102_ISC,,Variable,155,float 32,Hz,1,Analog, , ,0.00 +0x19F6,6647,P8601A_HS,,Variable,156,float 32, , ,Digital,START,STOP,STOP +0x19F8,6649,P8601B_HS,,Variable,157,float 32, , ,Digital,START,STOP,STOP +0x19FA,6651,CH8601B_HS,,Variable,158,float 32, , ,Digital,START,STOP,STOP +0x19FC,6653,P8101_HS,,Variable,159,float 32, , ,Digital,START,STOP,STOP +0x19FE,6655,P8114_HS,,Variable,160,float 32, , ,Digital,START,STOP,STOP +0x1A00,6657,P8118_HS,,Variable,161,float 32, , ,Digital,START,STOP,STOP +0x1A02,6659,P8116_HS,,Variable,162,float 32, , ,Digital,START,STOP,STOP +0x1A04,6661,P8101_ISC,,Variable,163,float 32,,0,Analog, , ,0.00 +0x1A06,6663,FIQ8101_RESET,,Variable,164,float 32, , ,Digital,ON,OFF,OFF +0x1A08,6665,FIQ8115_RESET,,Variable,165,float 32, , ,Digital,ON,OFF,OFF +0x1A0A,6667,FIQ8113_RESET,,Variable,166,float 32, , ,Digital,ON,OFF,OFF +0x1A0C,6669,FIQ8118_RESET,,Variable,167,float 32, , ,Digital,ON,OFF,OFF +0x1A0E,6671,FIQ8116_RESET,,Variable,168,float 32, , ,Digital,ON,OFF,OFF +0x1A10,6673,FIQ8114_RESET,,Variable,169,float 32, , ,Digital,ON,OFF,OFF diff --git a/docs/architecture-brainstorm.md b/docs/architecture-brainstorm.md new file mode 100644 index 0000000..cef5e64 --- /dev/null +++ b/docs/architecture-brainstorm.md @@ -0,0 +1,219 @@ +# HC900 직접 통신 아키텍처 브레인스토밍 + +참고: `51-52-25-111-HC900-Process-Controller-Communications-manual.pdf` (Rev 13, April 2017) + +--- + +## HC900 Modbus 통신 요약 (매뉴얼 기반) + +### 기본 프로토콜 +- Modbus TCP (Ethernet) + Modbus RTU (RS232/RS485) +- IP 기본값: 192.168.1.254 +- 최대 동시 연결: C30/C50=5, C70/C70R=10 +- Unit ID: Modbus TCP에서는 사용 안 함 (00) +- Double Register Format: HC900 기본값은 **FP B (Big Endian)** — 4,3,2,1 byte 순서 + - Experion/Honeywell PlantScape는 FP B 사용 + - Modicon/Wonderware 표준은 **FP LB (Little Endian Byte-Swapped)** — 2,1,4,3 + +### 지원 Function Code +| Code | 기능 | HC900 사용 | +|---|---|---| +| 03 | Read Holding Registers | **주력** — float/int holding register 읽기 | +| 04 | Read Input Registers | Analog Input 전용 (v4.0+에서 03 대체) | +| 06 | Preset Single Register | Integer 단일 레지스터 쓰기 | +| 16 (10h) | Preset Multiple Registers | Float 다중 레지스터 쓰기 | +| 01/02 | Read Digital Output/Input | DI/DO 전용 | +| 05 | Force Single Coil | DO 제어 | + +### Fixed Map 개요 (Table 6-1) + +| 시작 주소 | 끝 주소 | 내용 | 비고 | +|---|---|---|---| +| 0000 | 003F | 시스템 파라미터 | Instrument Mode, Load Recipe 등 | +| 0040 | 00FF | Loop #1 (PID) | 192bytes: PV, SP, OP, alarms, mode 등 | +| 0140 | 01FF | Loop #2 | Loop마다 256(0x100) offset | +| ... | ... | Loop #3~#24 | | +| 1800 | 187F | Analog Input #1~#64 | FC03 전용, Rack#1 첫 8슬롯만 (v4.0+ 불가) | +| 18C0 | 1D6F | Variable #1~#600 | R/W 가능 | +| 2000 | 27CF | Signal Tag #1~#1000 | Legacy, Read-only | +| 3B60 | 5A9F | Signal Tag #1~#4000 | HC900 범위, Read-only | +| B000 | B3E7 | User Defined | R/W (signal=read-only, variable=R/W) | +| 7840 | 7FFF | Loop #25~#32 | 확장 루프 | + +### Loop 파라미터 (Table 6-3, Loop #1 기준) + +| Offset | 파라미터 | Type | Access | +|--------|---------|------|--------| +| +00 | PV | float | R | +| +02 | Remote SP (SP2) | float | R/W | +| +04 | Working SP | float | R/W | +| +06 | Output (OP) | float | R/W | +| +0C | PV (중복) | float | R | +| +0E | PV (다른 타입) | float | R | +| +2A | LSP #1 | float | R/W | +| +5A | Auto/Manual State | bit | R/W | +| +5E | Loop Status | bit | R | +| +BA | Enable/Disable Fuzzy | bit | R/W | +| +BB | Demand Tune Request | bit | R/W | +| +BD | SP State (SP1/SP2 선택) | bit | R/W | +| +BE | Remote/Local SP State | bit | R/W | +| +BF | Tune Set State | bit | R/W | + +루프마다 192개(0xC0) 레지스터 사용. Loop #N 시작주소 = `0x40 + (N-1) * 0x100` + +### Signal Tags (Table 6-11) +- Legacy: 2000~27CF (#1~#1000), HC900: 3B60~5A9F (#1~#4000) +- 각 태그는 float 2-register 사용 (even address) +- **Tag 번호와 실제 태그명의 매핑은 HC Designer의 "Tag Information" 리포트에서 확인** +- Read-only + +### Variables (Table 6-5) +- 18C0~1D6F (#1~#600) +- 각 2-register float +- R/W 가능 + +### Float 포맷 (매뉴얼 3장) +HC900 컨트롤러는 Double Register Format을 설정 가능: +- **FP B** (기본): Big Endian — Byte4,3,2,1 → Reg N(High)=Byte4,3 / Reg N+1(Low)=Byte2,1 +- **FP LB**: Little Endian Byte-Swapped — Byte2,1,4,3 → Reg N(High)=Byte2,1 / Reg N+1(Low)=Byte4,3 + +**HC900_FLOAT 포맷 (= FP B)**: BigEndian byte order + LowFirst (word swap)?? + +## 현재 구성 요소 + +| 구성 요소 | 플랫폼 | 통신 방식 | 용도 | +|---|---|---|---| +| **ExperionCrawler** | Ubuntu (C# .NET 8) | OPC UA → Experion HS R530 | OPC UA 데이터 수집/저장/API | +| **industrial-comm** | Ubuntu (C++17) | Modbus TCP → HC900 | HC900 Modbus TCP 라이브러리 (libcomm_core.so) | +| **NKOpcTunnel** | Windows (C++) | OPC Classic 터널링 (TCP/IP) | DCOM 없는 OPC Classic 통신 (본 프로젝트와 무관) | + +## 목표 + +ExperionCrawler의 OPC UA → Experion 경로를 **Modbus TCP → HC900** 경로로 대체한 변형 버전 제작. + +Experion을 거치지 않고 HC900과 직접 통신. + +## 제안 아키텍처 + +``` +HC900 Controller + │ Modbus TCP (port 502) + ▼ +industrial-comm (C++ gateway, standalone process) + │ gRPC + ▼ +HC900Crawler (C# .NET 8, ExperionCrawler 변형) + │ EF Core + ▼ +PostgreSQL (iiot_platform) +``` + +## 필요한 작업 + +### Phase 1: C++ 게이트웨이 완성 + +- main.cpp 에 gRPC 서버 추가 +- gRPC proto 정의 (ReadTag, WriteTag, ReadMultiple, BrowseRegisterMap) +- watchdog 스레드 실제 구현 확인 +- cmake에 modbus_tcp.cpp, app_init.cpp 포함 + +### Phase 2: C# 변형 앱 + +ExperionCrawler에서 OPC UA 계층을 gRPC Client로 교체: + +| 기존 (OPC UA) | 변경 (Modbus TCP via gRPC) | +|---|---| +| IExperionOpcClient | IModbusTcpClient (gRPC 호출) | +| ExperionRealtimeService (Subscription) | Hc900RealtimeService (폴링 기반) | +| IExperionOpcWriteClient | IModbusWriteClient (gRPC write) | +| BrowseNodesAsync | Hc900RegisterMapLoader (설정 파일 기반) | + +### Phase 3: 레지스터-태그 매핑 + +HC900은 OPC UA의 NodeId 개념이 없음 → 레지스터 주소-태그 매핑 필요 + +```json +{ + "registers": [ + { "address": 100, "tag": "TI-6101", "type": "float", "format": "HC900_FLOAT" }, + { "address": 102, "tag": "PIC-6102.SP", "type": "float", "format": "HC900_FLOAT" }, + { "address": 200, "tag": "XV-6201", "type": "uint16" } + ] +} +``` + +## 유지되는 ExperionCrawler 기능 + +- DB 스키마 (realtime_table, history_table, event_history_table, tag_metadata) +- Background Service 패턴 +- Web API / Controllers +- PostgreSQL + TimeScaleDB +- P&ID 관련 기능 (옵션) +- Feedforward Advisory (옵션) + +## HC900 Modbus Mapping: Fixed vs Custom + +HC900은 **두 가지** Modbus 레지스터 매핑 방식을 지원함 (매뉴얼 §1.1). + +### 실무적 결론 + +- **대부분 Fixed Map을 기본 사용** — PID loop 32개 초과 같은 특별한 경우에만 Custom Map으로 전환 +- **Custom Map으로 전환해도 Fixed Map의 주소 체계가 그대로 Custom Map으로 전달됨** (기존 주소 유지) +- 따라서 **매뉴얼의 Fixed Map (Table 6-1)이 실질적인 표준 주소 맵** + + + +### Fixed Map (고정 맵) + +| 특징 | 내용 | +|---|---| +| 제한된 파라미터, 제한된 수량 | 최대 32 loops, SP Programmer 4~8개 등 | +| 그룹화된 주소 범위 | Loop는 0x40~0xFF 범위 고정 | +| 모든 파라미터가 항상 매핑 | PID loop 40여개 파라미터 모두 | +| 편집 제한 | 주소 범위 내에서 이동만 가능 | +| **Firmware 무관** | 모든 HC900 버전에서 사용 가능 | + +### Custom Map (사용자 정의 맵) + +| 특징 | 내용 | +|---|---| +| 많은 파라미터 선택 가능 | 주소 범위만 허용하면 무제한에 가까움 | +| 선택적 매핑 | 필요한 파라미터만 골라서 할당 (예: PV, SP, OP만) | +| **유연한 주소 지정** | 어느 주소에나 할당 가능 | +| **추가 블록 지원** | Push Button, AGA, Calendar Event, XYR5000, UDC Loop 등 | +| **v4.0 이상만 가능** | | + +### 핵심 차이점 + +``` +Fixed Map: PID Loop #1 → 항상 주소 0x40~0xFF (PV/SP/OP/Alarm/... 전부) +Custom Map: PID Loop #1 → 사용자가 지정한 주소 (PV만 별도 주소에 할당 가능) +``` + +→ **Custom Map을 사용하면 매뉴얼의 Fixed 주소 테이블이 적용되지 않음** +→ Custom Map의 주소는 **HC Designer에서 "Block Modbus Address" 리포트로만 확인 가능** + +**확인 필요**: 대상 HC900 컨트롤러들이 Fixed Map을 쓰는지, Custom Map을 쓰는지? + +## HC900 레지스터 맵 확보 방안 + +**HC900 Controller Designer Software**에서 통신레지스터 주소와 태그명을 추출 가능. + +CDE 파일은 binary export 포맷이라 직접 파싱은 복잡했으나, +Designer 프로그램 자체에서 다음 리포트를 CSV/텍스트로 export 가능 (매뉴얼 §1.1): +1. **Tag Information Report** — Variables와 Signal Tags를 번호순 + Modbus 주소와 함께 리스트 +2. **Block Modbus Address Report** — 모든 주요 블록의 시작 주소 + +설계 소프트웨어에서 추출해야 할 핵심 정보: +- 각 블록(AI/PID/AO)의 Modbus holding register 시작 주소 +- 블록별 파라미터의 register offset map (PV, SP, OP, MODE 등) +- 블록 태그명 (예: "TI-6101", "PIC-6102") +- 데이터 타입 (float 2-register, uint16 1-register 등) + +## 오픈 이슈 + +- [ ] C++ 게이트웨이 통신 방식: gRPC vs Unix Socket vs Raw TCP? +- [ ] 레지스터 맵 확보: CDE 파싱 재도전? JSON 수동 정의? 스캔 툴? +- [ ] ExperionCrawler를 fork? 아니면 같은 솔루션에 확장? +- [ ] HC900 float format 외에 다른 데이터 타입도 HC900 특화 포맷이 있는가? +- [ ] 프로젝트명: HC900Crawler? ModbusCrawler? diff --git a/docs/c4_tag_mapping.csv b/docs/c4_tag_mapping.csv new file mode 100644 index 0000000..26160a1 --- /dev/null +++ b/docs/c4_tag_mapping.csv @@ -0,0 +1,720 @@ +tagname,hc900_tag,modbus_addr,modbus_addr_hex,data_type,access,loop_no,param_type,description,experion_src,is_active +c4p1-dc24v-a-ok,C4P1_DC24_A_OK,8248,0x2038,float32,R,,SIG,,C4 TAG 29 VALUE,TRUE +c4p1-dc24v-b-ok,C4P1_DC24_B_OK,8250,0x203A,float32,R,,SIG,,C4 TAG 30 VALUE,TRUE +p-9114,P_9114,8254,0x203E,float32,R,,SIG,,C4 TAG 32 VALUE,TRUE +p-9118,P_9118,8256,0x2040,float32,R,,SIG,,C4 TAG 33 VALUE,TRUE +p-9116,P_9116,8258,0x2042,float32,R,,SIG,,C4 TAG 34 VALUE,TRUE +p-9121,P_9121,8260,0x2044,float32,R,,SIG,,C4 TAG 35 VALUE,TRUE +p-9122,P_9122,8262,0x2046,float32,R,,SIG,,C4 TAG 36 VALUE,TRUE +p-9201,P_9201,8266,0x204A,float32,R,,SIG,,C4 TAG 38 VALUE,TRUE +p-9214,P_9214,8268,0x204C,float32,R,,SIG,,C4 TAG 39 VALUE,TRUE +p-9218,P_9218,8270,0x204E,float32,R,,SIG,,C4 TAG 40 VALUE,TRUE +p-9216,P_9216,8272,0x2050,float32,R,,SIG,,C4 TAG 41 VALUE,TRUE +p-9221,P_9221,8274,0x2052,float32,R,,SIG,,C4 TAG 42 VALUE,TRUE +vp-9117,VP_9117,8278,0x2056,float32,R,,SIG,,C4 TAG 44 VALUE,TRUE +vp-9217,VP_9217,8280,0x2058,float32,R,,SIG,,C4 TAG 45 VALUE,TRUE +f-9601,F_9601,8286,0x205E,float32,R,,SIG,,C4 TAG 48 VALUE,TRUE +p-9128a,P_9128A,8288,0x2060,float32,R,,SIG,,C4 TAG 49 VALUE,TRUE +p-9128b,P_9128B,8290,0x2062,float32,R,,SIG,,C4 TAG 50 VALUE,TRUE +xv-9101,XV_9101,8292,0x2064,float32,R,,SIG,,C4 TAG 51 VALUE,TRUE +tic-9111a-hi-esd,TIC9111A_HI_ESD,8300,0x206C,float32,R,,SIG,,C4 TAG 55 VALUE,TRUE +tic-9111a-hi-il,TIC9111A_HI_IL,8298,0x206A,float32,R,,SIG,,C4 TAG 54 VALUE,TRUE +tic-9211a-hi-esd,TIC9211A_HI_ESD,8312,0x2078,float32,R,,SIG,,C4 TAG 61 VALUE,TRUE +tic-9211a-hi-il,TIC9211A_HI_IL,8314,0x207A,float32,R,,SIG,,C4 TAG 62 VALUE,TRUE +lic-9213-il-rst,LIC9213_IL_RST,6444,0x192C,float32,R/W,,VAR,,C4 MATH_VAR 55 VALUE,TRUE +p9c1-man-esd,P9C1_MAN_ESD,6428,0x191C,float32,R/W,,VAR,,C4 MATH_VAR 47 VALUE,TRUE +p9c2-man-esd,P9C2_MAN_ESD,6450,0x1932,float32,R/W,,VAR,,C4 MATH_VAR 58 VALUE,TRUE +tic-9111a-trip,TIC9111A_TRIP,8322,0x2082,float32,R,,SIG,,C4 TAG 66 VALUE,TRUE +lic-9113-trip,LIC91113_TRIP,8326,0x2086,float32,R,,SIG,,C4 TAG 68 VALUE,TRUE +tic-9211a-trip,TIC9211A_TRIP,8328,0x2088,float32,R,,SIG,,C4 TAG 69 VALUE,TRUE +lic-9213-trip,LIC9213_TRIP,8332,0x208C,float32,R,,SIG,,C4 TAG 71 VALUE,TRUE +lic-9113-il-rst,LIC9113_IL_RST,6436,0x1924,float32,R/W,,VAR,,C4 MATH_VAR 51 VALUE,TRUE +lic-9113-lo-il,LIC9113_LO_IL,8306,0x2072,float32,R,,SIG,,C4 TAG 58 VALUE,TRUE +lic-9213-lo-il,LIC9213_LO_IL,8310,0x2076,float32,R,,SIG,,C4 TAG 60 VALUE,TRUE +lic-9213-lo-esd,LIC9213_LO_ESD,8308,0x2074,float32,R,,SIG,,C4 TAG 59 VALUE,TRUE +lic-9113-lo-esd,LIC9113_LO_ESD,8294,0x2066,float32,R,,SIG,,C4 TAG 52 VALUE,TRUE +9100-man-esd,9100_MAN_ESD,8302,0x206E,float32,R,,SIG,,C4 TAG 56 VALUE,TRUE +9200-man-esd,9200_MAN_ESD,8320,0x2080,float32,R,,SIG,,C4 TAG 65 VALUE,TRUE +9100-esd,9100_ESD,8366,0x20AE,float32,R,,SIG,,C4 TAG 88 VALUE,TRUE +9200-esd,9200_ESD,8368,0x20B0,float32,R,,SIG,,C4 TAG 89 VALUE,TRUE +p-9101,P_9101,8252,0x203C,float32,R,,SIG,,C4 TAG 31 VALUE,TRUE +p9z1-am-sel,P9Z1_AM_SEL,6346,0x18CA,float32,R/W,,VAR,,C4 MATH_VAR 6 VALUE,TRUE +p9z2-am-sel,P9Z2_AM_SEL,6350,0x18CE,float32,R/W,,VAR,,C4 MATH_VAR 8 VALUE,TRUE +p9z3-am-sel,P9Z3_AM_SEL,6354,0x18D2,float32,R/W,,VAR,,C4 MATH_VAR 10 VALUE,TRUE +p9z4-am-sel,P9Z4_AM_SEL,6358,0x18D6,float32,R/W,,VAR,,C4 MATH_VAR 12 VALUE,TRUE +p9z1-man-on,P9Z1_MAN_ON,6366,0x18DE,float32,R/W,,VAR,,C4 MATH_VAR 16 VALUE,TRUE +p9z2-man-on,P9Z2_MAN_ON,6370,0x18E2,float32,R/W,,VAR,,C4 MATH_VAR 18 VALUE,TRUE +p9z3-man-on,P9Z3_MAN_ON,6374,0x18E6,float32,R/W,,VAR,,C4 MATH_VAR 20 VALUE,TRUE +p9z4-man-on,P9Z4_MAN_ON,6378,0x18EA,float32,R/W,,VAR,,C4 MATH_VAR 22 VALUE,TRUE +p9-lamp-schedule,P9_LAMP_SCHEDULE,6342,0x18C6,float32,R/W,,VAR,,C4 MATH_VAR 4 VALUE,TRUE +p9z1-lamp,P9Z1_LAMP,8372,0x20B4,float32,R,,SIG,,C4 TAG 91 VALUE,TRUE +p9z2-lamp,P9Z2_LAMP,8374,0x20B6,float32,R,,SIG,,C4 TAG 92 VALUE,TRUE +p9z3-lamp,P9Z3_LAMP,8376,0x20B8,float32,R,,SIG,,C4 TAG 93 VALUE,TRUE +p9z4-lamp,P9Z4_LAMP,8378,0x20BA,float32,R,,SIG,,C4 TAG 94 VALUE,TRUE +pic-9111a-il-rst,PIC9111A_IL_RST,6434,0x1922,float32,R/W,,VAR,,C4 MATH_VAR 50 VALUE,TRUE +pic-9111a-lo-esd,PIC9111A_LO_ESD,8304,0x2070,float32,R,,SIG,,C4 TAG 57 VALUE,TRUE +pic-9111a-lo-il,PIC9111A_LO_IL,8296,0x2068,float32,R,,SIG,,C4 TAG 53 VALUE,TRUE +pic-9111a-trip,PIC9111A_TRIP,8324,0x2084,float32,R,,SIG,,C4 TAG 67 VALUE,TRUE +pic-9211a-il-rst,PIC9211A_IL_RST,6442,0x192A,float32,R/W,,VAR,,C4 MATH_VAR 54 VALUE,TRUE +pic-9211a-lo-esd,PIC9211A_LO_ESD,8316,0x207C,float32,R,,SIG,,C4 TAG 63 VALUE,TRUE +pic-9211a-lo-il,PIC9211A_LO_IL,8318,0x207E,float32,R,,SIG,,C4 TAG 64 VALUE,TRUE +pic-9211a-trip,PIC9211B_TRIP,8330,0x208A,float32,R,,SIG,,C4 TAG 70 VALUE,TRUE +xv-9128,XV_9128,8396,0x20CC,float32,R,,SIG,,C4 TAG 103 VALUE,TRUE +xv-6121,XV_6121,8388,0x20C4,float32,R,,SIG,,C4 TAG 99 VALUE,TRUE +xv-6122,XV_6122,8390,0x20C6,float32,R,,SIG,,C4 TAG 100 VALUE,TRUE +xv-6221,XV_6221,8392,0x20C8,float32,R,,SIG,,C4 TAG 101 VALUE,TRUE +xv-6222,XV_6222,8394,0x20CA,float32,R,,SIG,,C4 TAG 102 VALUE,TRUE +xv-6125a,XV_6125A,8534,0x2156,float32,R,,SIG,,C4 TAG 172 VALUE,TRUE +xv-6125b,XV_6125B,8536,0x2158,float32,R,,SIG,,C4 TAG 173 VALUE,TRUE +xv-6126a,XV_6126A,8538,0x215A,float32,R,,SIG,,C4 TAG 174 VALUE,TRUE +xv-6126b,XV_6126B,8540,0x215C,float32,R,,SIG,,C4 TAG 175 VALUE,TRUE +xv-6225a,XV_6225A,8542,0x215E,float32,R,,SIG,,C4 TAG 176 VALUE,TRUE +xv-6225b,XV_6225B,8544,0x2160,float32,R,,SIG,,C4 TAG 177 VALUE,TRUE +xv-6226a,XV_6226A,8546,0x2162,float32,R,,SIG,,C4 TAG 178 VALUE,TRUE +xv-6226b,XV_6226B,8548,0x2164,float32,R,,SIG,,C4 TAG 179 VALUE,TRUE +xv-6127,XV_6127,8550,0x2166,float32,R,,SIG,,C4 TAG 180 VALUE,TRUE +xv-6227,XV_6227,8552,0x2168,float32,R,,SIG,,C4 TAG 181 VALUE,TRUE +xv-9120,XV_9120,8554,0x216A,float32,R,,SIG,,C4 TAG 182 VALUE,TRUE +p-6127,P_6127,8556,0x216C,float32,R,,SIG,,C4 TAG 183 VALUE,TRUE +p-6227,P_6227,8558,0x216E,float32,R,,SIG,,C4 TAG 184 VALUE,TRUE +p-9120,P_9120,8560,0x2170,float32,R,,SIG,,C4 TAG 185 VALUE,TRUE +bl-6300a,BL_6300A,8526,0x214E,float32,R,,SIG,,C4 TAG 168 VALUE,TRUE +bl-6300b,BL_6300B,8530,0x2152,float32,R,,SIG,,C4 TAG 170 VALUE,TRUE +bl-6400a,BL_6400A,8590,0x218E,float32,R,,SIG,,C4 TAG 200 VALUE,TRUE +bl-6400b,BL_6400B,8592,0x2190,float32,R,,SIG,,C4 TAG 201 VALUE,TRUE +p-8120b,P_8120B,8606,0x219E,float32,R,,SIG,,C4 TAG 208 VALUE,TRUE +p-8120a,P_8120A,8562,0x2172,float32,R,,SIG,,C4 TAG 186 VALUE,TRUE +xv-9125,XV_9125,8524,0x214C,float32,R,,SIG,,C4 TAG 167 VALUE,TRUE +p-9102,P_9102,8528,0x2150,float32,R,,SIG,,C4 TAG 169 VALUE,TRUE +xv-dfu1,XV_DFU1,8596,0x2194,float32,R,,SIG,,C4 TAG 203 VALUE,TRUE +xv-dfu2,XV_DFU2,8598,0x2196,float32,R,,SIG,,C4 TAG 204 VALUE,TRUE +xv-dfu3,XV_DFU3,8600,0x2198,float32,R,,SIG,,C4 TAG 205 VALUE,TRUE +xv-dfu4,XV_DFU4,8602,0x219A,float32,R,,SIG,,C4 TAG 206 VALUE,TRUE +xv-dfu5a,XV_DFU5A,8604,0x219C,float32,R,,SIG,,C4 TAG 207 VALUE,TRUE +xv-dfu5b,XV_DFU5B,8608,0x21A0,float32,R,,SIG,,C4 TAG 209 VALUE,TRUE +ld-dfu1,LD_DFU01,8610,0x21A2,float32,R,,SIG,,C4 TAG 210 VALUE,TRUE +ld-dfu2,LD_DFU02,8612,0x21A4,float32,R,,SIG,,C4 TAG 211 VALUE,TRUE +ld-dfu3,LD_DFU03,8614,0x21A6,float32,R,,SIG,,C4 TAG 212 VALUE,TRUE +ld-dfu4,LD_DFU04,8616,0x21A8,float32,R,,SIG,,C4 TAG 213 VALUE,TRUE +ld-dfu5,LD_DFU05,8618,0x21AA,float32,R,,SIG,,C4 TAG 214 VALUE,TRUE +p-10101,P_10101,8740,0x2224,float32,R,,SIG,,C4 TAG 275 VALUE,TRUE +p-10114,P_10114,8742,0x2226,float32,R,,SIG,,C4 TAG 276 VALUE,TRUE +p-10116,P_10116,8746,0x222A,float32,R,,SIG,,C4 TAG 278 VALUE,TRUE +p-10118,P_10118,8744,0x2228,float32,R,,SIG,,C4 TAG 277 VALUE,TRUE +p-10128a,P_10128A,8748,0x222C,float32,R,,SIG,,C4 TAG 279 VALUE,TRUE +p-10128b,P_10128B,8750,0x222E,float32,R,,SIG,,C4 TAG 280 VALUE,TRUE +p-10201,P_10201,8756,0x2234,float32,R,,SIG,,C4 TAG 283 VALUE,TRUE +p-10214,P_10214,8758,0x2236,float32,R,,SIG,,C4 TAG 284 VALUE,TRUE +p-10216,P_10216,8762,0x223A,float32,R,,SIG,,C4 TAG 286 VALUE,TRUE +p-10218,P_10218,8760,0x2238,float32,R,,SIG,,C4 TAG 285 VALUE,TRUE +p-10221,P_10221,8888,0x22B8,float32,R,,SIG,,C4 TAG 349 VALUE,TRUE +p-10602a,P_10602A,8764,0x223C,float32,R,,SIG,,C4 TAG 287 VALUE,TRUE +p-10602b,P_10602B,8766,0x223E,float32,R,,SIG,,C4 TAG 288 VALUE,TRUE +p-10800a,P_10800A,8754,0x2232,float32,R,,SIG,,C4 TAG 282 VALUE,TRUE +p-10800b,P_10800B,8866,0x22A2,float32,R,,SIG,,C4 TAG 338 VALUE,TRUE +pt-10111a-fail,PT_10111A_FAIL,8800,0x2260,float32,R,,SIG,,C4 TAG 305 VALUE,TRUE +pt-10211a-fail,PT_10211A_FAIL,8802,0x2262,float32,R,,SIG,,C4 TAG 306 VALUE,TRUE +xv-10101,LI_10200,8870,0x22A6,float32,R,,SIG,,C4 TAG 340 VALUE,TRUE +xv-1010n2,PT_10702,8886,0x22B6,float32,R,,SIG,,C4 TAG 348 VALUE,TRUE +xv-1020n2,FQ_10213,8884,0x22B4,float32,R,,SIG,,C4 TAG 347 VALUE,TRUE +xv-10111,XV_10111,8872,0x22A8,float32,R,,SIG,,C4 TAG 341 VALUE,TRUE +xv-10211,XV_10211,8874,0x22AA,float32,R,,SIG,,C4 TAG 342 VALUE,TRUE +c4p2-dc24v-a-ok,C4P1_DC24_A_OK,8248,0x2038,float32,R,,SIG,,C4 TAG 29 VALUE,TRUE +c4p2-dc24v-b-ok,C4P1_DC24_B_OK,8250,0x203A,float32,R,,SIG,,C4 TAG 30 VALUE,TRUE +c4p3-dc24v-a-ok,C4P1_DC24_A_OK,8248,0x2038,float32,R,,SIG,,C4 TAG 29 VALUE,TRUE +c4p3-dc24v-b-ok,C4P1_DC24_B_OK,8250,0x203A,float32,R,,SIG,,C4 TAG 30 VALUE,TRUE +pojang-bad-com,POJANG_BAD_COM,8864,0x22A0,float32,R,,SIG,,C4 TAG 337 VALUE,TRUE +pojang-noscan,POJANG_NOSCAN,8862,0x229E,float32,R,,SIG,,C4 TAG 336 VALUE,TRUE +vp-10117,VP_10117,8752,0x2230,float32,R,,SIG,,C4 TAG 281 VALUE,TRUE +vp-10217,VP_10217,8768,0x2240,float32,R,,SIG,,C4 TAG 289 VALUE,TRUE +pt-9211a-fail,PT_9211A_FAIL,8890,0x22BA,float32,R,,SIG,,C4 TAG 350 VALUE,TRUE +pt-9111a-fail,PT_9111A_FAIL,8894,0x22BE,float32,R,,SIG,,C4 TAG 352 VALUE,TRUE +p10z1-lamp,FIQ_9116B,8922,0x22DA,float32,R,,SIG,,C4 TAG 366 VALUE,TRUE +p10z2-lamp,FIQ_10116B,8924,0x22DC,float32,R,,SIG,,C4 TAG 367 VALUE,TRUE +p10z3-lamp,FQ_9116B,8926,0x22DE,float32,R,,SIG,,C4 TAG 368 VALUE,TRUE +p10z4-lamp,FQ_10116B,8928,0x22E0,float32,R,,SIG,,C4 TAG 369 VALUE,TRUE +pica-10111a-trip,PIC10111A_TRIP,8798,0x225E,float32,R,,SIG,,C4 TAG 304 VALUE,TRUE +tica-10111a-hi-esd,TIC10111A_HI_ESD,8674,0x21E2,float32,R,,SIG,,C4 TAG 242 VALUE,TRUE +tica-10111a-hi-il,TIC10111A_HI_IL,8672,0x21E0,float32,R,,SIG,,C4 TAG 241 VALUE,TRUE +tica-10111a-trip,TIC10111A_TRIP,8796,0x225C,float32,R,,SIG,,C4 TAG 303 VALUE,TRUE +tica-10211a-hi-esd,TIC10211A_HI_ESD,8726,0x2216,float32,R,,SIG,,C4 TAG 268 VALUE,TRUE +tica-10211a-hi-il,TIC10211A_HI_IL,8728,0x2218,float32,R,,SIG,,C4 TAG 269 VALUE,TRUE +tica-10211a-trip,TIC10211A_TRIP,8810,0x226A,float32,R,,SIG,,C4 TAG 310 VALUE,TRUE +lica-10113-trip,LIC101113_TRIP,8804,0x2264,float32,R,,SIG,,C4 TAG 307 VALUE,TRUE +lica-10113-lo-esd,LIC10113_LO_ESD,8666,0x21DA,float32,R,,SIG,,C4 TAG 238 VALUE,TRUE +lica-10113-lo-il,LIC10113_LO_IL,8668,0x21DC,float32,R,,SIG,,C4 TAG 239 VALUE,TRUE +lica-10213-lo-esd,LIC10213_LO_ESD,8708,0x2204,float32,R,,SIG,,C4 TAG 259 VALUE,TRUE +lica-10213-lo-il,LIC10213_LO_IL,8710,0x2206,float32,R,,SIG,,C4 TAG 260 VALUE,TRUE +lica-10213-trip,LIC10213_TRIP,8814,0x226E,float32,R,,SIG,,C4 TAG 312 VALUE,TRUE +pica-10211a-trip,PIC10211B_TRIP,8812,0x226C,float32,R,,SIG,,C4 TAG 311 VALUE,TRUE +pica-10211a-lo-esd,PIC10211A_LO_ESD,8730,0x221A,float32,R,,SIG,,C4 TAG 270 VALUE,TRUE +pica-10211a-lo-il,PIC10211A_LO_IL,8732,0x221C,float32,R,,SIG,,C4 TAG 271 VALUE,TRUE +10100-esd,10100ESDT,8854,0x2296,float32,R,,SIG,,C4 TAG 332 VALUE,TRUE +10200-esd,10200_ESD,8852,0x2294,float32,R,,SIG,,C4 TAG 331 VALUE,TRUE +c-9111,INVALIDTAG,6534,0x1986,float32,R/W,,VAR,,C4 MATH_VAR 100 VALUE,TRUE +c-9211,XV_10111_HS,6536,0x1988,float32,R/W,,VAR,,C4 MATH_VAR 101 VALUE,TRUE +pica-10111a-lo-esd,PIC10111A_LO_ESD,8676,0x21E4,float32,R,,SIG,,C4 TAG 243 VALUE,TRUE +pica-10111a-lo-il,PIC10111A_LO_IL,8670,0x21DE,float32,R,,SIG,,C4 TAG 240 VALUE,TRUE +p10c1-man-esd,P10C1_MAN_ESD,6540,0x198C,float32,R/W,,VAR,,C4 MATH_VAR 103 VALUE,TRUE +p10c2-man-esd,P10C2_MAN_ESD,6544,0x1990,float32,R/W,,VAR,,C4 MATH_VAR 105 VALUE,TRUE +9100-esd-rst,9100_ESD_RST,6430,0x191E,float32,R/W,,VAR,,C4 MATH_VAR 48 VALUE,TRUE +9200-esd-rst,9200_ESD_RST,6452,0x1934,float32,R/W,,VAR,,C4 MATH_VAR 59 VALUE,TRUE +10100-esd-rst,10100_ESD_RST,6542,0x198E,float32,R/W,,VAR,,C4 MATH_VAR 104 VALUE,TRUE +10200-esd-rst,10200_ESD_RST,6546,0x1992,float32,R/W,,VAR,,C4 MATH_VAR 106 VALUE,TRUE +10100-man-esd,10100_MAN_ESD,8846,0x228E,float32,R,,SIG,,C4 TAG 328 VALUE,TRUE +10200-man-esd,10200_MAN_ESD,8848,0x2290,float32,R,,SIG,,C4 TAG 329 VALUE,TRUE +c-10111,XV_10211_HS,6538,0x198A,float32,R/W,,VAR,,C4 MATH_VAR 102 VALUE,TRUE +c-10211,VAR_130,6594,0x19C2,float32,R/W,,VAR,,C4 MATH_VAR 130 VALUE,TRUE +f-10601,F_10602,8770,0x2242,float32,R,,SIG,,C4 TAG 290 VALUE,TRUE +p-9602a,P_9602A,8282,0x205A,float32,R,,SIG,,C4 TAG 46 VALUE,TRUE +p-9602b,P_9602B,8284,0x205C,float32,R,,SIG,,C4 TAG 47 VALUE,TRUE +lica-10113-il-rst,LIC10113_IL_RST,6518,0x1976,float32,R/W,,VAR,,C4 MATH_VAR 92 VALUE,TRUE +tica-1011a-il-rst,TIC10111A_IL_RST,6514,0x1972,float32,R/W,,VAR,,C4 MATH_VAR 90 VALUE,TRUE +pica-10111a-il-rst,PIC10111A_IL_RST,6516,0x1974,float32,R/W,,VAR,,C4 MATH_VAR 91 VALUE,TRUE +tica-10211a-il-rst,TIC10211A_IL_RST,6520,0x1978,float32,R/W,,VAR,,C4 MATH_VAR 93 VALUE,TRUE +pica-10211a-il-rst,PIC10211A_IL_RST,6522,0x197A,float32,R/W,,VAR,,C4 MATH_VAR 94 VALUE,TRUE +lica-10213-il-rst,LIC10213_IL_RST,6524,0x197C,float32,R/W,,VAR,,C4 MATH_VAR 95 VALUE,TRUE +ficq-10114a.pv,FICQ-10114A.PV,4672,0x1240,float32,R,19,PV,Process Variable,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.sp,FICQ-10114A.WSP,4676,0x1244,float32,R/W,19,SP,Working Set Point,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.op,FICQ-10114A.Output,4678,0x1246,float32,R/W,19,OP,Output,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.rsp,FICQ-10114A.RSP_SP2,4674,0x1242,float32,R/W,19,RSP,Remote Set Point (SP2),LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.lsp1,FICQ-10114A.LSP1,4714,0x126A,float32,R/W,19,LSP1,Local SP 1,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.lsp2,FICQ-10114A.LSP2,4716,0x126C,float32,R/W,19,LSP2,Local SP 2,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.dev,FICQ-10114A.Deviation,4746,0x128A,float32,R,19,DEV,Deviation (SP-PV),LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.pv_lo,FICQ-10114A.PV_low_range,4694,0x1256,float32,R,19,PV_LO,PV Low Range,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.pv_hi,FICQ-10114A.PV_high_range,4696,0x1258,float32,R,19,PV_HI,PV High Range,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.sp_lo,FICQ-10114A.SP_low_limit,4724,0x1274,float32,R/W,19,SP_LO,SP Low Limit,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.sp_hi,FICQ-10114A.SP_high_limit,4726,0x1276,float32,R/W,19,SP_HI,SP High Limit,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.op_lo,FICQ-10114A.Output_Low_Limit,4730,0x127A,float32,R/W,19,OP_LO,Output Low Limit,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.op_hi,FICQ-10114A.Output_High_Limit,4732,0x127C,float32,R/W,19,OP_HI,Output High Limit,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.alm1,FICQ-10114A.Alarm_1_SP1,4698,0x125A,float32,R/W,19,ALM1,Alarm 1 SP1,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.alm2,FICQ-10114A.Alarm_2_SP1,4718,0x126E,float32,R/W,19,ALM2,Alarm 2 SP1,LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.mode,FICQ-10114A.Auto_Man_State,4858,0x12FA,uint16,R/W,19,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 19 → FICQ-10114A,TRUE +ficq-10114a.status,FICQ-10114A.Loop_Status_Register,4862,0x12FE,uint16,R,19,STATUS,Loop Status Register,LOOP 19 → FICQ-10114A,TRUE +ficq-10101.pv,FICQ-10101.PV,4160,0x1040,float32,R,17,PV,Process Variable,LOOP 17 → FICQ-10101,TRUE +ficq-10101.sp,FICQ-10101.WSP,4164,0x1044,float32,R/W,17,SP,Working Set Point,LOOP 17 → FICQ-10101,TRUE +ficq-10101.op,FICQ-10101.Output,4166,0x1046,float32,R/W,17,OP,Output,LOOP 17 → FICQ-10101,TRUE +ficq-10101.rsp,FICQ-10101.RSP_SP2,4162,0x1042,float32,R/W,17,RSP,Remote Set Point (SP2),LOOP 17 → FICQ-10101,TRUE +ficq-10101.lsp1,FICQ-10101.LSP1,4202,0x106A,float32,R/W,17,LSP1,Local SP 1,LOOP 17 → FICQ-10101,TRUE +ficq-10101.lsp2,FICQ-10101.LSP2,4204,0x106C,float32,R/W,17,LSP2,Local SP 2,LOOP 17 → FICQ-10101,TRUE +ficq-10101.dev,FICQ-10101.Deviation,4234,0x108A,float32,R,17,DEV,Deviation (SP-PV),LOOP 17 → FICQ-10101,TRUE +ficq-10101.pv_lo,FICQ-10101.PV_low_range,4182,0x1056,float32,R,17,PV_LO,PV Low Range,LOOP 17 → FICQ-10101,TRUE +ficq-10101.pv_hi,FICQ-10101.PV_high_range,4184,0x1058,float32,R,17,PV_HI,PV High Range,LOOP 17 → FICQ-10101,TRUE +ficq-10101.sp_lo,FICQ-10101.SP_low_limit,4212,0x1074,float32,R/W,17,SP_LO,SP Low Limit,LOOP 17 → FICQ-10101,TRUE +ficq-10101.sp_hi,FICQ-10101.SP_high_limit,4214,0x1076,float32,R/W,17,SP_HI,SP High Limit,LOOP 17 → FICQ-10101,TRUE +ficq-10101.op_lo,FICQ-10101.Output_Low_Limit,4218,0x107A,float32,R/W,17,OP_LO,Output Low Limit,LOOP 17 → FICQ-10101,TRUE +ficq-10101.op_hi,FICQ-10101.Output_High_Limit,4220,0x107C,float32,R/W,17,OP_HI,Output High Limit,LOOP 17 → FICQ-10101,TRUE +ficq-10101.alm1,FICQ-10101.Alarm_1_SP1,4186,0x105A,float32,R/W,17,ALM1,Alarm 1 SP1,LOOP 17 → FICQ-10101,TRUE +ficq-10101.alm2,FICQ-10101.Alarm_2_SP1,4206,0x106E,float32,R/W,17,ALM2,Alarm 2 SP1,LOOP 17 → FICQ-10101,TRUE +ficq-10101.mode,FICQ-10101.Auto_Man_State,4346,0x10FA,uint16,R/W,17,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 17 → FICQ-10101,TRUE +ficq-10101.status,FICQ-10101.Loop_Status_Register,4350,0x10FE,uint16,R,17,STATUS,Loop Status Register,LOOP 17 → FICQ-10101,TRUE +ficq-10214.pv,FICQ-10214.PV,31296,0x7A40,float32,R,27,PV,Process Variable,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.sp,FICQ-10214.WSP,31300,0x7A44,float32,R/W,27,SP,Working Set Point,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.op,FICQ-10214.Output,31302,0x7A46,float32,R/W,27,OP,Output,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.rsp,FICQ-10214.RSP_SP2,31298,0x7A42,float32,R/W,27,RSP,Remote Set Point (SP2),LOOPX 27 → FICQ-10214,TRUE +ficq-10214.lsp1,FICQ-10214.LSP1,31338,0x7A6A,float32,R/W,27,LSP1,Local SP 1,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.lsp2,FICQ-10214.LSP2,31340,0x7A6C,float32,R/W,27,LSP2,Local SP 2,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.dev,FICQ-10214.Deviation,31370,0x7A8A,float32,R,27,DEV,Deviation (SP-PV),LOOPX 27 → FICQ-10214,TRUE +ficq-10214.pv_lo,FICQ-10214.PV_low_range,31318,0x7A56,float32,R,27,PV_LO,PV Low Range,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.pv_hi,FICQ-10214.PV_high_range,31320,0x7A58,float32,R,27,PV_HI,PV High Range,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.sp_lo,FICQ-10214.SP_low_limit,31348,0x7A74,float32,R/W,27,SP_LO,SP Low Limit,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.sp_hi,FICQ-10214.SP_high_limit,31350,0x7A76,float32,R/W,27,SP_HI,SP High Limit,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.op_lo,FICQ-10214.Output_Low_Limit,31354,0x7A7A,float32,R/W,27,OP_LO,Output Low Limit,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.op_hi,FICQ-10214.Output_High_Limit,31356,0x7A7C,float32,R/W,27,OP_HI,Output High Limit,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.alm1,FICQ-10214.Alarm_1_SP1,31322,0x7A5A,float32,R/W,27,ALM1,Alarm 1 SP1,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.alm2,FICQ-10214.Alarm_2_SP1,31342,0x7A6E,float32,R/W,27,ALM2,Alarm 2 SP1,LOOPX 27 → FICQ-10214,TRUE +ficq-10214.mode,FICQ-10214.Auto_Man_State,31482,0x7AFA,uint16,R/W,27,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOPX 27 → FICQ-10214,TRUE +ficq-10214.status,FICQ-10214.Loop_Status_Register,31486,0x7AFE,uint16,R,27,STATUS,Loop Status Register,LOOPX 27 → FICQ-10214,TRUE +ficq-9101.pv,FIC-9101.PV,64,0x0040,float32,R,1,PV,Process Variable,LOOP 1 → FIC-9101,TRUE +ficq-9101.sp,FIC-9101.WSP,68,0x0044,float32,R/W,1,SP,Working Set Point,LOOP 1 → FIC-9101,TRUE +ficq-9101.op,FIC-9101.Output,70,0x0046,float32,R/W,1,OP,Output,LOOP 1 → FIC-9101,TRUE +ficq-9101.rsp,FIC-9101.RSP_SP2,66,0x0042,float32,R/W,1,RSP,Remote Set Point (SP2),LOOP 1 → FIC-9101,TRUE +ficq-9101.lsp1,FIC-9101.LSP1,106,0x006A,float32,R/W,1,LSP1,Local SP 1,LOOP 1 → FIC-9101,TRUE +ficq-9101.lsp2,FIC-9101.LSP2,108,0x006C,float32,R/W,1,LSP2,Local SP 2,LOOP 1 → FIC-9101,TRUE +ficq-9101.dev,FIC-9101.Deviation,138,0x008A,float32,R,1,DEV,Deviation (SP-PV),LOOP 1 → FIC-9101,TRUE +ficq-9101.pv_lo,FIC-9101.PV_low_range,86,0x0056,float32,R,1,PV_LO,PV Low Range,LOOP 1 → FIC-9101,TRUE +ficq-9101.pv_hi,FIC-9101.PV_high_range,88,0x0058,float32,R,1,PV_HI,PV High Range,LOOP 1 → FIC-9101,TRUE +ficq-9101.sp_lo,FIC-9101.SP_low_limit,116,0x0074,float32,R/W,1,SP_LO,SP Low Limit,LOOP 1 → FIC-9101,TRUE +ficq-9101.sp_hi,FIC-9101.SP_high_limit,118,0x0076,float32,R/W,1,SP_HI,SP High Limit,LOOP 1 → FIC-9101,TRUE +ficq-9101.op_lo,FIC-9101.Output_Low_Limit,122,0x007A,float32,R/W,1,OP_LO,Output Low Limit,LOOP 1 → FIC-9101,TRUE +ficq-9101.op_hi,FIC-9101.Output_High_Limit,124,0x007C,float32,R/W,1,OP_HI,Output High Limit,LOOP 1 → FIC-9101,TRUE +ficq-9101.alm1,FIC-9101.Alarm_1_SP1,90,0x005A,float32,R/W,1,ALM1,Alarm 1 SP1,LOOP 1 → FIC-9101,TRUE +ficq-9101.alm2,FIC-9101.Alarm_2_SP1,110,0x006E,float32,R/W,1,ALM2,Alarm 2 SP1,LOOP 1 → FIC-9101,TRUE +ficq-9101.mode,FIC-9101.Auto_Man_State,250,0x00FA,uint16,R/W,1,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 1 → FIC-9101,TRUE +ficq-9101.status,FIC-9101.Loop_Status_Register,254,0x00FE,uint16,R,1,STATUS,Loop Status Register,LOOP 1 → FIC-9101,TRUE +ficq-9214.pv,FIC-9214.PV,2368,0x0940,float32,R,10,PV,Process Variable,LOOP 10 → FIC-9214,TRUE +ficq-9214.sp,FIC-9214.WSP,2372,0x0944,float32,R/W,10,SP,Working Set Point,LOOP 10 → FIC-9214,TRUE +ficq-9214.op,FIC-9214.Output,2374,0x0946,float32,R/W,10,OP,Output,LOOP 10 → FIC-9214,TRUE +ficq-9214.rsp,FIC-9214.RSP_SP2,2370,0x0942,float32,R/W,10,RSP,Remote Set Point (SP2),LOOP 10 → FIC-9214,TRUE +ficq-9214.lsp1,FIC-9214.LSP1,2410,0x096A,float32,R/W,10,LSP1,Local SP 1,LOOP 10 → FIC-9214,TRUE +ficq-9214.lsp2,FIC-9214.LSP2,2412,0x096C,float32,R/W,10,LSP2,Local SP 2,LOOP 10 → FIC-9214,TRUE +ficq-9214.dev,FIC-9214.Deviation,2442,0x098A,float32,R,10,DEV,Deviation (SP-PV),LOOP 10 → FIC-9214,TRUE +ficq-9214.pv_lo,FIC-9214.PV_low_range,2390,0x0956,float32,R,10,PV_LO,PV Low Range,LOOP 10 → FIC-9214,TRUE +ficq-9214.pv_hi,FIC-9214.PV_high_range,2392,0x0958,float32,R,10,PV_HI,PV High Range,LOOP 10 → FIC-9214,TRUE +ficq-9214.sp_lo,FIC-9214.SP_low_limit,2420,0x0974,float32,R/W,10,SP_LO,SP Low Limit,LOOP 10 → FIC-9214,TRUE +ficq-9214.sp_hi,FIC-9214.SP_high_limit,2422,0x0976,float32,R/W,10,SP_HI,SP High Limit,LOOP 10 → FIC-9214,TRUE +ficq-9214.op_lo,FIC-9214.Output_Low_Limit,2426,0x097A,float32,R/W,10,OP_LO,Output Low Limit,LOOP 10 → FIC-9214,TRUE +ficq-9214.op_hi,FIC-9214.Output_High_Limit,2428,0x097C,float32,R/W,10,OP_HI,Output High Limit,LOOP 10 → FIC-9214,TRUE +ficq-9214.alm1,FIC-9214.Alarm_1_SP1,2394,0x095A,float32,R/W,10,ALM1,Alarm 1 SP1,LOOP 10 → FIC-9214,TRUE +ficq-9214.alm2,FIC-9214.Alarm_2_SP1,2414,0x096E,float32,R/W,10,ALM2,Alarm 2 SP1,LOOP 10 → FIC-9214,TRUE +ficq-9214.mode,FIC-9214.Auto_Man_State,2554,0x09FA,uint16,R/W,10,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 10 → FIC-9214,TRUE +ficq-9214.status,FIC-9214.Loop_Status_Register,2558,0x09FE,uint16,R,10,STATUS,Loop Status Register,LOOP 10 → FIC-9214,TRUE +ficq-9218.pv,FIC-9218.PV,2624,0x0A40,float32,R,11,PV,Process Variable,LOOP 11 → FIC-9218,TRUE +ficq-9218.sp,FIC-9218.WSP,2628,0x0A44,float32,R/W,11,SP,Working Set Point,LOOP 11 → FIC-9218,TRUE +ficq-9218.op,FIC-9218.Output,2630,0x0A46,float32,R/W,11,OP,Output,LOOP 11 → FIC-9218,TRUE +ficq-9218.rsp,FIC-9218.RSP_SP2,2626,0x0A42,float32,R/W,11,RSP,Remote Set Point (SP2),LOOP 11 → FIC-9218,TRUE +ficq-9218.lsp1,FIC-9218.LSP1,2666,0x0A6A,float32,R/W,11,LSP1,Local SP 1,LOOP 11 → FIC-9218,TRUE +ficq-9218.lsp2,FIC-9218.LSP2,2668,0x0A6C,float32,R/W,11,LSP2,Local SP 2,LOOP 11 → FIC-9218,TRUE +ficq-9218.dev,FIC-9218.Deviation,2698,0x0A8A,float32,R,11,DEV,Deviation (SP-PV),LOOP 11 → FIC-9218,TRUE +ficq-9218.pv_lo,FIC-9218.PV_low_range,2646,0x0A56,float32,R,11,PV_LO,PV Low Range,LOOP 11 → FIC-9218,TRUE +ficq-9218.pv_hi,FIC-9218.PV_high_range,2648,0x0A58,float32,R,11,PV_HI,PV High Range,LOOP 11 → FIC-9218,TRUE +ficq-9218.sp_lo,FIC-9218.SP_low_limit,2676,0x0A74,float32,R/W,11,SP_LO,SP Low Limit,LOOP 11 → FIC-9218,TRUE +ficq-9218.sp_hi,FIC-9218.SP_high_limit,2678,0x0A76,float32,R/W,11,SP_HI,SP High Limit,LOOP 11 → FIC-9218,TRUE +ficq-9218.op_lo,FIC-9218.Output_Low_Limit,2682,0x0A7A,float32,R/W,11,OP_LO,Output Low Limit,LOOP 11 → FIC-9218,TRUE +ficq-9218.op_hi,FIC-9218.Output_High_Limit,2684,0x0A7C,float32,R/W,11,OP_HI,Output High Limit,LOOP 11 → FIC-9218,TRUE +ficq-9218.alm1,FIC-9218.Alarm_1_SP1,2650,0x0A5A,float32,R/W,11,ALM1,Alarm 1 SP1,LOOP 11 → FIC-9218,TRUE +ficq-9218.alm2,FIC-9218.Alarm_2_SP1,2670,0x0A6E,float32,R/W,11,ALM2,Alarm 2 SP1,LOOP 11 → FIC-9218,TRUE +ficq-9218.mode,FIC-9218.Auto_Man_State,2810,0x0AFA,uint16,R/W,11,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 11 → FIC-9218,TRUE +ficq-9218.status,FIC-9218.Loop_Status_Register,2814,0x0AFE,uint16,R,11,STATUS,Loop Status Register,LOOP 11 → FIC-9218,TRUE +ficq-9216.pv,FIC-9216.PV,2880,0x0B40,float32,R,12,PV,Process Variable,LOOP 12 → FIC-9216,TRUE +ficq-9216.sp,FIC-9216.WSP,2884,0x0B44,float32,R/W,12,SP,Working Set Point,LOOP 12 → FIC-9216,TRUE +ficq-9216.op,FIC-9216.Output,2886,0x0B46,float32,R/W,12,OP,Output,LOOP 12 → FIC-9216,TRUE +ficq-9216.rsp,FIC-9216.RSP_SP2,2882,0x0B42,float32,R/W,12,RSP,Remote Set Point (SP2),LOOP 12 → FIC-9216,TRUE +ficq-9216.lsp1,FIC-9216.LSP1,2922,0x0B6A,float32,R/W,12,LSP1,Local SP 1,LOOP 12 → FIC-9216,TRUE +ficq-9216.lsp2,FIC-9216.LSP2,2924,0x0B6C,float32,R/W,12,LSP2,Local SP 2,LOOP 12 → FIC-9216,TRUE +ficq-9216.dev,FIC-9216.Deviation,2954,0x0B8A,float32,R,12,DEV,Deviation (SP-PV),LOOP 12 → FIC-9216,TRUE +ficq-9216.pv_lo,FIC-9216.PV_low_range,2902,0x0B56,float32,R,12,PV_LO,PV Low Range,LOOP 12 → FIC-9216,TRUE +ficq-9216.pv_hi,FIC-9216.PV_high_range,2904,0x0B58,float32,R,12,PV_HI,PV High Range,LOOP 12 → FIC-9216,TRUE +ficq-9216.sp_lo,FIC-9216.SP_low_limit,2932,0x0B74,float32,R/W,12,SP_LO,SP Low Limit,LOOP 12 → FIC-9216,TRUE +ficq-9216.sp_hi,FIC-9216.SP_high_limit,2934,0x0B76,float32,R/W,12,SP_HI,SP High Limit,LOOP 12 → FIC-9216,TRUE +ficq-9216.op_lo,FIC-9216.Output_Low_Limit,2938,0x0B7A,float32,R/W,12,OP_LO,Output Low Limit,LOOP 12 → FIC-9216,TRUE +ficq-9216.op_hi,FIC-9216.Output_High_Limit,2940,0x0B7C,float32,R/W,12,OP_HI,Output High Limit,LOOP 12 → FIC-9216,TRUE +ficq-9216.alm1,FIC-9216.Alarm_1_SP1,2906,0x0B5A,float32,R/W,12,ALM1,Alarm 1 SP1,LOOP 12 → FIC-9216,TRUE +ficq-9216.alm2,FIC-9216.Alarm_2_SP1,2926,0x0B6E,float32,R/W,12,ALM2,Alarm 2 SP1,LOOP 12 → FIC-9216,TRUE +ficq-9216.mode,FIC-9216.Auto_Man_State,3066,0x0BFA,uint16,R/W,12,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 12 → FIC-9216,TRUE +ficq-9216.status,FIC-9216.Loop_Status_Register,3070,0x0BFE,uint16,R,12,STATUS,Loop Status Register,LOOP 12 → FIC-9216,TRUE +pica-9211a.pv,PIC-9211B.PV,3392,0x0D40,float32,R,14,PV,Process Variable,LOOP 14 → PIC-9211B,TRUE +pica-9211a.sp,PIC-9211B.WSP,3396,0x0D44,float32,R/W,14,SP,Working Set Point,LOOP 14 → PIC-9211B,TRUE +pica-9211a.op,PIC-9211B.Output,3398,0x0D46,float32,R/W,14,OP,Output,LOOP 14 → PIC-9211B,TRUE +pica-9211a.rsp,PIC-9211B.RSP_SP2,3394,0x0D42,float32,R/W,14,RSP,Remote Set Point (SP2),LOOP 14 → PIC-9211B,TRUE +pica-9211a.lsp1,PIC-9211B.LSP1,3434,0x0D6A,float32,R/W,14,LSP1,Local SP 1,LOOP 14 → PIC-9211B,TRUE +pica-9211a.lsp2,PIC-9211B.LSP2,3436,0x0D6C,float32,R/W,14,LSP2,Local SP 2,LOOP 14 → PIC-9211B,TRUE +pica-9211a.dev,PIC-9211B.Deviation,3466,0x0D8A,float32,R,14,DEV,Deviation (SP-PV),LOOP 14 → PIC-9211B,TRUE +pica-9211a.pv_lo,PIC-9211B.PV_low_range,3414,0x0D56,float32,R,14,PV_LO,PV Low Range,LOOP 14 → PIC-9211B,TRUE +pica-9211a.pv_hi,PIC-9211B.PV_high_range,3416,0x0D58,float32,R,14,PV_HI,PV High Range,LOOP 14 → PIC-9211B,TRUE +pica-9211a.sp_lo,PIC-9211B.SP_low_limit,3444,0x0D74,float32,R/W,14,SP_LO,SP Low Limit,LOOP 14 → PIC-9211B,TRUE +pica-9211a.sp_hi,PIC-9211B.SP_high_limit,3446,0x0D76,float32,R/W,14,SP_HI,SP High Limit,LOOP 14 → PIC-9211B,TRUE +pica-9211a.op_lo,PIC-9211B.Output_Low_Limit,3450,0x0D7A,float32,R/W,14,OP_LO,Output Low Limit,LOOP 14 → PIC-9211B,TRUE +pica-9211a.op_hi,PIC-9211B.Output_High_Limit,3452,0x0D7C,float32,R/W,14,OP_HI,Output High Limit,LOOP 14 → PIC-9211B,TRUE +pica-9211a.alm1,PIC-9211B.Alarm_1_SP1,3418,0x0D5A,float32,R/W,14,ALM1,Alarm 1 SP1,LOOP 14 → PIC-9211B,TRUE +pica-9211a.alm2,PIC-9211B.Alarm_2_SP1,3438,0x0D6E,float32,R/W,14,ALM2,Alarm 2 SP1,LOOP 14 → PIC-9211B,TRUE +pica-9211a.mode,PIC-9211B.Auto_Man_State,3578,0x0DFA,uint16,R/W,14,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 14 → PIC-9211B,TRUE +pica-9211a.status,PIC-9211B.Loop_Status_Register,3582,0x0DFE,uint16,R,14,STATUS,Loop Status Register,LOOP 14 → PIC-9211B,TRUE +lica-9113.pv,LIC-9113.PV,3648,0x0E40,float32,R,15,PV,Process Variable,LOOP 15 → LIC-9113,TRUE +lica-9113.sp,LIC-9113.WSP,3652,0x0E44,float32,R/W,15,SP,Working Set Point,LOOP 15 → LIC-9113,TRUE +lica-9113.op,LIC-9113.Output,3654,0x0E46,float32,R/W,15,OP,Output,LOOP 15 → LIC-9113,TRUE +lica-9113.rsp,LIC-9113.RSP_SP2,3650,0x0E42,float32,R/W,15,RSP,Remote Set Point (SP2),LOOP 15 → LIC-9113,TRUE +lica-9113.lsp1,LIC-9113.LSP1,3690,0x0E6A,float32,R/W,15,LSP1,Local SP 1,LOOP 15 → LIC-9113,TRUE +lica-9113.lsp2,LIC-9113.LSP2,3692,0x0E6C,float32,R/W,15,LSP2,Local SP 2,LOOP 15 → LIC-9113,TRUE +lica-9113.dev,LIC-9113.Deviation,3722,0x0E8A,float32,R,15,DEV,Deviation (SP-PV),LOOP 15 → LIC-9113,TRUE +lica-9113.pv_lo,LIC-9113.PV_low_range,3670,0x0E56,float32,R,15,PV_LO,PV Low Range,LOOP 15 → LIC-9113,TRUE +lica-9113.pv_hi,LIC-9113.PV_high_range,3672,0x0E58,float32,R,15,PV_HI,PV High Range,LOOP 15 → LIC-9113,TRUE +lica-9113.sp_lo,LIC-9113.SP_low_limit,3700,0x0E74,float32,R/W,15,SP_LO,SP Low Limit,LOOP 15 → LIC-9113,TRUE +lica-9113.sp_hi,LIC-9113.SP_high_limit,3702,0x0E76,float32,R/W,15,SP_HI,SP High Limit,LOOP 15 → LIC-9113,TRUE +lica-9113.op_lo,LIC-9113.Output_Low_Limit,3706,0x0E7A,float32,R/W,15,OP_LO,Output Low Limit,LOOP 15 → LIC-9113,TRUE +lica-9113.op_hi,LIC-9113.Output_High_Limit,3708,0x0E7C,float32,R/W,15,OP_HI,Output High Limit,LOOP 15 → LIC-9113,TRUE +lica-9113.alm1,LIC-9113.Alarm_1_SP1,3674,0x0E5A,float32,R/W,15,ALM1,Alarm 1 SP1,LOOP 15 → LIC-9113,TRUE +lica-9113.alm2,LIC-9113.Alarm_2_SP1,3694,0x0E6E,float32,R/W,15,ALM2,Alarm 2 SP1,LOOP 15 → LIC-9113,TRUE +lica-9113.mode,LIC-9113.Auto_Man_State,3834,0x0EFA,uint16,R/W,15,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 15 → LIC-9113,TRUE +lica-9113.status,LIC-9113.Loop_Status_Register,3838,0x0EFE,uint16,R,15,STATUS,Loop Status Register,LOOP 15 → LIC-9113,TRUE +lica-9213.pv,LIC-9213.PV,3904,0x0F40,float32,R,16,PV,Process Variable,LOOP 16 → LIC-9213,TRUE +lica-9213.sp,LIC-9213.WSP,3908,0x0F44,float32,R/W,16,SP,Working Set Point,LOOP 16 → LIC-9213,TRUE +lica-9213.op,LIC-9213.Output,3910,0x0F46,float32,R/W,16,OP,Output,LOOP 16 → LIC-9213,TRUE +lica-9213.rsp,LIC-9213.RSP_SP2,3906,0x0F42,float32,R/W,16,RSP,Remote Set Point (SP2),LOOP 16 → LIC-9213,TRUE +lica-9213.lsp1,LIC-9213.LSP1,3946,0x0F6A,float32,R/W,16,LSP1,Local SP 1,LOOP 16 → LIC-9213,TRUE +lica-9213.lsp2,LIC-9213.LSP2,3948,0x0F6C,float32,R/W,16,LSP2,Local SP 2,LOOP 16 → LIC-9213,TRUE +lica-9213.dev,LIC-9213.Deviation,3978,0x0F8A,float32,R,16,DEV,Deviation (SP-PV),LOOP 16 → LIC-9213,TRUE +lica-9213.pv_lo,LIC-9213.PV_low_range,3926,0x0F56,float32,R,16,PV_LO,PV Low Range,LOOP 16 → LIC-9213,TRUE +lica-9213.pv_hi,LIC-9213.PV_high_range,3928,0x0F58,float32,R,16,PV_HI,PV High Range,LOOP 16 → LIC-9213,TRUE +lica-9213.sp_lo,LIC-9213.SP_low_limit,3956,0x0F74,float32,R/W,16,SP_LO,SP Low Limit,LOOP 16 → LIC-9213,TRUE +lica-9213.sp_hi,LIC-9213.SP_high_limit,3958,0x0F76,float32,R/W,16,SP_HI,SP High Limit,LOOP 16 → LIC-9213,TRUE +lica-9213.op_lo,LIC-9213.Output_Low_Limit,3962,0x0F7A,float32,R/W,16,OP_LO,Output Low Limit,LOOP 16 → LIC-9213,TRUE +lica-9213.op_hi,LIC-9213.Output_High_Limit,3964,0x0F7C,float32,R/W,16,OP_HI,Output High Limit,LOOP 16 → LIC-9213,TRUE +lica-9213.alm1,LIC-9213.Alarm_1_SP1,3930,0x0F5A,float32,R/W,16,ALM1,Alarm 1 SP1,LOOP 16 → LIC-9213,TRUE +lica-9213.alm2,LIC-9213.Alarm_2_SP1,3950,0x0F6E,float32,R/W,16,ALM2,Alarm 2 SP1,LOOP 16 → LIC-9213,TRUE +lica-9213.mode,LIC-9213.Auto_Man_State,4090,0x0FFA,uint16,R/W,16,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 16 → LIC-9213,TRUE +lica-9213.status,LIC-9213.Loop_Status_Register,4094,0x0FFE,uint16,R,16,STATUS,Loop Status Register,LOOP 16 → LIC-9213,TRUE +ficq-9114.pv,FICQ-9114.PV,320,0x0140,float32,R,2,PV,Process Variable,LOOP 2 → FICQ-9114,TRUE +ficq-9114.sp,FICQ-9114.WSP,324,0x0144,float32,R/W,2,SP,Working Set Point,LOOP 2 → FICQ-9114,TRUE +ficq-9114.op,FICQ-9114.Output,326,0x0146,float32,R/W,2,OP,Output,LOOP 2 → FICQ-9114,TRUE +ficq-9114.rsp,FICQ-9114.RSP_SP2,322,0x0142,float32,R/W,2,RSP,Remote Set Point (SP2),LOOP 2 → FICQ-9114,TRUE +ficq-9114.lsp1,FICQ-9114.LSP1,362,0x016A,float32,R/W,2,LSP1,Local SP 1,LOOP 2 → FICQ-9114,TRUE +ficq-9114.lsp2,FICQ-9114.LSP2,364,0x016C,float32,R/W,2,LSP2,Local SP 2,LOOP 2 → FICQ-9114,TRUE +ficq-9114.dev,FICQ-9114.Deviation,394,0x018A,float32,R,2,DEV,Deviation (SP-PV),LOOP 2 → FICQ-9114,TRUE +ficq-9114.pv_lo,FICQ-9114.PV_low_range,342,0x0156,float32,R,2,PV_LO,PV Low Range,LOOP 2 → FICQ-9114,TRUE +ficq-9114.pv_hi,FICQ-9114.PV_high_range,344,0x0158,float32,R,2,PV_HI,PV High Range,LOOP 2 → FICQ-9114,TRUE +ficq-9114.sp_lo,FICQ-9114.SP_low_limit,372,0x0174,float32,R/W,2,SP_LO,SP Low Limit,LOOP 2 → FICQ-9114,TRUE +ficq-9114.sp_hi,FICQ-9114.SP_high_limit,374,0x0176,float32,R/W,2,SP_HI,SP High Limit,LOOP 2 → FICQ-9114,TRUE +ficq-9114.op_lo,FICQ-9114.Output_Low_Limit,378,0x017A,float32,R/W,2,OP_LO,Output Low Limit,LOOP 2 → FICQ-9114,TRUE +ficq-9114.op_hi,FICQ-9114.Output_High_Limit,380,0x017C,float32,R/W,2,OP_HI,Output High Limit,LOOP 2 → FICQ-9114,TRUE +ficq-9114.alm1,FICQ-9114.Alarm_1_SP1,346,0x015A,float32,R/W,2,ALM1,Alarm 1 SP1,LOOP 2 → FICQ-9114,TRUE +ficq-9114.alm2,FICQ-9114.Alarm_2_SP1,366,0x016E,float32,R/W,2,ALM2,Alarm 2 SP1,LOOP 2 → FICQ-9114,TRUE +ficq-9114.mode,FICQ-9114.Auto_Man_State,506,0x01FA,uint16,R/W,2,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 2 → FICQ-9114,TRUE +ficq-9114.status,FICQ-9114.Loop_Status_Register,510,0x01FE,uint16,R,2,STATUS,Loop Status Register,LOOP 2 → FICQ-9114,TRUE +ficq-10118.pv,FIC-10118.PV,4928,0x1340,float32,R,20,PV,Process Variable,LOOP 20 → FIC-10118,TRUE +ficq-10118.sp,FIC-10118.WSP,4932,0x1344,float32,R/W,20,SP,Working Set Point,LOOP 20 → FIC-10118,TRUE +ficq-10118.op,FIC-10118.Output,4934,0x1346,float32,R/W,20,OP,Output,LOOP 20 → FIC-10118,TRUE +ficq-10118.rsp,FIC-10118.RSP_SP2,4930,0x1342,float32,R/W,20,RSP,Remote Set Point (SP2),LOOP 20 → FIC-10118,TRUE +ficq-10118.lsp1,FIC-10118.LSP1,4970,0x136A,float32,R/W,20,LSP1,Local SP 1,LOOP 20 → FIC-10118,TRUE +ficq-10118.lsp2,FIC-10118.LSP2,4972,0x136C,float32,R/W,20,LSP2,Local SP 2,LOOP 20 → FIC-10118,TRUE +ficq-10118.dev,FIC-10118.Deviation,5002,0x138A,float32,R,20,DEV,Deviation (SP-PV),LOOP 20 → FIC-10118,TRUE +ficq-10118.pv_lo,FIC-10118.PV_low_range,4950,0x1356,float32,R,20,PV_LO,PV Low Range,LOOP 20 → FIC-10118,TRUE +ficq-10118.pv_hi,FIC-10118.PV_high_range,4952,0x1358,float32,R,20,PV_HI,PV High Range,LOOP 20 → FIC-10118,TRUE +ficq-10118.sp_lo,FIC-10118.SP_low_limit,4980,0x1374,float32,R/W,20,SP_LO,SP Low Limit,LOOP 20 → FIC-10118,TRUE +ficq-10118.sp_hi,FIC-10118.SP_high_limit,4982,0x1376,float32,R/W,20,SP_HI,SP High Limit,LOOP 20 → FIC-10118,TRUE +ficq-10118.op_lo,FIC-10118.Output_Low_Limit,4986,0x137A,float32,R/W,20,OP_LO,Output Low Limit,LOOP 20 → FIC-10118,TRUE +ficq-10118.op_hi,FIC-10118.Output_High_Limit,4988,0x137C,float32,R/W,20,OP_HI,Output High Limit,LOOP 20 → FIC-10118,TRUE +ficq-10118.alm1,FIC-10118.Alarm_1_SP1,4954,0x135A,float32,R/W,20,ALM1,Alarm 1 SP1,LOOP 20 → FIC-10118,TRUE +ficq-10118.alm2,FIC-10118.Alarm_2_SP1,4974,0x136E,float32,R/W,20,ALM2,Alarm 2 SP1,LOOP 20 → FIC-10118,TRUE +ficq-10118.mode,FIC-10118.Auto_Man_State,5114,0x13FA,uint16,R/W,20,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 20 → FIC-10118,TRUE +ficq-10118.status,FIC-10118.Loop_Status_Register,5118,0x13FE,uint16,R,20,STATUS,Loop Status Register,LOOP 20 → FIC-10118,TRUE +lica-10113.pv,LICA-10113.PV,5184,0x1440,float32,R,21,PV,Process Variable,LOOP 21 → LICA-10113,TRUE +lica-10113.sp,LICA-10113.WSP,5188,0x1444,float32,R/W,21,SP,Working Set Point,LOOP 21 → LICA-10113,TRUE +lica-10113.op,LICA-10113.Output,5190,0x1446,float32,R/W,21,OP,Output,LOOP 21 → LICA-10113,TRUE +lica-10113.rsp,LICA-10113.RSP_SP2,5186,0x1442,float32,R/W,21,RSP,Remote Set Point (SP2),LOOP 21 → LICA-10113,TRUE +lica-10113.lsp1,LICA-10113.LSP1,5226,0x146A,float32,R/W,21,LSP1,Local SP 1,LOOP 21 → LICA-10113,TRUE +lica-10113.lsp2,LICA-10113.LSP2,5228,0x146C,float32,R/W,21,LSP2,Local SP 2,LOOP 21 → LICA-10113,TRUE +lica-10113.dev,LICA-10113.Deviation,5258,0x148A,float32,R,21,DEV,Deviation (SP-PV),LOOP 21 → LICA-10113,TRUE +lica-10113.pv_lo,LICA-10113.PV_low_range,5206,0x1456,float32,R,21,PV_LO,PV Low Range,LOOP 21 → LICA-10113,TRUE +lica-10113.pv_hi,LICA-10113.PV_high_range,5208,0x1458,float32,R,21,PV_HI,PV High Range,LOOP 21 → LICA-10113,TRUE +lica-10113.sp_lo,LICA-10113.SP_low_limit,5236,0x1474,float32,R/W,21,SP_LO,SP Low Limit,LOOP 21 → LICA-10113,TRUE +lica-10113.sp_hi,LICA-10113.SP_high_limit,5238,0x1476,float32,R/W,21,SP_HI,SP High Limit,LOOP 21 → LICA-10113,TRUE +lica-10113.op_lo,LICA-10113.Output_Low_Limit,5242,0x147A,float32,R/W,21,OP_LO,Output Low Limit,LOOP 21 → LICA-10113,TRUE +lica-10113.op_hi,LICA-10113.Output_High_Limit,5244,0x147C,float32,R/W,21,OP_HI,Output High Limit,LOOP 21 → LICA-10113,TRUE +lica-10113.alm1,LICA-10113.Alarm_1_SP1,5210,0x145A,float32,R/W,21,ALM1,Alarm 1 SP1,LOOP 21 → LICA-10113,TRUE +lica-10113.alm2,LICA-10113.Alarm_2_SP1,5230,0x146E,float32,R/W,21,ALM2,Alarm 2 SP1,LOOP 21 → LICA-10113,TRUE +lica-10113.mode,LICA-10113.Auto_Man_State,5370,0x14FA,uint16,R/W,21,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 21 → LICA-10113,TRUE +lica-10113.status,LICA-10113.Loop_Status_Register,5374,0x14FE,uint16,R,21,STATUS,Loop Status Register,LOOP 21 → LICA-10113,TRUE +ficq-10116.pv,FICQ-10116.PV,5440,0x1540,float32,R,22,PV,Process Variable,LOOP 22 → FICQ-10116,TRUE +ficq-10116.sp,FICQ-10116.WSP,5444,0x1544,float32,R/W,22,SP,Working Set Point,LOOP 22 → FICQ-10116,TRUE +ficq-10116.op,FICQ-10116.Output,5446,0x1546,float32,R/W,22,OP,Output,LOOP 22 → FICQ-10116,TRUE +ficq-10116.rsp,FICQ-10116.RSP_SP2,5442,0x1542,float32,R/W,22,RSP,Remote Set Point (SP2),LOOP 22 → FICQ-10116,TRUE +ficq-10116.lsp1,FICQ-10116.LSP1,5482,0x156A,float32,R/W,22,LSP1,Local SP 1,LOOP 22 → FICQ-10116,TRUE +ficq-10116.lsp2,FICQ-10116.LSP2,5484,0x156C,float32,R/W,22,LSP2,Local SP 2,LOOP 22 → FICQ-10116,TRUE +ficq-10116.dev,FICQ-10116.Deviation,5514,0x158A,float32,R,22,DEV,Deviation (SP-PV),LOOP 22 → FICQ-10116,TRUE +ficq-10116.pv_lo,FICQ-10116.PV_low_range,5462,0x1556,float32,R,22,PV_LO,PV Low Range,LOOP 22 → FICQ-10116,TRUE +ficq-10116.pv_hi,FICQ-10116.PV_high_range,5464,0x1558,float32,R,22,PV_HI,PV High Range,LOOP 22 → FICQ-10116,TRUE +ficq-10116.sp_lo,FICQ-10116.SP_low_limit,5492,0x1574,float32,R/W,22,SP_LO,SP Low Limit,LOOP 22 → FICQ-10116,TRUE +ficq-10116.sp_hi,FICQ-10116.SP_high_limit,5494,0x1576,float32,R/W,22,SP_HI,SP High Limit,LOOP 22 → FICQ-10116,TRUE +ficq-10116.op_lo,FICQ-10116.Output_Low_Limit,5498,0x157A,float32,R/W,22,OP_LO,Output Low Limit,LOOP 22 → FICQ-10116,TRUE +ficq-10116.op_hi,FICQ-10116.Output_High_Limit,5500,0x157C,float32,R/W,22,OP_HI,Output High Limit,LOOP 22 → FICQ-10116,TRUE +ficq-10116.alm1,FICQ-10116.Alarm_1_SP1,5466,0x155A,float32,R/W,22,ALM1,Alarm 1 SP1,LOOP 22 → FICQ-10116,TRUE +ficq-10116.alm2,FICQ-10116.Alarm_2_SP1,5486,0x156E,float32,R/W,22,ALM2,Alarm 2 SP1,LOOP 22 → FICQ-10116,TRUE +ficq-10116.mode,FICQ-10116.Auto_Man_State,5626,0x15FA,uint16,R/W,22,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 22 → FICQ-10116,TRUE +ficq-10116.status,FICQ-10116.Loop_Status_Register,5630,0x15FE,uint16,R,22,STATUS,Loop Status Register,LOOP 22 → FICQ-10116,TRUE +tica-10111a.pv,TIC-10111A.PV,5696,0x1640,float32,R,23,PV,Process Variable,LOOP 23 → TIC-10111A,TRUE +tica-10111a.sp,TIC-10111A.WSP,5700,0x1644,float32,R/W,23,SP,Working Set Point,LOOP 23 → TIC-10111A,TRUE +tica-10111a.op,TIC-10111A.Output,5702,0x1646,float32,R/W,23,OP,Output,LOOP 23 → TIC-10111A,TRUE +tica-10111a.rsp,TIC-10111A.RSP_SP2,5698,0x1642,float32,R/W,23,RSP,Remote Set Point (SP2),LOOP 23 → TIC-10111A,TRUE +tica-10111a.lsp1,TIC-10111A.LSP1,5738,0x166A,float32,R/W,23,LSP1,Local SP 1,LOOP 23 → TIC-10111A,TRUE +tica-10111a.lsp2,TIC-10111A.LSP2,5740,0x166C,float32,R/W,23,LSP2,Local SP 2,LOOP 23 → TIC-10111A,TRUE +tica-10111a.dev,TIC-10111A.Deviation,5770,0x168A,float32,R,23,DEV,Deviation (SP-PV),LOOP 23 → TIC-10111A,TRUE +tica-10111a.pv_lo,TIC-10111A.PV_low_range,5718,0x1656,float32,R,23,PV_LO,PV Low Range,LOOP 23 → TIC-10111A,TRUE +tica-10111a.pv_hi,TIC-10111A.PV_high_range,5720,0x1658,float32,R,23,PV_HI,PV High Range,LOOP 23 → TIC-10111A,TRUE +tica-10111a.sp_lo,TIC-10111A.SP_low_limit,5748,0x1674,float32,R/W,23,SP_LO,SP Low Limit,LOOP 23 → TIC-10111A,TRUE +tica-10111a.sp_hi,TIC-10111A.SP_high_limit,5750,0x1676,float32,R/W,23,SP_HI,SP High Limit,LOOP 23 → TIC-10111A,TRUE +tica-10111a.op_lo,TIC-10111A.Output_Low_Limit,5754,0x167A,float32,R/W,23,OP_LO,Output Low Limit,LOOP 23 → TIC-10111A,TRUE +tica-10111a.op_hi,TIC-10111A.Output_High_Limit,5756,0x167C,float32,R/W,23,OP_HI,Output High Limit,LOOP 23 → TIC-10111A,TRUE +tica-10111a.alm1,TIC-10111A.Alarm_1_SP1,5722,0x165A,float32,R/W,23,ALM1,Alarm 1 SP1,LOOP 23 → TIC-10111A,TRUE +tica-10111a.alm2,TIC-10111A.Alarm_2_SP1,5742,0x166E,float32,R/W,23,ALM2,Alarm 2 SP1,LOOP 23 → TIC-10111A,TRUE +tica-10111a.mode,TIC-10111A.Auto_Man_State,5882,0x16FA,uint16,R/W,23,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 23 → TIC-10111A,TRUE +tica-10111a.status,TIC-10111A.Loop_Status_Register,5886,0x16FE,uint16,R,23,STATUS,Loop Status Register,LOOP 23 → TIC-10111A,TRUE +pica-10111a.pv,PIC-10111A.PV,5952,0x1740,float32,R,24,PV,Process Variable,LOOP 24 → PIC-10111A,TRUE +pica-10111a.sp,PIC-10111A.WSP,5956,0x1744,float32,R/W,24,SP,Working Set Point,LOOP 24 → PIC-10111A,TRUE +pica-10111a.op,PIC-10111A.Output,5958,0x1746,float32,R/W,24,OP,Output,LOOP 24 → PIC-10111A,TRUE +pica-10111a.rsp,PIC-10111A.RSP_SP2,5954,0x1742,float32,R/W,24,RSP,Remote Set Point (SP2),LOOP 24 → PIC-10111A,TRUE +pica-10111a.lsp1,PIC-10111A.LSP1,5994,0x176A,float32,R/W,24,LSP1,Local SP 1,LOOP 24 → PIC-10111A,TRUE +pica-10111a.lsp2,PIC-10111A.LSP2,5996,0x176C,float32,R/W,24,LSP2,Local SP 2,LOOP 24 → PIC-10111A,TRUE +pica-10111a.dev,PIC-10111A.Deviation,6026,0x178A,float32,R,24,DEV,Deviation (SP-PV),LOOP 24 → PIC-10111A,TRUE +pica-10111a.pv_lo,PIC-10111A.PV_low_range,5974,0x1756,float32,R,24,PV_LO,PV Low Range,LOOP 24 → PIC-10111A,TRUE +pica-10111a.pv_hi,PIC-10111A.PV_high_range,5976,0x1758,float32,R,24,PV_HI,PV High Range,LOOP 24 → PIC-10111A,TRUE +pica-10111a.sp_lo,PIC-10111A.SP_low_limit,6004,0x1774,float32,R/W,24,SP_LO,SP Low Limit,LOOP 24 → PIC-10111A,TRUE +pica-10111a.sp_hi,PIC-10111A.SP_high_limit,6006,0x1776,float32,R/W,24,SP_HI,SP High Limit,LOOP 24 → PIC-10111A,TRUE +pica-10111a.op_lo,PIC-10111A.Output_Low_Limit,6010,0x177A,float32,R/W,24,OP_LO,Output Low Limit,LOOP 24 → PIC-10111A,TRUE +pica-10111a.op_hi,PIC-10111A.Output_High_Limit,6012,0x177C,float32,R/W,24,OP_HI,Output High Limit,LOOP 24 → PIC-10111A,TRUE +pica-10111a.alm1,PIC-10111A.Alarm_1_SP1,5978,0x175A,float32,R/W,24,ALM1,Alarm 1 SP1,LOOP 24 → PIC-10111A,TRUE +pica-10111a.alm2,PIC-10111A.Alarm_2_SP1,5998,0x176E,float32,R/W,24,ALM2,Alarm 2 SP1,LOOP 24 → PIC-10111A,TRUE +pica-10111a.mode,PIC-10111A.Auto_Man_State,6138,0x17FA,uint16,R/W,24,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 24 → PIC-10111A,TRUE +pica-10111a.status,PIC-10111A.Loop_Status_Register,6142,0x17FE,uint16,R,24,STATUS,Loop Status Register,LOOP 24 → PIC-10111A,TRUE +ficq-9118.pv,FIC-9118.PV,832,0x0340,float32,R,4,PV,Process Variable,LOOP 4 → FIC-9118,TRUE +ficq-9118.sp,FIC-9118.WSP,836,0x0344,float32,R/W,4,SP,Working Set Point,LOOP 4 → FIC-9118,TRUE +ficq-9118.op,FIC-9118.Output,838,0x0346,float32,R/W,4,OP,Output,LOOP 4 → FIC-9118,TRUE +ficq-9118.rsp,FIC-9118.RSP_SP2,834,0x0342,float32,R/W,4,RSP,Remote Set Point (SP2),LOOP 4 → FIC-9118,TRUE +ficq-9118.lsp1,FIC-9118.LSP1,874,0x036A,float32,R/W,4,LSP1,Local SP 1,LOOP 4 → FIC-9118,TRUE +ficq-9118.lsp2,FIC-9118.LSP2,876,0x036C,float32,R/W,4,LSP2,Local SP 2,LOOP 4 → FIC-9118,TRUE +ficq-9118.dev,FIC-9118.Deviation,906,0x038A,float32,R,4,DEV,Deviation (SP-PV),LOOP 4 → FIC-9118,TRUE +ficq-9118.pv_lo,FIC-9118.PV_low_range,854,0x0356,float32,R,4,PV_LO,PV Low Range,LOOP 4 → FIC-9118,TRUE +ficq-9118.pv_hi,FIC-9118.PV_high_range,856,0x0358,float32,R,4,PV_HI,PV High Range,LOOP 4 → FIC-9118,TRUE +ficq-9118.sp_lo,FIC-9118.SP_low_limit,884,0x0374,float32,R/W,4,SP_LO,SP Low Limit,LOOP 4 → FIC-9118,TRUE +ficq-9118.sp_hi,FIC-9118.SP_high_limit,886,0x0376,float32,R/W,4,SP_HI,SP High Limit,LOOP 4 → FIC-9118,TRUE +ficq-9118.op_lo,FIC-9118.Output_Low_Limit,890,0x037A,float32,R/W,4,OP_LO,Output Low Limit,LOOP 4 → FIC-9118,TRUE +ficq-9118.op_hi,FIC-9118.Output_High_Limit,892,0x037C,float32,R/W,4,OP_HI,Output High Limit,LOOP 4 → FIC-9118,TRUE +ficq-9118.alm1,FIC-9118.Alarm_1_SP1,858,0x035A,float32,R/W,4,ALM1,Alarm 1 SP1,LOOP 4 → FIC-9118,TRUE +ficq-9118.alm2,FIC-9118.Alarm_2_SP1,878,0x036E,float32,R/W,4,ALM2,Alarm 2 SP1,LOOP 4 → FIC-9118,TRUE +ficq-9118.mode,FIC-9118.Auto_Man_State,1018,0x03FA,uint16,R/W,4,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 4 → FIC-9118,TRUE +ficq-9118.status,FIC-9118.Loop_Status_Register,1022,0x03FE,uint16,R,4,STATUS,Loop Status Register,LOOP 4 → FIC-9118,TRUE +ficq-9116.pv,FIC-9116.PV,1088,0x0440,float32,R,5,PV,Process Variable,LOOP 5 → FIC-9116,TRUE +ficq-9116.sp,FIC-9116.WSP,1092,0x0444,float32,R/W,5,SP,Working Set Point,LOOP 5 → FIC-9116,TRUE +ficq-9116.op,FIC-9116.Output,1094,0x0446,float32,R/W,5,OP,Output,LOOP 5 → FIC-9116,TRUE +ficq-9116.rsp,FIC-9116.RSP_SP2,1090,0x0442,float32,R/W,5,RSP,Remote Set Point (SP2),LOOP 5 → FIC-9116,TRUE +ficq-9116.lsp1,FIC-9116.LSP1,1130,0x046A,float32,R/W,5,LSP1,Local SP 1,LOOP 5 → FIC-9116,TRUE +ficq-9116.lsp2,FIC-9116.LSP2,1132,0x046C,float32,R/W,5,LSP2,Local SP 2,LOOP 5 → FIC-9116,TRUE +ficq-9116.dev,FIC-9116.Deviation,1162,0x048A,float32,R,5,DEV,Deviation (SP-PV),LOOP 5 → FIC-9116,TRUE +ficq-9116.pv_lo,FIC-9116.PV_low_range,1110,0x0456,float32,R,5,PV_LO,PV Low Range,LOOP 5 → FIC-9116,TRUE +ficq-9116.pv_hi,FIC-9116.PV_high_range,1112,0x0458,float32,R,5,PV_HI,PV High Range,LOOP 5 → FIC-9116,TRUE +ficq-9116.sp_lo,FIC-9116.SP_low_limit,1140,0x0474,float32,R/W,5,SP_LO,SP Low Limit,LOOP 5 → FIC-9116,TRUE +ficq-9116.sp_hi,FIC-9116.SP_high_limit,1142,0x0476,float32,R/W,5,SP_HI,SP High Limit,LOOP 5 → FIC-9116,TRUE +ficq-9116.op_lo,FIC-9116.Output_Low_Limit,1146,0x047A,float32,R/W,5,OP_LO,Output Low Limit,LOOP 5 → FIC-9116,TRUE +ficq-9116.op_hi,FIC-9116.Output_High_Limit,1148,0x047C,float32,R/W,5,OP_HI,Output High Limit,LOOP 5 → FIC-9116,TRUE +ficq-9116.alm1,FIC-9116.Alarm_1_SP1,1114,0x045A,float32,R/W,5,ALM1,Alarm 1 SP1,LOOP 5 → FIC-9116,TRUE +ficq-9116.alm2,FIC-9116.Alarm_2_SP1,1134,0x046E,float32,R/W,5,ALM2,Alarm 2 SP1,LOOP 5 → FIC-9116,TRUE +ficq-9116.mode,FIC-9116.Auto_Man_State,1274,0x04FA,uint16,R/W,5,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 5 → FIC-9116,TRUE +ficq-9116.status,FIC-9116.Loop_Status_Register,1278,0x04FE,uint16,R,5,STATUS,Loop Status Register,LOOP 5 → FIC-9116,TRUE +tica-9111a.pv,TIC-9111A.PV,1344,0x0540,float32,R,6,PV,Process Variable,LOOP 6 → TIC-9111A,TRUE +tica-9111a.sp,TIC-9111A.WSP,1348,0x0544,float32,R/W,6,SP,Working Set Point,LOOP 6 → TIC-9111A,TRUE +tica-9111a.op,TIC-9111A.Output,1350,0x0546,float32,R/W,6,OP,Output,LOOP 6 → TIC-9111A,TRUE +tica-9111a.rsp,TIC-9111A.RSP_SP2,1346,0x0542,float32,R/W,6,RSP,Remote Set Point (SP2),LOOP 6 → TIC-9111A,TRUE +tica-9111a.lsp1,TIC-9111A.LSP1,1386,0x056A,float32,R/W,6,LSP1,Local SP 1,LOOP 6 → TIC-9111A,TRUE +tica-9111a.lsp2,TIC-9111A.LSP2,1388,0x056C,float32,R/W,6,LSP2,Local SP 2,LOOP 6 → TIC-9111A,TRUE +tica-9111a.dev,TIC-9111A.Deviation,1418,0x058A,float32,R,6,DEV,Deviation (SP-PV),LOOP 6 → TIC-9111A,TRUE +tica-9111a.pv_lo,TIC-9111A.PV_low_range,1366,0x0556,float32,R,6,PV_LO,PV Low Range,LOOP 6 → TIC-9111A,TRUE +tica-9111a.pv_hi,TIC-9111A.PV_high_range,1368,0x0558,float32,R,6,PV_HI,PV High Range,LOOP 6 → TIC-9111A,TRUE +tica-9111a.sp_lo,TIC-9111A.SP_low_limit,1396,0x0574,float32,R/W,6,SP_LO,SP Low Limit,LOOP 6 → TIC-9111A,TRUE +tica-9111a.sp_hi,TIC-9111A.SP_high_limit,1398,0x0576,float32,R/W,6,SP_HI,SP High Limit,LOOP 6 → TIC-9111A,TRUE +tica-9111a.op_lo,TIC-9111A.Output_Low_Limit,1402,0x057A,float32,R/W,6,OP_LO,Output Low Limit,LOOP 6 → TIC-9111A,TRUE +tica-9111a.op_hi,TIC-9111A.Output_High_Limit,1404,0x057C,float32,R/W,6,OP_HI,Output High Limit,LOOP 6 → TIC-9111A,TRUE +tica-9111a.alm1,TIC-9111A.Alarm_1_SP1,1370,0x055A,float32,R/W,6,ALM1,Alarm 1 SP1,LOOP 6 → TIC-9111A,TRUE +tica-9111a.alm2,TIC-9111A.Alarm_2_SP1,1390,0x056E,float32,R/W,6,ALM2,Alarm 2 SP1,LOOP 6 → TIC-9111A,TRUE +tica-9111a.mode,TIC-9111A.Auto_Man_State,1530,0x05FA,uint16,R/W,6,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 6 → TIC-9111A,TRUE +tica-9111a.status,TIC-9111A.Loop_Status_Register,1534,0x05FE,uint16,R,6,STATUS,Loop Status Register,LOOP 6 → TIC-9111A,TRUE +pica-9111a.pv,PIC-9111A.PV,1600,0x0640,float32,R,7,PV,Process Variable,LOOP 7 → PIC-9111A,TRUE +pica-9111a.sp,PIC-9111A.WSP,1604,0x0644,float32,R/W,7,SP,Working Set Point,LOOP 7 → PIC-9111A,TRUE +pica-9111a.op,PIC-9111A.Output,1606,0x0646,float32,R/W,7,OP,Output,LOOP 7 → PIC-9111A,TRUE +pica-9111a.rsp,PIC-9111A.RSP_SP2,1602,0x0642,float32,R/W,7,RSP,Remote Set Point (SP2),LOOP 7 → PIC-9111A,TRUE +pica-9111a.lsp1,PIC-9111A.LSP1,1642,0x066A,float32,R/W,7,LSP1,Local SP 1,LOOP 7 → PIC-9111A,TRUE +pica-9111a.lsp2,PIC-9111A.LSP2,1644,0x066C,float32,R/W,7,LSP2,Local SP 2,LOOP 7 → PIC-9111A,TRUE +pica-9111a.dev,PIC-9111A.Deviation,1674,0x068A,float32,R,7,DEV,Deviation (SP-PV),LOOP 7 → PIC-9111A,TRUE +pica-9111a.pv_lo,PIC-9111A.PV_low_range,1622,0x0656,float32,R,7,PV_LO,PV Low Range,LOOP 7 → PIC-9111A,TRUE +pica-9111a.pv_hi,PIC-9111A.PV_high_range,1624,0x0658,float32,R,7,PV_HI,PV High Range,LOOP 7 → PIC-9111A,TRUE +pica-9111a.sp_lo,PIC-9111A.SP_low_limit,1652,0x0674,float32,R/W,7,SP_LO,SP Low Limit,LOOP 7 → PIC-9111A,TRUE +pica-9111a.sp_hi,PIC-9111A.SP_high_limit,1654,0x0676,float32,R/W,7,SP_HI,SP High Limit,LOOP 7 → PIC-9111A,TRUE +pica-9111a.op_lo,PIC-9111A.Output_Low_Limit,1658,0x067A,float32,R/W,7,OP_LO,Output Low Limit,LOOP 7 → PIC-9111A,TRUE +pica-9111a.op_hi,PIC-9111A.Output_High_Limit,1660,0x067C,float32,R/W,7,OP_HI,Output High Limit,LOOP 7 → PIC-9111A,TRUE +pica-9111a.alm1,PIC-9111A.Alarm_1_SP1,1626,0x065A,float32,R/W,7,ALM1,Alarm 1 SP1,LOOP 7 → PIC-9111A,TRUE +pica-9111a.alm2,PIC-9111A.Alarm_2_SP1,1646,0x066E,float32,R/W,7,ALM2,Alarm 2 SP1,LOOP 7 → PIC-9111A,TRUE +pica-9111a.mode,PIC-9111A.Auto_Man_State,1786,0x06FA,uint16,R/W,7,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 7 → PIC-9111A,TRUE +pica-9111a.status,PIC-9111A.Loop_Status_Register,1790,0x06FE,uint16,R,7,STATUS,Loop Status Register,LOOP 7 → PIC-9111A,TRUE +ficq-9201.pv,FIC-9201.PV,1856,0x0740,float32,R,8,PV,Process Variable,LOOP 8 → FIC-9201,TRUE +ficq-9201.sp,FIC-9201.WSP,1860,0x0744,float32,R/W,8,SP,Working Set Point,LOOP 8 → FIC-9201,TRUE +ficq-9201.op,FIC-9201.Output,1862,0x0746,float32,R/W,8,OP,Output,LOOP 8 → FIC-9201,TRUE +ficq-9201.rsp,FIC-9201.RSP_SP2,1858,0x0742,float32,R/W,8,RSP,Remote Set Point (SP2),LOOP 8 → FIC-9201,TRUE +ficq-9201.lsp1,FIC-9201.LSP1,1898,0x076A,float32,R/W,8,LSP1,Local SP 1,LOOP 8 → FIC-9201,TRUE +ficq-9201.lsp2,FIC-9201.LSP2,1900,0x076C,float32,R/W,8,LSP2,Local SP 2,LOOP 8 → FIC-9201,TRUE +ficq-9201.dev,FIC-9201.Deviation,1930,0x078A,float32,R,8,DEV,Deviation (SP-PV),LOOP 8 → FIC-9201,TRUE +ficq-9201.pv_lo,FIC-9201.PV_low_range,1878,0x0756,float32,R,8,PV_LO,PV Low Range,LOOP 8 → FIC-9201,TRUE +ficq-9201.pv_hi,FIC-9201.PV_high_range,1880,0x0758,float32,R,8,PV_HI,PV High Range,LOOP 8 → FIC-9201,TRUE +ficq-9201.sp_lo,FIC-9201.SP_low_limit,1908,0x0774,float32,R/W,8,SP_LO,SP Low Limit,LOOP 8 → FIC-9201,TRUE +ficq-9201.sp_hi,FIC-9201.SP_high_limit,1910,0x0776,float32,R/W,8,SP_HI,SP High Limit,LOOP 8 → FIC-9201,TRUE +ficq-9201.op_lo,FIC-9201.Output_Low_Limit,1914,0x077A,float32,R/W,8,OP_LO,Output Low Limit,LOOP 8 → FIC-9201,TRUE +ficq-9201.op_hi,FIC-9201.Output_High_Limit,1916,0x077C,float32,R/W,8,OP_HI,Output High Limit,LOOP 8 → FIC-9201,TRUE +ficq-9201.alm1,FIC-9201.Alarm_1_SP1,1882,0x075A,float32,R/W,8,ALM1,Alarm 1 SP1,LOOP 8 → FIC-9201,TRUE +ficq-9201.alm2,FIC-9201.Alarm_2_SP1,1902,0x076E,float32,R/W,8,ALM2,Alarm 2 SP1,LOOP 8 → FIC-9201,TRUE +ficq-9201.mode,FIC-9201.Auto_Man_State,2042,0x07FA,uint16,R/W,8,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 8 → FIC-9201,TRUE +ficq-9201.status,FIC-9201.Loop_Status_Register,2046,0x07FE,uint16,R,8,STATUS,Loop Status Register,LOOP 8 → FIC-9201,TRUE +ficq-10201.pv,FICQ-10201.PV,30784,0x7840,float32,R,25,PV,Process Variable,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.sp,FICQ-10201.WSP,30788,0x7844,float32,R/W,25,SP,Working Set Point,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.op,FICQ-10201.Output,30790,0x7846,float32,R/W,25,OP,Output,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.rsp,FICQ-10201.RSP_SP2,30786,0x7842,float32,R/W,25,RSP,Remote Set Point (SP2),LOOPX 25 → FICQ-10201,TRUE +ficq-10201.lsp1,FICQ-10201.LSP1,30826,0x786A,float32,R/W,25,LSP1,Local SP 1,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.lsp2,FICQ-10201.LSP2,30828,0x786C,float32,R/W,25,LSP2,Local SP 2,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.dev,FICQ-10201.Deviation,30858,0x788A,float32,R,25,DEV,Deviation (SP-PV),LOOPX 25 → FICQ-10201,TRUE +ficq-10201.pv_lo,FICQ-10201.PV_low_range,30806,0x7856,float32,R,25,PV_LO,PV Low Range,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.pv_hi,FICQ-10201.PV_high_range,30808,0x7858,float32,R,25,PV_HI,PV High Range,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.sp_lo,FICQ-10201.SP_low_limit,30836,0x7874,float32,R/W,25,SP_LO,SP Low Limit,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.sp_hi,FICQ-10201.SP_high_limit,30838,0x7876,float32,R/W,25,SP_HI,SP High Limit,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.op_lo,FICQ-10201.Output_Low_Limit,30842,0x787A,float32,R/W,25,OP_LO,Output Low Limit,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.op_hi,FICQ-10201.Output_High_Limit,30844,0x787C,float32,R/W,25,OP_HI,Output High Limit,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.alm1,FICQ-10201.Alarm_1_SP1,30810,0x785A,float32,R/W,25,ALM1,Alarm 1 SP1,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.alm2,FICQ-10201.Alarm_2_SP1,30830,0x786E,float32,R/W,25,ALM2,Alarm 2 SP1,LOOPX 25 → FICQ-10201,TRUE +ficq-10201.mode,FICQ-10201.Auto_Man_State,30970,0x78FA,uint16,R/W,25,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOPX 25 → FICQ-10201,TRUE +ficq-10201.status,FICQ-10201.Loop_Status_Register,30974,0x78FE,uint16,R,25,STATUS,Loop Status Register,LOOPX 25 → FICQ-10201,TRUE +ficq-10218.pv,FICQ-10218.PV,31552,0x7B40,float32,R,28,PV,Process Variable,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.sp,FICQ-10218.WSP,31556,0x7B44,float32,R/W,28,SP,Working Set Point,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.op,FICQ-10218.Output,31558,0x7B46,float32,R/W,28,OP,Output,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.rsp,FICQ-10218.RSP_SP2,31554,0x7B42,float32,R/W,28,RSP,Remote Set Point (SP2),LOOPX 28 → FICQ-10218,TRUE +ficq-10218.lsp1,FICQ-10218.LSP1,31594,0x7B6A,float32,R/W,28,LSP1,Local SP 1,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.lsp2,FICQ-10218.LSP2,31596,0x7B6C,float32,R/W,28,LSP2,Local SP 2,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.dev,FICQ-10218.Deviation,31626,0x7B8A,float32,R,28,DEV,Deviation (SP-PV),LOOPX 28 → FICQ-10218,TRUE +ficq-10218.pv_lo,FICQ-10218.PV_low_range,31574,0x7B56,float32,R,28,PV_LO,PV Low Range,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.pv_hi,FICQ-10218.PV_high_range,31576,0x7B58,float32,R,28,PV_HI,PV High Range,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.sp_lo,FICQ-10218.SP_low_limit,31604,0x7B74,float32,R/W,28,SP_LO,SP Low Limit,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.sp_hi,FICQ-10218.SP_high_limit,31606,0x7B76,float32,R/W,28,SP_HI,SP High Limit,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.op_lo,FICQ-10218.Output_Low_Limit,31610,0x7B7A,float32,R/W,28,OP_LO,Output Low Limit,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.op_hi,FICQ-10218.Output_High_Limit,31612,0x7B7C,float32,R/W,28,OP_HI,Output High Limit,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.alm1,FICQ-10218.Alarm_1_SP1,31578,0x7B5A,float32,R/W,28,ALM1,Alarm 1 SP1,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.alm2,FICQ-10218.Alarm_2_SP1,31598,0x7B6E,float32,R/W,28,ALM2,Alarm 2 SP1,LOOPX 28 → FICQ-10218,TRUE +ficq-10218.mode,FICQ-10218.Auto_Man_State,31738,0x7BFA,uint16,R/W,28,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOPX 28 → FICQ-10218,TRUE +ficq-10218.status,FICQ-10218.Loop_Status_Register,31742,0x7BFE,uint16,R,28,STATUS,Loop Status Register,LOOPX 28 → FICQ-10218,TRUE +lica-10213.pv,LIC-10213.PV,31808,0x7C40,float32,R,29,PV,Process Variable,LOOPX 29 → LIC-10213,TRUE +lica-10213.sp,LIC-10213.WSP,31812,0x7C44,float32,R/W,29,SP,Working Set Point,LOOPX 29 → LIC-10213,TRUE +lica-10213.op,LIC-10213.Output,31814,0x7C46,float32,R/W,29,OP,Output,LOOPX 29 → LIC-10213,TRUE +lica-10213.rsp,LIC-10213.RSP_SP2,31810,0x7C42,float32,R/W,29,RSP,Remote Set Point (SP2),LOOPX 29 → LIC-10213,TRUE +lica-10213.lsp1,LIC-10213.LSP1,31850,0x7C6A,float32,R/W,29,LSP1,Local SP 1,LOOPX 29 → LIC-10213,TRUE +lica-10213.lsp2,LIC-10213.LSP2,31852,0x7C6C,float32,R/W,29,LSP2,Local SP 2,LOOPX 29 → LIC-10213,TRUE +lica-10213.dev,LIC-10213.Deviation,31882,0x7C8A,float32,R,29,DEV,Deviation (SP-PV),LOOPX 29 → LIC-10213,TRUE +lica-10213.pv_lo,LIC-10213.PV_low_range,31830,0x7C56,float32,R,29,PV_LO,PV Low Range,LOOPX 29 → LIC-10213,TRUE +lica-10213.pv_hi,LIC-10213.PV_high_range,31832,0x7C58,float32,R,29,PV_HI,PV High Range,LOOPX 29 → LIC-10213,TRUE +lica-10213.sp_lo,LIC-10213.SP_low_limit,31860,0x7C74,float32,R/W,29,SP_LO,SP Low Limit,LOOPX 29 → LIC-10213,TRUE +lica-10213.sp_hi,LIC-10213.SP_high_limit,31862,0x7C76,float32,R/W,29,SP_HI,SP High Limit,LOOPX 29 → LIC-10213,TRUE +lica-10213.op_lo,LIC-10213.Output_Low_Limit,31866,0x7C7A,float32,R/W,29,OP_LO,Output Low Limit,LOOPX 29 → LIC-10213,TRUE +lica-10213.op_hi,LIC-10213.Output_High_Limit,31868,0x7C7C,float32,R/W,29,OP_HI,Output High Limit,LOOPX 29 → LIC-10213,TRUE +lica-10213.alm1,LIC-10213.Alarm_1_SP1,31834,0x7C5A,float32,R/W,29,ALM1,Alarm 1 SP1,LOOPX 29 → LIC-10213,TRUE +lica-10213.alm2,LIC-10213.Alarm_2_SP1,31854,0x7C6E,float32,R/W,29,ALM2,Alarm 2 SP1,LOOPX 29 → LIC-10213,TRUE +lica-10213.mode,LIC-10213.Auto_Man_State,31994,0x7CFA,uint16,R/W,29,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOPX 29 → LIC-10213,TRUE +lica-10213.status,LIC-10213.Loop_Status_Register,31998,0x7CFE,uint16,R,29,STATUS,Loop Status Register,LOOPX 29 → LIC-10213,TRUE +pica-10211a.pv,PIC-10211A.PV,32576,0x7F40,float32,R,32,PV,Process Variable,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.sp,PIC-10211A.WSP,32580,0x7F44,float32,R/W,32,SP,Working Set Point,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.op,PIC-10211A.Output,32582,0x7F46,float32,R/W,32,OP,Output,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.rsp,PIC-10211A.RSP_SP2,32578,0x7F42,float32,R/W,32,RSP,Remote Set Point (SP2),LOOPX 32 → PIC-10211A,TRUE +pica-10211a.lsp1,PIC-10211A.LSP1,32618,0x7F6A,float32,R/W,32,LSP1,Local SP 1,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.lsp2,PIC-10211A.LSP2,32620,0x7F6C,float32,R/W,32,LSP2,Local SP 2,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.dev,PIC-10211A.Deviation,32650,0x7F8A,float32,R,32,DEV,Deviation (SP-PV),LOOPX 32 → PIC-10211A,TRUE +pica-10211a.pv_lo,PIC-10211A.PV_low_range,32598,0x7F56,float32,R,32,PV_LO,PV Low Range,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.pv_hi,PIC-10211A.PV_high_range,32600,0x7F58,float32,R,32,PV_HI,PV High Range,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.sp_lo,PIC-10211A.SP_low_limit,32628,0x7F74,float32,R/W,32,SP_LO,SP Low Limit,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.sp_hi,PIC-10211A.SP_high_limit,32630,0x7F76,float32,R/W,32,SP_HI,SP High Limit,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.op_lo,PIC-10211A.Output_Low_Limit,32634,0x7F7A,float32,R/W,32,OP_LO,Output Low Limit,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.op_hi,PIC-10211A.Output_High_Limit,32636,0x7F7C,float32,R/W,32,OP_HI,Output High Limit,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.alm1,PIC-10211A.Alarm_1_SP1,32602,0x7F5A,float32,R/W,32,ALM1,Alarm 1 SP1,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.alm2,PIC-10211A.Alarm_2_SP1,32622,0x7F6E,float32,R/W,32,ALM2,Alarm 2 SP1,LOOPX 32 → PIC-10211A,TRUE +pica-10211a.mode,PIC-10211A.Auto_Man_State,32762,0x7FFA,uint16,R/W,32,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOPX 32 → PIC-10211A,TRUE +pica-10211a.status,PIC-10211A.Loop_Status_Register,32766,0x7FFE,uint16,R,32,STATUS,Loop Status Register,LOOPX 32 → PIC-10211A,TRUE +ficq-10216.pv,FIC-10216.PV,32064,0x7D40,float32,R,30,PV,Process Variable,LOOPX 30 → FIC-10216,TRUE +ficq-10216.sp,FIC-10216.WSP,32068,0x7D44,float32,R/W,30,SP,Working Set Point,LOOPX 30 → FIC-10216,TRUE +ficq-10216.op,FIC-10216.Output,32070,0x7D46,float32,R/W,30,OP,Output,LOOPX 30 → FIC-10216,TRUE +ficq-10216.rsp,FIC-10216.RSP_SP2,32066,0x7D42,float32,R/W,30,RSP,Remote Set Point (SP2),LOOPX 30 → FIC-10216,TRUE +ficq-10216.lsp1,FIC-10216.LSP1,32106,0x7D6A,float32,R/W,30,LSP1,Local SP 1,LOOPX 30 → FIC-10216,TRUE +ficq-10216.lsp2,FIC-10216.LSP2,32108,0x7D6C,float32,R/W,30,LSP2,Local SP 2,LOOPX 30 → FIC-10216,TRUE +ficq-10216.dev,FIC-10216.Deviation,32138,0x7D8A,float32,R,30,DEV,Deviation (SP-PV),LOOPX 30 → FIC-10216,TRUE +ficq-10216.pv_lo,FIC-10216.PV_low_range,32086,0x7D56,float32,R,30,PV_LO,PV Low Range,LOOPX 30 → FIC-10216,TRUE +ficq-10216.pv_hi,FIC-10216.PV_high_range,32088,0x7D58,float32,R,30,PV_HI,PV High Range,LOOPX 30 → FIC-10216,TRUE +ficq-10216.sp_lo,FIC-10216.SP_low_limit,32116,0x7D74,float32,R/W,30,SP_LO,SP Low Limit,LOOPX 30 → FIC-10216,TRUE +ficq-10216.sp_hi,FIC-10216.SP_high_limit,32118,0x7D76,float32,R/W,30,SP_HI,SP High Limit,LOOPX 30 → FIC-10216,TRUE +ficq-10216.op_lo,FIC-10216.Output_Low_Limit,32122,0x7D7A,float32,R/W,30,OP_LO,Output Low Limit,LOOPX 30 → FIC-10216,TRUE +ficq-10216.op_hi,FIC-10216.Output_High_Limit,32124,0x7D7C,float32,R/W,30,OP_HI,Output High Limit,LOOPX 30 → FIC-10216,TRUE +ficq-10216.alm1,FIC-10216.Alarm_1_SP1,32090,0x7D5A,float32,R/W,30,ALM1,Alarm 1 SP1,LOOPX 30 → FIC-10216,TRUE +ficq-10216.alm2,FIC-10216.Alarm_2_SP1,32110,0x7D6E,float32,R/W,30,ALM2,Alarm 2 SP1,LOOPX 30 → FIC-10216,TRUE +ficq-10216.mode,FIC-10216.Auto_Man_State,32250,0x7DFA,uint16,R/W,30,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOPX 30 → FIC-10216,TRUE +ficq-10216.status,FIC-10216.Loop_Status_Register,32254,0x7DFE,uint16,R,30,STATUS,Loop Status Register,LOOPX 30 → FIC-10216,TRUE +tica-9211a.pv,TIC-9211.PV,3136,0x0C40,float32,R,13,PV,Process Variable,LOOP 13 → TIC-9211,TRUE +tica-9211a.sp,TIC-9211.WSP,3140,0x0C44,float32,R/W,13,SP,Working Set Point,LOOP 13 → TIC-9211,TRUE +tica-9211a.op,TIC-9211.Output,3142,0x0C46,float32,R/W,13,OP,Output,LOOP 13 → TIC-9211,TRUE +tica-9211a.rsp,TIC-9211.RSP_SP2,3138,0x0C42,float32,R/W,13,RSP,Remote Set Point (SP2),LOOP 13 → TIC-9211,TRUE +tica-9211a.lsp1,TIC-9211.LSP1,3178,0x0C6A,float32,R/W,13,LSP1,Local SP 1,LOOP 13 → TIC-9211,TRUE +tica-9211a.lsp2,TIC-9211.LSP2,3180,0x0C6C,float32,R/W,13,LSP2,Local SP 2,LOOP 13 → TIC-9211,TRUE +tica-9211a.dev,TIC-9211.Deviation,3210,0x0C8A,float32,R,13,DEV,Deviation (SP-PV),LOOP 13 → TIC-9211,TRUE +tica-9211a.pv_lo,TIC-9211.PV_low_range,3158,0x0C56,float32,R,13,PV_LO,PV Low Range,LOOP 13 → TIC-9211,TRUE +tica-9211a.pv_hi,TIC-9211.PV_high_range,3160,0x0C58,float32,R,13,PV_HI,PV High Range,LOOP 13 → TIC-9211,TRUE +tica-9211a.sp_lo,TIC-9211.SP_low_limit,3188,0x0C74,float32,R/W,13,SP_LO,SP Low Limit,LOOP 13 → TIC-9211,TRUE +tica-9211a.sp_hi,TIC-9211.SP_high_limit,3190,0x0C76,float32,R/W,13,SP_HI,SP High Limit,LOOP 13 → TIC-9211,TRUE +tica-9211a.op_lo,TIC-9211.Output_Low_Limit,3194,0x0C7A,float32,R/W,13,OP_LO,Output Low Limit,LOOP 13 → TIC-9211,TRUE +tica-9211a.op_hi,TIC-9211.Output_High_Limit,3196,0x0C7C,float32,R/W,13,OP_HI,Output High Limit,LOOP 13 → TIC-9211,TRUE +tica-9211a.alm1,TIC-9211.Alarm_1_SP1,3162,0x0C5A,float32,R/W,13,ALM1,Alarm 1 SP1,LOOP 13 → TIC-9211,TRUE +tica-9211a.alm2,TIC-9211.Alarm_2_SP1,3182,0x0C6E,float32,R/W,13,ALM2,Alarm 2 SP1,LOOP 13 → TIC-9211,TRUE +tica-9211a.mode,TIC-9211.Auto_Man_State,3322,0x0CFA,uint16,R/W,13,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 13 → TIC-9211,TRUE +tica-9211a.status,TIC-9211.Loop_Status_Register,3326,0x0CFE,uint16,R,13,STATUS,Loop Status Register,LOOP 13 → TIC-9211,TRUE +tica-10211a.pv,TIC-10211.PV,32320,0x7E40,float32,R,31,PV,Process Variable,LOOPX 31 → TIC-10211,TRUE +tica-10211a.sp,TIC-10211.WSP,32324,0x7E44,float32,R/W,31,SP,Working Set Point,LOOPX 31 → TIC-10211,TRUE +tica-10211a.op,TIC-10211.Output,32326,0x7E46,float32,R/W,31,OP,Output,LOOPX 31 → TIC-10211,TRUE +tica-10211a.rsp,TIC-10211.RSP_SP2,32322,0x7E42,float32,R/W,31,RSP,Remote Set Point (SP2),LOOPX 31 → TIC-10211,TRUE +tica-10211a.lsp1,TIC-10211.LSP1,32362,0x7E6A,float32,R/W,31,LSP1,Local SP 1,LOOPX 31 → TIC-10211,TRUE +tica-10211a.lsp2,TIC-10211.LSP2,32364,0x7E6C,float32,R/W,31,LSP2,Local SP 2,LOOPX 31 → TIC-10211,TRUE +tica-10211a.dev,TIC-10211.Deviation,32394,0x7E8A,float32,R,31,DEV,Deviation (SP-PV),LOOPX 31 → TIC-10211,TRUE +tica-10211a.pv_lo,TIC-10211.PV_low_range,32342,0x7E56,float32,R,31,PV_LO,PV Low Range,LOOPX 31 → TIC-10211,TRUE +tica-10211a.pv_hi,TIC-10211.PV_high_range,32344,0x7E58,float32,R,31,PV_HI,PV High Range,LOOPX 31 → TIC-10211,TRUE +tica-10211a.sp_lo,TIC-10211.SP_low_limit,32372,0x7E74,float32,R/W,31,SP_LO,SP Low Limit,LOOPX 31 → TIC-10211,TRUE +tica-10211a.sp_hi,TIC-10211.SP_high_limit,32374,0x7E76,float32,R/W,31,SP_HI,SP High Limit,LOOPX 31 → TIC-10211,TRUE +tica-10211a.op_lo,TIC-10211.Output_Low_Limit,32378,0x7E7A,float32,R/W,31,OP_LO,Output Low Limit,LOOPX 31 → TIC-10211,TRUE +tica-10211a.op_hi,TIC-10211.Output_High_Limit,32380,0x7E7C,float32,R/W,31,OP_HI,Output High Limit,LOOPX 31 → TIC-10211,TRUE +tica-10211a.alm1,TIC-10211.Alarm_1_SP1,32346,0x7E5A,float32,R/W,31,ALM1,Alarm 1 SP1,LOOPX 31 → TIC-10211,TRUE +tica-10211a.alm2,TIC-10211.Alarm_2_SP1,32366,0x7E6E,float32,R/W,31,ALM2,Alarm 2 SP1,LOOPX 31 → TIC-10211,TRUE +tica-10211a.mode,TIC-10211.Auto_Man_State,32506,0x7EFA,uint16,R/W,31,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOPX 31 → TIC-10211,TRUE +tica-10211a.status,TIC-10211.Loop_Status_Register,32510,0x7EFE,uint16,R,31,STATUS,Loop Status Register,LOOPX 31 → TIC-10211,TRUE +ficq-9113.pv,FIC-9113.PV,576,0x0240,float32,R,3,PV,Process Variable,LOOP 3 → FIC-9113,TRUE +ficq-9113.sp,FIC-9113.WSP,580,0x0244,float32,R/W,3,SP,Working Set Point,LOOP 3 → FIC-9113,TRUE +ficq-9113.op,FIC-9113.Output,582,0x0246,float32,R/W,3,OP,Output,LOOP 3 → FIC-9113,TRUE +ficq-9113.rsp,FIC-9113.RSP_SP2,578,0x0242,float32,R/W,3,RSP,Remote Set Point (SP2),LOOP 3 → FIC-9113,TRUE +ficq-9113.lsp1,FIC-9113.LSP1,618,0x026A,float32,R/W,3,LSP1,Local SP 1,LOOP 3 → FIC-9113,TRUE +ficq-9113.lsp2,FIC-9113.LSP2,620,0x026C,float32,R/W,3,LSP2,Local SP 2,LOOP 3 → FIC-9113,TRUE +ficq-9113.dev,FIC-9113.Deviation,650,0x028A,float32,R,3,DEV,Deviation (SP-PV),LOOP 3 → FIC-9113,TRUE +ficq-9113.pv_lo,FIC-9113.PV_low_range,598,0x0256,float32,R,3,PV_LO,PV Low Range,LOOP 3 → FIC-9113,TRUE +ficq-9113.pv_hi,FIC-9113.PV_high_range,600,0x0258,float32,R,3,PV_HI,PV High Range,LOOP 3 → FIC-9113,TRUE +ficq-9113.sp_lo,FIC-9113.SP_low_limit,628,0x0274,float32,R/W,3,SP_LO,SP Low Limit,LOOP 3 → FIC-9113,TRUE +ficq-9113.sp_hi,FIC-9113.SP_high_limit,630,0x0276,float32,R/W,3,SP_HI,SP High Limit,LOOP 3 → FIC-9113,TRUE +ficq-9113.op_lo,FIC-9113.Output_Low_Limit,634,0x027A,float32,R/W,3,OP_LO,Output Low Limit,LOOP 3 → FIC-9113,TRUE +ficq-9113.op_hi,FIC-9113.Output_High_Limit,636,0x027C,float32,R/W,3,OP_HI,Output High Limit,LOOP 3 → FIC-9113,TRUE +ficq-9113.alm1,FIC-9113.Alarm_1_SP1,602,0x025A,float32,R/W,3,ALM1,Alarm 1 SP1,LOOP 3 → FIC-9113,TRUE +ficq-9113.alm2,FIC-9113.Alarm_2_SP1,622,0x026E,float32,R/W,3,ALM2,Alarm 2 SP1,LOOP 3 → FIC-9113,TRUE +ficq-9113.mode,FIC-9113.Auto_Man_State,762,0x02FA,uint16,R/W,3,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 3 → FIC-9113,TRUE +ficq-9113.status,FIC-9113.Loop_Status_Register,766,0x02FE,uint16,R,3,STATUS,Loop Status Register,LOOP 3 → FIC-9113,TRUE +ficq-9213.pv,FIC-9213.PV,2112,0x0840,float32,R,9,PV,Process Variable,LOOP 9 → FIC-9213,TRUE +ficq-9213.sp,FIC-9213.WSP,2116,0x0844,float32,R/W,9,SP,Working Set Point,LOOP 9 → FIC-9213,TRUE +ficq-9213.op,FIC-9213.Output,2118,0x0846,float32,R/W,9,OP,Output,LOOP 9 → FIC-9213,TRUE +ficq-9213.rsp,FIC-9213.RSP_SP2,2114,0x0842,float32,R/W,9,RSP,Remote Set Point (SP2),LOOP 9 → FIC-9213,TRUE +ficq-9213.lsp1,FIC-9213.LSP1,2154,0x086A,float32,R/W,9,LSP1,Local SP 1,LOOP 9 → FIC-9213,TRUE +ficq-9213.lsp2,FIC-9213.LSP2,2156,0x086C,float32,R/W,9,LSP2,Local SP 2,LOOP 9 → FIC-9213,TRUE +ficq-9213.dev,FIC-9213.Deviation,2186,0x088A,float32,R,9,DEV,Deviation (SP-PV),LOOP 9 → FIC-9213,TRUE +ficq-9213.pv_lo,FIC-9213.PV_low_range,2134,0x0856,float32,R,9,PV_LO,PV Low Range,LOOP 9 → FIC-9213,TRUE +ficq-9213.pv_hi,FIC-9213.PV_high_range,2136,0x0858,float32,R,9,PV_HI,PV High Range,LOOP 9 → FIC-9213,TRUE +ficq-9213.sp_lo,FIC-9213.SP_low_limit,2164,0x0874,float32,R/W,9,SP_LO,SP Low Limit,LOOP 9 → FIC-9213,TRUE +ficq-9213.sp_hi,FIC-9213.SP_high_limit,2166,0x0876,float32,R/W,9,SP_HI,SP High Limit,LOOP 9 → FIC-9213,TRUE +ficq-9213.op_lo,FIC-9213.Output_Low_Limit,2170,0x087A,float32,R/W,9,OP_LO,Output Low Limit,LOOP 9 → FIC-9213,TRUE +ficq-9213.op_hi,FIC-9213.Output_High_Limit,2172,0x087C,float32,R/W,9,OP_HI,Output High Limit,LOOP 9 → FIC-9213,TRUE +ficq-9213.alm1,FIC-9213.Alarm_1_SP1,2138,0x085A,float32,R/W,9,ALM1,Alarm 1 SP1,LOOP 9 → FIC-9213,TRUE +ficq-9213.alm2,FIC-9213.Alarm_2_SP1,2158,0x086E,float32,R/W,9,ALM2,Alarm 2 SP1,LOOP 9 → FIC-9213,TRUE +ficq-9213.mode,FIC-9213.Auto_Man_State,2298,0x08FA,uint16,R/W,9,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 9 → FIC-9213,TRUE +ficq-9213.status,FIC-9213.Loop_Status_Register,2302,0x08FE,uint16,R,9,STATUS,Loop Status Register,LOOP 9 → FIC-9213,TRUE +ficq-10113.pv,FICQ-10113.PV,4416,0x1140,float32,R,18,PV,Process Variable,LOOP 18 → FICQ-10113,TRUE +ficq-10113.sp,FICQ-10113.WSP,4420,0x1144,float32,R/W,18,SP,Working Set Point,LOOP 18 → FICQ-10113,TRUE +ficq-10113.op,FICQ-10113.Output,4422,0x1146,float32,R/W,18,OP,Output,LOOP 18 → FICQ-10113,TRUE +ficq-10113.rsp,FICQ-10113.RSP_SP2,4418,0x1142,float32,R/W,18,RSP,Remote Set Point (SP2),LOOP 18 → FICQ-10113,TRUE +ficq-10113.lsp1,FICQ-10113.LSP1,4458,0x116A,float32,R/W,18,LSP1,Local SP 1,LOOP 18 → FICQ-10113,TRUE +ficq-10113.lsp2,FICQ-10113.LSP2,4460,0x116C,float32,R/W,18,LSP2,Local SP 2,LOOP 18 → FICQ-10113,TRUE +ficq-10113.dev,FICQ-10113.Deviation,4490,0x118A,float32,R,18,DEV,Deviation (SP-PV),LOOP 18 → FICQ-10113,TRUE +ficq-10113.pv_lo,FICQ-10113.PV_low_range,4438,0x1156,float32,R,18,PV_LO,PV Low Range,LOOP 18 → FICQ-10113,TRUE +ficq-10113.pv_hi,FICQ-10113.PV_high_range,4440,0x1158,float32,R,18,PV_HI,PV High Range,LOOP 18 → FICQ-10113,TRUE +ficq-10113.sp_lo,FICQ-10113.SP_low_limit,4468,0x1174,float32,R/W,18,SP_LO,SP Low Limit,LOOP 18 → FICQ-10113,TRUE +ficq-10113.sp_hi,FICQ-10113.SP_high_limit,4470,0x1176,float32,R/W,18,SP_HI,SP High Limit,LOOP 18 → FICQ-10113,TRUE +ficq-10113.op_lo,FICQ-10113.Output_Low_Limit,4474,0x117A,float32,R/W,18,OP_LO,Output Low Limit,LOOP 18 → FICQ-10113,TRUE +ficq-10113.op_hi,FICQ-10113.Output_High_Limit,4476,0x117C,float32,R/W,18,OP_HI,Output High Limit,LOOP 18 → FICQ-10113,TRUE +ficq-10113.alm1,FICQ-10113.Alarm_1_SP1,4442,0x115A,float32,R/W,18,ALM1,Alarm 1 SP1,LOOP 18 → FICQ-10113,TRUE +ficq-10113.alm2,FICQ-10113.Alarm_2_SP1,4462,0x116E,float32,R/W,18,ALM2,Alarm 2 SP1,LOOP 18 → FICQ-10113,TRUE +ficq-10113.mode,FICQ-10113.Auto_Man_State,4602,0x11FA,uint16,R/W,18,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOP 18 → FICQ-10113,TRUE +ficq-10113.status,FICQ-10113.Loop_Status_Register,4606,0x11FE,uint16,R,18,STATUS,Loop Status Register,LOOP 18 → FICQ-10113,TRUE +ficq-10213.pv,FICQ-10213.PV,31040,0x7940,float32,R,26,PV,Process Variable,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.sp,FICQ-10213.WSP,31044,0x7944,float32,R/W,26,SP,Working Set Point,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.op,FICQ-10213.Output,31046,0x7946,float32,R/W,26,OP,Output,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.rsp,FICQ-10213.RSP_SP2,31042,0x7942,float32,R/W,26,RSP,Remote Set Point (SP2),LOOPX 26 → FICQ-10213,TRUE +ficq-10213.lsp1,FICQ-10213.LSP1,31082,0x796A,float32,R/W,26,LSP1,Local SP 1,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.lsp2,FICQ-10213.LSP2,31084,0x796C,float32,R/W,26,LSP2,Local SP 2,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.dev,FICQ-10213.Deviation,31114,0x798A,float32,R,26,DEV,Deviation (SP-PV),LOOPX 26 → FICQ-10213,TRUE +ficq-10213.pv_lo,FICQ-10213.PV_low_range,31062,0x7956,float32,R,26,PV_LO,PV Low Range,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.pv_hi,FICQ-10213.PV_high_range,31064,0x7958,float32,R,26,PV_HI,PV High Range,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.sp_lo,FICQ-10213.SP_low_limit,31092,0x7974,float32,R/W,26,SP_LO,SP Low Limit,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.sp_hi,FICQ-10213.SP_high_limit,31094,0x7976,float32,R/W,26,SP_HI,SP High Limit,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.op_lo,FICQ-10213.Output_Low_Limit,31098,0x797A,float32,R/W,26,OP_LO,Output Low Limit,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.op_hi,FICQ-10213.Output_High_Limit,31100,0x797C,float32,R/W,26,OP_HI,Output High Limit,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.alm1,FICQ-10213.Alarm_1_SP1,31066,0x795A,float32,R/W,26,ALM1,Alarm 1 SP1,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.alm2,FICQ-10213.Alarm_2_SP1,31086,0x796E,float32,R/W,26,ALM2,Alarm 2 SP1,LOOPX 26 → FICQ-10213,TRUE +ficq-10213.mode,FICQ-10213.Auto_Man_State,31226,0x79FA,uint16,R/W,26,MODE,"Auto/Manual State (0=Man,1=Auto)",LOOPX 26 → FICQ-10213,TRUE +ficq-10213.status,FICQ-10213.Loop_Status_Register,31230,0x79FE,uint16,R,26,STATUS,Loop Status Register,LOOPX 26 → FICQ-10213,TRUE diff --git a/docs/c4_tag_mapping.sql b/docs/c4_tag_mapping.sql new file mode 100644 index 0000000..dff1724 --- /dev/null +++ b/docs/c4_tag_mapping.sql @@ -0,0 +1,728 @@ +-- HC900 C4 태그 매핑 (hc900_map_master 적재용) +-- 생성: build_c4_mapping.py +-- 대상: hc900.hc900_map_master + +INSERT INTO hc900.hc900_map_master + (tagname, hc900_tag, modbus_addr, data_type, access, loop_no, param_type, is_active) +VALUES + ('c4p1-dc24v-a-ok', 'C4P1_DC24_A_OK', 8248, 'float32', 'R', NULL, 'SIG', TRUE), + ('c4p1-dc24v-b-ok', 'C4P1_DC24_B_OK', 8250, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9114', 'P_9114', 8254, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9118', 'P_9118', 8256, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9116', 'P_9116', 8258, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9121', 'P_9121', 8260, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9122', 'P_9122', 8262, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9201', 'P_9201', 8266, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9214', 'P_9214', 8268, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9218', 'P_9218', 8270, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9216', 'P_9216', 8272, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9221', 'P_9221', 8274, 'float32', 'R', NULL, 'SIG', TRUE), + ('vp-9117', 'VP_9117', 8278, 'float32', 'R', NULL, 'SIG', TRUE), + ('vp-9217', 'VP_9217', 8280, 'float32', 'R', NULL, 'SIG', TRUE), + ('f-9601', 'F_9601', 8286, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9128a', 'P_9128A', 8288, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9128b', 'P_9128B', 8290, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-9101', 'XV_9101', 8292, 'float32', 'R', NULL, 'SIG', TRUE), + ('tic-9111a-hi-esd', 'TIC9111A_HI_ESD', 8300, 'float32', 'R', NULL, 'SIG', TRUE), + ('tic-9111a-hi-il', 'TIC9111A_HI_IL', 8298, 'float32', 'R', NULL, 'SIG', TRUE), + ('tic-9211a-hi-esd', 'TIC9211A_HI_ESD', 8312, 'float32', 'R', NULL, 'SIG', TRUE), + ('tic-9211a-hi-il', 'TIC9211A_HI_IL', 8314, 'float32', 'R', NULL, 'SIG', TRUE), + ('lic-9213-il-rst', 'LIC9213_IL_RST', 6444, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9c1-man-esd', 'P9C1_MAN_ESD', 6428, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9c2-man-esd', 'P9C2_MAN_ESD', 6450, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('tic-9111a-trip', 'TIC9111A_TRIP', 8322, 'float32', 'R', NULL, 'SIG', TRUE), + ('lic-9113-trip', 'LIC91113_TRIP', 8326, 'float32', 'R', NULL, 'SIG', TRUE), + ('tic-9211a-trip', 'TIC9211A_TRIP', 8328, 'float32', 'R', NULL, 'SIG', TRUE), + ('lic-9213-trip', 'LIC9213_TRIP', 8332, 'float32', 'R', NULL, 'SIG', TRUE), + ('lic-9113-il-rst', 'LIC9113_IL_RST', 6436, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('lic-9113-lo-il', 'LIC9113_LO_IL', 8306, 'float32', 'R', NULL, 'SIG', TRUE), + ('lic-9213-lo-il', 'LIC9213_LO_IL', 8310, 'float32', 'R', NULL, 'SIG', TRUE), + ('lic-9213-lo-esd', 'LIC9213_LO_ESD', 8308, 'float32', 'R', NULL, 'SIG', TRUE), + ('lic-9113-lo-esd', 'LIC9113_LO_ESD', 8294, 'float32', 'R', NULL, 'SIG', TRUE), + ('9100-man-esd', '9100_MAN_ESD', 8302, 'float32', 'R', NULL, 'SIG', TRUE), + ('9200-man-esd', '9200_MAN_ESD', 8320, 'float32', 'R', NULL, 'SIG', TRUE), + ('9100-esd', '9100_ESD', 8366, 'float32', 'R', NULL, 'SIG', TRUE), + ('9200-esd', '9200_ESD', 8368, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9101', 'P_9101', 8252, 'float32', 'R', NULL, 'SIG', TRUE), + ('p9z1-am-sel', 'P9Z1_AM_SEL', 6346, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9z2-am-sel', 'P9Z2_AM_SEL', 6350, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9z3-am-sel', 'P9Z3_AM_SEL', 6354, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9z4-am-sel', 'P9Z4_AM_SEL', 6358, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9z1-man-on', 'P9Z1_MAN_ON', 6366, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9z2-man-on', 'P9Z2_MAN_ON', 6370, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9z3-man-on', 'P9Z3_MAN_ON', 6374, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9z4-man-on', 'P9Z4_MAN_ON', 6378, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9-lamp-schedule', 'P9_LAMP_SCHEDULE', 6342, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p9z1-lamp', 'P9Z1_LAMP', 8372, 'float32', 'R', NULL, 'SIG', TRUE), + ('p9z2-lamp', 'P9Z2_LAMP', 8374, 'float32', 'R', NULL, 'SIG', TRUE), + ('p9z3-lamp', 'P9Z3_LAMP', 8376, 'float32', 'R', NULL, 'SIG', TRUE), + ('p9z4-lamp', 'P9Z4_LAMP', 8378, 'float32', 'R', NULL, 'SIG', TRUE), + ('pic-9111a-il-rst', 'PIC9111A_IL_RST', 6434, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('pic-9111a-lo-esd', 'PIC9111A_LO_ESD', 8304, 'float32', 'R', NULL, 'SIG', TRUE), + ('pic-9111a-lo-il', 'PIC9111A_LO_IL', 8296, 'float32', 'R', NULL, 'SIG', TRUE), + ('pic-9111a-trip', 'PIC9111A_TRIP', 8324, 'float32', 'R', NULL, 'SIG', TRUE), + ('pic-9211a-il-rst', 'PIC9211A_IL_RST', 6442, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('pic-9211a-lo-esd', 'PIC9211A_LO_ESD', 8316, 'float32', 'R', NULL, 'SIG', TRUE), + ('pic-9211a-lo-il', 'PIC9211A_LO_IL', 8318, 'float32', 'R', NULL, 'SIG', TRUE), + ('pic-9211a-trip', 'PIC9211B_TRIP', 8330, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-9128', 'XV_9128', 8396, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6121', 'XV_6121', 8388, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6122', 'XV_6122', 8390, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6221', 'XV_6221', 8392, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6222', 'XV_6222', 8394, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6125a', 'XV_6125A', 8534, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6125b', 'XV_6125B', 8536, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6126a', 'XV_6126A', 8538, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6126b', 'XV_6126B', 8540, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6225a', 'XV_6225A', 8542, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6225b', 'XV_6225B', 8544, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6226a', 'XV_6226A', 8546, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6226b', 'XV_6226B', 8548, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6127', 'XV_6127', 8550, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-6227', 'XV_6227', 8552, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-9120', 'XV_9120', 8554, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-6127', 'P_6127', 8556, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-6227', 'P_6227', 8558, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9120', 'P_9120', 8560, 'float32', 'R', NULL, 'SIG', TRUE), + ('bl-6300a', 'BL_6300A', 8526, 'float32', 'R', NULL, 'SIG', TRUE), + ('bl-6300b', 'BL_6300B', 8530, 'float32', 'R', NULL, 'SIG', TRUE), + ('bl-6400a', 'BL_6400A', 8590, 'float32', 'R', NULL, 'SIG', TRUE), + ('bl-6400b', 'BL_6400B', 8592, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-8120b', 'P_8120B', 8606, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-8120a', 'P_8120A', 8562, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-9125', 'XV_9125', 8524, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9102', 'P_9102', 8528, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-dfu1', 'XV_DFU1', 8596, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-dfu2', 'XV_DFU2', 8598, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-dfu3', 'XV_DFU3', 8600, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-dfu4', 'XV_DFU4', 8602, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-dfu5a', 'XV_DFU5A', 8604, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-dfu5b', 'XV_DFU5B', 8608, 'float32', 'R', NULL, 'SIG', TRUE), + ('ld-dfu1', 'LD_DFU01', 8610, 'float32', 'R', NULL, 'SIG', TRUE), + ('ld-dfu2', 'LD_DFU02', 8612, 'float32', 'R', NULL, 'SIG', TRUE), + ('ld-dfu3', 'LD_DFU03', 8614, 'float32', 'R', NULL, 'SIG', TRUE), + ('ld-dfu4', 'LD_DFU04', 8616, 'float32', 'R', NULL, 'SIG', TRUE), + ('ld-dfu5', 'LD_DFU05', 8618, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10101', 'P_10101', 8740, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10114', 'P_10114', 8742, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10116', 'P_10116', 8746, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10118', 'P_10118', 8744, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10128a', 'P_10128A', 8748, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10128b', 'P_10128B', 8750, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10201', 'P_10201', 8756, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10214', 'P_10214', 8758, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10216', 'P_10216', 8762, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10218', 'P_10218', 8760, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10221', 'P_10221', 8888, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10602a', 'P_10602A', 8764, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10602b', 'P_10602B', 8766, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10800a', 'P_10800A', 8754, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-10800b', 'P_10800B', 8866, 'float32', 'R', NULL, 'SIG', TRUE), + ('pt-10111a-fail', 'PT_10111A_FAIL', 8800, 'float32', 'R', NULL, 'SIG', TRUE), + ('pt-10211a-fail', 'PT_10211A_FAIL', 8802, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-10101', 'LI_10200', 8870, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-1010n2', 'PT_10702', 8886, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-1020n2', 'FQ_10213', 8884, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-10111', 'XV_10111', 8872, 'float32', 'R', NULL, 'SIG', TRUE), + ('xv-10211', 'XV_10211', 8874, 'float32', 'R', NULL, 'SIG', TRUE), + ('c4p2-dc24v-a-ok', 'C4P1_DC24_A_OK', 8248, 'float32', 'R', NULL, 'SIG', TRUE), + ('c4p2-dc24v-b-ok', 'C4P1_DC24_B_OK', 8250, 'float32', 'R', NULL, 'SIG', TRUE), + ('c4p3-dc24v-a-ok', 'C4P1_DC24_A_OK', 8248, 'float32', 'R', NULL, 'SIG', TRUE), + ('c4p3-dc24v-b-ok', 'C4P1_DC24_B_OK', 8250, 'float32', 'R', NULL, 'SIG', TRUE), + ('pojang-bad-com', 'POJANG_BAD_COM', 8864, 'float32', 'R', NULL, 'SIG', TRUE), + ('pojang-noscan', 'POJANG_NOSCAN', 8862, 'float32', 'R', NULL, 'SIG', TRUE), + ('vp-10117', 'VP_10117', 8752, 'float32', 'R', NULL, 'SIG', TRUE), + ('vp-10217', 'VP_10217', 8768, 'float32', 'R', NULL, 'SIG', TRUE), + ('pt-9211a-fail', 'PT_9211A_FAIL', 8890, 'float32', 'R', NULL, 'SIG', TRUE), + ('pt-9111a-fail', 'PT_9111A_FAIL', 8894, 'float32', 'R', NULL, 'SIG', TRUE), + ('p10z1-lamp', 'FIQ_9116B', 8922, 'float32', 'R', NULL, 'SIG', TRUE), + ('p10z2-lamp', 'FIQ_10116B', 8924, 'float32', 'R', NULL, 'SIG', TRUE), + ('p10z3-lamp', 'FQ_9116B', 8926, 'float32', 'R', NULL, 'SIG', TRUE), + ('p10z4-lamp', 'FQ_10116B', 8928, 'float32', 'R', NULL, 'SIG', TRUE), + ('pica-10111a-trip', 'PIC10111A_TRIP', 8798, 'float32', 'R', NULL, 'SIG', TRUE), + ('tica-10111a-hi-esd', 'TIC10111A_HI_ESD', 8674, 'float32', 'R', NULL, 'SIG', TRUE), + ('tica-10111a-hi-il', 'TIC10111A_HI_IL', 8672, 'float32', 'R', NULL, 'SIG', TRUE), + ('tica-10111a-trip', 'TIC10111A_TRIP', 8796, 'float32', 'R', NULL, 'SIG', TRUE), + ('tica-10211a-hi-esd', 'TIC10211A_HI_ESD', 8726, 'float32', 'R', NULL, 'SIG', TRUE), + ('tica-10211a-hi-il', 'TIC10211A_HI_IL', 8728, 'float32', 'R', NULL, 'SIG', TRUE), + ('tica-10211a-trip', 'TIC10211A_TRIP', 8810, 'float32', 'R', NULL, 'SIG', TRUE), + ('lica-10113-trip', 'LIC101113_TRIP', 8804, 'float32', 'R', NULL, 'SIG', TRUE), + ('lica-10113-lo-esd', 'LIC10113_LO_ESD', 8666, 'float32', 'R', NULL, 'SIG', TRUE), + ('lica-10113-lo-il', 'LIC10113_LO_IL', 8668, 'float32', 'R', NULL, 'SIG', TRUE), + ('lica-10213-lo-esd', 'LIC10213_LO_ESD', 8708, 'float32', 'R', NULL, 'SIG', TRUE), + ('lica-10213-lo-il', 'LIC10213_LO_IL', 8710, 'float32', 'R', NULL, 'SIG', TRUE), + ('lica-10213-trip', 'LIC10213_TRIP', 8814, 'float32', 'R', NULL, 'SIG', TRUE), + ('pica-10211a-trip', 'PIC10211B_TRIP', 8812, 'float32', 'R', NULL, 'SIG', TRUE), + ('pica-10211a-lo-esd', 'PIC10211A_LO_ESD', 8730, 'float32', 'R', NULL, 'SIG', TRUE), + ('pica-10211a-lo-il', 'PIC10211A_LO_IL', 8732, 'float32', 'R', NULL, 'SIG', TRUE), + ('10100-esd', '10100ESDT', 8854, 'float32', 'R', NULL, 'SIG', TRUE), + ('10200-esd', '10200_ESD', 8852, 'float32', 'R', NULL, 'SIG', TRUE), + ('c-9111', 'INVALIDTAG', 6534, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('c-9211', 'XV_10111_HS', 6536, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('pica-10111a-lo-esd', 'PIC10111A_LO_ESD', 8676, 'float32', 'R', NULL, 'SIG', TRUE), + ('pica-10111a-lo-il', 'PIC10111A_LO_IL', 8670, 'float32', 'R', NULL, 'SIG', TRUE), + ('p10c1-man-esd', 'P10C1_MAN_ESD', 6540, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('p10c2-man-esd', 'P10C2_MAN_ESD', 6544, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('9100-esd-rst', '9100_ESD_RST', 6430, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('9200-esd-rst', '9200_ESD_RST', 6452, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('10100-esd-rst', '10100_ESD_RST', 6542, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('10200-esd-rst', '10200_ESD_RST', 6546, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('10100-man-esd', '10100_MAN_ESD', 8846, 'float32', 'R', NULL, 'SIG', TRUE), + ('10200-man-esd', '10200_MAN_ESD', 8848, 'float32', 'R', NULL, 'SIG', TRUE), + ('c-10111', 'XV_10211_HS', 6538, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('c-10211', 'VAR_130', 6594, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('f-10601', 'F_10602', 8770, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9602a', 'P_9602A', 8282, 'float32', 'R', NULL, 'SIG', TRUE), + ('p-9602b', 'P_9602B', 8284, 'float32', 'R', NULL, 'SIG', TRUE), + ('lica-10113-il-rst', 'LIC10113_IL_RST', 6518, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('tica-1011a-il-rst', 'TIC10111A_IL_RST', 6514, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('pica-10111a-il-rst', 'PIC10111A_IL_RST', 6516, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('tica-10211a-il-rst', 'TIC10211A_IL_RST', 6520, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('pica-10211a-il-rst', 'PIC10211A_IL_RST', 6522, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('lica-10213-il-rst', 'LIC10213_IL_RST', 6524, 'float32', 'R/W', NULL, 'VAR', TRUE), + ('ficq-10114a.pv', 'FICQ-10114A.PV', 4672, 'float32', 'R', 19, 'PV', TRUE), + ('ficq-10114a.sp', 'FICQ-10114A.WSP', 4676, 'float32', 'R/W', 19, 'SP', TRUE), + ('ficq-10114a.op', 'FICQ-10114A.Output', 4678, 'float32', 'R/W', 19, 'OP', TRUE), + ('ficq-10114a.rsp', 'FICQ-10114A.RSP_SP2', 4674, 'float32', 'R/W', 19, 'RSP', TRUE), + ('ficq-10114a.lsp1', 'FICQ-10114A.LSP1', 4714, 'float32', 'R/W', 19, 'LSP1', TRUE), + ('ficq-10114a.lsp2', 'FICQ-10114A.LSP2', 4716, 'float32', 'R/W', 19, 'LSP2', TRUE), + ('ficq-10114a.dev', 'FICQ-10114A.Deviation', 4746, 'float32', 'R', 19, 'DEV', TRUE), + ('ficq-10114a.pv_lo', 'FICQ-10114A.PV_low_range', 4694, 'float32', 'R', 19, 'PV_LO', TRUE), + ('ficq-10114a.pv_hi', 'FICQ-10114A.PV_high_range', 4696, 'float32', 'R', 19, 'PV_HI', TRUE), + ('ficq-10114a.sp_lo', 'FICQ-10114A.SP_low_limit', 4724, 'float32', 'R/W', 19, 'SP_LO', TRUE), + ('ficq-10114a.sp_hi', 'FICQ-10114A.SP_high_limit', 4726, 'float32', 'R/W', 19, 'SP_HI', TRUE), + ('ficq-10114a.op_lo', 'FICQ-10114A.Output_Low_Limit', 4730, 'float32', 'R/W', 19, 'OP_LO', TRUE), + ('ficq-10114a.op_hi', 'FICQ-10114A.Output_High_Limit', 4732, 'float32', 'R/W', 19, 'OP_HI', TRUE), + ('ficq-10114a.alm1', 'FICQ-10114A.Alarm_1_SP1', 4698, 'float32', 'R/W', 19, 'ALM1', TRUE), + ('ficq-10114a.alm2', 'FICQ-10114A.Alarm_2_SP1', 4718, 'float32', 'R/W', 19, 'ALM2', TRUE), + ('ficq-10114a.mode', 'FICQ-10114A.Auto_Man_State', 4858, 'uint16', 'R/W', 19, 'MODE', TRUE), + ('ficq-10114a.status', 'FICQ-10114A.Loop_Status_Register', 4862, 'uint16', 'R', 19, 'STATUS', TRUE), + ('ficq-10101.pv', 'FICQ-10101.PV', 4160, 'float32', 'R', 17, 'PV', TRUE), + ('ficq-10101.sp', 'FICQ-10101.WSP', 4164, 'float32', 'R/W', 17, 'SP', TRUE), + ('ficq-10101.op', 'FICQ-10101.Output', 4166, 'float32', 'R/W', 17, 'OP', TRUE), + ('ficq-10101.rsp', 'FICQ-10101.RSP_SP2', 4162, 'float32', 'R/W', 17, 'RSP', TRUE), + ('ficq-10101.lsp1', 'FICQ-10101.LSP1', 4202, 'float32', 'R/W', 17, 'LSP1', TRUE), + ('ficq-10101.lsp2', 'FICQ-10101.LSP2', 4204, 'float32', 'R/W', 17, 'LSP2', TRUE), + ('ficq-10101.dev', 'FICQ-10101.Deviation', 4234, 'float32', 'R', 17, 'DEV', TRUE), + ('ficq-10101.pv_lo', 'FICQ-10101.PV_low_range', 4182, 'float32', 'R', 17, 'PV_LO', TRUE), + ('ficq-10101.pv_hi', 'FICQ-10101.PV_high_range', 4184, 'float32', 'R', 17, 'PV_HI', TRUE), + ('ficq-10101.sp_lo', 'FICQ-10101.SP_low_limit', 4212, 'float32', 'R/W', 17, 'SP_LO', TRUE), + ('ficq-10101.sp_hi', 'FICQ-10101.SP_high_limit', 4214, 'float32', 'R/W', 17, 'SP_HI', TRUE), + ('ficq-10101.op_lo', 'FICQ-10101.Output_Low_Limit', 4218, 'float32', 'R/W', 17, 'OP_LO', TRUE), + ('ficq-10101.op_hi', 'FICQ-10101.Output_High_Limit', 4220, 'float32', 'R/W', 17, 'OP_HI', TRUE), + ('ficq-10101.alm1', 'FICQ-10101.Alarm_1_SP1', 4186, 'float32', 'R/W', 17, 'ALM1', TRUE), + ('ficq-10101.alm2', 'FICQ-10101.Alarm_2_SP1', 4206, 'float32', 'R/W', 17, 'ALM2', TRUE), + ('ficq-10101.mode', 'FICQ-10101.Auto_Man_State', 4346, 'uint16', 'R/W', 17, 'MODE', TRUE), + ('ficq-10101.status', 'FICQ-10101.Loop_Status_Register', 4350, 'uint16', 'R', 17, 'STATUS', TRUE), + ('ficq-10214.pv', 'FICQ-10214.PV', 31296, 'float32', 'R', 27, 'PV', TRUE), + ('ficq-10214.sp', 'FICQ-10214.WSP', 31300, 'float32', 'R/W', 27, 'SP', TRUE), + ('ficq-10214.op', 'FICQ-10214.Output', 31302, 'float32', 'R/W', 27, 'OP', TRUE), + ('ficq-10214.rsp', 'FICQ-10214.RSP_SP2', 31298, 'float32', 'R/W', 27, 'RSP', TRUE), + ('ficq-10214.lsp1', 'FICQ-10214.LSP1', 31338, 'float32', 'R/W', 27, 'LSP1', TRUE), + ('ficq-10214.lsp2', 'FICQ-10214.LSP2', 31340, 'float32', 'R/W', 27, 'LSP2', TRUE), + ('ficq-10214.dev', 'FICQ-10214.Deviation', 31370, 'float32', 'R', 27, 'DEV', TRUE), + ('ficq-10214.pv_lo', 'FICQ-10214.PV_low_range', 31318, 'float32', 'R', 27, 'PV_LO', TRUE), + ('ficq-10214.pv_hi', 'FICQ-10214.PV_high_range', 31320, 'float32', 'R', 27, 'PV_HI', TRUE), + ('ficq-10214.sp_lo', 'FICQ-10214.SP_low_limit', 31348, 'float32', 'R/W', 27, 'SP_LO', TRUE), + ('ficq-10214.sp_hi', 'FICQ-10214.SP_high_limit', 31350, 'float32', 'R/W', 27, 'SP_HI', TRUE), + ('ficq-10214.op_lo', 'FICQ-10214.Output_Low_Limit', 31354, 'float32', 'R/W', 27, 'OP_LO', TRUE), + ('ficq-10214.op_hi', 'FICQ-10214.Output_High_Limit', 31356, 'float32', 'R/W', 27, 'OP_HI', TRUE), + ('ficq-10214.alm1', 'FICQ-10214.Alarm_1_SP1', 31322, 'float32', 'R/W', 27, 'ALM1', TRUE), + ('ficq-10214.alm2', 'FICQ-10214.Alarm_2_SP1', 31342, 'float32', 'R/W', 27, 'ALM2', TRUE), + ('ficq-10214.mode', 'FICQ-10214.Auto_Man_State', 31482, 'uint16', 'R/W', 27, 'MODE', TRUE), + ('ficq-10214.status', 'FICQ-10214.Loop_Status_Register', 31486, 'uint16', 'R', 27, 'STATUS', TRUE), + ('ficq-9101.pv', 'FIC-9101.PV', 64, 'float32', 'R', 1, 'PV', TRUE), + ('ficq-9101.sp', 'FIC-9101.WSP', 68, 'float32', 'R/W', 1, 'SP', TRUE), + ('ficq-9101.op', 'FIC-9101.Output', 70, 'float32', 'R/W', 1, 'OP', TRUE), + ('ficq-9101.rsp', 'FIC-9101.RSP_SP2', 66, 'float32', 'R/W', 1, 'RSP', TRUE), + ('ficq-9101.lsp1', 'FIC-9101.LSP1', 106, 'float32', 'R/W', 1, 'LSP1', TRUE), + ('ficq-9101.lsp2', 'FIC-9101.LSP2', 108, 'float32', 'R/W', 1, 'LSP2', TRUE), + ('ficq-9101.dev', 'FIC-9101.Deviation', 138, 'float32', 'R', 1, 'DEV', TRUE), + ('ficq-9101.pv_lo', 'FIC-9101.PV_low_range', 86, 'float32', 'R', 1, 'PV_LO', TRUE), + ('ficq-9101.pv_hi', 'FIC-9101.PV_high_range', 88, 'float32', 'R', 1, 'PV_HI', TRUE), + ('ficq-9101.sp_lo', 'FIC-9101.SP_low_limit', 116, 'float32', 'R/W', 1, 'SP_LO', TRUE), + ('ficq-9101.sp_hi', 'FIC-9101.SP_high_limit', 118, 'float32', 'R/W', 1, 'SP_HI', TRUE), + ('ficq-9101.op_lo', 'FIC-9101.Output_Low_Limit', 122, 'float32', 'R/W', 1, 'OP_LO', TRUE), + ('ficq-9101.op_hi', 'FIC-9101.Output_High_Limit', 124, 'float32', 'R/W', 1, 'OP_HI', TRUE), + ('ficq-9101.alm1', 'FIC-9101.Alarm_1_SP1', 90, 'float32', 'R/W', 1, 'ALM1', TRUE), + ('ficq-9101.alm2', 'FIC-9101.Alarm_2_SP1', 110, 'float32', 'R/W', 1, 'ALM2', TRUE), + ('ficq-9101.mode', 'FIC-9101.Auto_Man_State', 250, 'uint16', 'R/W', 1, 'MODE', TRUE), + ('ficq-9101.status', 'FIC-9101.Loop_Status_Register', 254, 'uint16', 'R', 1, 'STATUS', TRUE), + ('ficq-9214.pv', 'FIC-9214.PV', 2368, 'float32', 'R', 10, 'PV', TRUE), + ('ficq-9214.sp', 'FIC-9214.WSP', 2372, 'float32', 'R/W', 10, 'SP', TRUE), + ('ficq-9214.op', 'FIC-9214.Output', 2374, 'float32', 'R/W', 10, 'OP', TRUE), + ('ficq-9214.rsp', 'FIC-9214.RSP_SP2', 2370, 'float32', 'R/W', 10, 'RSP', TRUE), + ('ficq-9214.lsp1', 'FIC-9214.LSP1', 2410, 'float32', 'R/W', 10, 'LSP1', TRUE), + ('ficq-9214.lsp2', 'FIC-9214.LSP2', 2412, 'float32', 'R/W', 10, 'LSP2', TRUE), + ('ficq-9214.dev', 'FIC-9214.Deviation', 2442, 'float32', 'R', 10, 'DEV', TRUE), + ('ficq-9214.pv_lo', 'FIC-9214.PV_low_range', 2390, 'float32', 'R', 10, 'PV_LO', TRUE), + ('ficq-9214.pv_hi', 'FIC-9214.PV_high_range', 2392, 'float32', 'R', 10, 'PV_HI', TRUE), + ('ficq-9214.sp_lo', 'FIC-9214.SP_low_limit', 2420, 'float32', 'R/W', 10, 'SP_LO', TRUE), + ('ficq-9214.sp_hi', 'FIC-9214.SP_high_limit', 2422, 'float32', 'R/W', 10, 'SP_HI', TRUE), + ('ficq-9214.op_lo', 'FIC-9214.Output_Low_Limit', 2426, 'float32', 'R/W', 10, 'OP_LO', TRUE), + ('ficq-9214.op_hi', 'FIC-9214.Output_High_Limit', 2428, 'float32', 'R/W', 10, 'OP_HI', TRUE), + ('ficq-9214.alm1', 'FIC-9214.Alarm_1_SP1', 2394, 'float32', 'R/W', 10, 'ALM1', TRUE), + ('ficq-9214.alm2', 'FIC-9214.Alarm_2_SP1', 2414, 'float32', 'R/W', 10, 'ALM2', TRUE), + ('ficq-9214.mode', 'FIC-9214.Auto_Man_State', 2554, 'uint16', 'R/W', 10, 'MODE', TRUE), + ('ficq-9214.status', 'FIC-9214.Loop_Status_Register', 2558, 'uint16', 'R', 10, 'STATUS', TRUE), + ('ficq-9218.pv', 'FIC-9218.PV', 2624, 'float32', 'R', 11, 'PV', TRUE), + ('ficq-9218.sp', 'FIC-9218.WSP', 2628, 'float32', 'R/W', 11, 'SP', TRUE), + ('ficq-9218.op', 'FIC-9218.Output', 2630, 'float32', 'R/W', 11, 'OP', TRUE), + ('ficq-9218.rsp', 'FIC-9218.RSP_SP2', 2626, 'float32', 'R/W', 11, 'RSP', TRUE), + ('ficq-9218.lsp1', 'FIC-9218.LSP1', 2666, 'float32', 'R/W', 11, 'LSP1', TRUE), + ('ficq-9218.lsp2', 'FIC-9218.LSP2', 2668, 'float32', 'R/W', 11, 'LSP2', TRUE), + ('ficq-9218.dev', 'FIC-9218.Deviation', 2698, 'float32', 'R', 11, 'DEV', TRUE), + ('ficq-9218.pv_lo', 'FIC-9218.PV_low_range', 2646, 'float32', 'R', 11, 'PV_LO', TRUE), + ('ficq-9218.pv_hi', 'FIC-9218.PV_high_range', 2648, 'float32', 'R', 11, 'PV_HI', TRUE), + ('ficq-9218.sp_lo', 'FIC-9218.SP_low_limit', 2676, 'float32', 'R/W', 11, 'SP_LO', TRUE), + ('ficq-9218.sp_hi', 'FIC-9218.SP_high_limit', 2678, 'float32', 'R/W', 11, 'SP_HI', TRUE), + ('ficq-9218.op_lo', 'FIC-9218.Output_Low_Limit', 2682, 'float32', 'R/W', 11, 'OP_LO', TRUE), + ('ficq-9218.op_hi', 'FIC-9218.Output_High_Limit', 2684, 'float32', 'R/W', 11, 'OP_HI', TRUE), + ('ficq-9218.alm1', 'FIC-9218.Alarm_1_SP1', 2650, 'float32', 'R/W', 11, 'ALM1', TRUE), + ('ficq-9218.alm2', 'FIC-9218.Alarm_2_SP1', 2670, 'float32', 'R/W', 11, 'ALM2', TRUE), + ('ficq-9218.mode', 'FIC-9218.Auto_Man_State', 2810, 'uint16', 'R/W', 11, 'MODE', TRUE), + ('ficq-9218.status', 'FIC-9218.Loop_Status_Register', 2814, 'uint16', 'R', 11, 'STATUS', TRUE), + ('ficq-9216.pv', 'FIC-9216.PV', 2880, 'float32', 'R', 12, 'PV', TRUE), + ('ficq-9216.sp', 'FIC-9216.WSP', 2884, 'float32', 'R/W', 12, 'SP', TRUE), + ('ficq-9216.op', 'FIC-9216.Output', 2886, 'float32', 'R/W', 12, 'OP', TRUE), + ('ficq-9216.rsp', 'FIC-9216.RSP_SP2', 2882, 'float32', 'R/W', 12, 'RSP', TRUE), + ('ficq-9216.lsp1', 'FIC-9216.LSP1', 2922, 'float32', 'R/W', 12, 'LSP1', TRUE), + ('ficq-9216.lsp2', 'FIC-9216.LSP2', 2924, 'float32', 'R/W', 12, 'LSP2', TRUE), + ('ficq-9216.dev', 'FIC-9216.Deviation', 2954, 'float32', 'R', 12, 'DEV', TRUE), + ('ficq-9216.pv_lo', 'FIC-9216.PV_low_range', 2902, 'float32', 'R', 12, 'PV_LO', TRUE), + ('ficq-9216.pv_hi', 'FIC-9216.PV_high_range', 2904, 'float32', 'R', 12, 'PV_HI', TRUE), + ('ficq-9216.sp_lo', 'FIC-9216.SP_low_limit', 2932, 'float32', 'R/W', 12, 'SP_LO', TRUE), + ('ficq-9216.sp_hi', 'FIC-9216.SP_high_limit', 2934, 'float32', 'R/W', 12, 'SP_HI', TRUE), + ('ficq-9216.op_lo', 'FIC-9216.Output_Low_Limit', 2938, 'float32', 'R/W', 12, 'OP_LO', TRUE), + ('ficq-9216.op_hi', 'FIC-9216.Output_High_Limit', 2940, 'float32', 'R/W', 12, 'OP_HI', TRUE), + ('ficq-9216.alm1', 'FIC-9216.Alarm_1_SP1', 2906, 'float32', 'R/W', 12, 'ALM1', TRUE), + ('ficq-9216.alm2', 'FIC-9216.Alarm_2_SP1', 2926, 'float32', 'R/W', 12, 'ALM2', TRUE), + ('ficq-9216.mode', 'FIC-9216.Auto_Man_State', 3066, 'uint16', 'R/W', 12, 'MODE', TRUE), + ('ficq-9216.status', 'FIC-9216.Loop_Status_Register', 3070, 'uint16', 'R', 12, 'STATUS', TRUE), + ('pica-9211a.pv', 'PIC-9211B.PV', 3392, 'float32', 'R', 14, 'PV', TRUE), + ('pica-9211a.sp', 'PIC-9211B.WSP', 3396, 'float32', 'R/W', 14, 'SP', TRUE), + ('pica-9211a.op', 'PIC-9211B.Output', 3398, 'float32', 'R/W', 14, 'OP', TRUE), + ('pica-9211a.rsp', 'PIC-9211B.RSP_SP2', 3394, 'float32', 'R/W', 14, 'RSP', TRUE), + ('pica-9211a.lsp1', 'PIC-9211B.LSP1', 3434, 'float32', 'R/W', 14, 'LSP1', TRUE), + ('pica-9211a.lsp2', 'PIC-9211B.LSP2', 3436, 'float32', 'R/W', 14, 'LSP2', TRUE), + ('pica-9211a.dev', 'PIC-9211B.Deviation', 3466, 'float32', 'R', 14, 'DEV', TRUE), + ('pica-9211a.pv_lo', 'PIC-9211B.PV_low_range', 3414, 'float32', 'R', 14, 'PV_LO', TRUE), + ('pica-9211a.pv_hi', 'PIC-9211B.PV_high_range', 3416, 'float32', 'R', 14, 'PV_HI', TRUE), + ('pica-9211a.sp_lo', 'PIC-9211B.SP_low_limit', 3444, 'float32', 'R/W', 14, 'SP_LO', TRUE), + ('pica-9211a.sp_hi', 'PIC-9211B.SP_high_limit', 3446, 'float32', 'R/W', 14, 'SP_HI', TRUE), + ('pica-9211a.op_lo', 'PIC-9211B.Output_Low_Limit', 3450, 'float32', 'R/W', 14, 'OP_LO', TRUE), + ('pica-9211a.op_hi', 'PIC-9211B.Output_High_Limit', 3452, 'float32', 'R/W', 14, 'OP_HI', TRUE), + ('pica-9211a.alm1', 'PIC-9211B.Alarm_1_SP1', 3418, 'float32', 'R/W', 14, 'ALM1', TRUE), + ('pica-9211a.alm2', 'PIC-9211B.Alarm_2_SP1', 3438, 'float32', 'R/W', 14, 'ALM2', TRUE), + ('pica-9211a.mode', 'PIC-9211B.Auto_Man_State', 3578, 'uint16', 'R/W', 14, 'MODE', TRUE), + ('pica-9211a.status', 'PIC-9211B.Loop_Status_Register', 3582, 'uint16', 'R', 14, 'STATUS', TRUE), + ('lica-9113.pv', 'LIC-9113.PV', 3648, 'float32', 'R', 15, 'PV', TRUE), + ('lica-9113.sp', 'LIC-9113.WSP', 3652, 'float32', 'R/W', 15, 'SP', TRUE), + ('lica-9113.op', 'LIC-9113.Output', 3654, 'float32', 'R/W', 15, 'OP', TRUE), + ('lica-9113.rsp', 'LIC-9113.RSP_SP2', 3650, 'float32', 'R/W', 15, 'RSP', TRUE), + ('lica-9113.lsp1', 'LIC-9113.LSP1', 3690, 'float32', 'R/W', 15, 'LSP1', TRUE), + ('lica-9113.lsp2', 'LIC-9113.LSP2', 3692, 'float32', 'R/W', 15, 'LSP2', TRUE), + ('lica-9113.dev', 'LIC-9113.Deviation', 3722, 'float32', 'R', 15, 'DEV', TRUE), + ('lica-9113.pv_lo', 'LIC-9113.PV_low_range', 3670, 'float32', 'R', 15, 'PV_LO', TRUE), + ('lica-9113.pv_hi', 'LIC-9113.PV_high_range', 3672, 'float32', 'R', 15, 'PV_HI', TRUE), + ('lica-9113.sp_lo', 'LIC-9113.SP_low_limit', 3700, 'float32', 'R/W', 15, 'SP_LO', TRUE), + ('lica-9113.sp_hi', 'LIC-9113.SP_high_limit', 3702, 'float32', 'R/W', 15, 'SP_HI', TRUE), + ('lica-9113.op_lo', 'LIC-9113.Output_Low_Limit', 3706, 'float32', 'R/W', 15, 'OP_LO', TRUE), + ('lica-9113.op_hi', 'LIC-9113.Output_High_Limit', 3708, 'float32', 'R/W', 15, 'OP_HI', TRUE), + ('lica-9113.alm1', 'LIC-9113.Alarm_1_SP1', 3674, 'float32', 'R/W', 15, 'ALM1', TRUE), + ('lica-9113.alm2', 'LIC-9113.Alarm_2_SP1', 3694, 'float32', 'R/W', 15, 'ALM2', TRUE), + ('lica-9113.mode', 'LIC-9113.Auto_Man_State', 3834, 'uint16', 'R/W', 15, 'MODE', TRUE), + ('lica-9113.status', 'LIC-9113.Loop_Status_Register', 3838, 'uint16', 'R', 15, 'STATUS', TRUE), + ('lica-9213.pv', 'LIC-9213.PV', 3904, 'float32', 'R', 16, 'PV', TRUE), + ('lica-9213.sp', 'LIC-9213.WSP', 3908, 'float32', 'R/W', 16, 'SP', TRUE), + ('lica-9213.op', 'LIC-9213.Output', 3910, 'float32', 'R/W', 16, 'OP', TRUE), + ('lica-9213.rsp', 'LIC-9213.RSP_SP2', 3906, 'float32', 'R/W', 16, 'RSP', TRUE), + ('lica-9213.lsp1', 'LIC-9213.LSP1', 3946, 'float32', 'R/W', 16, 'LSP1', TRUE), + ('lica-9213.lsp2', 'LIC-9213.LSP2', 3948, 'float32', 'R/W', 16, 'LSP2', TRUE), + ('lica-9213.dev', 'LIC-9213.Deviation', 3978, 'float32', 'R', 16, 'DEV', TRUE), + ('lica-9213.pv_lo', 'LIC-9213.PV_low_range', 3926, 'float32', 'R', 16, 'PV_LO', TRUE), + ('lica-9213.pv_hi', 'LIC-9213.PV_high_range', 3928, 'float32', 'R', 16, 'PV_HI', TRUE), + ('lica-9213.sp_lo', 'LIC-9213.SP_low_limit', 3956, 'float32', 'R/W', 16, 'SP_LO', TRUE), + ('lica-9213.sp_hi', 'LIC-9213.SP_high_limit', 3958, 'float32', 'R/W', 16, 'SP_HI', TRUE), + ('lica-9213.op_lo', 'LIC-9213.Output_Low_Limit', 3962, 'float32', 'R/W', 16, 'OP_LO', TRUE), + ('lica-9213.op_hi', 'LIC-9213.Output_High_Limit', 3964, 'float32', 'R/W', 16, 'OP_HI', TRUE), + ('lica-9213.alm1', 'LIC-9213.Alarm_1_SP1', 3930, 'float32', 'R/W', 16, 'ALM1', TRUE), + ('lica-9213.alm2', 'LIC-9213.Alarm_2_SP1', 3950, 'float32', 'R/W', 16, 'ALM2', TRUE), + ('lica-9213.mode', 'LIC-9213.Auto_Man_State', 4090, 'uint16', 'R/W', 16, 'MODE', TRUE), + ('lica-9213.status', 'LIC-9213.Loop_Status_Register', 4094, 'uint16', 'R', 16, 'STATUS', TRUE), + ('ficq-9114.pv', 'FICQ-9114.PV', 320, 'float32', 'R', 2, 'PV', TRUE), + ('ficq-9114.sp', 'FICQ-9114.WSP', 324, 'float32', 'R/W', 2, 'SP', TRUE), + ('ficq-9114.op', 'FICQ-9114.Output', 326, 'float32', 'R/W', 2, 'OP', TRUE), + ('ficq-9114.rsp', 'FICQ-9114.RSP_SP2', 322, 'float32', 'R/W', 2, 'RSP', TRUE), + ('ficq-9114.lsp1', 'FICQ-9114.LSP1', 362, 'float32', 'R/W', 2, 'LSP1', TRUE), + ('ficq-9114.lsp2', 'FICQ-9114.LSP2', 364, 'float32', 'R/W', 2, 'LSP2', TRUE), + ('ficq-9114.dev', 'FICQ-9114.Deviation', 394, 'float32', 'R', 2, 'DEV', TRUE), + ('ficq-9114.pv_lo', 'FICQ-9114.PV_low_range', 342, 'float32', 'R', 2, 'PV_LO', TRUE), + ('ficq-9114.pv_hi', 'FICQ-9114.PV_high_range', 344, 'float32', 'R', 2, 'PV_HI', TRUE), + ('ficq-9114.sp_lo', 'FICQ-9114.SP_low_limit', 372, 'float32', 'R/W', 2, 'SP_LO', TRUE), + ('ficq-9114.sp_hi', 'FICQ-9114.SP_high_limit', 374, 'float32', 'R/W', 2, 'SP_HI', TRUE), + ('ficq-9114.op_lo', 'FICQ-9114.Output_Low_Limit', 378, 'float32', 'R/W', 2, 'OP_LO', TRUE), + ('ficq-9114.op_hi', 'FICQ-9114.Output_High_Limit', 380, 'float32', 'R/W', 2, 'OP_HI', TRUE), + ('ficq-9114.alm1', 'FICQ-9114.Alarm_1_SP1', 346, 'float32', 'R/W', 2, 'ALM1', TRUE), + ('ficq-9114.alm2', 'FICQ-9114.Alarm_2_SP1', 366, 'float32', 'R/W', 2, 'ALM2', TRUE), + ('ficq-9114.mode', 'FICQ-9114.Auto_Man_State', 506, 'uint16', 'R/W', 2, 'MODE', TRUE), + ('ficq-9114.status', 'FICQ-9114.Loop_Status_Register', 510, 'uint16', 'R', 2, 'STATUS', TRUE), + ('ficq-10118.pv', 'FIC-10118.PV', 4928, 'float32', 'R', 20, 'PV', TRUE), + ('ficq-10118.sp', 'FIC-10118.WSP', 4932, 'float32', 'R/W', 20, 'SP', TRUE), + ('ficq-10118.op', 'FIC-10118.Output', 4934, 'float32', 'R/W', 20, 'OP', TRUE), + ('ficq-10118.rsp', 'FIC-10118.RSP_SP2', 4930, 'float32', 'R/W', 20, 'RSP', TRUE), + ('ficq-10118.lsp1', 'FIC-10118.LSP1', 4970, 'float32', 'R/W', 20, 'LSP1', TRUE), + ('ficq-10118.lsp2', 'FIC-10118.LSP2', 4972, 'float32', 'R/W', 20, 'LSP2', TRUE), + ('ficq-10118.dev', 'FIC-10118.Deviation', 5002, 'float32', 'R', 20, 'DEV', TRUE), + ('ficq-10118.pv_lo', 'FIC-10118.PV_low_range', 4950, 'float32', 'R', 20, 'PV_LO', TRUE), + ('ficq-10118.pv_hi', 'FIC-10118.PV_high_range', 4952, 'float32', 'R', 20, 'PV_HI', TRUE), + ('ficq-10118.sp_lo', 'FIC-10118.SP_low_limit', 4980, 'float32', 'R/W', 20, 'SP_LO', TRUE), + ('ficq-10118.sp_hi', 'FIC-10118.SP_high_limit', 4982, 'float32', 'R/W', 20, 'SP_HI', TRUE), + ('ficq-10118.op_lo', 'FIC-10118.Output_Low_Limit', 4986, 'float32', 'R/W', 20, 'OP_LO', TRUE), + ('ficq-10118.op_hi', 'FIC-10118.Output_High_Limit', 4988, 'float32', 'R/W', 20, 'OP_HI', TRUE), + ('ficq-10118.alm1', 'FIC-10118.Alarm_1_SP1', 4954, 'float32', 'R/W', 20, 'ALM1', TRUE), + ('ficq-10118.alm2', 'FIC-10118.Alarm_2_SP1', 4974, 'float32', 'R/W', 20, 'ALM2', TRUE), + ('ficq-10118.mode', 'FIC-10118.Auto_Man_State', 5114, 'uint16', 'R/W', 20, 'MODE', TRUE), + ('ficq-10118.status', 'FIC-10118.Loop_Status_Register', 5118, 'uint16', 'R', 20, 'STATUS', TRUE), + ('lica-10113.pv', 'LICA-10113.PV', 5184, 'float32', 'R', 21, 'PV', TRUE), + ('lica-10113.sp', 'LICA-10113.WSP', 5188, 'float32', 'R/W', 21, 'SP', TRUE), + ('lica-10113.op', 'LICA-10113.Output', 5190, 'float32', 'R/W', 21, 'OP', TRUE), + ('lica-10113.rsp', 'LICA-10113.RSP_SP2', 5186, 'float32', 'R/W', 21, 'RSP', TRUE), + ('lica-10113.lsp1', 'LICA-10113.LSP1', 5226, 'float32', 'R/W', 21, 'LSP1', TRUE), + ('lica-10113.lsp2', 'LICA-10113.LSP2', 5228, 'float32', 'R/W', 21, 'LSP2', TRUE), + ('lica-10113.dev', 'LICA-10113.Deviation', 5258, 'float32', 'R', 21, 'DEV', TRUE), + ('lica-10113.pv_lo', 'LICA-10113.PV_low_range', 5206, 'float32', 'R', 21, 'PV_LO', TRUE), + ('lica-10113.pv_hi', 'LICA-10113.PV_high_range', 5208, 'float32', 'R', 21, 'PV_HI', TRUE), + ('lica-10113.sp_lo', 'LICA-10113.SP_low_limit', 5236, 'float32', 'R/W', 21, 'SP_LO', TRUE), + ('lica-10113.sp_hi', 'LICA-10113.SP_high_limit', 5238, 'float32', 'R/W', 21, 'SP_HI', TRUE), + ('lica-10113.op_lo', 'LICA-10113.Output_Low_Limit', 5242, 'float32', 'R/W', 21, 'OP_LO', TRUE), + ('lica-10113.op_hi', 'LICA-10113.Output_High_Limit', 5244, 'float32', 'R/W', 21, 'OP_HI', TRUE), + ('lica-10113.alm1', 'LICA-10113.Alarm_1_SP1', 5210, 'float32', 'R/W', 21, 'ALM1', TRUE), + ('lica-10113.alm2', 'LICA-10113.Alarm_2_SP1', 5230, 'float32', 'R/W', 21, 'ALM2', TRUE), + ('lica-10113.mode', 'LICA-10113.Auto_Man_State', 5370, 'uint16', 'R/W', 21, 'MODE', TRUE), + ('lica-10113.status', 'LICA-10113.Loop_Status_Register', 5374, 'uint16', 'R', 21, 'STATUS', TRUE), + ('ficq-10116.pv', 'FICQ-10116.PV', 5440, 'float32', 'R', 22, 'PV', TRUE), + ('ficq-10116.sp', 'FICQ-10116.WSP', 5444, 'float32', 'R/W', 22, 'SP', TRUE), + ('ficq-10116.op', 'FICQ-10116.Output', 5446, 'float32', 'R/W', 22, 'OP', TRUE), + ('ficq-10116.rsp', 'FICQ-10116.RSP_SP2', 5442, 'float32', 'R/W', 22, 'RSP', TRUE), + ('ficq-10116.lsp1', 'FICQ-10116.LSP1', 5482, 'float32', 'R/W', 22, 'LSP1', TRUE), + ('ficq-10116.lsp2', 'FICQ-10116.LSP2', 5484, 'float32', 'R/W', 22, 'LSP2', TRUE), + ('ficq-10116.dev', 'FICQ-10116.Deviation', 5514, 'float32', 'R', 22, 'DEV', TRUE), + ('ficq-10116.pv_lo', 'FICQ-10116.PV_low_range', 5462, 'float32', 'R', 22, 'PV_LO', TRUE), + ('ficq-10116.pv_hi', 'FICQ-10116.PV_high_range', 5464, 'float32', 'R', 22, 'PV_HI', TRUE), + ('ficq-10116.sp_lo', 'FICQ-10116.SP_low_limit', 5492, 'float32', 'R/W', 22, 'SP_LO', TRUE), + ('ficq-10116.sp_hi', 'FICQ-10116.SP_high_limit', 5494, 'float32', 'R/W', 22, 'SP_HI', TRUE), + ('ficq-10116.op_lo', 'FICQ-10116.Output_Low_Limit', 5498, 'float32', 'R/W', 22, 'OP_LO', TRUE), + ('ficq-10116.op_hi', 'FICQ-10116.Output_High_Limit', 5500, 'float32', 'R/W', 22, 'OP_HI', TRUE), + ('ficq-10116.alm1', 'FICQ-10116.Alarm_1_SP1', 5466, 'float32', 'R/W', 22, 'ALM1', TRUE), + ('ficq-10116.alm2', 'FICQ-10116.Alarm_2_SP1', 5486, 'float32', 'R/W', 22, 'ALM2', TRUE), + ('ficq-10116.mode', 'FICQ-10116.Auto_Man_State', 5626, 'uint16', 'R/W', 22, 'MODE', TRUE), + ('ficq-10116.status', 'FICQ-10116.Loop_Status_Register', 5630, 'uint16', 'R', 22, 'STATUS', TRUE), + ('tica-10111a.pv', 'TIC-10111A.PV', 5696, 'float32', 'R', 23, 'PV', TRUE), + ('tica-10111a.sp', 'TIC-10111A.WSP', 5700, 'float32', 'R/W', 23, 'SP', TRUE), + ('tica-10111a.op', 'TIC-10111A.Output', 5702, 'float32', 'R/W', 23, 'OP', TRUE), + ('tica-10111a.rsp', 'TIC-10111A.RSP_SP2', 5698, 'float32', 'R/W', 23, 'RSP', TRUE), + ('tica-10111a.lsp1', 'TIC-10111A.LSP1', 5738, 'float32', 'R/W', 23, 'LSP1', TRUE), + ('tica-10111a.lsp2', 'TIC-10111A.LSP2', 5740, 'float32', 'R/W', 23, 'LSP2', TRUE), + ('tica-10111a.dev', 'TIC-10111A.Deviation', 5770, 'float32', 'R', 23, 'DEV', TRUE), + ('tica-10111a.pv_lo', 'TIC-10111A.PV_low_range', 5718, 'float32', 'R', 23, 'PV_LO', TRUE), + ('tica-10111a.pv_hi', 'TIC-10111A.PV_high_range', 5720, 'float32', 'R', 23, 'PV_HI', TRUE), + ('tica-10111a.sp_lo', 'TIC-10111A.SP_low_limit', 5748, 'float32', 'R/W', 23, 'SP_LO', TRUE), + ('tica-10111a.sp_hi', 'TIC-10111A.SP_high_limit', 5750, 'float32', 'R/W', 23, 'SP_HI', TRUE), + ('tica-10111a.op_lo', 'TIC-10111A.Output_Low_Limit', 5754, 'float32', 'R/W', 23, 'OP_LO', TRUE), + ('tica-10111a.op_hi', 'TIC-10111A.Output_High_Limit', 5756, 'float32', 'R/W', 23, 'OP_HI', TRUE), + ('tica-10111a.alm1', 'TIC-10111A.Alarm_1_SP1', 5722, 'float32', 'R/W', 23, 'ALM1', TRUE), + ('tica-10111a.alm2', 'TIC-10111A.Alarm_2_SP1', 5742, 'float32', 'R/W', 23, 'ALM2', TRUE), + ('tica-10111a.mode', 'TIC-10111A.Auto_Man_State', 5882, 'uint16', 'R/W', 23, 'MODE', TRUE), + ('tica-10111a.status', 'TIC-10111A.Loop_Status_Register', 5886, 'uint16', 'R', 23, 'STATUS', TRUE), + ('pica-10111a.pv', 'PIC-10111A.PV', 5952, 'float32', 'R', 24, 'PV', TRUE), + ('pica-10111a.sp', 'PIC-10111A.WSP', 5956, 'float32', 'R/W', 24, 'SP', TRUE), + ('pica-10111a.op', 'PIC-10111A.Output', 5958, 'float32', 'R/W', 24, 'OP', TRUE), + ('pica-10111a.rsp', 'PIC-10111A.RSP_SP2', 5954, 'float32', 'R/W', 24, 'RSP', TRUE), + ('pica-10111a.lsp1', 'PIC-10111A.LSP1', 5994, 'float32', 'R/W', 24, 'LSP1', TRUE), + ('pica-10111a.lsp2', 'PIC-10111A.LSP2', 5996, 'float32', 'R/W', 24, 'LSP2', TRUE), + ('pica-10111a.dev', 'PIC-10111A.Deviation', 6026, 'float32', 'R', 24, 'DEV', TRUE), + ('pica-10111a.pv_lo', 'PIC-10111A.PV_low_range', 5974, 'float32', 'R', 24, 'PV_LO', TRUE), + ('pica-10111a.pv_hi', 'PIC-10111A.PV_high_range', 5976, 'float32', 'R', 24, 'PV_HI', TRUE), + ('pica-10111a.sp_lo', 'PIC-10111A.SP_low_limit', 6004, 'float32', 'R/W', 24, 'SP_LO', TRUE), + ('pica-10111a.sp_hi', 'PIC-10111A.SP_high_limit', 6006, 'float32', 'R/W', 24, 'SP_HI', TRUE), + ('pica-10111a.op_lo', 'PIC-10111A.Output_Low_Limit', 6010, 'float32', 'R/W', 24, 'OP_LO', TRUE), + ('pica-10111a.op_hi', 'PIC-10111A.Output_High_Limit', 6012, 'float32', 'R/W', 24, 'OP_HI', TRUE), + ('pica-10111a.alm1', 'PIC-10111A.Alarm_1_SP1', 5978, 'float32', 'R/W', 24, 'ALM1', TRUE), + ('pica-10111a.alm2', 'PIC-10111A.Alarm_2_SP1', 5998, 'float32', 'R/W', 24, 'ALM2', TRUE), + ('pica-10111a.mode', 'PIC-10111A.Auto_Man_State', 6138, 'uint16', 'R/W', 24, 'MODE', TRUE), + ('pica-10111a.status', 'PIC-10111A.Loop_Status_Register', 6142, 'uint16', 'R', 24, 'STATUS', TRUE), + ('ficq-9118.pv', 'FIC-9118.PV', 832, 'float32', 'R', 4, 'PV', TRUE), + ('ficq-9118.sp', 'FIC-9118.WSP', 836, 'float32', 'R/W', 4, 'SP', TRUE), + ('ficq-9118.op', 'FIC-9118.Output', 838, 'float32', 'R/W', 4, 'OP', TRUE), + ('ficq-9118.rsp', 'FIC-9118.RSP_SP2', 834, 'float32', 'R/W', 4, 'RSP', TRUE), + ('ficq-9118.lsp1', 'FIC-9118.LSP1', 874, 'float32', 'R/W', 4, 'LSP1', TRUE), + ('ficq-9118.lsp2', 'FIC-9118.LSP2', 876, 'float32', 'R/W', 4, 'LSP2', TRUE), + ('ficq-9118.dev', 'FIC-9118.Deviation', 906, 'float32', 'R', 4, 'DEV', TRUE), + ('ficq-9118.pv_lo', 'FIC-9118.PV_low_range', 854, 'float32', 'R', 4, 'PV_LO', TRUE), + ('ficq-9118.pv_hi', 'FIC-9118.PV_high_range', 856, 'float32', 'R', 4, 'PV_HI', TRUE), + ('ficq-9118.sp_lo', 'FIC-9118.SP_low_limit', 884, 'float32', 'R/W', 4, 'SP_LO', TRUE), + ('ficq-9118.sp_hi', 'FIC-9118.SP_high_limit', 886, 'float32', 'R/W', 4, 'SP_HI', TRUE), + ('ficq-9118.op_lo', 'FIC-9118.Output_Low_Limit', 890, 'float32', 'R/W', 4, 'OP_LO', TRUE), + ('ficq-9118.op_hi', 'FIC-9118.Output_High_Limit', 892, 'float32', 'R/W', 4, 'OP_HI', TRUE), + ('ficq-9118.alm1', 'FIC-9118.Alarm_1_SP1', 858, 'float32', 'R/W', 4, 'ALM1', TRUE), + ('ficq-9118.alm2', 'FIC-9118.Alarm_2_SP1', 878, 'float32', 'R/W', 4, 'ALM2', TRUE), + ('ficq-9118.mode', 'FIC-9118.Auto_Man_State', 1018, 'uint16', 'R/W', 4, 'MODE', TRUE), + ('ficq-9118.status', 'FIC-9118.Loop_Status_Register', 1022, 'uint16', 'R', 4, 'STATUS', TRUE), + ('ficq-9116.pv', 'FIC-9116.PV', 1088, 'float32', 'R', 5, 'PV', TRUE), + ('ficq-9116.sp', 'FIC-9116.WSP', 1092, 'float32', 'R/W', 5, 'SP', TRUE), + ('ficq-9116.op', 'FIC-9116.Output', 1094, 'float32', 'R/W', 5, 'OP', TRUE), + ('ficq-9116.rsp', 'FIC-9116.RSP_SP2', 1090, 'float32', 'R/W', 5, 'RSP', TRUE), + ('ficq-9116.lsp1', 'FIC-9116.LSP1', 1130, 'float32', 'R/W', 5, 'LSP1', TRUE), + ('ficq-9116.lsp2', 'FIC-9116.LSP2', 1132, 'float32', 'R/W', 5, 'LSP2', TRUE), + ('ficq-9116.dev', 'FIC-9116.Deviation', 1162, 'float32', 'R', 5, 'DEV', TRUE), + ('ficq-9116.pv_lo', 'FIC-9116.PV_low_range', 1110, 'float32', 'R', 5, 'PV_LO', TRUE), + ('ficq-9116.pv_hi', 'FIC-9116.PV_high_range', 1112, 'float32', 'R', 5, 'PV_HI', TRUE), + ('ficq-9116.sp_lo', 'FIC-9116.SP_low_limit', 1140, 'float32', 'R/W', 5, 'SP_LO', TRUE), + ('ficq-9116.sp_hi', 'FIC-9116.SP_high_limit', 1142, 'float32', 'R/W', 5, 'SP_HI', TRUE), + ('ficq-9116.op_lo', 'FIC-9116.Output_Low_Limit', 1146, 'float32', 'R/W', 5, 'OP_LO', TRUE), + ('ficq-9116.op_hi', 'FIC-9116.Output_High_Limit', 1148, 'float32', 'R/W', 5, 'OP_HI', TRUE), + ('ficq-9116.alm1', 'FIC-9116.Alarm_1_SP1', 1114, 'float32', 'R/W', 5, 'ALM1', TRUE), + ('ficq-9116.alm2', 'FIC-9116.Alarm_2_SP1', 1134, 'float32', 'R/W', 5, 'ALM2', TRUE), + ('ficq-9116.mode', 'FIC-9116.Auto_Man_State', 1274, 'uint16', 'R/W', 5, 'MODE', TRUE), + ('ficq-9116.status', 'FIC-9116.Loop_Status_Register', 1278, 'uint16', 'R', 5, 'STATUS', TRUE), + ('tica-9111a.pv', 'TIC-9111A.PV', 1344, 'float32', 'R', 6, 'PV', TRUE), + ('tica-9111a.sp', 'TIC-9111A.WSP', 1348, 'float32', 'R/W', 6, 'SP', TRUE), + ('tica-9111a.op', 'TIC-9111A.Output', 1350, 'float32', 'R/W', 6, 'OP', TRUE), + ('tica-9111a.rsp', 'TIC-9111A.RSP_SP2', 1346, 'float32', 'R/W', 6, 'RSP', TRUE), + ('tica-9111a.lsp1', 'TIC-9111A.LSP1', 1386, 'float32', 'R/W', 6, 'LSP1', TRUE), + ('tica-9111a.lsp2', 'TIC-9111A.LSP2', 1388, 'float32', 'R/W', 6, 'LSP2', TRUE), + ('tica-9111a.dev', 'TIC-9111A.Deviation', 1418, 'float32', 'R', 6, 'DEV', TRUE), + ('tica-9111a.pv_lo', 'TIC-9111A.PV_low_range', 1366, 'float32', 'R', 6, 'PV_LO', TRUE), + ('tica-9111a.pv_hi', 'TIC-9111A.PV_high_range', 1368, 'float32', 'R', 6, 'PV_HI', TRUE), + ('tica-9111a.sp_lo', 'TIC-9111A.SP_low_limit', 1396, 'float32', 'R/W', 6, 'SP_LO', TRUE), + ('tica-9111a.sp_hi', 'TIC-9111A.SP_high_limit', 1398, 'float32', 'R/W', 6, 'SP_HI', TRUE), + ('tica-9111a.op_lo', 'TIC-9111A.Output_Low_Limit', 1402, 'float32', 'R/W', 6, 'OP_LO', TRUE), + ('tica-9111a.op_hi', 'TIC-9111A.Output_High_Limit', 1404, 'float32', 'R/W', 6, 'OP_HI', TRUE), + ('tica-9111a.alm1', 'TIC-9111A.Alarm_1_SP1', 1370, 'float32', 'R/W', 6, 'ALM1', TRUE), + ('tica-9111a.alm2', 'TIC-9111A.Alarm_2_SP1', 1390, 'float32', 'R/W', 6, 'ALM2', TRUE), + ('tica-9111a.mode', 'TIC-9111A.Auto_Man_State', 1530, 'uint16', 'R/W', 6, 'MODE', TRUE), + ('tica-9111a.status', 'TIC-9111A.Loop_Status_Register', 1534, 'uint16', 'R', 6, 'STATUS', TRUE), + ('pica-9111a.pv', 'PIC-9111A.PV', 1600, 'float32', 'R', 7, 'PV', TRUE), + ('pica-9111a.sp', 'PIC-9111A.WSP', 1604, 'float32', 'R/W', 7, 'SP', TRUE), + ('pica-9111a.op', 'PIC-9111A.Output', 1606, 'float32', 'R/W', 7, 'OP', TRUE), + ('pica-9111a.rsp', 'PIC-9111A.RSP_SP2', 1602, 'float32', 'R/W', 7, 'RSP', TRUE), + ('pica-9111a.lsp1', 'PIC-9111A.LSP1', 1642, 'float32', 'R/W', 7, 'LSP1', TRUE), + ('pica-9111a.lsp2', 'PIC-9111A.LSP2', 1644, 'float32', 'R/W', 7, 'LSP2', TRUE), + ('pica-9111a.dev', 'PIC-9111A.Deviation', 1674, 'float32', 'R', 7, 'DEV', TRUE), + ('pica-9111a.pv_lo', 'PIC-9111A.PV_low_range', 1622, 'float32', 'R', 7, 'PV_LO', TRUE), + ('pica-9111a.pv_hi', 'PIC-9111A.PV_high_range', 1624, 'float32', 'R', 7, 'PV_HI', TRUE), + ('pica-9111a.sp_lo', 'PIC-9111A.SP_low_limit', 1652, 'float32', 'R/W', 7, 'SP_LO', TRUE), + ('pica-9111a.sp_hi', 'PIC-9111A.SP_high_limit', 1654, 'float32', 'R/W', 7, 'SP_HI', TRUE), + ('pica-9111a.op_lo', 'PIC-9111A.Output_Low_Limit', 1658, 'float32', 'R/W', 7, 'OP_LO', TRUE), + ('pica-9111a.op_hi', 'PIC-9111A.Output_High_Limit', 1660, 'float32', 'R/W', 7, 'OP_HI', TRUE), + ('pica-9111a.alm1', 'PIC-9111A.Alarm_1_SP1', 1626, 'float32', 'R/W', 7, 'ALM1', TRUE), + ('pica-9111a.alm2', 'PIC-9111A.Alarm_2_SP1', 1646, 'float32', 'R/W', 7, 'ALM2', TRUE), + ('pica-9111a.mode', 'PIC-9111A.Auto_Man_State', 1786, 'uint16', 'R/W', 7, 'MODE', TRUE), + ('pica-9111a.status', 'PIC-9111A.Loop_Status_Register', 1790, 'uint16', 'R', 7, 'STATUS', TRUE), + ('ficq-9201.pv', 'FIC-9201.PV', 1856, 'float32', 'R', 8, 'PV', TRUE), + ('ficq-9201.sp', 'FIC-9201.WSP', 1860, 'float32', 'R/W', 8, 'SP', TRUE), + ('ficq-9201.op', 'FIC-9201.Output', 1862, 'float32', 'R/W', 8, 'OP', TRUE), + ('ficq-9201.rsp', 'FIC-9201.RSP_SP2', 1858, 'float32', 'R/W', 8, 'RSP', TRUE), + ('ficq-9201.lsp1', 'FIC-9201.LSP1', 1898, 'float32', 'R/W', 8, 'LSP1', TRUE), + ('ficq-9201.lsp2', 'FIC-9201.LSP2', 1900, 'float32', 'R/W', 8, 'LSP2', TRUE), + ('ficq-9201.dev', 'FIC-9201.Deviation', 1930, 'float32', 'R', 8, 'DEV', TRUE), + ('ficq-9201.pv_lo', 'FIC-9201.PV_low_range', 1878, 'float32', 'R', 8, 'PV_LO', TRUE), + ('ficq-9201.pv_hi', 'FIC-9201.PV_high_range', 1880, 'float32', 'R', 8, 'PV_HI', TRUE), + ('ficq-9201.sp_lo', 'FIC-9201.SP_low_limit', 1908, 'float32', 'R/W', 8, 'SP_LO', TRUE), + ('ficq-9201.sp_hi', 'FIC-9201.SP_high_limit', 1910, 'float32', 'R/W', 8, 'SP_HI', TRUE), + ('ficq-9201.op_lo', 'FIC-9201.Output_Low_Limit', 1914, 'float32', 'R/W', 8, 'OP_LO', TRUE), + ('ficq-9201.op_hi', 'FIC-9201.Output_High_Limit', 1916, 'float32', 'R/W', 8, 'OP_HI', TRUE), + ('ficq-9201.alm1', 'FIC-9201.Alarm_1_SP1', 1882, 'float32', 'R/W', 8, 'ALM1', TRUE), + ('ficq-9201.alm2', 'FIC-9201.Alarm_2_SP1', 1902, 'float32', 'R/W', 8, 'ALM2', TRUE), + ('ficq-9201.mode', 'FIC-9201.Auto_Man_State', 2042, 'uint16', 'R/W', 8, 'MODE', TRUE), + ('ficq-9201.status', 'FIC-9201.Loop_Status_Register', 2046, 'uint16', 'R', 8, 'STATUS', TRUE), + ('ficq-10201.pv', 'FICQ-10201.PV', 30784, 'float32', 'R', 25, 'PV', TRUE), + ('ficq-10201.sp', 'FICQ-10201.WSP', 30788, 'float32', 'R/W', 25, 'SP', TRUE), + ('ficq-10201.op', 'FICQ-10201.Output', 30790, 'float32', 'R/W', 25, 'OP', TRUE), + ('ficq-10201.rsp', 'FICQ-10201.RSP_SP2', 30786, 'float32', 'R/W', 25, 'RSP', TRUE), + ('ficq-10201.lsp1', 'FICQ-10201.LSP1', 30826, 'float32', 'R/W', 25, 'LSP1', TRUE), + ('ficq-10201.lsp2', 'FICQ-10201.LSP2', 30828, 'float32', 'R/W', 25, 'LSP2', TRUE), + ('ficq-10201.dev', 'FICQ-10201.Deviation', 30858, 'float32', 'R', 25, 'DEV', TRUE), + ('ficq-10201.pv_lo', 'FICQ-10201.PV_low_range', 30806, 'float32', 'R', 25, 'PV_LO', TRUE), + ('ficq-10201.pv_hi', 'FICQ-10201.PV_high_range', 30808, 'float32', 'R', 25, 'PV_HI', TRUE), + ('ficq-10201.sp_lo', 'FICQ-10201.SP_low_limit', 30836, 'float32', 'R/W', 25, 'SP_LO', TRUE), + ('ficq-10201.sp_hi', 'FICQ-10201.SP_high_limit', 30838, 'float32', 'R/W', 25, 'SP_HI', TRUE), + ('ficq-10201.op_lo', 'FICQ-10201.Output_Low_Limit', 30842, 'float32', 'R/W', 25, 'OP_LO', TRUE), + ('ficq-10201.op_hi', 'FICQ-10201.Output_High_Limit', 30844, 'float32', 'R/W', 25, 'OP_HI', TRUE), + ('ficq-10201.alm1', 'FICQ-10201.Alarm_1_SP1', 30810, 'float32', 'R/W', 25, 'ALM1', TRUE), + ('ficq-10201.alm2', 'FICQ-10201.Alarm_2_SP1', 30830, 'float32', 'R/W', 25, 'ALM2', TRUE), + ('ficq-10201.mode', 'FICQ-10201.Auto_Man_State', 30970, 'uint16', 'R/W', 25, 'MODE', TRUE), + ('ficq-10201.status', 'FICQ-10201.Loop_Status_Register', 30974, 'uint16', 'R', 25, 'STATUS', TRUE), + ('ficq-10218.pv', 'FICQ-10218.PV', 31552, 'float32', 'R', 28, 'PV', TRUE), + ('ficq-10218.sp', 'FICQ-10218.WSP', 31556, 'float32', 'R/W', 28, 'SP', TRUE), + ('ficq-10218.op', 'FICQ-10218.Output', 31558, 'float32', 'R/W', 28, 'OP', TRUE), + ('ficq-10218.rsp', 'FICQ-10218.RSP_SP2', 31554, 'float32', 'R/W', 28, 'RSP', TRUE), + ('ficq-10218.lsp1', 'FICQ-10218.LSP1', 31594, 'float32', 'R/W', 28, 'LSP1', TRUE), + ('ficq-10218.lsp2', 'FICQ-10218.LSP2', 31596, 'float32', 'R/W', 28, 'LSP2', TRUE), + ('ficq-10218.dev', 'FICQ-10218.Deviation', 31626, 'float32', 'R', 28, 'DEV', TRUE), + ('ficq-10218.pv_lo', 'FICQ-10218.PV_low_range', 31574, 'float32', 'R', 28, 'PV_LO', TRUE), + ('ficq-10218.pv_hi', 'FICQ-10218.PV_high_range', 31576, 'float32', 'R', 28, 'PV_HI', TRUE), + ('ficq-10218.sp_lo', 'FICQ-10218.SP_low_limit', 31604, 'float32', 'R/W', 28, 'SP_LO', TRUE), + ('ficq-10218.sp_hi', 'FICQ-10218.SP_high_limit', 31606, 'float32', 'R/W', 28, 'SP_HI', TRUE), + ('ficq-10218.op_lo', 'FICQ-10218.Output_Low_Limit', 31610, 'float32', 'R/W', 28, 'OP_LO', TRUE), + ('ficq-10218.op_hi', 'FICQ-10218.Output_High_Limit', 31612, 'float32', 'R/W', 28, 'OP_HI', TRUE), + ('ficq-10218.alm1', 'FICQ-10218.Alarm_1_SP1', 31578, 'float32', 'R/W', 28, 'ALM1', TRUE), + ('ficq-10218.alm2', 'FICQ-10218.Alarm_2_SP1', 31598, 'float32', 'R/W', 28, 'ALM2', TRUE), + ('ficq-10218.mode', 'FICQ-10218.Auto_Man_State', 31738, 'uint16', 'R/W', 28, 'MODE', TRUE), + ('ficq-10218.status', 'FICQ-10218.Loop_Status_Register', 31742, 'uint16', 'R', 28, 'STATUS', TRUE), + ('lica-10213.pv', 'LIC-10213.PV', 31808, 'float32', 'R', 29, 'PV', TRUE), + ('lica-10213.sp', 'LIC-10213.WSP', 31812, 'float32', 'R/W', 29, 'SP', TRUE), + ('lica-10213.op', 'LIC-10213.Output', 31814, 'float32', 'R/W', 29, 'OP', TRUE), + ('lica-10213.rsp', 'LIC-10213.RSP_SP2', 31810, 'float32', 'R/W', 29, 'RSP', TRUE), + ('lica-10213.lsp1', 'LIC-10213.LSP1', 31850, 'float32', 'R/W', 29, 'LSP1', TRUE), + ('lica-10213.lsp2', 'LIC-10213.LSP2', 31852, 'float32', 'R/W', 29, 'LSP2', TRUE), + ('lica-10213.dev', 'LIC-10213.Deviation', 31882, 'float32', 'R', 29, 'DEV', TRUE), + ('lica-10213.pv_lo', 'LIC-10213.PV_low_range', 31830, 'float32', 'R', 29, 'PV_LO', TRUE), + ('lica-10213.pv_hi', 'LIC-10213.PV_high_range', 31832, 'float32', 'R', 29, 'PV_HI', TRUE), + ('lica-10213.sp_lo', 'LIC-10213.SP_low_limit', 31860, 'float32', 'R/W', 29, 'SP_LO', TRUE), + ('lica-10213.sp_hi', 'LIC-10213.SP_high_limit', 31862, 'float32', 'R/W', 29, 'SP_HI', TRUE), + ('lica-10213.op_lo', 'LIC-10213.Output_Low_Limit', 31866, 'float32', 'R/W', 29, 'OP_LO', TRUE), + ('lica-10213.op_hi', 'LIC-10213.Output_High_Limit', 31868, 'float32', 'R/W', 29, 'OP_HI', TRUE), + ('lica-10213.alm1', 'LIC-10213.Alarm_1_SP1', 31834, 'float32', 'R/W', 29, 'ALM1', TRUE), + ('lica-10213.alm2', 'LIC-10213.Alarm_2_SP1', 31854, 'float32', 'R/W', 29, 'ALM2', TRUE), + ('lica-10213.mode', 'LIC-10213.Auto_Man_State', 31994, 'uint16', 'R/W', 29, 'MODE', TRUE), + ('lica-10213.status', 'LIC-10213.Loop_Status_Register', 31998, 'uint16', 'R', 29, 'STATUS', TRUE), + ('pica-10211a.pv', 'PIC-10211A.PV', 32576, 'float32', 'R', 32, 'PV', TRUE), + ('pica-10211a.sp', 'PIC-10211A.WSP', 32580, 'float32', 'R/W', 32, 'SP', TRUE), + ('pica-10211a.op', 'PIC-10211A.Output', 32582, 'float32', 'R/W', 32, 'OP', TRUE), + ('pica-10211a.rsp', 'PIC-10211A.RSP_SP2', 32578, 'float32', 'R/W', 32, 'RSP', TRUE), + ('pica-10211a.lsp1', 'PIC-10211A.LSP1', 32618, 'float32', 'R/W', 32, 'LSP1', TRUE), + ('pica-10211a.lsp2', 'PIC-10211A.LSP2', 32620, 'float32', 'R/W', 32, 'LSP2', TRUE), + ('pica-10211a.dev', 'PIC-10211A.Deviation', 32650, 'float32', 'R', 32, 'DEV', TRUE), + ('pica-10211a.pv_lo', 'PIC-10211A.PV_low_range', 32598, 'float32', 'R', 32, 'PV_LO', TRUE), + ('pica-10211a.pv_hi', 'PIC-10211A.PV_high_range', 32600, 'float32', 'R', 32, 'PV_HI', TRUE), + ('pica-10211a.sp_lo', 'PIC-10211A.SP_low_limit', 32628, 'float32', 'R/W', 32, 'SP_LO', TRUE), + ('pica-10211a.sp_hi', 'PIC-10211A.SP_high_limit', 32630, 'float32', 'R/W', 32, 'SP_HI', TRUE), + ('pica-10211a.op_lo', 'PIC-10211A.Output_Low_Limit', 32634, 'float32', 'R/W', 32, 'OP_LO', TRUE), + ('pica-10211a.op_hi', 'PIC-10211A.Output_High_Limit', 32636, 'float32', 'R/W', 32, 'OP_HI', TRUE), + ('pica-10211a.alm1', 'PIC-10211A.Alarm_1_SP1', 32602, 'float32', 'R/W', 32, 'ALM1', TRUE), + ('pica-10211a.alm2', 'PIC-10211A.Alarm_2_SP1', 32622, 'float32', 'R/W', 32, 'ALM2', TRUE), + ('pica-10211a.mode', 'PIC-10211A.Auto_Man_State', 32762, 'uint16', 'R/W', 32, 'MODE', TRUE), + ('pica-10211a.status', 'PIC-10211A.Loop_Status_Register', 32766, 'uint16', 'R', 32, 'STATUS', TRUE), + ('ficq-10216.pv', 'FIC-10216.PV', 32064, 'float32', 'R', 30, 'PV', TRUE), + ('ficq-10216.sp', 'FIC-10216.WSP', 32068, 'float32', 'R/W', 30, 'SP', TRUE), + ('ficq-10216.op', 'FIC-10216.Output', 32070, 'float32', 'R/W', 30, 'OP', TRUE), + ('ficq-10216.rsp', 'FIC-10216.RSP_SP2', 32066, 'float32', 'R/W', 30, 'RSP', TRUE), + ('ficq-10216.lsp1', 'FIC-10216.LSP1', 32106, 'float32', 'R/W', 30, 'LSP1', TRUE), + ('ficq-10216.lsp2', 'FIC-10216.LSP2', 32108, 'float32', 'R/W', 30, 'LSP2', TRUE), + ('ficq-10216.dev', 'FIC-10216.Deviation', 32138, 'float32', 'R', 30, 'DEV', TRUE), + ('ficq-10216.pv_lo', 'FIC-10216.PV_low_range', 32086, 'float32', 'R', 30, 'PV_LO', TRUE), + ('ficq-10216.pv_hi', 'FIC-10216.PV_high_range', 32088, 'float32', 'R', 30, 'PV_HI', TRUE), + ('ficq-10216.sp_lo', 'FIC-10216.SP_low_limit', 32116, 'float32', 'R/W', 30, 'SP_LO', TRUE), + ('ficq-10216.sp_hi', 'FIC-10216.SP_high_limit', 32118, 'float32', 'R/W', 30, 'SP_HI', TRUE), + ('ficq-10216.op_lo', 'FIC-10216.Output_Low_Limit', 32122, 'float32', 'R/W', 30, 'OP_LO', TRUE), + ('ficq-10216.op_hi', 'FIC-10216.Output_High_Limit', 32124, 'float32', 'R/W', 30, 'OP_HI', TRUE), + ('ficq-10216.alm1', 'FIC-10216.Alarm_1_SP1', 32090, 'float32', 'R/W', 30, 'ALM1', TRUE), + ('ficq-10216.alm2', 'FIC-10216.Alarm_2_SP1', 32110, 'float32', 'R/W', 30, 'ALM2', TRUE), + ('ficq-10216.mode', 'FIC-10216.Auto_Man_State', 32250, 'uint16', 'R/W', 30, 'MODE', TRUE), + ('ficq-10216.status', 'FIC-10216.Loop_Status_Register', 32254, 'uint16', 'R', 30, 'STATUS', TRUE), + ('tica-9211a.pv', 'TIC-9211.PV', 3136, 'float32', 'R', 13, 'PV', TRUE), + ('tica-9211a.sp', 'TIC-9211.WSP', 3140, 'float32', 'R/W', 13, 'SP', TRUE), + ('tica-9211a.op', 'TIC-9211.Output', 3142, 'float32', 'R/W', 13, 'OP', TRUE), + ('tica-9211a.rsp', 'TIC-9211.RSP_SP2', 3138, 'float32', 'R/W', 13, 'RSP', TRUE), + ('tica-9211a.lsp1', 'TIC-9211.LSP1', 3178, 'float32', 'R/W', 13, 'LSP1', TRUE), + ('tica-9211a.lsp2', 'TIC-9211.LSP2', 3180, 'float32', 'R/W', 13, 'LSP2', TRUE), + ('tica-9211a.dev', 'TIC-9211.Deviation', 3210, 'float32', 'R', 13, 'DEV', TRUE), + ('tica-9211a.pv_lo', 'TIC-9211.PV_low_range', 3158, 'float32', 'R', 13, 'PV_LO', TRUE), + ('tica-9211a.pv_hi', 'TIC-9211.PV_high_range', 3160, 'float32', 'R', 13, 'PV_HI', TRUE), + ('tica-9211a.sp_lo', 'TIC-9211.SP_low_limit', 3188, 'float32', 'R/W', 13, 'SP_LO', TRUE), + ('tica-9211a.sp_hi', 'TIC-9211.SP_high_limit', 3190, 'float32', 'R/W', 13, 'SP_HI', TRUE), + ('tica-9211a.op_lo', 'TIC-9211.Output_Low_Limit', 3194, 'float32', 'R/W', 13, 'OP_LO', TRUE), + ('tica-9211a.op_hi', 'TIC-9211.Output_High_Limit', 3196, 'float32', 'R/W', 13, 'OP_HI', TRUE), + ('tica-9211a.alm1', 'TIC-9211.Alarm_1_SP1', 3162, 'float32', 'R/W', 13, 'ALM1', TRUE), + ('tica-9211a.alm2', 'TIC-9211.Alarm_2_SP1', 3182, 'float32', 'R/W', 13, 'ALM2', TRUE), + ('tica-9211a.mode', 'TIC-9211.Auto_Man_State', 3322, 'uint16', 'R/W', 13, 'MODE', TRUE), + ('tica-9211a.status', 'TIC-9211.Loop_Status_Register', 3326, 'uint16', 'R', 13, 'STATUS', TRUE), + ('tica-10211a.pv', 'TIC-10211.PV', 32320, 'float32', 'R', 31, 'PV', TRUE), + ('tica-10211a.sp', 'TIC-10211.WSP', 32324, 'float32', 'R/W', 31, 'SP', TRUE), + ('tica-10211a.op', 'TIC-10211.Output', 32326, 'float32', 'R/W', 31, 'OP', TRUE), + ('tica-10211a.rsp', 'TIC-10211.RSP_SP2', 32322, 'float32', 'R/W', 31, 'RSP', TRUE), + ('tica-10211a.lsp1', 'TIC-10211.LSP1', 32362, 'float32', 'R/W', 31, 'LSP1', TRUE), + ('tica-10211a.lsp2', 'TIC-10211.LSP2', 32364, 'float32', 'R/W', 31, 'LSP2', TRUE), + ('tica-10211a.dev', 'TIC-10211.Deviation', 32394, 'float32', 'R', 31, 'DEV', TRUE), + ('tica-10211a.pv_lo', 'TIC-10211.PV_low_range', 32342, 'float32', 'R', 31, 'PV_LO', TRUE), + ('tica-10211a.pv_hi', 'TIC-10211.PV_high_range', 32344, 'float32', 'R', 31, 'PV_HI', TRUE), + ('tica-10211a.sp_lo', 'TIC-10211.SP_low_limit', 32372, 'float32', 'R/W', 31, 'SP_LO', TRUE), + ('tica-10211a.sp_hi', 'TIC-10211.SP_high_limit', 32374, 'float32', 'R/W', 31, 'SP_HI', TRUE), + ('tica-10211a.op_lo', 'TIC-10211.Output_Low_Limit', 32378, 'float32', 'R/W', 31, 'OP_LO', TRUE), + ('tica-10211a.op_hi', 'TIC-10211.Output_High_Limit', 32380, 'float32', 'R/W', 31, 'OP_HI', TRUE), + ('tica-10211a.alm1', 'TIC-10211.Alarm_1_SP1', 32346, 'float32', 'R/W', 31, 'ALM1', TRUE), + ('tica-10211a.alm2', 'TIC-10211.Alarm_2_SP1', 32366, 'float32', 'R/W', 31, 'ALM2', TRUE), + ('tica-10211a.mode', 'TIC-10211.Auto_Man_State', 32506, 'uint16', 'R/W', 31, 'MODE', TRUE), + ('tica-10211a.status', 'TIC-10211.Loop_Status_Register', 32510, 'uint16', 'R', 31, 'STATUS', TRUE), + ('ficq-9113.pv', 'FIC-9113.PV', 576, 'float32', 'R', 3, 'PV', TRUE), + ('ficq-9113.sp', 'FIC-9113.WSP', 580, 'float32', 'R/W', 3, 'SP', TRUE), + ('ficq-9113.op', 'FIC-9113.Output', 582, 'float32', 'R/W', 3, 'OP', TRUE), + ('ficq-9113.rsp', 'FIC-9113.RSP_SP2', 578, 'float32', 'R/W', 3, 'RSP', TRUE), + ('ficq-9113.lsp1', 'FIC-9113.LSP1', 618, 'float32', 'R/W', 3, 'LSP1', TRUE), + ('ficq-9113.lsp2', 'FIC-9113.LSP2', 620, 'float32', 'R/W', 3, 'LSP2', TRUE), + ('ficq-9113.dev', 'FIC-9113.Deviation', 650, 'float32', 'R', 3, 'DEV', TRUE), + ('ficq-9113.pv_lo', 'FIC-9113.PV_low_range', 598, 'float32', 'R', 3, 'PV_LO', TRUE), + ('ficq-9113.pv_hi', 'FIC-9113.PV_high_range', 600, 'float32', 'R', 3, 'PV_HI', TRUE), + ('ficq-9113.sp_lo', 'FIC-9113.SP_low_limit', 628, 'float32', 'R/W', 3, 'SP_LO', TRUE), + ('ficq-9113.sp_hi', 'FIC-9113.SP_high_limit', 630, 'float32', 'R/W', 3, 'SP_HI', TRUE), + ('ficq-9113.op_lo', 'FIC-9113.Output_Low_Limit', 634, 'float32', 'R/W', 3, 'OP_LO', TRUE), + ('ficq-9113.op_hi', 'FIC-9113.Output_High_Limit', 636, 'float32', 'R/W', 3, 'OP_HI', TRUE), + ('ficq-9113.alm1', 'FIC-9113.Alarm_1_SP1', 602, 'float32', 'R/W', 3, 'ALM1', TRUE), + ('ficq-9113.alm2', 'FIC-9113.Alarm_2_SP1', 622, 'float32', 'R/W', 3, 'ALM2', TRUE), + ('ficq-9113.mode', 'FIC-9113.Auto_Man_State', 762, 'uint16', 'R/W', 3, 'MODE', TRUE), + ('ficq-9113.status', 'FIC-9113.Loop_Status_Register', 766, 'uint16', 'R', 3, 'STATUS', TRUE), + ('ficq-9213.pv', 'FIC-9213.PV', 2112, 'float32', 'R', 9, 'PV', TRUE), + ('ficq-9213.sp', 'FIC-9213.WSP', 2116, 'float32', 'R/W', 9, 'SP', TRUE), + ('ficq-9213.op', 'FIC-9213.Output', 2118, 'float32', 'R/W', 9, 'OP', TRUE), + ('ficq-9213.rsp', 'FIC-9213.RSP_SP2', 2114, 'float32', 'R/W', 9, 'RSP', TRUE), + ('ficq-9213.lsp1', 'FIC-9213.LSP1', 2154, 'float32', 'R/W', 9, 'LSP1', TRUE), + ('ficq-9213.lsp2', 'FIC-9213.LSP2', 2156, 'float32', 'R/W', 9, 'LSP2', TRUE), + ('ficq-9213.dev', 'FIC-9213.Deviation', 2186, 'float32', 'R', 9, 'DEV', TRUE), + ('ficq-9213.pv_lo', 'FIC-9213.PV_low_range', 2134, 'float32', 'R', 9, 'PV_LO', TRUE), + ('ficq-9213.pv_hi', 'FIC-9213.PV_high_range', 2136, 'float32', 'R', 9, 'PV_HI', TRUE), + ('ficq-9213.sp_lo', 'FIC-9213.SP_low_limit', 2164, 'float32', 'R/W', 9, 'SP_LO', TRUE), + ('ficq-9213.sp_hi', 'FIC-9213.SP_high_limit', 2166, 'float32', 'R/W', 9, 'SP_HI', TRUE), + ('ficq-9213.op_lo', 'FIC-9213.Output_Low_Limit', 2170, 'float32', 'R/W', 9, 'OP_LO', TRUE), + ('ficq-9213.op_hi', 'FIC-9213.Output_High_Limit', 2172, 'float32', 'R/W', 9, 'OP_HI', TRUE), + ('ficq-9213.alm1', 'FIC-9213.Alarm_1_SP1', 2138, 'float32', 'R/W', 9, 'ALM1', TRUE), + ('ficq-9213.alm2', 'FIC-9213.Alarm_2_SP1', 2158, 'float32', 'R/W', 9, 'ALM2', TRUE), + ('ficq-9213.mode', 'FIC-9213.Auto_Man_State', 2298, 'uint16', 'R/W', 9, 'MODE', TRUE), + ('ficq-9213.status', 'FIC-9213.Loop_Status_Register', 2302, 'uint16', 'R', 9, 'STATUS', TRUE), + ('ficq-10113.pv', 'FICQ-10113.PV', 4416, 'float32', 'R', 18, 'PV', TRUE), + ('ficq-10113.sp', 'FICQ-10113.WSP', 4420, 'float32', 'R/W', 18, 'SP', TRUE), + ('ficq-10113.op', 'FICQ-10113.Output', 4422, 'float32', 'R/W', 18, 'OP', TRUE), + ('ficq-10113.rsp', 'FICQ-10113.RSP_SP2', 4418, 'float32', 'R/W', 18, 'RSP', TRUE), + ('ficq-10113.lsp1', 'FICQ-10113.LSP1', 4458, 'float32', 'R/W', 18, 'LSP1', TRUE), + ('ficq-10113.lsp2', 'FICQ-10113.LSP2', 4460, 'float32', 'R/W', 18, 'LSP2', TRUE), + ('ficq-10113.dev', 'FICQ-10113.Deviation', 4490, 'float32', 'R', 18, 'DEV', TRUE), + ('ficq-10113.pv_lo', 'FICQ-10113.PV_low_range', 4438, 'float32', 'R', 18, 'PV_LO', TRUE), + ('ficq-10113.pv_hi', 'FICQ-10113.PV_high_range', 4440, 'float32', 'R', 18, 'PV_HI', TRUE), + ('ficq-10113.sp_lo', 'FICQ-10113.SP_low_limit', 4468, 'float32', 'R/W', 18, 'SP_LO', TRUE), + ('ficq-10113.sp_hi', 'FICQ-10113.SP_high_limit', 4470, 'float32', 'R/W', 18, 'SP_HI', TRUE), + ('ficq-10113.op_lo', 'FICQ-10113.Output_Low_Limit', 4474, 'float32', 'R/W', 18, 'OP_LO', TRUE), + ('ficq-10113.op_hi', 'FICQ-10113.Output_High_Limit', 4476, 'float32', 'R/W', 18, 'OP_HI', TRUE), + ('ficq-10113.alm1', 'FICQ-10113.Alarm_1_SP1', 4442, 'float32', 'R/W', 18, 'ALM1', TRUE), + ('ficq-10113.alm2', 'FICQ-10113.Alarm_2_SP1', 4462, 'float32', 'R/W', 18, 'ALM2', TRUE), + ('ficq-10113.mode', 'FICQ-10113.Auto_Man_State', 4602, 'uint16', 'R/W', 18, 'MODE', TRUE), + ('ficq-10113.status', 'FICQ-10113.Loop_Status_Register', 4606, 'uint16', 'R', 18, 'STATUS', TRUE), + ('ficq-10213.pv', 'FICQ-10213.PV', 31040, 'float32', 'R', 26, 'PV', TRUE), + ('ficq-10213.sp', 'FICQ-10213.WSP', 31044, 'float32', 'R/W', 26, 'SP', TRUE), + ('ficq-10213.op', 'FICQ-10213.Output', 31046, 'float32', 'R/W', 26, 'OP', TRUE), + ('ficq-10213.rsp', 'FICQ-10213.RSP_SP2', 31042, 'float32', 'R/W', 26, 'RSP', TRUE), + ('ficq-10213.lsp1', 'FICQ-10213.LSP1', 31082, 'float32', 'R/W', 26, 'LSP1', TRUE), + ('ficq-10213.lsp2', 'FICQ-10213.LSP2', 31084, 'float32', 'R/W', 26, 'LSP2', TRUE), + ('ficq-10213.dev', 'FICQ-10213.Deviation', 31114, 'float32', 'R', 26, 'DEV', TRUE), + ('ficq-10213.pv_lo', 'FICQ-10213.PV_low_range', 31062, 'float32', 'R', 26, 'PV_LO', TRUE), + ('ficq-10213.pv_hi', 'FICQ-10213.PV_high_range', 31064, 'float32', 'R', 26, 'PV_HI', TRUE), + ('ficq-10213.sp_lo', 'FICQ-10213.SP_low_limit', 31092, 'float32', 'R/W', 26, 'SP_LO', TRUE), + ('ficq-10213.sp_hi', 'FICQ-10213.SP_high_limit', 31094, 'float32', 'R/W', 26, 'SP_HI', TRUE), + ('ficq-10213.op_lo', 'FICQ-10213.Output_Low_Limit', 31098, 'float32', 'R/W', 26, 'OP_LO', TRUE), + ('ficq-10213.op_hi', 'FICQ-10213.Output_High_Limit', 31100, 'float32', 'R/W', 26, 'OP_HI', TRUE), + ('ficq-10213.alm1', 'FICQ-10213.Alarm_1_SP1', 31066, 'float32', 'R/W', 26, 'ALM1', TRUE), + ('ficq-10213.alm2', 'FICQ-10213.Alarm_2_SP1', 31086, 'float32', 'R/W', 26, 'ALM2', TRUE), + ('ficq-10213.mode', 'FICQ-10213.Auto_Man_State', 31226, 'uint16', 'R/W', 26, 'MODE', TRUE), + ('ficq-10213.status', 'FICQ-10213.Loop_Status_Register', 31230, 'uint16', 'R', 26, 'STATUS', TRUE); + +-- 총 719개 행 \ No newline at end of file diff --git a/docs/experion-indexed-address-mapping.md b/docs/experion-indexed-address-mapping.md new file mode 100644 index 0000000..e6139b5 --- /dev/null +++ b/docs/experion-indexed-address-mapping.md @@ -0,0 +1,345 @@ +# Experion Indexed Address → HC900 Fixed Modbus Memory Map 변환 공식 + +**대상**: HC900-C70 (C4 컨트롤러), Experion HS R530 OPC 서버 +**출처**: `C4-All-Modbus-Map.csv`, `Sinam_Tag_all.xlsx` (SourceAddressPV/OP/MD 컬럼), HC900 Communications Manual Rev.13 + +--- + +## 1. 배경 + +Experion OPC 서버는 HC900 Modbus 레지스터를 직접 주소 대신 **Indexed Address** 형식으로 참조한다. +`Sinam_Tag_all.xlsx`의 `SourceAddressPV` / `SourceAddressOP` / `SourceAddressMD` 컬럼에 이 형식이 기록된다. + +``` +예시: + C4 LOOP 1 LOOPSTAT → C4 컨트롤러, PID Loop #1, Loop Status Register + C4 TAG 32 VALUE → C4 컨트롤러, Signal Tag #32, 값 + C4 MATH_VAR 5 VALUE → C4 컨트롤러, Variable #5, 값 + C4 LOOPX 27 LOOPSTAT → C4 컨트롤러, 확장 Loop #27 (25-32), Loop Status Register +``` + +--- + +## 2. Indexed Address 형식 + +``` +{CTRL} {PARTITION} {N} {PARAM} + +CTRL : 컨트롤러 식별자 (C1, C2, C3, C4) +PARTITION : LOOP | LOOPX | TAG | MATH_VAR +N : 1-based 인덱스 번호 +PARAM : 파라미터명 (하단 §5 참조) +``` + +--- + +## 3. HC900 Fixed Map 파티션별 Modbus 주소 공식 + +### 3-1. PID Loop (1-24번) — `LOOP` + +``` +base_addr(N) = 0x0040 + (N - 1) × 0x0100 (N = 1 ~ 24) + +Modbus_addr = base_addr(N) + param_offset +``` + +| Loop# | Base Addr | HC900 태그명 (C4) | +|------:|-----------|------------------| +| 1 | 0x0040 | FIC-9101 | +| 2 | 0x0140 | FICQ-9114 | +| 3 | 0x0240 | FIC-9113 | +| 4 | 0x0340 | FIC-9118 | +| 5 | 0x0440 | FIC-9116 | +| 6 | 0x0540 | TIC-9111A | +| 7 | 0x0640 | PIC-9111A | +| 8 | 0x0740 | FIC-9201 | +| 9 | 0x0840 | FIC-9213 | +| 10 | 0x0940 | FIC-9214 | +| 11 | 0x0A40 | FIC-9218 | +| 12 | 0x0B40 | FIC-9216 | +| 13 | 0x0C40 | TIC-9211 | +| 14 | 0x0D40 | PIC-9211B | +| 15 | 0x0E40 | LIC-9113 | +| 16 | 0x0F40 | LIC-9213 | +| 17 | 0x1040 | FICQ-10101 | +| 18 | 0x1140 | FICQ-10113 | +| 19 | 0x1240 | FICQ-10114A | +| 20 | 0x1340 | FIC-10118 | +| 21 | 0x1440 | LICA-10113 | +| 22 | 0x1540 | FICQ-10116 | +| 23 | 0x1640 | TIC-10111A | +| 24 | 0x1740 | PIC-10111A | + +### 3-2. 확장 PID Loop (25-32번) — `LOOPX` + +``` +base_addr(N) = 0x7840 + (N - 25) × 0x0100 (N = 25 ~ 32) + +Modbus_addr = base_addr(N) + param_offset +``` + +| Loop# | Base Addr | HC900 태그명 (C4) | +|------:|-----------|------------------| +| 25 | 0x7840 | FICQ-10201 | +| 26 | 0x7940 | FICQ-10213 | +| 27 | 0x7A40 | FICQ-10214 | +| 28 | 0x7B40 | FICQ-10218 | +| 29 | 0x7C40 | LIC-10213 | +| 30 | 0x7D40 | FIC-10216 | +| 31 | 0x7E40 | TIC-10211 | +| 32 | 0x7F40 | PIC-10211A | + +### 3-3. Signal Tag (1-1000번) — `TAG` + +``` +Modbus_addr(N) = 0x2000 + (N - 1) × 2 (N = 1 ~ 1000) + +데이터 타입: float 32 (2 레지스터), Read-only +``` + +> Signal Tag 번호와 HC900 태그명의 매핑은 HC Designer "Tag Information" 리포트 또는 +> `C4-All-Modbus-Map.csv` > `Signal Tags 1-1000` 파티션 참조. + +### 3-4. Variable / Math Variable (1-600번) — `MATH_VAR` + +``` +Modbus_addr(N) = 0x18C0 + (N - 1) × 2 (N = 1 ~ 600) + +데이터 타입: float 32 (2 레지스터), Read/Write +``` + +--- + +## 4. 주소 영역 요약 + +| Partition | Experion 키워드 | 시작 주소 | 끝 주소 | 공식 | 개수 | +|-----------|----------------|----------|---------|------|------| +| System Parameters | — | 0x0000 | 0x003F | — | — | +| PID Loop 1-24 | `LOOP` | 0x0040 | 0x17FF | 0x0040+(N-1)×0x100 | 24 loops | +| PID Loop 25-32 | `LOOPX` | 0x7840 | 0x7FFF | 0x7840+(N-25)×0x100 | 8 loops | +| Variable 1-600 | `MATH_VAR` | 0x18C0 | 0x1D6F | 0x18C0+(N-1)×2 | 600 tags | +| Signal Tag 1-1000 | `TAG` | 0x2000 | 0x27CF | 0x2000+(N-1)×2 | 1000 tags | +| Signal Tag 1-4000 | — | 0x3B60 | 0x5A9F | 0x3B60+(N-1)×2 | 4000 tags | + +--- + +## 5. Loop 파라미터 오프셋 테이블 + +`C4-All-Modbus-Map.csv` Loop 1 (FIC-9101, base=0x0040) 기준 실측값. +모든 루프에 동일하게 적용된다. + +### 5-1. Float 파라미터 (float 32 = 2 레지스터) + +| Experion 파라미터명 | HC900 태그 접미사 | Offset (Hex) | Offset (Dec) | Access | 설명 | +|-------------------|----------------|:------------:|:------------:|:------:|------| +| `PV` | `.PV` | +0x0000 | +0 | R | 프로세스 변수 | +| `RSP` | `.RSP_SP2` | +0x0002 | +2 | R/W | Remote SP (SP2) | +| `WSP` | `.WSP` | +0x0004 | +4 | R/W | Working Set Point | +| `OP` | `.Output` | +0x0006 | +6 | R/W | Output | +| — | `.PV__B_` | +0x0008 | +8 | R | PV (B bank) | +| — | `.Gain_1_Prop_Band_1` | +0x000C | +12 | R/W | Gain 1 / Prop Band 1 | +| — | `.Direction` | +0x000E | +14 | R | Direction (0=Direct, 1=Reverse) | +| `RESET1` | `.Reset_1` | +0x0010 | +16 | R/W | Reset 1 (Integral) | +| `RATE1` | `.Rate_1` | +0x0012 | +18 | R/W | Rate 1 (Derivative) | +| — | `.Scan_Cycle_Time` | +0x0014 | +20 | R | Scan Cycle Time | +| — | `.PV_low_range` | +0x0016 | +22 | R | PV Low Range | +| — | `.PV_high_range` | +0x0018 | +24 | R | PV High Range | +| — | `.Alarm_1_SP1` | +0x001A | +26 | R/W | Alarm 1 SP1 | +| — | `.Alarm_1_SP2` | +0x001C | +28 | R/W | Alarm 1 SP2 | +| — | `.Gain2_Prop_Band_2` | +0x0020 | +32 | R/W | Gain 2 / Prop Band 2 | +| — | `.Reset_2` | +0x0024 | +36 | R/W | Reset 2 | +| — | `.Rate_2` | +0x0026 | +38 | R/W | Rate 2 | +| `LSP1` | `.LSP1` | +0x002A | +42 | R/W | Local SP 1 | +| `LSP2` | `.LSP2` | +0x002C | +44 | R/W | Local SP 2 | +| — | `.Alarm_2_SP1` | +0x002E | +46 | R/W | Alarm 2 SP1 | +| — | `.Alarm_2_SP2` | +0x0030 | +48 | R/W | Alarm 2 SP2 | +| — | `.SP_low_limit` | +0x0034 | +52 | R/W | SP Low Limit | +| — | `.SP_high_limit` | +0x0036 | +54 | R/W | SP High Limit | +| — | `.Output_Low_Limit` | +0x003A | +58 | R/W | Output Low Limit | +| — | `.Output_High_Limit` | +0x003C | +60 | R/W | Output High Limit | +| — | `.Ratio` | +0x0046 | +70 | R/W | Ratio | +| — | `.Bias` | +0x0048 | +72 | R/W | Bias | +| — | `.Deviation` | +0x004A | +74 | R | Deviation (SP-PV) | +| — | `.Manual_Reset` | +0x004E | +78 | R/W | Manual Reset | +| — | `.Feed_forward_Gain` | +0x0050 | +80 | R/W | Feedforward Gain | + +### 5-2. Integer 파라미터 (unsigned 16 = 1 레지스터) + +| Experion 파라미터명 | HC900 태그 접미사 | Offset (Hex) | Offset (Dec) | Access | 설명 | +|-------------------|----------------|:------------:|:------------:|:------:|------| +| — | `.Enable_Disable_Fuzzy` | +0x00B7 | +183 | R/W | Fuzzy Enable (0/1) | +| — | `.Demand_Tune_Req` | +0x00B8 | +184 | R/W | Autotune Request | +| `AMSTAT` | `.Auto_Man_State` | +0x00BA | +186 | R/W | 0=Manual, 1=Auto | +| — | `.LSP_Select_State` | +0x00BB | +187 | R/W | SP 선택 (0=SP1, 1=SP2) | +| — | `.Rem_Loc_SP_State` | +0x00BC | +188 | R/W | Remote/Local SP | +| — | `.Tune_Set_State` | +0x00BD | +189 | R/W | Tune Set | +| `LOOPSTAT` | `.Loop_Status_Register` | +0x00BE | +190 | R | Loop 상태 (bit-packed) | + +> **Loop 블록 크기**: 루프당 0x00C0 (192) 레지스터 할당 (0x0040~0x00FF) +> float 32 = 2 레지스터 사용 (even address), unsigned 16 = 1 레지스터 + +--- + +## 6. 주소 계산 예시 + +### 예시 1: `FICQ-9101` (AnalogPoint) — `C4 LOOP 1 LOOPSTAT` + +``` +LOOP 번호: 1 +base_addr = 0x0040 + (1-1) × 0x0100 = 0x0040 +LOOPSTAT 오프셋 = +0x00BE +Modbus_addr = 0x0040 + 0x00BE = 0x00FE (= 255 dec) + +HC900 태그: FIC-9101.Loop_Status_Register @ 0x00FE +``` + +### 예시 2: `FICQ-9101` — `C4 LOOP 1 AMSTAT` (Auto/Manual State) + +``` +base_addr = 0x0040 +AMSTAT 오프셋 = +0x00BA +Modbus_addr = 0x0040 + 0x00BA = 0x00FA (= 250 dec) + +HC900 태그: FIC-9101.Auto_Man_State @ 0x00FA +``` + +### 예시 3: `FICQ-10214` (AnalogPoint) — `C4 LOOPX 27 LOOPSTAT` + +``` +LOOPX 번호: 27 (25번부터 시작) +base_addr = 0x7840 + (27-25) × 0x0100 = 0x7840 + 0x0200 = 0x7A40 +LOOPSTAT 오프셋 = +0x00BE +Modbus_addr = 0x7A40 + 0x00BE = 0x7AFE + +HC900 태그: FICQ-10214.Loop_Status_Register @ 0x7AFE +``` + +### 예시 4: `P-9114` (StatusPoint) — `C4 TAG 32 VALUE` + +``` +TAG 번호: 32 +Modbus_addr = 0x2000 + (32-1) × 2 = 0x2000 + 62 = 0x203E (= 8254 dec) + +HC900 태그: P_9114 @ 0x203E (C4-All-Modbus-Map.csv Signal Tag #32) +``` + +### 예시 5: `XV-9101` (StatusPoint) — `C4 MATH_VAR 1 VALUE` (OP source) + +``` +MATH_VAR 번호: 1 +Modbus_addr = 0x18C0 + (1-1) × 2 = 0x18C0 + +HC900 태그: XV9101AUTO @ 0x18C0 (C4-All-Modbus-Map.csv Variable #1) +``` + +--- + +## 7. 검증 결과 요약 (C4 컨트롤러) + +`Sinam_Tag_all.xlsx` × `C4-All-Modbus-Map.csv` 교차 검증 결과: + +| 패턴 | 매핑 건수 | 검증 상태 | +|------|:--------:|:--------:| +| `C4 LOOP N *` (1-24) | 24 | ✓ 전수 일치 | +| `C4 LOOPX N *` (25-32) | 8 | ✓ 전수 일치 | +| `C4 TAG N VALUE` | ~120 | ✓ 전수 일치 | +| `C4 MATH_VAR N VALUE` | ~55 | ✓ 전수 일치 | +| **합계** | **207** | **✓** | + +--- + +## 8. Python 공식 구현 + +```python +def experion_indexed_to_modbus(indexed_addr: str, loop_tag_map: dict) -> dict | None: + """ + Experion Indexed Address → HC900 Modbus 주소 변환. + + loop_tag_map: {loop_num: hc900_base_tag} + 예: {1: 'FIC-9101', 2: 'FICQ-9114', ...} + + 반환: {'hc900_tag': str, 'modbus_addr': int, 'dtype': str} + """ + import re + + # 파라미터 → (offset, dtype) + PARAM_OFFSET = { + 'PV': (0x0000, 'float32'), + 'RSP': (0x0002, 'float32'), + 'WSP': (0x0004, 'float32'), + 'OP': (0x0006, 'float32'), + 'RESET1': (0x0010, 'float32'), + 'RATE1': (0x0012, 'float32'), + 'LSP1': (0x002A, 'float32'), + 'LSP2': (0x002C, 'float32'), + 'AMSTAT': (0x00BA, 'uint16'), + 'LOOPSTAT': (0x00BE, 'uint16'), + 'VALUE': (0x0000, 'float32'), + } + + # LOOP / LOOPX + m = re.match(r'\w+ (LOOP|LOOPX) (\d+) (\w+)', indexed_addr) + if m: + loop_type, n, param = m.group(1), int(m.group(2)), m.group(3) + base = (0x0040 + (n-1)*0x0100) if loop_type == 'LOOP' \ + else (0x7840 + (n-25)*0x0100) + offset, dtype = PARAM_OFFSET.get(param, (None, None)) + if offset is None: + return None + hc900_base = loop_tag_map.get(n, f'LOOP{n}') + suffix = { + 'PV':'PV','RSP':'RSP_SP2','WSP':'WSP','OP':'Output', + 'RESET1':'Reset_1','RATE1':'Rate_1','LSP1':'LSP1','LSP2':'LSP2', + 'AMSTAT':'Auto_Man_State','LOOPSTAT':'Loop_Status_Register', + }.get(param, param) + return {'hc900_tag': f'{hc900_base}.{suffix}', + 'modbus_addr': base + offset, 'dtype': dtype} + + # TAG (Signal Tag) + m = re.match(r'\w+ TAG (\d+) VALUE', indexed_addr) + if m: + n = int(m.group(1)) + return {'hc900_tag': f'SIG_TAG_{n}', # 실제 태그명은 CSV 조회 필요 + 'modbus_addr': 0x2000 + (n-1)*2, 'dtype': 'float32'} + + # MATH_VAR (Variable) + m = re.match(r'\w+ MATH_VAR (\d+) VALUE', indexed_addr) + if m: + n = int(m.group(1)) + return {'hc900_tag': f'VAR_{n}', # 실제 태그명은 CSV 조회 필요 + 'modbus_addr': 0x18C0 + (n-1)*2, 'dtype': 'float32'} + + return None + + +# 사용 예 +loop_tag_map = { + 1: 'FIC-9101', 2: 'FICQ-9114', 3: 'FIC-9113', + # ... (C4-All-Modbus-Map.csv에서 생성) +} + +result = experion_indexed_to_modbus('C4 LOOP 1 LOOPSTAT', loop_tag_map) +# → {'hc900_tag': 'FIC-9101.Loop_Status_Register', 'modbus_addr': 0x00FE, 'dtype': 'uint16'} + +result = experion_indexed_to_modbus('C4 TAG 32 VALUE', loop_tag_map) +# → {'hc900_tag': 'SIG_TAG_32', 'modbus_addr': 0x203E, 'dtype': 'float32'} +``` + +--- + +## 9. 주의사항 + +1. **이 공식은 Fixed Map 기준**: Custom Map을 사용하는 컨트롤러에서는 주소가 다를 수 있다. + `C4-All-Modbus-Map.csv` ("Modbus All Partitions Report")가 실제 매핑의 최종 정보원. + +2. **컨트롤러별 루프 배치가 다름**: C1~C4 각 컨트롤러마다 Loop #1에 배치된 PID 블록이 다르다. + 이 문서의 "Loop 번호 → HC900 태그" 테이블은 **C4 컨트롤러 전용**. + +3. **Signal Tag 실제 태그명**: `TAG N VALUE` → Modbus 주소는 공식으로 계산하지만, + HC900 태그명 (예: `P_9114`)은 반드시 `C4-All-Modbus-Map.csv`의 Signal Tags 파티션을 조회해야 한다. + +4. **Float 바이트 오더**: HC900 기본값은 **FP B (Big Endian)**, 4바이트 순서 = High word first. + Modbus 레지스터 2개 읽은 뒤 `struct.pack('>HH', r[0], r[1])`로 디코딩. + +5. **MATH_VAR = Variables**: Experion 용어 "MATH_VAR"은 HC900 "Variable" (0x18C0~)을 가리킨다. + R/W 가능 (Write: FC06 단일 또는 FC16 다중 레지스터). diff --git a/docs/kb/P6-1_경비물_제거_공정.md b/docs/kb/P6-1_경비물_제거_공정.md new file mode 100644 index 0000000..353888c --- /dev/null +++ b/docs/kb/P6-1_경비물_제거_공정.md @@ -0,0 +1,163 @@ +# 6-1차 플랜트 경비물 제거 공정 + +## 공정 개요 + +C-6111 증류탑에서 원료 분리 시 발생하는 경비물(Light Component)을 제거하여 전용 탱크로 배출하는 공정. +리플럭스 계통과 경비물 제거 계통이 P-6114 펌프를 공용으로 사용한다. + +--- + +## 공정 흐름도 + +``` +C-6111 (증류탑) + │ + ├── 상부 기상 → E-6112 (기상물 액화) + │ │ + │ ▼ + │ D-6113 (리플럭스 드럼) + │ │ + │ ▼ + │ P-6114 (공용 펌프) + │ │ + │ ├──→ FT-6113 → FICQ-6113 → FCV-6113 → C-6111 (리플럭스) + │ │ + │ └──→ FT-6114 → FICQ-6114 → FCV-6114 → XV-6124 → T-6124 (경비물 배출) + │ + ├── 미액화 가스 → VP-6117 (진공 펌프) → SC-6128 (VOC 스크러버) + │ + └── 하부(중비물) → P-6116 → FCV-6116 (중비물 제거) + → P-6118 → FT-6118 → FCV-6118 (제품 추출) +``` + +--- + +## 단계별 상세 + +### 1. 증류 분리 — C-6111 + +- 원료(일반상업용 물질)를 가열하여 **경비물(저비점)은 상부, 중비물(고비점)은 하부**로 분리하여 반도체급 물질 생산 +- 탑 내 온도 구배 측정: TI-6111A(하부), TI-6111B(중부), TI-6111C(중상부), TI-6111D(상부) +- 진공압 제어: PICA-6111(C-6111 최상단), PI-6111B(중하부 VACUUM PRESSURE) + +| 태그 | 설명 | +|------|------| +| TI-6111a | C-6111 BOT TEMP | +| TI-6111b | C-6111 MID LOW SIDE TEMP | +| TI-6111c | C-6111 MID HIGH SIDE TEMP | +| TI-6111d | C-6111 TOP TEMP | +| PICA-6111 | 탑 진공압 제어 | +| PI-6111 | VACUUM PRESSURE | + +### 2. 기상물 액화 — E-6112 + +- C-6111 상부 기상물을 냉각수로 냉각하여 액체로 응축 +- 응축된 액체는 D-6113(리플럭스 드럼)으로 낙하 + +### 3. 기액 분리 — D-6113 + +- 액화된 물질을 일시 저장하여, BUFFER DRUM으로 역할하며, 미액화 가스(Light Component) 처리 라인으로 배출 +- 드럼 레벨 제어: LICA-6113(캐스케이드, LICA-6113.OP → FICQ-6114.SP) + +| 태그 | 설명 | +|------|------| +| LI-6113 | D-6113 LEVEL | +| LICA-6113 | LT-6113 → FICQ-6114 캐스케이드 | + +### 4. 펌프 이송 — P-6114 + +**공용 펌프**: C-6111/리플럭스 순환 라인과 경비물 제거 라인을 동시에 담당. + +#### 4a. 리플럭스 라인 (→ C-6111) +- **FT-6113** → **FICQ-6113** → **FCV-6113** → C-6111 상부 환류 +- 액화된 물질 중 대부분을 탑 상부로 되돌려 컬럼 내의 제품 농도를 일정하게 유지. + +| 태그 | 설명 | +|------|------| +| FICQ-6113 | C-6111/리플럭스 유량 제어 (FT-6113 → FCV-6113) | + +#### 4b. 경비물 제거 라인 (→ T-6124) +- **FT-6114** → **FICQ-6114** → **FCV-6114** → **XV-6124** → T-6124 +- FICQ-6114의 유량 설정(SP)은 LICA-6113(드럼 레벨)의 출력으로 캐스케이드 변경됨 +- XV-6124: P-6114 → T-6124 선택밸브(OPEN 시 경비물 배출) +- T-6124: PGMEA 제품 저장탱크 + +| 태그 | 설명 | +|------|------| +| FICQ-6114 | 경비물 유량 제어 (FT-6114 → FCV-6114) | +| FT-6114 | 경비물 유량 측정 | +| FCV-6114 | 경비물 유량 제어밸브 | +| XV-6124 | P-6114 → T-6124 배출 선택밸브 | +| LI-6124 | T-6124 레벨 | +| TI-6123 | T-6123 TEMP | + +### 5. 미액화 가스 처리 — VP-6117 → SC-6128 + +- D-6113에서 **VP-6117(진공 펌프)**로 진공 감압 흡입시 함께 흡입된 미액화가스를 +- **SC-6128(VOC 스크러버)**로 이송하여 환경 배출 기준에 맞게 처리 + +| 태그 | 설명 | +|------|------| +| VP-6117 | 진공 펌프 | +| LI-6128 | SCRUBBER SC-6128 | +| LICA-6128 | SC-6128 레벨 제어 | +| P-6128A, P-6128B | SC-6128 하부 VOC 처리액 순환 펌프 | + +### 6. 하부(중비물) 공정 + +#### 중비물 제거 — P-6116 +- C-6111 하부 축적물(중비물)을 순환 및 제거 +- P-6116: C-6111 하부 → C-6111(킥백 라인) + FCV-6116(제거 라인) + +| 태그 | 설명 | +|------|------| +| FICQ-6116 | C-6111 / 중비물 제거 유량 제어 (FT-6116 → FCV-6116) | +| P-6116 | C-6111 하부 순환 및 중비물 제거 펌프 | + +#### 제품 추출 — P-6118 +- C-6111에서 분리 정제된 제품을 중상단 제품 추출 라인에서 이송 +- P-6118: E-6117 → FT-6118 → FCV-6118 + +| 태그 | 설명 | +|------|------| +| FICQ-6118 | 제품 추출 유량 제어 (FT-6118 → FCV-6118) | +| P-6118 | 제품 이송 펌프 | +| TI-6117 | E-6117 TEMP | + +--- + +## 주요 제어 계통 + +| 제어기 | 태그 | 역할 | 센서 → 조작단 | +|--------|------|------|---------------| +| 드럼 레벨 제어 | LICA-6113 | D-6113 레벨 유지 (캐스케이드) | LT-6113 → FICQ-6114.SP | +| 리플럭스 유량 제어 | FICQ-6113 | C-6111 환류량 제어 | FT-6113 → FCV-6113 | +| 경비물 유량 제어 | FICQ-6114 | 경비물 배출량 제어 | FT-6114 → FCV-6114 | +| 중비물 유량 제어 | FICQ-6116 | 중비물 제거량 제어 | FT-6116 → FCV-6116 | +| 제품 추출 유량 제어 | FICQ-6118 | 제품 이송량 제어 | FT-6118 → FCV-6118 | +| 탑 진공압 제어 | PICA-6111 | C-6111 진공압 유지 | PT-6111 → PCV-6111 | +| 스크러버 레벨 제어 | LICA-6128 | SC-6128 레벨 유지 | LT-6128 → LCV-6128 | + +--- + +## 배출 밸브 계통 (XV) + +| 태그 | 설명 | +|------|------| +| XV-6121 | 출하 라인 / T-6121 | +| XV-6122 | 출하 라인 / T-6122 | +| XV-6123 | P-6128 → T-6123 | +| XV-6124 | P-6114 → T-6124 (경비물 배출) | +| XV-6125a/b | (PGMEA 저장탱크 계통) | +| XV-6126a/b | (PGMEA 저장탱크 계통) | +| XV-6127 | (PGMEA 저장탱크 계통) | + +--- + +## 참고: 원료 투입 경로 + +| 경로 | 태그 | 설명 | +|------|------|------| +| 원료 이송 1 | P-6201 | T-203/T-204 → F-6101A/B, F-6201A/B (P6-1/P6-2 공용) | +| 원료 이송 2 | P-6102 | IBC Tank → F-6101A/B | +| 원료 유량 | FICQ-6101 | FT-6101 → FCV-6101 | diff --git a/docs/plan.md b/docs/plan.md new file mode 100644 index 0000000..cd6da11 --- /dev/null +++ b/docs/plan.md @@ -0,0 +1,281 @@ +# HC900 Gateway — 아키텍처 및 구현 계획 + +## 1. 개요 + +ExperionCrawler의 OPC UA → Experion HS R530 경로를 +**Modbus TCP → HC900** 경로로 대체. + +``` +Before: +HC900 ──Modbus TCP──▶ Experion R530 ──OPC UA──▶ ExperionCrawler ──▶ PostgreSQL + +After: +HC900 ──Modbus TCP──▶ C++ Gateway ──gRPC──▶ HC900Crawler ──▶ PostgreSQL +``` + +## 2. C++ 게이트웨이 (Modbus TCP → gRPC) + +### 설계 원칙 +- **단순, 고효율, 경량** (예상 RSS 5~8 MB) +- **Full poll 1초 주기** — 모든 레지스터 읽어서 캐시 +- **Scattered read는 안 함** — 어차피 Modbus는 batch가 빠름 + +### 아키텍처 + +``` +┌─────────────────────────────────────────────┐ +│ C++ Gateway │ +│ ┌──────────┐ ┌──────────┐ ┌────────────┐ │ +│ │ Poller │─▶│ Cache │◀─│ gRPC Server│ │ +│ │ (1s 주기) │ │ (47KB) │ │ │ │ +│ │ 32+3+13 │ │ │ │ ReadTags │ │ +│ │ batch │ │ │ │ WriteTag │ │ +│ │ reads │ │ │ │ ListTags │ │ +│ └────┬──────┘ └──────────┘ └─────┬──────┘ │ +│ │ │ │ +│ ▼ ▼ │ +│ ┌─────────────────────────────────────────┐ │ +│ │ industrial-comm (libcomm_core) │ │ +│ │ ModbusTCP → HC900 @ 192.168.0.240 │ │ +│ └─────────────────────────────────────────┘ │ +└─────────────────────────────────────────────┘ +``` + +### 폴링 전략 +- `read_holding_registers(addr, count=120)` batch +- Loop 1~24: 32 reads (120 regs each) +- Loop 25~32: 32 reads (120 regs each) +- Variable area: 3 reads (0x18C0~, 336 regs) +- Signal area: 13 reads (0x2000~, 1,508 regs) +- **Total: 48 batch reads → ~117 ms full poll** +- 1초 간격 poll, 캐시 갱신 + +### gRPC Service (`proto/modbus_gateway.proto`) + +```protobuf +service ModbusGateway { + rpc ReadTags(ReadTagsRequest) returns (ReadTagsResponse); // 캐시 응답 + rpc WriteTag(WriteTagRequest) returns (WriteTagResponse); // Modbus write + rpc StreamTags(StreamTagsRequest) returns (stream TagValue); // 실시간 구독 + rpc ListTags(ListTagsRequest) returns (ListTagsResponse); // 메타정보 + rpc HealthCheck(HealthCheckRequest) returns (HealthCheckResponse); +} +``` + +- `ReadTags`: 캐시에서 즉시 응답 (sub-millisecond) +- `WriteTag`: Modbus FC16 직접 write 후 캐시 갱신 +- `StreamTags`: 1초 poll 주기에 맞춰 push + +### 레지스터 맵 로딩 +- 시작 시 `register-map.json` 파일 읽음 (174 KB) +- 또는 `hc900_map_master` DB 테이블에서 읽음 + +## 3. hc900_map_master (DB 기반 태그 카탈로그) + +### 개념 +- `node_map_master`와 동일한 패턴 +- HC Designer CSV 3종을 DB에 로드 +- 태그 prefix 기반 분류 (기존 PidPrefixRule 재활용) + +### DDL + +```sql +CREATE TABLE hc900_map_master ( + id SERIAL PRIMARY KEY, + tag_name TEXT NOT NULL, -- 레지스터 맵 태그명 (e.g. 'FICQ3101.PV', 'FIQ6101') + base_tag TEXT NOT NULL, -- 베이스 태그 (e.g. 'FICQ3101', 'FIQ6101') + attribute TEXT, -- 속성 (e.g. 'PV', 'SP', 'QV') — NULL이면 베이스 태그 자체 + addr INTEGER NOT NULL, -- Modbus 주소 + count INTEGER NOT NULL, -- 레지스터 수 (1 or 2) + type TEXT NOT NULL, -- 'float32' or 'uint16' + access TEXT NOT NULL, -- 'R' or 'RW' + description TEXT, + eu TEXT, + category TEXT, -- PidPrefixRule 기반 분류 ('instrument', 'power_equipment', ...) + tag_class TEXT, -- 'field' or 'system' + tag_dcs BOOLEAN, -- DCS function block 여부 + source TEXT NOT NULL, -- 'loop', 'signal', 'variable' + group_name TEXT, -- PointBuilder 그룹 ('Controller1', 'Custom', ...) + created_at TIMESTAMPTZ DEFAULT NOW() +); + +CREATE INDEX idx_hc900_map_base ON hc900_map_master(base_tag); +CREATE INDEX idx_hc900_map_addr ON hc900_map_master(addr); +CREATE INDEX idx_hc900_map_group ON hc900_map_master(group_name); +``` + +### 데이터 출처 + +| CSV 파일 | source | 건수 | 범위 | +|---|---|---|---| +| SummaryFunctionBlockReport.csv | `loop` | 32 loops × 25 params = 800 | 0x0040~0x7FFF | +| SignalTags.csv | `signal` | 530 | 0x2000~0x25E4 | +| Variables.csv | `variable` | 155 | 0x18C0~0x1A10 | + +### Prefix Rules (PidPrefixRule 활용) + +| Prefix | Category | 예시 | +|---|---|---| +| FIC, FICA, FICQ | instrument, tag_dcs=true | FICQ3101 (PID Loop) | +| FIT, FIQ, FT | instrument, tag_dcs=false | FIT6101, FIQ6101 (Signal Tag) | +| TI, TIC, TICA | instrument, tag_dcs=true | TICA6111A, TICA3202A | +| LI, LIC, LICA | instrument | LICA6213, LICA5113 | +| PI, PIC, PICA | instrument | PICA6111 | +| XV | instrument | XV3208B_REM | +| VP, P- | power_equipment | VP8117_HS, P-3101B_RUN | + +### PointBuilder-like Selection + +웹 UI에서 `hc900_map_master`를 대상으로: + +| Group | 필터 조건 | 용도 | +|---|---|---| +| Controller1 | prefix=FIC/TIC/PIC/LIC, attribute=PV/SP/OP | 주요 PID 값 | +| Custom | user-defined | QV, TRIP, ESD, HS 등 | + +DB 조회 예시: +```sql +-- FICQ-6101 계열 모든 태그 +SELECT * FROM hc900_map_master +WHERE base_tag IN ( + SELECT base_tag FROM hc900_map_master + WHERE base_tag ILIKE 'ficq6101' +); +``` + +## 4. OPC UA 이름 매핑 (핵심 난제) + +### 문제 +- DB (Experion OPC UA): `ficq-6101.pv`, `ficq-6101.qv` (lowercase, dash, dot attribute) +- HC Designer CSV: `FICQ3101`, `FIQ6101` (uppercase, no dash, no prefix-dot suffix) +- R530이 중간에서 이름 변환 + 서브 속성 구성하며, **이 매핑 정보는 R530 설정에만 존재** + +``` +OPC UA (DB) HC Designer (CSV) Modbus +──────────────────── ────────────────── ─────── +ficq-6101.pv FICA6101 (Loop #11) 0x0A40 ← prefix 다름 (FICQ vs FICA) +ficq-6101.qv.value FIQ6101 (Signal Tag) 0x2006 ← 사용자 정의 규칙 (FIQ=QV) +ficq-6101.sp FICA6101 (Loop #11) 0x0A44 +ficq-3101.pv FICQ3101 (Loop #1) 0x0040 +ficq-3101.qv.value FIQ3101 (Signal Tag) 0x2164 +``` + +prefix 예: `FICQ`/`FICA`/`FIT`/`FIQ` 모두 숫자부 `6101` 공유 → **prefix는 접근 방식(loop, PV, QV)을 나타내고, 숫자부가 실제 연결고리** + +### 매핑 전략: 숫자부 조인 + prefix 검증 + +`realtime_table`의 OPC UA 이름과 `hc900_map_master`의 HC Designer 이름을 **숫자부(6101) 기준으로 매칭**하고, prefix rules로 검증: + +```sql +-- Phase A: 후보 추출 (숫자부 기반 매칭) +WITH rt_base AS ( + SELECT DISTINCT + split_part(tagname, '.', 1) AS opcua_tag, + tagname, + substring(tagname FROM '(\d+)') AS tag_number + FROM realtime_table +), +hc_base AS ( + SELECT + tag_name, + base_tag, + addr, + substring(tag_name FROM '(\d+)') AS tag_number + FROM hc900_map_master +) +SELECT + r.opcua_tag, + r.tagname AS opcua_name, + h.tag_name AS hc_name, + h.addr +FROM rt_base r +JOIN hc_base h ON r.tag_number = h.tag_number + AND r.opcua_tag ~* h.base_tag -- base_tag regex 매칭 +ORDER BY r.opcua_tag, h.addr; +``` + +### 결과물: opcua_aliases + +```sql +ALTER TABLE hc900_map_master ADD COLUMN opcua_aliases TEXT[]; + +-- 예시 (자동 생성 후 사용자 검증 필요): +-- FIQ6101 → {"ficq-6101.qv", "ficq-6101.qv.value"} +-- FICQ3101.PV → {"ficq-3101.pv"} +-- FICA6101-WSP → {"ficq-6101.wsp"} +``` + +### 사용자 검증 플로우 + +``` +CSV → hc900_map_master realtime_table (OPC UA) + │ │ + └──── SQL 숫자부 조인 ───┘ + │ + alias 후보 목록 + │ + 사용자 검증 (Y/N) + │ + opcua_aliases 확정 + │ + C# 앱이 gRPC 호출 시 + aliases로 주소 조회 +``` + +C# 앱에서 gRPC 요청 시: +```csharp +// C# 앱은 DB 이름(ficq-6101.pv)으로 요청 +// 게이트웨이는 aliases 매칭으로 레지스터 주소 조회 +var resp = client.ReadTags(new[] { "ficq-6101.pv", "ficq-6101.qv" }); +``` + +## 5. 구현 단계 + +### Phase 1: C++ 게이트웨이 (완성) +- [ ] `industrial-comm`에 gRPC 서버 추가 +- [ ] `register-map.json` 로더 +- [ ] Poller (full poll 1초) +- [ ] gRPC 서비스 구현 (ReadTags, WriteTag, ListTags, HealthCheck) +- [ ] CMakeLists.txt에 gRPC/Protobuf 종속성 추가 +- [ ] systemd unit file + +### Phase 2: DB 및 백엔드 +- [ ] `hc900_map_master` 테이블 생성 SQL +- [ ] `build_hc900_map.py` CSV → DB 로더 (Python) +- [ ] `scripts/build_register_map.py` → DB 직접 적재 +- [ ] Prefix Rules 추가 (FIQ, FIT, FICA 등) +- [ ] PointBuilder-like 웹 UI (기존 ExperionCrawler UI 확장) + +### Phase 3: C# HC900Crawler +- [ ] ExperionCrawler 포크 → gRPC Client 추가 +- [ ] 기존 OPC UA 계층 대체 (IExperionOpcClient → IModbusGatewayClient) +- [ ] Hc900RealtimeService (캐시 폴링 기반) +- [ ] Write 서비스 +- [ ] 기존 DB 스키마 재활용 (realtime_table, history_table, etc.) + +### Phase 4: OPC UA 이름 매핑 +- [ ] node_map_master 조회로 실제 OPC UA 이름-레지스터 관계 분석 +- [ ] opcua_aliases DB 구축 +- [ ] 매핑 검증 툴 + +## 6. 검증된 사실 + +| 항목 | 상태 | +|---|---| +| HC900 Modbus TCP 연결 | ✅ C70, port 502, IP=192.168.0.240 | +| Float 포맷 | ✅ FP_B (IEEE 754 big-endian) | +| Loop 주소 체계 | ✅ Loop #N = 0x40+(N-1)*0x100 (1~24), 0x7840+(N-25)*0x100 (25~32) | +| batch read 성능 | ✅ 120 regs = 2.4ms, full poll = 117ms | +| C70 최대 연결 | ✅ 10개 | +| R530 사용 연결 | ✅ 1개 (Modbus TCP 채널) | +| 우리 사용 가능 | ✅ 9개, 실제론 1~2개면 충분 | +| Signal Tag FIQ6101 = QV | ✅ `ficq-6101.qv.value` = `FIQ6101` @ 0x2006 | +| 사용자 정의 네이밍 | ✅ FIT=PV, FIQ=QV 등 prefix 기반 규칙 존재 | + +## 7. 오픈 이슈 + +- [ ] **OPC UA ↔ Modbus 주소 매칭 (최대 난제)** — 숫자부 조인으로 후보 추출 후 사용자 검증 필요 +- [ ] HC900 Custom Map/User Defined 영역 태그 확인 (현재는 Fixed Map만 커버) +- [ ] Write 시 Modbus FC16 테스트 필요 +- [ ] 캐시 무효화 전략 (C#에서 Write 후 gateway cache 갱신) +- [ ] StreamTags 구현 방식 (1초 poll마다 변경분 push vs 전부 push) diff --git a/docs/register-map.json b/docs/register-map.json new file mode 100644 index 0000000..9c2a29c --- /dev/null +++ b/docs/register-map.json @@ -0,0 +1,2633 @@ +{ + "controller": "C3", + "report_generated": "2026-06-03", + "float_format": "FP_B", + "notes": "Register map built from Sinam_Tag_all.xlsx SourceAddress columns (C3 only). Tags are mapped from Experion indexed addresses to fixed Modbus addresses.", + "register_count": 328, + "registers": [ + { + "tag": "FICQ-8101", + "addr": 70, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #1 OP" + }, + { + "tag": "FICQ-8101.OP", + "addr": 254, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #1 LOOPSTAT" + }, + { + "tag": "LICA-5113", + "addr": 326, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #2 OPWORK" + }, + { + "tag": "LICA-5113.OP", + "addr": 510, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #2 LOOPSTAT" + }, + { + "tag": "FICQ-8113", + "addr": 582, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #3 OP" + }, + { + "tag": "FICQ-8113.OP", + "addr": 766, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #3 LOOPSTAT" + }, + { + "tag": "TICA-8111A", + "addr": 838, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #4 OP" + }, + { + "tag": "TICA-8111A.OP", + "addr": 1022, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #4 LOOPSTAT" + }, + { + "tag": "TICA-6111A", + "addr": 1094, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #5 OPWORK" + }, + { + "tag": "TICA-6111A.OP", + "addr": 1278, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #5 LOOPSTAT" + }, + { + "tag": "PICA-8111A", + "addr": 1350, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #6 OP" + }, + { + "tag": "PICA-8111A.OP", + "addr": 1534, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #6 LOOPSTAT" + }, + { + "tag": "FICQ-8114", + "addr": 1606, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #7 OP" + }, + { + "tag": "FICQ-8114.OP", + "addr": 1790, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #7 LOOPSTAT" + }, + { + "tag": "FICQ-8116", + "addr": 1862, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #8 OP" + }, + { + "tag": "FICQ-8116.OP", + "addr": 2046, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #8 LOOPSTAT" + }, + { + "tag": "LICA-8113", + "addr": 2118, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #9 OP" + }, + { + "tag": "LICA-8113.OP", + "addr": 2302, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #9 LOOPSTAT" + }, + { + "tag": "PICA-6111", + "addr": 2374, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #10 OPWORK" + }, + { + "tag": "PICA-6111.OP", + "addr": 2558, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #10 LOOPSTAT" + }, + { + "tag": "FICQ-6101", + "addr": 2630, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #11 OPWORK" + }, + { + "tag": "FICQ-6101.OP", + "addr": 2814, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #11 LOOPSTAT" + }, + { + "tag": "FICQ-6113", + "addr": 2886, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #12 OPWORK" + }, + { + "tag": "FICQ-6113.OP", + "addr": 3070, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #12 LOOPSTAT" + }, + { + "tag": "FICQ-6114", + "addr": 3142, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #13 OPWORK" + }, + { + "tag": "FICQ-6114.OP", + "addr": 3326, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #13 LOOPSTAT" + }, + { + "tag": "FICQ-6116", + "addr": 3398, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #14 OPWORK" + }, + { + "tag": "FICQ-6116.OP", + "addr": 3582, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #14 LOOPSTAT" + }, + { + "tag": "FICQ-6118", + "addr": 3654, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #15 OPWORK" + }, + { + "tag": "FICQ-6118.OP", + "addr": 3838, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #15 LOOPSTAT" + }, + { + "tag": "LICA-6128", + "addr": 3910, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #16 OPWORK" + }, + { + "tag": "LICA-6128.OP", + "addr": 4094, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #16 LOOPSTAT" + }, + { + "tag": "TICA-6211A", + "addr": 4166, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #17 OPWORK" + }, + { + "tag": "TICA-6211A.OP", + "addr": 4350, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #17 LOOPSTAT" + }, + { + "tag": "PICA-6211", + "addr": 4422, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #18 OPWORK" + }, + { + "tag": "PICA-6211.OP", + "addr": 4606, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #18 LOOPSTAT" + }, + { + "tag": "FICQ-6201", + "addr": 4678, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #19 OPWORK" + }, + { + "tag": "FICQ-6201.OP", + "addr": 4862, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #19 LOOPSTAT" + }, + { + "tag": "FICQ-6213", + "addr": 4934, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #20 OPWORK" + }, + { + "tag": "FICQ-6213.OP", + "addr": 5118, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #20 LOOPSTAT" + }, + { + "tag": "FICQ-6214", + "addr": 5190, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #21 OPWORK" + }, + { + "tag": "FICQ-6214.OP", + "addr": 5374, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #21 LOOPSTAT" + }, + { + "tag": "FICQ-6216", + "addr": 5446, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #22 OPWORK" + }, + { + "tag": "FICQ-6216.OP", + "addr": 5630, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #22 LOOPSTAT" + }, + { + "tag": "FICQ-6218", + "addr": 5702, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #23 OPWORK" + }, + { + "tag": "FICQ-6218.OP", + "addr": 5886, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #23 LOOPSTAT" + }, + { + "tag": "TICA-5111A", + "addr": 5958, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOP #24 OPWORK" + }, + { + "tag": "TICA-5111A.OP", + "addr": 6142, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOP #24 LOOPSTAT" + }, + { + "tag": "VP-8117.MD", + "addr": 6336, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #1 (VP8117_HS)" + }, + { + "tag": "CH-8601A.MD", + "addr": 6344, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #5 (CH8601A_HS)" + }, + { + "tag": "VP-3204_HS", + "addr": 6352, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #9 (VP3204_HS)" + }, + { + "tag": "VP-3204.MD", + "addr": 6352, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #9 (VP3204_HS)" + }, + { + "tag": "BL-3208B.MD", + "addr": 6356, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #11 (BL3208B_HS)" + }, + { + "tag": "P-3205A.MD", + "addr": 6358, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #12 (P3205_HS)" + }, + { + "tag": "TI-8117RST", + "addr": 6360, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #13 (TI8117RST)" + }, + { + "tag": "P-3208B.MD", + "addr": 6362, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #14 (P3208B_HS)" + }, + { + "tag": "P-3208A.MD", + "addr": 6364, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #15 (P3208A_HS)" + }, + { + "tag": "XV-6123.MD", + "addr": 6368, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #17 (XV6123_HS)" + }, + { + "tag": "XV-6124.MD", + "addr": 6370, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #18 (XV6124_HS)" + }, + { + "tag": "XV-6223.MD", + "addr": 6372, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #19 (XV6223_HS)" + }, + { + "tag": "XV-6224.MD", + "addr": 6376, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #21 (XV6224_HS)" + }, + { + "tag": "P-6114.MD", + "addr": 6380, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #23 (P6114_HS)" + }, + { + "tag": "LICA-5113-IL-RST", + "addr": 6394, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #30 (LICA5113-IL-RST)" + }, + { + "tag": "TICA-5111A-IL-RST", + "addr": 6396, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #31 (TICA5111A-IL-RST)" + }, + { + "tag": "PICA-5111-IL-RST", + "addr": 6398, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #32 (PICA5111-IL-RST)" + }, + { + "tag": "LICA-6113-IL-RST", + "addr": 6402, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #34 (LICA6113-IL-RST)" + }, + { + "tag": "TICA-6111A-IL-RST", + "addr": 6404, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #35 (TICA6111A-IL-RST)" + }, + { + "tag": "PICA-6111-IL-RST", + "addr": 6406, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #36 (PICA6111-IL-RST)" + }, + { + "tag": "LICA-6213-IL-RST", + "addr": 6410, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #38 (LICA6213-IL-RST)" + }, + { + "tag": "XV-3202.MD", + "addr": 6412, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #39 (XV3202_HS)" + }, + { + "tag": "XV-3202_HS", + "addr": 6412, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #39 (XV3202_HS)" + }, + { + "tag": "AG-3202.MD", + "addr": 6414, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #40 (AG3202_HS)" + }, + { + "tag": "P-6102.MD", + "addr": 6418, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #42 (P6102_HS)" + }, + { + "tag": "TICA-6211A-IL-RST", + "addr": 6420, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #43 (TICA6211-IL-RST)" + }, + { + "tag": "P-201_HS", + "addr": 6422, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #44 (P201_HS)" + }, + { + "tag": "PICA-6211-IL-RST", + "addr": 6426, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #46 (PICA6211-IL-RST)" + }, + { + "tag": "VP-6117.MD", + "addr": 6428, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #47 (VP6117_HS)" + }, + { + "tag": "AG-3208.MD", + "addr": 6430, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #48 (AG3208_HS)" + }, + { + "tag": "XV-3208C.MD", + "addr": 6432, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #49 (XV3208C_HS)" + }, + { + "tag": "XV-3208B.MD", + "addr": 6434, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #50 (XV3208B_HS)" + }, + { + "tag": "C-3203", + "addr": 6450, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #58 (FLT_SIM)" + }, + { + "tag": "C-3403", + "addr": 6452, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #59 (REM_LOCAL)" + }, + { + "tag": "C-5111", + "addr": 6454, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #60 (RUN_STOP)" + }, + { + "tag": "C-6111", + "addr": 6456, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #61 (HUNTING-RATIO)" + }, + { + "tag": "C-6211", + "addr": 6458, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #62 (VAR062)" + }, + { + "tag": "C-8111", + "addr": 6460, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #63 (VAR_63)" + }, + { + "tag": "TICA-8111A-IL-RST", + "addr": 6464, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #65 (VAR_65)" + }, + { + "tag": "FQ-3208_RESET", + "addr": 6470, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #68 (FQ3208_RESET)" + }, + { + "tag": "P-3101_START_SEL", + "addr": 6476, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #71 (P3101_START_SEL)" + }, + { + "tag": "P-6123.MD", + "addr": 6496, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #81 (P6123_HS)" + }, + { + "tag": "P-6128B.MD", + "addr": 6498, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #82 (P6128B_HS)" + }, + { + "tag": "P-6128A.MD", + "addr": 6500, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #83 (P6128A_HS)" + }, + { + "tag": "P-6218.MD", + "addr": 6502, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #84 (P6218_HS)" + }, + { + "tag": "P-6216.MD", + "addr": 6506, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #86 (P6216_HS)" + }, + { + "tag": "P-6214.MD", + "addr": 6508, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #87 (P6214_HS)" + }, + { + "tag": "MT_FEED_START", + "addr": 6524, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #95 (MT_FEED_START)" + }, + { + "tag": "HTR-01_CMD", + "addr": 6532, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #99 (HTR01_CMD)" + }, + { + "tag": "HTR-02_CMD", + "addr": 6542, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #104 (HTR02_CMD)" + }, + { + "tag": "HTR-04_CMD", + "addr": 6546, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #106 (HTR04_CMD)" + }, + { + "tag": "FQ-3401_RST", + "addr": 6548, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #107 (FQ3401_RST)" + }, + { + "tag": "XV-3402_HS", + "addr": 6550, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #108 (XV3402_HS)" + }, + { + "tag": "XV-3402_AUTO", + "addr": 6552, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #109 (XV3402_AUTO)" + }, + { + "tag": "FQ-3402_RST", + "addr": 6554, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #110 (FQ3402_RST)" + }, + { + "tag": "P-6223.MD", + "addr": 6558, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #112 (P6223_HS)" + }, + { + "tag": "VP-6217.MD", + "addr": 6560, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #113 (VP6217_HS)" + }, + { + "tag": "P-6116.MD", + "addr": 6562, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #114 (P6116_HS)" + }, + { + "tag": "P-203_HS", + "addr": 6564, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #115 (P203_HS)" + }, + { + "tag": "P-5118.MD", + "addr": 6566, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #116 (P5118_HS)" + }, + { + "tag": "P-5115.MD", + "addr": 6568, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #117 (P5115_HS)" + }, + { + "tag": "P-3401A.MD", + "addr": 6570, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #118 (P3401_HS)" + }, + { + "tag": "P-3401B.MD", + "addr": 6570, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #118 (P3401_HS)" + }, + { + "tag": "P-3402A.MD", + "addr": 6572, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #119 (P3402_HS)" + }, + { + "tag": "P-3402B.MD", + "addr": 6572, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #119 (P3402_HS)" + }, + { + "tag": "P-5114.MD", + "addr": 6574, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #120 (P5114_HS)" + }, + { + "tag": "P-5102.MD", + "addr": 6576, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #121 (P5101_HS)" + }, + { + "tag": "P-5101A.MD", + "addr": 6576, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #121 (P5101_HS)" + }, + { + "tag": "P-6118.MD", + "addr": 6578, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #122 (P6118_HS)" + }, + { + "tag": "VP-5117.MD", + "addr": 6580, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #123 (VP5117_HS)" + }, + { + "tag": "P-5116.MD", + "addr": 6584, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #125 (P5116_HS)" + }, + { + "tag": "CH-5601.MD", + "addr": 6586, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #126 (CH5601_HS)" + }, + { + "tag": "HTR-05_STATE.MD", + "addr": 6588, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #127 (FICA3102_OP)" + }, + { + "tag": "FICA-3102_OP", + "addr": 6588, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #127 (FICA3102_OP)" + }, + { + "tag": "HTR-06_STATE.MD", + "addr": 6590, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #128 (FIQ5101_RESET)" + }, + { + "tag": "HTR-07_STATE.MD", + "addr": 6592, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #129 (FIQ5113_RESET)" + }, + { + "tag": "HTR-08_STATE.MD", + "addr": 6594, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #130 (FIQ5114_RESET)" + }, + { + "tag": "P-6202.MD", + "addr": 6640, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #153 (P6202_HS)" + }, + { + "tag": "P-8601A.MD", + "addr": 6646, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #156 (P8601A_HS)" + }, + { + "tag": "P-8601B.MD", + "addr": 6648, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #157 (P8601B_HS)" + }, + { + "tag": "CH-8601B.MD", + "addr": 6650, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #158 (CH8601B_HS)" + }, + { + "tag": "P-8101.MD", + "addr": 6652, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #159 (P8101_HS)" + }, + { + "tag": "P-8114.MD", + "addr": 6654, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #160 (P8114_HS)" + }, + { + "tag": "P-8118.MD", + "addr": 6656, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #161 (P8118_HS)" + }, + { + "tag": "P-8116.MD", + "addr": 6658, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #162 (P8116_HS)" + }, + { + "tag": "PICA-8111A-IL-RST", + "addr": 7434, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #550 (VAR_550)" + }, + { + "tag": "LICA-8113-IL-RST", + "addr": 7436, + "count": 2, + "type": "float32", + "access": "RW", + "description": "Variable #551 (VAR_551)" + }, + { + "tag": "P-6120", + "addr": 8264, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #37 (P6120_RUN)" + }, + { + "tag": "P-6220", + "addr": 8272, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #41 (P6220_RUN)" + }, + { + "tag": "P-3101B_REM", + "addr": 8284, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #47 (P3101B_REM)" + }, + { + "tag": "P-3101B_RUN", + "addr": 8286, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #48 (P3101B_RUN)" + }, + { + "tag": "P-3101B_FLT", + "addr": 8288, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #49 (P3101B_FLT)" + }, + { + "tag": "P-2202_REM", + "addr": 8296, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #53 (P3102B_REM)" + }, + { + "tag": "P-2202_RUN", + "addr": 8298, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #54 (P3102B_RUN)" + }, + { + "tag": "P-2202_FLT", + "addr": 8300, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #55 (P3102B_FLT)" + }, + { + "tag": "P-6602A", + "addr": 8302, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #56 (P6601A_RUN)" + }, + { + "tag": "P-6602B", + "addr": 8304, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #57 (P6601B_RUN)" + }, + { + "tag": "P-6603A", + "addr": 8306, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #58 (CH6601A_RUN)" + }, + { + "tag": "P-6603B", + "addr": 8308, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #59 (CH6601B_RUN)" + }, + { + "tag": "P-3206B_RUN", + "addr": 8310, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #60 (P3206B_RUN)" + }, + { + "tag": "P-3206B_FLT", + "addr": 8312, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #61 (P3206B_FLT)" + }, + { + "tag": "P-3207A_REM", + "addr": 8314, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #62 (P3207A_REM)" + }, + { + "tag": "P-3207A_RUN", + "addr": 8316, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #63 (P3207A_RUN)" + }, + { + "tag": "P-3207A_FLT", + "addr": 8318, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #64 (P3207A_FLT)" + }, + { + "tag": "P-3207B_REM", + "addr": 8320, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #65 (P3207B_REM)" + }, + { + "tag": "P-3207B_RUN", + "addr": 8322, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #66 (P3207B_RUN)" + }, + { + "tag": "P-3207B_FLT", + "addr": 8324, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #67 (P3207B_FLT)" + }, + { + "tag": "XV-6120_OP", + "addr": 8328, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #69 (XV6120_OP)" + }, + { + "tag": "XV-6120_CL", + "addr": 8330, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #70 (XV6120_CL)" + }, + { + "tag": "XV-5320_OP", + "addr": 8336, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #73 (XV5320_OP)" + }, + { + "tag": "P-3205B_REM", + "addr": 8344, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #77 (P3205B_REM)" + }, + { + "tag": "P-3205B_RUN", + "addr": 8346, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #78 (P3205B_RUN)" + }, + { + "tag": "P-3205B_FLT", + "addr": 8348, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #79 (P3205B_FLT)" + }, + { + "tag": "XV-5320_CL", + "addr": 8380, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #95 (XV5320_CL)" + }, + { + "tag": "VP-3204_REM", + "addr": 8392, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #101 (VP3204_REM)" + }, + { + "tag": "VP-3204_RUN", + "addr": 8394, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #102 (VP3204_RUN)" + }, + { + "tag": "VP-3204_FLT", + "addr": 8396, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #103 (VP3204_FLT)" + }, + { + "tag": "XV-3210_REM", + "addr": 8428, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #119 (XV3210_REM)" + }, + { + "tag": "XV-3210_OP", + "addr": 8430, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #120 (XV3210_OP)" + }, + { + "tag": "XV-3210_CL", + "addr": 8432, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #121 (XV3210_CL)" + }, + { + "tag": "XV-3202_REM", + "addr": 8440, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #125 (XV3202_REM)" + }, + { + "tag": "XV-3202_OP", + "addr": 8442, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #126 (XV3202_OP)" + }, + { + "tag": "XV-3202_CL", + "addr": 8444, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #127 (XV3202_CL)" + }, + { + "tag": "XV-3208_REM", + "addr": 8446, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #128 (XV3208_REM)" + }, + { + "tag": "XV-3208_OP", + "addr": 8448, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #129 (XV3208_OP)" + }, + { + "tag": "XV-3208_CL", + "addr": 8450, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #130 (XV3208_CL)" + }, + { + "tag": "BL-3208A", + "addr": 8452, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #131 (BL3208A_RUN)" + }, + { + "tag": "BL-3208B", + "addr": 8456, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #133 (BL3208B_RUN)" + }, + { + "tag": "H3701_BNR_RUN", + "addr": 8464, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #137 (H3701_BNR_RUN)" + }, + { + "tag": "HT-3701_FLT", + "addr": 8466, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #138 (HT3701_FLT)" + }, + { + "tag": "P-3602A", + "addr": 8468, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #139 (P3602A_RUN)" + }, + { + "tag": "P-3602B", + "addr": 8470, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #140 (P3602B_RUN)" + }, + { + "tag": "C3601_RUN", + "addr": 8472, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #141 (C3601_RUN)" + }, + { + "tag": "C3601_TOT_ALARM", + "addr": 8474, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #142 (C3601_TOT_ALARM)" + }, + { + "tag": "HT-3701_STANDBY", + "addr": 8478, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #144 (HT3701_STANDBY)" + }, + { + "tag": "HTR-01_REM", + "addr": 8480, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #145 (HTR01_REM)" + }, + { + "tag": "HTR-01_STATE", + "addr": 8482, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #146 (HTR01_STATE)" + }, + { + "tag": "HTR-02_REM", + "addr": 8484, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #147 (HTR02_REM)" + }, + { + "tag": "HTR-02_STATE", + "addr": 8486, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #148 (HTR02_STATE)" + }, + { + "tag": "HTR-04_REM", + "addr": 8488, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #149 (HTR04_REM)" + }, + { + "tag": "HTR-04_STATE", + "addr": 8490, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #150 (HTR04_STATE)" + }, + { + "tag": "P-3401_A_SEL", + "addr": 8492, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #151 (P3401_A_SEL)" + }, + { + "tag": "P-3401_B_SEL", + "addr": 8494, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #152 (P3401_B_SEL)" + }, + { + "tag": "LI-6211_LL", + "addr": 8496, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #153 (LT6211_LL)" + }, + { + "tag": "XV-3402_REM", + "addr": 8512, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #161 (XV3402_REM)" + }, + { + "tag": "XV-3402_OP", + "addr": 8514, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #162 (XV3402_OP)" + }, + { + "tag": "XV-3402_CL", + "addr": 8516, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #163 (XV3402_CL)" + }, + { + "tag": "P-3401_FLT", + "addr": 8522, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #166 (P3401_FLT)" + }, + { + "tag": "P-3402_A_SEL", + "addr": 8530, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #170 (P3402_A_SEL)" + }, + { + "tag": "P-3402_B_SEL", + "addr": 8532, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #171 (P3402_B_SEL)" + }, + { + "tag": "LI-3203_IL", + "addr": 8534, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #172 (LT3203_IL)" + }, + { + "tag": "LI-3208_IL", + "addr": 8536, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #173 (LT3208_IL)" + }, + { + "tag": "LI-3207_IL", + "addr": 8540, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #175 (LT3207_IL)" + }, + { + "tag": "LI-6128_LL", + "addr": 8542, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #176 (LT6128_LL)" + }, + { + "tag": "LI-3101_IL", + "addr": 8544, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #177 (LT3101_IL)" + }, + { + "tag": "P-8118ESD", + "addr": 8550, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #180 (P8118ESD)" + }, + { + "tag": "P-8114ESD", + "addr": 8552, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #181 (P8114ESD)" + }, + { + "tag": "P-3101A_AUTO_ON", + "addr": 8554, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #182 (P3101A_AUTO_ON)" + }, + { + "tag": "P-3101B_AUTO_ON", + "addr": 8558, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #184 (P3101B_AUTO_ON)" + }, + { + "tag": "P-6102", + "addr": 8588, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #199 (P6102_STATE)" + }, + { + "tag": "P-6114", + "addr": 8596, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #203 (P6114_STATE)" + }, + { + "tag": "P-6118", + "addr": 8600, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #205 (P6118_STATE)" + }, + { + "tag": "P-6116", + "addr": 8602, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #206 (P6116_STATE)" + }, + { + "tag": "VP-8117", + "addr": 8604, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #207 (VP8117A_STATE)" + }, + { + "tag": "P-6123", + "addr": 8606, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #208 (P6123_STATE)" + }, + { + "tag": "P-8601A", + "addr": 8670, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #240 (P8601A_STATE)" + }, + { + "tag": "VP-6117", + "addr": 8744, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #277 (VP6117_STATE)" + }, + { + "tag": "HTR-58RUN", + "addr": 8786, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #298 (HTR58RUN)" + }, + { + "tag": "P-6128A", + "addr": 8792, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #301 (P6128A__STATE)" + }, + { + "tag": "P-6128B", + "addr": 8794, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #302 (P6128B_STATE)" + }, + { + "tag": "P-6202", + "addr": 8796, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #303 (P6202_STATE)" + }, + { + "tag": "P-6214", + "addr": 8852, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #331 (P6214_STATE)" + }, + { + "tag": "P-6218", + "addr": 8854, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #332 (P6218_STATE)" + }, + { + "tag": "P-6216", + "addr": 8856, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #333 (P6216_STATE)" + }, + { + "tag": "P-2203_REM", + "addr": 8900, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #355 (P2203_REM)" + }, + { + "tag": "P-2203_RUN", + "addr": 8902, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #356 (P2203_RUN)" + }, + { + "tag": "P-2203_FLT", + "addr": 8904, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #357 (P2203_FLT)" + }, + { + "tag": "P-8601B", + "addr": 8906, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #358 (P8601B_STATE)" + }, + { + "tag": "P-6223", + "addr": 8908, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #359 (P6223_STATE)" + }, + { + "tag": "VP-6217", + "addr": 8910, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #360 (VP6217_STATE)" + }, + { + "tag": "P-5102", + "addr": 8924, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #367 (P5101_STATE)" + }, + { + "tag": "P-5101A", + "addr": 8924, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #367 (P5101_STATE)" + }, + { + "tag": "P-5114", + "addr": 8926, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #368 (P5114_STATE)" + }, + { + "tag": "P-5118", + "addr": 8928, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #369 (P5118_STATE)" + }, + { + "tag": "P-5115", + "addr": 8930, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #370 (P5115_STATE)" + }, + { + "tag": "VP-5117", + "addr": 8934, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #372 (VP5117_STATE)" + }, + { + "tag": "VP-3204", + "addr": 8934, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #372 (VP5117_STATE)" + }, + { + "tag": "CH-5601", + "addr": 8936, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #373 (CH5601_STATE)" + }, + { + "tag": "HTR-05_STATE", + "addr": 8938, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #374 (HTR05_STATE)" + }, + { + "tag": "HTR-06_STATE", + "addr": 8940, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #375 (HTR06_STATE)" + }, + { + "tag": "HTR-07_STATE", + "addr": 8942, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #376 (HTR07_STATE)" + }, + { + "tag": "HTR-08_STATE", + "addr": 8944, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #377 (HTR08_STATE)" + }, + { + "tag": "XV-6120_STATE", + "addr": 8946, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #378 (XV6120_STATE)" + }, + { + "tag": "XV-6220", + "addr": 8948, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #379 (XV6220_STATE)" + }, + { + "tag": "XV-5320", + "addr": 8950, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #380 (XV5320_STATE)" + }, + { + "tag": "XV-5320_STATE", + "addr": 8950, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #380 (XV5320_STATE)" + }, + { + "tag": "P-5116", + "addr": 8952, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #381 (P5116_STATE)" + }, + { + "tag": "BL-6100", + "addr": 8962, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #386 (BL6100)" + }, + { + "tag": "HTR-05_REM", + "addr": 8984, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #397 (HTR05_REM)" + }, + { + "tag": "HTR-05_RUN", + "addr": 8986, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #398 (HTR05_RUN)" + }, + { + "tag": "HTR-06_REM", + "addr": 8988, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #399 (HTR06_REM)" + }, + { + "tag": "HTR-06_RUN", + "addr": 8990, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #400 (HTR06_RUN)" + }, + { + "tag": "HTR-07_REM", + "addr": 8992, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #401 (HTR07_REM)" + }, + { + "tag": "HTR-07_RUN", + "addr": 8994, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #402 (HTR07_RUN)" + }, + { + "tag": "HTR-08_REM", + "addr": 8996, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #403 (HTR08_REM)" + }, + { + "tag": "HTR-08_RUN", + "addr": 8998, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #404 (HTR08_RUN)" + }, + { + "tag": "P-5320", + "addr": 9010, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #410 (P5320_RUN)" + }, + { + "tag": "CH-8601B", + "addr": 9098, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #454 (CH8601B_STATE)" + }, + { + "tag": "CH-8601A", + "addr": 9100, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #455 (CH8601A_STATE)" + }, + { + "tag": "P-8114", + "addr": 9102, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #456 (P8114_STATE)" + }, + { + "tag": "P-8118", + "addr": 9104, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #457 (P8118_STATE)" + }, + { + "tag": "P-8101", + "addr": 9106, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #458 (P8101_STATE)" + }, + { + "tag": "P-8116", + "addr": 9108, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #459 (P8116_STATE)" + }, + { + "tag": "TICA-5111A-TRIP", + "addr": 9132, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #471 (TICA5111A-TRIP)" + }, + { + "tag": "PICA-5111-TRIP", + "addr": 9134, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #472 (PICA5111-TRIP)" + }, + { + "tag": "LICA-5113-LO-IL", + "addr": 9138, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #474 (LICA5113-LO-IL)" + }, + { + "tag": "LIC5113-TRIP", + "addr": 9140, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #475 (LIC5113-TRIP)" + }, + { + "tag": "LICA-5113-TRIP", + "addr": 9140, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #475 (LIC5113-TRIP)" + }, + { + "tag": "TICA-5111A-HI-IL", + "addr": 9148, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #479 (TICA5111A-HI-IL)" + }, + { + "tag": "PICA-5111-LO-IL", + "addr": 9152, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #481 (PICA5111-LO-IL)" + }, + { + "tag": "TICA-6111A-TRIP", + "addr": 9154, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #482 (TICA6111A-TRIP)" + }, + { + "tag": "PICA-6111-TRIP", + "addr": 9156, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #483 (PICA6111-TRIP)" + }, + { + "tag": "LICA-6113-LO-IL", + "addr": 9160, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #485 (LICA6113-LO-IL)" + }, + { + "tag": "LICA-6113-TRIP", + "addr": 9162, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #486 (LICA6113-TRIP)" + }, + { + "tag": "TICA-6111A-HI-IL", + "addr": 9170, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #490 (TICA6111A-HI-IL)" + }, + { + "tag": "PICA-6111-LO-IL", + "addr": 9174, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #492 (PICA6111-LO-IL)" + }, + { + "tag": "TICA-6211A-TRIP", + "addr": 9176, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #493 (TICA6211-TRIP)" + }, + { + "tag": "PICA-6211-TRIP", + "addr": 9178, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #494 (PICA6211-TRIP)" + }, + { + "tag": "LICA-6213-LO-IL", + "addr": 9182, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #496 (LICA6213-LO-IL)" + }, + { + "tag": "LICA-6213-TRIP", + "addr": 9184, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #497 (LICA6213-TRIP)" + }, + { + "tag": "TICA-6211A-HI-IL", + "addr": 9192, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #501 (TICA6211-HI-IL)" + }, + { + "tag": "P-3101", + "addr": 9204, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #507 (P-3101)" + }, + { + "tag": "S3P1_DC24_LEFT", + "addr": 9214, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #512 (GEN-BIAS)" + }, + { + "tag": "S3P1_DC24_RIGHT", + "addr": 9216, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #513 (TICA6111A-WSP)" + }, + { + "tag": "P-3401A", + "addr": 9220, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #515 (FICA6101-WSP)" + }, + { + "tag": "P-3401B", + "addr": 9222, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #516 (FICA6113-WSP)" + }, + { + "tag": "P-3402A", + "addr": 9224, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #517 (LICA6113-WSP)" + }, + { + "tag": "P-3402B", + "addr": 9226, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #518 (FICA6114-WSP)" + }, + { + "tag": "P-3208A", + "addr": 9230, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #520 (FICA6118-WSP)" + }, + { + "tag": "P-3208B", + "addr": 9232, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #521 (TE-6111A-SIM)" + }, + { + "tag": "XV-6223", + "addr": 9238, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #524 (FT-6113-SIM)" + }, + { + "tag": "XV-6224", + "addr": 9240, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #525 (LT-6113-SIM)" + }, + { + "tag": "XV-3202", + "addr": 9242, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #526 (FT-6114-SIM)" + }, + { + "tag": "XV-3208", + "addr": 9242, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #526 (FT-6114-SIM)" + }, + { + "tag": "P-3701A", + "addr": 9244, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #527 (FT-6116-SIM)" + }, + { + "tag": "P-3701B", + "addr": 9246, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #528 (FT-6118-SIM)" + }, + { + "tag": "XV-6123", + "addr": 9248, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #529 (XV-6123)" + }, + { + "tag": "AG-3202", + "addr": 9248, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #529 (XV-6123)" + }, + { + "tag": "XV-6124", + "addr": 9250, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #530 (XV-6124)" + }, + { + "tag": "AG-3208", + "addr": 9250, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #530 (XV-6124)" + }, + { + "tag": "XV-3208B", + "addr": 9254, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #532 (SIG_TAG_532)" + }, + { + "tag": "XV-3208C", + "addr": 9256, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #533 (SIG_TAG_533)" + }, + { + "tag": "XV-3210", + "addr": 9258, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #534 (SIG_TAG_534)" + }, + { + "tag": "XV-3402", + "addr": 9260, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #535 (SIG_TAG_535)" + }, + { + "tag": "P-6101", + "addr": 9274, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #542 (SIG_TAG_542)" + }, + { + "tag": "P-6201", + "addr": 9276, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #543 (SIG_TAG_543)" + }, + { + "tag": "P-3205A", + "addr": 9278, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #544 (SIG_TAG_544)" + }, + { + "tag": "P-3205B", + "addr": 9280, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #545 (SIG_TAG_545)" + }, + { + "tag": "PICA-8111-LO-IL", + "addr": 9282, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #546 (SIG_TAG_546)" + }, + { + "tag": "LICA-8113-LO-IL", + "addr": 9286, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #548 (SIG_TAG_548)" + }, + { + "tag": "TICA-8111A-TRIP", + "addr": 9288, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #549 (SIG_TAG_549)" + }, + { + "tag": "PICA-8111A-TRIP", + "addr": 9290, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #550 (SIG_TAG_550)" + }, + { + "tag": "LICA-8113-TRIP", + "addr": 9292, + "count": 2, + "type": "float32", + "access": "R", + "description": "Signal Tag #551 (SIG_TAG_551)" + }, + { + "tag": "PICA-5111", + "addr": 30790, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOPX #25 OPWORK" + }, + { + "tag": "FICQ-8118", + "addr": 30878, + "count": 1, + "type": "uint16", + "access": "R", + "description": "Raw addr 0x789E" + }, + { + "tag": "FICQ-8118.OP", + "addr": 30890, + "count": 1, + "type": "uint16", + "access": "R", + "description": "Raw addr 0x78AA" + }, + { + "tag": "PICA-5111.OP", + "addr": 30974, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOPX #25 LOOPSTAT" + }, + { + "tag": "FICQ-5101", + "addr": 31046, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOPX #26 OPWORK" + }, + { + "tag": "FICQ-5101.OP", + "addr": 31230, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOPX #26 LOOPSTAT" + }, + { + "tag": "FICQ-5113", + "addr": 31302, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOPX #27 OPWORK" + }, + { + "tag": "FICQ-5113.OP", + "addr": 31486, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOPX #27 LOOPSTAT" + }, + { + "tag": "FICQ-5114", + "addr": 31558, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOPX #28 OPWORK" + }, + { + "tag": "FICQ-5114.OP", + "addr": 31742, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOPX #28 LOOPSTAT" + }, + { + "tag": "FICQ-5116", + "addr": 31814, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOPX #29 OPWORK" + }, + { + "tag": "FICQ-5116.OP", + "addr": 31998, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOPX #29 LOOPSTAT" + }, + { + "tag": "FICQ-5118", + "addr": 32070, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOPX #30 OPWORK" + }, + { + "tag": "FICQ-5118.OP", + "addr": 32254, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOPX #30 LOOPSTAT" + }, + { + "tag": "LICA-6113", + "addr": 32326, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOPX #31 OPWORK" + }, + { + "tag": "LICA-6113.OP", + "addr": 32510, + "count": 1, + "type": "uint16", + "access": "R", + "description": "LOOPX #31 LOOPSTAT" + }, + { + "tag": "LICA-6213", + "addr": 32582, + "count": 2, + "type": "float32", + "access": "R", + "description": "LOOPX #32 OPWORK" + } + ] +} \ No newline at end of file diff --git a/docs/컨트롤러별-태그매핑-규칙.md b/docs/컨트롤러별-태그매핑-규칙.md new file mode 100644 index 0000000..54df27b --- /dev/null +++ b/docs/컨트롤러별-태그매핑-규칙.md @@ -0,0 +1,3 @@ + + +build_register_map_from_sinam.py \ No newline at end of file diff --git a/docs/프로그램-실행방법.md b/docs/프로그램-실행방법.md new file mode 100644 index 0000000..63bad6f --- /dev/null +++ b/docs/프로그램-실행방법.md @@ -0,0 +1,82 @@ + 방법 1: 수동 실행 스크립트 + +● Write(~/projects/hc900_ax/start.sh) + ⎿  Wrote 45 lines to ../../../start.sh + 1 #!/bin/bash + 2 # HC900Crawler 시작 스크립트 + 3 # 사용: ./start.sh [--background] + 4 + 5 PROJ=/home/windpacer/projects/hc900_ax + 6 LOG=/tmp/hc900_crawler.log + 7 + 8 # Docker 컨테이너 확인 + 9 echo "[1/3] Docker 컨테이너 확인..." + 10 for NAME in iiot-timescaledb qdrant-index; do + … +35 lines (ctrl+o to expand) + +● Bash(chmod +x /home/windpacer/projects/hc900_ax/start.sh + echo "완료") + ⎿  완료 + ⎿  Allowed by auto mode classifier + +● 방법 2: systemd 자동 시작 (부팅 시 자동) + +● Write(~/projects/hc900_ax/hc900crawler.service) + ⎿  Wrote 26 lines to ../../../hc900crawler.service + 1 [Unit] + 2 Description=HC900 Crawler - Modbus to gRPC Web Service + 3 After=network-online.target docker.service + 4 Wants=network-online.target + 5 + 6 [Service] + 7 Type=simple + 8 User=windpacer + 9 WorkingDirectory=/home/windpacer/projects/hc900_ax/src/Hc900Crawler + … +16 lines (ctrl+o to expand) + +● --- + 사용 방법 요약 + + 수동 실행 (리부팅 후) + + # 포그라운드 (터미널 닫으면 종료) + cd /home/windpacer/projects/hc900_ax + ./start.sh + + # 백그라운드 (터미널 닫아도 유지) + ./start.sh --background + + # 상태 확인 + curl http://localhost:5000/api/setup/gateway/status + + systemd 등록 (부팅 시 자동 시작) + + # 서비스 파일 설치 + sudo cp /home/windpacer/projects/hc900_ax/hc900crawler.service /etc/systemd/system/ + + # 등록 및 활성화 + sudo systemctl daemon-reload + sudo systemctl enable hc900crawler + sudo systemctl start hc900crawler + + # 상태 확인 + sudo systemctl status hc900crawler + journalctl -u hc900crawler -f + + 정지/재시작 + + # 수동 실행의 경우 + pkill -f Hc900Crawler + + # systemd의 경우 + sudo systemctl stop hc900crawler + sudo systemctl restart hc900crawler + + 로그 확인 + + tail -f /tmp/hc900_crawler.log # 크롤러 로그 + tail -f /tmp/hc900_gateway.log # 게이트웨이 로그 + + --- + C4 연결되면 — 게이트웨이가 알아서 30초 이내 자동 연결합니다. Setup 탭(http://localhost:5000)에서 상태를 실시간으로 + 확인할 수 있습니다. \ No newline at end of file diff --git a/hc900crawler.service b/hc900crawler.service new file mode 100644 index 0000000..4c4b99d --- /dev/null +++ b/hc900crawler.service @@ -0,0 +1,26 @@ +[Unit] +Description=HC900 Crawler - Modbus to gRPC Web Service +After=network-online.target docker.service +Wants=network-online.target + +[Service] +Type=simple +User=windpacer +WorkingDirectory=/home/windpacer/projects/hc900_ax/src/Hc900Crawler + +# dotnet publish된 바이너리 사용 (권장) 또는 dotnet run +ExecStart=/usr/bin/dotnet run + +Restart=always +RestartSec=10 + +# 로그 +StandardOutput=append:/tmp/hc900_crawler.log +StandardError=append:/tmp/hc900_crawler.log + +# 환경변수 +Environment=DOTNET_ENVIRONMENT=Production +Environment=ASPNETCORE_URLS=http://0.0.0.0:5000 + +[Install] +WantedBy=multi-user.target diff --git a/industrial-comm/CMakeLists.txt b/industrial-comm/CMakeLists.txt new file mode 100644 index 0000000..d695f2b --- /dev/null +++ b/industrial-comm/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.16) +project(industrial_comm LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +add_subdirectory(cpp) \ No newline at end of file diff --git a/industrial-comm/cpp/CMakeLists.txt b/industrial-comm/cpp/CMakeLists.txt new file mode 100644 index 0000000..e290977 --- /dev/null +++ b/industrial-comm/cpp/CMakeLists.txt @@ -0,0 +1,96 @@ +cmake_minimum_required(VERSION 3.20) +project(comm_core) + +add_library(comm_core SHARED) + +target_sources(comm_core + PRIVATE + src/controller.cpp + src/codec.cpp +) + +target_include_directories(comm_core + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +target_compile_options(comm_core + PRIVATE + -Wall -Wextra -Wpedantic +) + +# ─── HC900 Gateway ─── + +set(GRPC_DIR /tmp/grpc_local) +set(ABSL_DIR /tmp/absl_local) +set(PROTO_GEN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/gen) + +add_executable(hc900_gateway) + +target_sources(hc900_gateway + PRIVATE + src/gateway.cpp + src/modbus_tcp.cpp + ${PROTO_GEN_DIR}/modbus_gateway.pb.cc + ${PROTO_GEN_DIR}/modbus_gateway.grpc.pb.cc +) + +target_include_directories(hc900_gateway + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${PROTO_GEN_DIR} + ${GRPC_DIR}/usr/include + ${ABSL_DIR}/usr/include +) + +target_link_directories(hc900_gateway + PRIVATE + ${GRPC_DIR}/usr/lib/aarch64-linux-gnu + ${ABSL_DIR}/usr/lib/aarch64-linux-gnu + /usr/lib/aarch64-linux-gnu + /lib/aarch64-linux-gnu +) + +target_link_libraries(hc900_gateway + PRIVATE + comm_core + grpc++ + grpc + gpr + upb + address_sorting + protobuf + absl_synchronization + absl_status + absl_cord + absl_cord_internal + absl_cordz_info + absl_cordz_handle + absl_cordz_functions + absl_cordz_sample_token + absl_hashtablez_sampler + absl_exponential_biased + absl_raw_hash_set + absl_hash + absl_city + absl_low_level_hash + absl_int128 + absl_raw_logging_internal + absl_log_severity + absl_spinlock_wait + absl_malloc_internal + absl_throw_delegate + absl_time + absl_time_zone + absl_strings + absl_strings_internal + absl_base + pthread + rt + dl +) + +target_compile_options(hc900_gateway + PRIVATE + -Wall -Wextra -Wpedantic +) diff --git a/industrial-comm/cpp/gen/modbus_gateway.grpc.pb.cc b/industrial-comm/cpp/gen/modbus_gateway.grpc.pb.cc new file mode 100644 index 0000000..53e5ac3 --- /dev/null +++ b/industrial-comm/cpp/gen/modbus_gateway.grpc.pb.cc @@ -0,0 +1,247 @@ +// Generated by the gRPC C++ plugin. +// If you make any local change, they will be lost. +// source: modbus_gateway.proto + +#include "modbus_gateway.pb.h" +#include "modbus_gateway.grpc.pb.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +namespace hc900 { + +static const char* ModbusGateway_method_names[] = { + "/hc900.ModbusGateway/ReadTags", + "/hc900.ModbusGateway/WriteTag", + "/hc900.ModbusGateway/StreamTags", + "/hc900.ModbusGateway/ListTags", + "/hc900.ModbusGateway/HealthCheck", +}; + +std::unique_ptr< ModbusGateway::Stub> ModbusGateway::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { + (void)options; + std::unique_ptr< ModbusGateway::Stub> stub(new ModbusGateway::Stub(channel, options)); + return stub; +} + +ModbusGateway::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) + : channel_(channel), rpcmethod_ReadTags_(ModbusGateway_method_names[0], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_WriteTag_(ModbusGateway_method_names[1], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_StreamTags_(ModbusGateway_method_names[2], options.suffix_for_stats(),::grpc::internal::RpcMethod::SERVER_STREAMING, channel) + , rpcmethod_ListTags_(ModbusGateway_method_names[3], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_HealthCheck_(ModbusGateway_method_names[4], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel) + {} + +::grpc::Status ModbusGateway::Stub::ReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::hc900::ReadTagsResponse* response) { + return ::grpc::internal::BlockingUnaryCall< ::hc900::ReadTagsRequest, ::hc900::ReadTagsResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_ReadTags_, context, request, response); +} + +void ModbusGateway::Stub::async::ReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest* request, ::hc900::ReadTagsResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall< ::hc900::ReadTagsRequest, ::hc900::ReadTagsResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_ReadTags_, context, request, response, std::move(f)); +} + +void ModbusGateway::Stub::async::ReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest* request, ::hc900::ReadTagsResponse* response, ::grpc::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_ReadTags_, context, request, response, reactor); +} + +::grpc::ClientAsyncResponseReader< ::hc900::ReadTagsResponse>* ModbusGateway::Stub::PrepareAsyncReadTagsRaw(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::hc900::ReadTagsResponse, ::hc900::ReadTagsRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_ReadTags_, context, request); +} + +::grpc::ClientAsyncResponseReader< ::hc900::ReadTagsResponse>* ModbusGateway::Stub::AsyncReadTagsRaw(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) { + auto* result = + this->PrepareAsyncReadTagsRaw(context, request, cq); + result->StartCall(); + return result; +} + +::grpc::Status ModbusGateway::Stub::WriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::hc900::WriteTagResponse* response) { + return ::grpc::internal::BlockingUnaryCall< ::hc900::WriteTagRequest, ::hc900::WriteTagResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_WriteTag_, context, request, response); +} + +void ModbusGateway::Stub::async::WriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest* request, ::hc900::WriteTagResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall< ::hc900::WriteTagRequest, ::hc900::WriteTagResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_WriteTag_, context, request, response, std::move(f)); +} + +void ModbusGateway::Stub::async::WriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest* request, ::hc900::WriteTagResponse* response, ::grpc::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_WriteTag_, context, request, response, reactor); +} + +::grpc::ClientAsyncResponseReader< ::hc900::WriteTagResponse>* ModbusGateway::Stub::PrepareAsyncWriteTagRaw(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::hc900::WriteTagResponse, ::hc900::WriteTagRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_WriteTag_, context, request); +} + +::grpc::ClientAsyncResponseReader< ::hc900::WriteTagResponse>* ModbusGateway::Stub::AsyncWriteTagRaw(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) { + auto* result = + this->PrepareAsyncWriteTagRaw(context, request, cq); + result->StartCall(); + return result; +} + +::grpc::ClientReader< ::hc900::TagValue>* ModbusGateway::Stub::StreamTagsRaw(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request) { + return ::grpc::internal::ClientReaderFactory< ::hc900::TagValue>::Create(channel_.get(), rpcmethod_StreamTags_, context, request); +} + +void ModbusGateway::Stub::async::StreamTags(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest* request, ::grpc::ClientReadReactor< ::hc900::TagValue>* reactor) { + ::grpc::internal::ClientCallbackReaderFactory< ::hc900::TagValue>::Create(stub_->channel_.get(), stub_->rpcmethod_StreamTags_, context, request, reactor); +} + +::grpc::ClientAsyncReader< ::hc900::TagValue>* ModbusGateway::Stub::AsyncStreamTagsRaw(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq, void* tag) { + return ::grpc::internal::ClientAsyncReaderFactory< ::hc900::TagValue>::Create(channel_.get(), cq, rpcmethod_StreamTags_, context, request, true, tag); +} + +::grpc::ClientAsyncReader< ::hc900::TagValue>* ModbusGateway::Stub::PrepareAsyncStreamTagsRaw(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncReaderFactory< ::hc900::TagValue>::Create(channel_.get(), cq, rpcmethod_StreamTags_, context, request, false, nullptr); +} + +::grpc::Status ModbusGateway::Stub::ListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::hc900::ListTagsResponse* response) { + return ::grpc::internal::BlockingUnaryCall< ::hc900::ListTagsRequest, ::hc900::ListTagsResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_ListTags_, context, request, response); +} + +void ModbusGateway::Stub::async::ListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest* request, ::hc900::ListTagsResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall< ::hc900::ListTagsRequest, ::hc900::ListTagsResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_ListTags_, context, request, response, std::move(f)); +} + +void ModbusGateway::Stub::async::ListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest* request, ::hc900::ListTagsResponse* response, ::grpc::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_ListTags_, context, request, response, reactor); +} + +::grpc::ClientAsyncResponseReader< ::hc900::ListTagsResponse>* ModbusGateway::Stub::PrepareAsyncListTagsRaw(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::hc900::ListTagsResponse, ::hc900::ListTagsRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_ListTags_, context, request); +} + +::grpc::ClientAsyncResponseReader< ::hc900::ListTagsResponse>* ModbusGateway::Stub::AsyncListTagsRaw(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) { + auto* result = + this->PrepareAsyncListTagsRaw(context, request, cq); + result->StartCall(); + return result; +} + +::grpc::Status ModbusGateway::Stub::HealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::hc900::HealthCheckResponse* response) { + return ::grpc::internal::BlockingUnaryCall< ::hc900::HealthCheckRequest, ::hc900::HealthCheckResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_HealthCheck_, context, request, response); +} + +void ModbusGateway::Stub::async::HealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest* request, ::hc900::HealthCheckResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall< ::hc900::HealthCheckRequest, ::hc900::HealthCheckResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_HealthCheck_, context, request, response, std::move(f)); +} + +void ModbusGateway::Stub::async::HealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest* request, ::hc900::HealthCheckResponse* response, ::grpc::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_HealthCheck_, context, request, response, reactor); +} + +::grpc::ClientAsyncResponseReader< ::hc900::HealthCheckResponse>* ModbusGateway::Stub::PrepareAsyncHealthCheckRaw(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::hc900::HealthCheckResponse, ::hc900::HealthCheckRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_HealthCheck_, context, request); +} + +::grpc::ClientAsyncResponseReader< ::hc900::HealthCheckResponse>* ModbusGateway::Stub::AsyncHealthCheckRaw(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) { + auto* result = + this->PrepareAsyncHealthCheckRaw(context, request, cq); + result->StartCall(); + return result; +} + +ModbusGateway::Service::Service() { + AddMethod(new ::grpc::internal::RpcServiceMethod( + ModbusGateway_method_names[0], + ::grpc::internal::RpcMethod::NORMAL_RPC, + new ::grpc::internal::RpcMethodHandler< ModbusGateway::Service, ::hc900::ReadTagsRequest, ::hc900::ReadTagsResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( + [](ModbusGateway::Service* service, + ::grpc::ServerContext* ctx, + const ::hc900::ReadTagsRequest* req, + ::hc900::ReadTagsResponse* resp) { + return service->ReadTags(ctx, req, resp); + }, this))); + AddMethod(new ::grpc::internal::RpcServiceMethod( + ModbusGateway_method_names[1], + ::grpc::internal::RpcMethod::NORMAL_RPC, + new ::grpc::internal::RpcMethodHandler< ModbusGateway::Service, ::hc900::WriteTagRequest, ::hc900::WriteTagResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( + [](ModbusGateway::Service* service, + ::grpc::ServerContext* ctx, + const ::hc900::WriteTagRequest* req, + ::hc900::WriteTagResponse* resp) { + return service->WriteTag(ctx, req, resp); + }, this))); + AddMethod(new ::grpc::internal::RpcServiceMethod( + ModbusGateway_method_names[2], + ::grpc::internal::RpcMethod::SERVER_STREAMING, + new ::grpc::internal::ServerStreamingHandler< ModbusGateway::Service, ::hc900::StreamTagsRequest, ::hc900::TagValue>( + [](ModbusGateway::Service* service, + ::grpc::ServerContext* ctx, + const ::hc900::StreamTagsRequest* req, + ::grpc::ServerWriter<::hc900::TagValue>* writer) { + return service->StreamTags(ctx, req, writer); + }, this))); + AddMethod(new ::grpc::internal::RpcServiceMethod( + ModbusGateway_method_names[3], + ::grpc::internal::RpcMethod::NORMAL_RPC, + new ::grpc::internal::RpcMethodHandler< ModbusGateway::Service, ::hc900::ListTagsRequest, ::hc900::ListTagsResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( + [](ModbusGateway::Service* service, + ::grpc::ServerContext* ctx, + const ::hc900::ListTagsRequest* req, + ::hc900::ListTagsResponse* resp) { + return service->ListTags(ctx, req, resp); + }, this))); + AddMethod(new ::grpc::internal::RpcServiceMethod( + ModbusGateway_method_names[4], + ::grpc::internal::RpcMethod::NORMAL_RPC, + new ::grpc::internal::RpcMethodHandler< ModbusGateway::Service, ::hc900::HealthCheckRequest, ::hc900::HealthCheckResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>( + [](ModbusGateway::Service* service, + ::grpc::ServerContext* ctx, + const ::hc900::HealthCheckRequest* req, + ::hc900::HealthCheckResponse* resp) { + return service->HealthCheck(ctx, req, resp); + }, this))); +} + +ModbusGateway::Service::~Service() { +} + +::grpc::Status ModbusGateway::Service::ReadTags(::grpc::ServerContext* context, const ::hc900::ReadTagsRequest* request, ::hc900::ReadTagsResponse* response) { + (void) context; + (void) request; + (void) response; + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); +} + +::grpc::Status ModbusGateway::Service::WriteTag(::grpc::ServerContext* context, const ::hc900::WriteTagRequest* request, ::hc900::WriteTagResponse* response) { + (void) context; + (void) request; + (void) response; + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); +} + +::grpc::Status ModbusGateway::Service::StreamTags(::grpc::ServerContext* context, const ::hc900::StreamTagsRequest* request, ::grpc::ServerWriter< ::hc900::TagValue>* writer) { + (void) context; + (void) request; + (void) writer; + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); +} + +::grpc::Status ModbusGateway::Service::ListTags(::grpc::ServerContext* context, const ::hc900::ListTagsRequest* request, ::hc900::ListTagsResponse* response) { + (void) context; + (void) request; + (void) response; + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); +} + +::grpc::Status ModbusGateway::Service::HealthCheck(::grpc::ServerContext* context, const ::hc900::HealthCheckRequest* request, ::hc900::HealthCheckResponse* response) { + (void) context; + (void) request; + (void) response; + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); +} + + +} // namespace hc900 + diff --git a/industrial-comm/cpp/gen/modbus_gateway.grpc.pb.h b/industrial-comm/cpp/gen/modbus_gateway.grpc.pb.h new file mode 100644 index 0000000..08c1b4b --- /dev/null +++ b/industrial-comm/cpp/gen/modbus_gateway.grpc.pb.h @@ -0,0 +1,869 @@ +// Generated by the gRPC C++ plugin. +// If you make any local change, they will be lost. +// source: modbus_gateway.proto +#ifndef GRPC_modbus_5fgateway_2eproto__INCLUDED +#define GRPC_modbus_5fgateway_2eproto__INCLUDED + +#include "modbus_gateway.pb.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace hc900 { + +// ─── Service ─── +// +class ModbusGateway final { + public: + static constexpr char const* service_full_name() { + return "hc900.ModbusGateway"; + } + class StubInterface { + public: + virtual ~StubInterface() {} + virtual ::grpc::Status ReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::hc900::ReadTagsResponse* response) = 0; + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ReadTagsResponse>> AsyncReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ReadTagsResponse>>(AsyncReadTagsRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ReadTagsResponse>> PrepareAsyncReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ReadTagsResponse>>(PrepareAsyncReadTagsRaw(context, request, cq)); + } + virtual ::grpc::Status WriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::hc900::WriteTagResponse* response) = 0; + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::WriteTagResponse>> AsyncWriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::WriteTagResponse>>(AsyncWriteTagRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::WriteTagResponse>> PrepareAsyncWriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::WriteTagResponse>>(PrepareAsyncWriteTagRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientReaderInterface< ::hc900::TagValue>> StreamTags(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request) { + return std::unique_ptr< ::grpc::ClientReaderInterface< ::hc900::TagValue>>(StreamTagsRaw(context, request)); + } + std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hc900::TagValue>> AsyncStreamTags(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq, void* tag) { + return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hc900::TagValue>>(AsyncStreamTagsRaw(context, request, cq, tag)); + } + std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hc900::TagValue>> PrepareAsyncStreamTags(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hc900::TagValue>>(PrepareAsyncStreamTagsRaw(context, request, cq)); + } + virtual ::grpc::Status ListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::hc900::ListTagsResponse* response) = 0; + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ListTagsResponse>> AsyncListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ListTagsResponse>>(AsyncListTagsRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ListTagsResponse>> PrepareAsyncListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ListTagsResponse>>(PrepareAsyncListTagsRaw(context, request, cq)); + } + virtual ::grpc::Status HealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::hc900::HealthCheckResponse* response) = 0; + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::HealthCheckResponse>> AsyncHealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::HealthCheckResponse>>(AsyncHealthCheckRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::HealthCheckResponse>> PrepareAsyncHealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hc900::HealthCheckResponse>>(PrepareAsyncHealthCheckRaw(context, request, cq)); + } + class async_interface { + public: + virtual ~async_interface() {} + virtual void ReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest* request, ::hc900::ReadTagsResponse* response, std::function) = 0; + virtual void ReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest* request, ::hc900::ReadTagsResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0; + virtual void WriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest* request, ::hc900::WriteTagResponse* response, std::function) = 0; + virtual void WriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest* request, ::hc900::WriteTagResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0; + virtual void StreamTags(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest* request, ::grpc::ClientReadReactor< ::hc900::TagValue>* reactor) = 0; + virtual void ListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest* request, ::hc900::ListTagsResponse* response, std::function) = 0; + virtual void ListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest* request, ::hc900::ListTagsResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0; + virtual void HealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest* request, ::hc900::HealthCheckResponse* response, std::function) = 0; + virtual void HealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest* request, ::hc900::HealthCheckResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0; + }; + typedef class async_interface experimental_async_interface; + virtual class async_interface* async() { return nullptr; } + class async_interface* experimental_async() { return async(); } + private: + virtual ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ReadTagsResponse>* AsyncReadTagsRaw(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ReadTagsResponse>* PrepareAsyncReadTagsRaw(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::hc900::WriteTagResponse>* AsyncWriteTagRaw(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::hc900::WriteTagResponse>* PrepareAsyncWriteTagRaw(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientReaderInterface< ::hc900::TagValue>* StreamTagsRaw(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request) = 0; + virtual ::grpc::ClientAsyncReaderInterface< ::hc900::TagValue>* AsyncStreamTagsRaw(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0; + virtual ::grpc::ClientAsyncReaderInterface< ::hc900::TagValue>* PrepareAsyncStreamTagsRaw(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ListTagsResponse>* AsyncListTagsRaw(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::hc900::ListTagsResponse>* PrepareAsyncListTagsRaw(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::hc900::HealthCheckResponse>* AsyncHealthCheckRaw(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::hc900::HealthCheckResponse>* PrepareAsyncHealthCheckRaw(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) = 0; + }; + class Stub final : public StubInterface { + public: + Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions()); + ::grpc::Status ReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::hc900::ReadTagsResponse* response) override; + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::ReadTagsResponse>> AsyncReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::ReadTagsResponse>>(AsyncReadTagsRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::ReadTagsResponse>> PrepareAsyncReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::ReadTagsResponse>>(PrepareAsyncReadTagsRaw(context, request, cq)); + } + ::grpc::Status WriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::hc900::WriteTagResponse* response) override; + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::WriteTagResponse>> AsyncWriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::WriteTagResponse>>(AsyncWriteTagRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::WriteTagResponse>> PrepareAsyncWriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::WriteTagResponse>>(PrepareAsyncWriteTagRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientReader< ::hc900::TagValue>> StreamTags(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request) { + return std::unique_ptr< ::grpc::ClientReader< ::hc900::TagValue>>(StreamTagsRaw(context, request)); + } + std::unique_ptr< ::grpc::ClientAsyncReader< ::hc900::TagValue>> AsyncStreamTags(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq, void* tag) { + return std::unique_ptr< ::grpc::ClientAsyncReader< ::hc900::TagValue>>(AsyncStreamTagsRaw(context, request, cq, tag)); + } + std::unique_ptr< ::grpc::ClientAsyncReader< ::hc900::TagValue>> PrepareAsyncStreamTags(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncReader< ::hc900::TagValue>>(PrepareAsyncStreamTagsRaw(context, request, cq)); + } + ::grpc::Status ListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::hc900::ListTagsResponse* response) override; + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::ListTagsResponse>> AsyncListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::ListTagsResponse>>(AsyncListTagsRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::ListTagsResponse>> PrepareAsyncListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::ListTagsResponse>>(PrepareAsyncListTagsRaw(context, request, cq)); + } + ::grpc::Status HealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::hc900::HealthCheckResponse* response) override; + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::HealthCheckResponse>> AsyncHealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::HealthCheckResponse>>(AsyncHealthCheckRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::HealthCheckResponse>> PrepareAsyncHealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hc900::HealthCheckResponse>>(PrepareAsyncHealthCheckRaw(context, request, cq)); + } + class async final : + public StubInterface::async_interface { + public: + void ReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest* request, ::hc900::ReadTagsResponse* response, std::function) override; + void ReadTags(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest* request, ::hc900::ReadTagsResponse* response, ::grpc::ClientUnaryReactor* reactor) override; + void WriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest* request, ::hc900::WriteTagResponse* response, std::function) override; + void WriteTag(::grpc::ClientContext* context, const ::hc900::WriteTagRequest* request, ::hc900::WriteTagResponse* response, ::grpc::ClientUnaryReactor* reactor) override; + void StreamTags(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest* request, ::grpc::ClientReadReactor< ::hc900::TagValue>* reactor) override; + void ListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest* request, ::hc900::ListTagsResponse* response, std::function) override; + void ListTags(::grpc::ClientContext* context, const ::hc900::ListTagsRequest* request, ::hc900::ListTagsResponse* response, ::grpc::ClientUnaryReactor* reactor) override; + void HealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest* request, ::hc900::HealthCheckResponse* response, std::function) override; + void HealthCheck(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest* request, ::hc900::HealthCheckResponse* response, ::grpc::ClientUnaryReactor* reactor) override; + private: + friend class Stub; + explicit async(Stub* stub): stub_(stub) { } + Stub* stub() { return stub_; } + Stub* stub_; + }; + class async* async() override { return &async_stub_; } + + private: + std::shared_ptr< ::grpc::ChannelInterface> channel_; + class async async_stub_{this}; + ::grpc::ClientAsyncResponseReader< ::hc900::ReadTagsResponse>* AsyncReadTagsRaw(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::hc900::ReadTagsResponse>* PrepareAsyncReadTagsRaw(::grpc::ClientContext* context, const ::hc900::ReadTagsRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::hc900::WriteTagResponse>* AsyncWriteTagRaw(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::hc900::WriteTagResponse>* PrepareAsyncWriteTagRaw(::grpc::ClientContext* context, const ::hc900::WriteTagRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientReader< ::hc900::TagValue>* StreamTagsRaw(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request) override; + ::grpc::ClientAsyncReader< ::hc900::TagValue>* AsyncStreamTagsRaw(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq, void* tag) override; + ::grpc::ClientAsyncReader< ::hc900::TagValue>* PrepareAsyncStreamTagsRaw(::grpc::ClientContext* context, const ::hc900::StreamTagsRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::hc900::ListTagsResponse>* AsyncListTagsRaw(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::hc900::ListTagsResponse>* PrepareAsyncListTagsRaw(::grpc::ClientContext* context, const ::hc900::ListTagsRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::hc900::HealthCheckResponse>* AsyncHealthCheckRaw(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::hc900::HealthCheckResponse>* PrepareAsyncHealthCheckRaw(::grpc::ClientContext* context, const ::hc900::HealthCheckRequest& request, ::grpc::CompletionQueue* cq) override; + const ::grpc::internal::RpcMethod rpcmethod_ReadTags_; + const ::grpc::internal::RpcMethod rpcmethod_WriteTag_; + const ::grpc::internal::RpcMethod rpcmethod_StreamTags_; + const ::grpc::internal::RpcMethod rpcmethod_ListTags_; + const ::grpc::internal::RpcMethod rpcmethod_HealthCheck_; + }; + static std::unique_ptr NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions()); + + class Service : public ::grpc::Service { + public: + Service(); + virtual ~Service(); + virtual ::grpc::Status ReadTags(::grpc::ServerContext* context, const ::hc900::ReadTagsRequest* request, ::hc900::ReadTagsResponse* response); + virtual ::grpc::Status WriteTag(::grpc::ServerContext* context, const ::hc900::WriteTagRequest* request, ::hc900::WriteTagResponse* response); + virtual ::grpc::Status StreamTags(::grpc::ServerContext* context, const ::hc900::StreamTagsRequest* request, ::grpc::ServerWriter< ::hc900::TagValue>* writer); + virtual ::grpc::Status ListTags(::grpc::ServerContext* context, const ::hc900::ListTagsRequest* request, ::hc900::ListTagsResponse* response); + virtual ::grpc::Status HealthCheck(::grpc::ServerContext* context, const ::hc900::HealthCheckRequest* request, ::hc900::HealthCheckResponse* response); + }; + template + class WithAsyncMethod_ReadTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithAsyncMethod_ReadTags() { + ::grpc::Service::MarkMethodAsync(0); + } + ~WithAsyncMethod_ReadTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ReadTags(::grpc::ServerContext* /*context*/, const ::hc900::ReadTagsRequest* /*request*/, ::hc900::ReadTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestReadTags(::grpc::ServerContext* context, ::hc900::ReadTagsRequest* request, ::grpc::ServerAsyncResponseWriter< ::hc900::ReadTagsResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template + class WithAsyncMethod_WriteTag : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithAsyncMethod_WriteTag() { + ::grpc::Service::MarkMethodAsync(1); + } + ~WithAsyncMethod_WriteTag() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status WriteTag(::grpc::ServerContext* /*context*/, const ::hc900::WriteTagRequest* /*request*/, ::hc900::WriteTagResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestWriteTag(::grpc::ServerContext* context, ::hc900::WriteTagRequest* request, ::grpc::ServerAsyncResponseWriter< ::hc900::WriteTagResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template + class WithAsyncMethod_StreamTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithAsyncMethod_StreamTags() { + ::grpc::Service::MarkMethodAsync(2); + } + ~WithAsyncMethod_StreamTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status StreamTags(::grpc::ServerContext* /*context*/, const ::hc900::StreamTagsRequest* /*request*/, ::grpc::ServerWriter< ::hc900::TagValue>* /*writer*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestStreamTags(::grpc::ServerContext* context, ::hc900::StreamTagsRequest* request, ::grpc::ServerAsyncWriter< ::hc900::TagValue>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncServerStreaming(2, context, request, writer, new_call_cq, notification_cq, tag); + } + }; + template + class WithAsyncMethod_ListTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithAsyncMethod_ListTags() { + ::grpc::Service::MarkMethodAsync(3); + } + ~WithAsyncMethod_ListTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListTags(::grpc::ServerContext* /*context*/, const ::hc900::ListTagsRequest* /*request*/, ::hc900::ListTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestListTags(::grpc::ServerContext* context, ::hc900::ListTagsRequest* request, ::grpc::ServerAsyncResponseWriter< ::hc900::ListTagsResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template + class WithAsyncMethod_HealthCheck : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithAsyncMethod_HealthCheck() { + ::grpc::Service::MarkMethodAsync(4); + } + ~WithAsyncMethod_HealthCheck() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status HealthCheck(::grpc::ServerContext* /*context*/, const ::hc900::HealthCheckRequest* /*request*/, ::hc900::HealthCheckResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestHealthCheck(::grpc::ServerContext* context, ::hc900::HealthCheckRequest* request, ::grpc::ServerAsyncResponseWriter< ::hc900::HealthCheckResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag); + } + }; + typedef WithAsyncMethod_ReadTags > > > > AsyncService; + template + class WithCallbackMethod_ReadTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithCallbackMethod_ReadTags() { + ::grpc::Service::MarkMethodCallback(0, + new ::grpc::internal::CallbackUnaryHandler< ::hc900::ReadTagsRequest, ::hc900::ReadTagsResponse>( + [this]( + ::grpc::CallbackServerContext* context, const ::hc900::ReadTagsRequest* request, ::hc900::ReadTagsResponse* response) { return this->ReadTags(context, request, response); }));} + void SetMessageAllocatorFor_ReadTags( + ::grpc::MessageAllocator< ::hc900::ReadTagsRequest, ::hc900::ReadTagsResponse>* allocator) { + ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0); + static_cast<::grpc::internal::CallbackUnaryHandler< ::hc900::ReadTagsRequest, ::hc900::ReadTagsResponse>*>(handler) + ->SetMessageAllocator(allocator); + } + ~WithCallbackMethod_ReadTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ReadTags(::grpc::ServerContext* /*context*/, const ::hc900::ReadTagsRequest* /*request*/, ::hc900::ReadTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerUnaryReactor* ReadTags( + ::grpc::CallbackServerContext* /*context*/, const ::hc900::ReadTagsRequest* /*request*/, ::hc900::ReadTagsResponse* /*response*/) { return nullptr; } + }; + template + class WithCallbackMethod_WriteTag : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithCallbackMethod_WriteTag() { + ::grpc::Service::MarkMethodCallback(1, + new ::grpc::internal::CallbackUnaryHandler< ::hc900::WriteTagRequest, ::hc900::WriteTagResponse>( + [this]( + ::grpc::CallbackServerContext* context, const ::hc900::WriteTagRequest* request, ::hc900::WriteTagResponse* response) { return this->WriteTag(context, request, response); }));} + void SetMessageAllocatorFor_WriteTag( + ::grpc::MessageAllocator< ::hc900::WriteTagRequest, ::hc900::WriteTagResponse>* allocator) { + ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1); + static_cast<::grpc::internal::CallbackUnaryHandler< ::hc900::WriteTagRequest, ::hc900::WriteTagResponse>*>(handler) + ->SetMessageAllocator(allocator); + } + ~WithCallbackMethod_WriteTag() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status WriteTag(::grpc::ServerContext* /*context*/, const ::hc900::WriteTagRequest* /*request*/, ::hc900::WriteTagResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerUnaryReactor* WriteTag( + ::grpc::CallbackServerContext* /*context*/, const ::hc900::WriteTagRequest* /*request*/, ::hc900::WriteTagResponse* /*response*/) { return nullptr; } + }; + template + class WithCallbackMethod_StreamTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithCallbackMethod_StreamTags() { + ::grpc::Service::MarkMethodCallback(2, + new ::grpc::internal::CallbackServerStreamingHandler< ::hc900::StreamTagsRequest, ::hc900::TagValue>( + [this]( + ::grpc::CallbackServerContext* context, const ::hc900::StreamTagsRequest* request) { return this->StreamTags(context, request); })); + } + ~WithCallbackMethod_StreamTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status StreamTags(::grpc::ServerContext* /*context*/, const ::hc900::StreamTagsRequest* /*request*/, ::grpc::ServerWriter< ::hc900::TagValue>* /*writer*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerWriteReactor< ::hc900::TagValue>* StreamTags( + ::grpc::CallbackServerContext* /*context*/, const ::hc900::StreamTagsRequest* /*request*/) { return nullptr; } + }; + template + class WithCallbackMethod_ListTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithCallbackMethod_ListTags() { + ::grpc::Service::MarkMethodCallback(3, + new ::grpc::internal::CallbackUnaryHandler< ::hc900::ListTagsRequest, ::hc900::ListTagsResponse>( + [this]( + ::grpc::CallbackServerContext* context, const ::hc900::ListTagsRequest* request, ::hc900::ListTagsResponse* response) { return this->ListTags(context, request, response); }));} + void SetMessageAllocatorFor_ListTags( + ::grpc::MessageAllocator< ::hc900::ListTagsRequest, ::hc900::ListTagsResponse>* allocator) { + ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3); + static_cast<::grpc::internal::CallbackUnaryHandler< ::hc900::ListTagsRequest, ::hc900::ListTagsResponse>*>(handler) + ->SetMessageAllocator(allocator); + } + ~WithCallbackMethod_ListTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListTags(::grpc::ServerContext* /*context*/, const ::hc900::ListTagsRequest* /*request*/, ::hc900::ListTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerUnaryReactor* ListTags( + ::grpc::CallbackServerContext* /*context*/, const ::hc900::ListTagsRequest* /*request*/, ::hc900::ListTagsResponse* /*response*/) { return nullptr; } + }; + template + class WithCallbackMethod_HealthCheck : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithCallbackMethod_HealthCheck() { + ::grpc::Service::MarkMethodCallback(4, + new ::grpc::internal::CallbackUnaryHandler< ::hc900::HealthCheckRequest, ::hc900::HealthCheckResponse>( + [this]( + ::grpc::CallbackServerContext* context, const ::hc900::HealthCheckRequest* request, ::hc900::HealthCheckResponse* response) { return this->HealthCheck(context, request, response); }));} + void SetMessageAllocatorFor_HealthCheck( + ::grpc::MessageAllocator< ::hc900::HealthCheckRequest, ::hc900::HealthCheckResponse>* allocator) { + ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(4); + static_cast<::grpc::internal::CallbackUnaryHandler< ::hc900::HealthCheckRequest, ::hc900::HealthCheckResponse>*>(handler) + ->SetMessageAllocator(allocator); + } + ~WithCallbackMethod_HealthCheck() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status HealthCheck(::grpc::ServerContext* /*context*/, const ::hc900::HealthCheckRequest* /*request*/, ::hc900::HealthCheckResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerUnaryReactor* HealthCheck( + ::grpc::CallbackServerContext* /*context*/, const ::hc900::HealthCheckRequest* /*request*/, ::hc900::HealthCheckResponse* /*response*/) { return nullptr; } + }; + typedef WithCallbackMethod_ReadTags > > > > CallbackService; + typedef CallbackService ExperimentalCallbackService; + template + class WithGenericMethod_ReadTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithGenericMethod_ReadTags() { + ::grpc::Service::MarkMethodGeneric(0); + } + ~WithGenericMethod_ReadTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ReadTags(::grpc::ServerContext* /*context*/, const ::hc900::ReadTagsRequest* /*request*/, ::hc900::ReadTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + }; + template + class WithGenericMethod_WriteTag : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithGenericMethod_WriteTag() { + ::grpc::Service::MarkMethodGeneric(1); + } + ~WithGenericMethod_WriteTag() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status WriteTag(::grpc::ServerContext* /*context*/, const ::hc900::WriteTagRequest* /*request*/, ::hc900::WriteTagResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + }; + template + class WithGenericMethod_StreamTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithGenericMethod_StreamTags() { + ::grpc::Service::MarkMethodGeneric(2); + } + ~WithGenericMethod_StreamTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status StreamTags(::grpc::ServerContext* /*context*/, const ::hc900::StreamTagsRequest* /*request*/, ::grpc::ServerWriter< ::hc900::TagValue>* /*writer*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + }; + template + class WithGenericMethod_ListTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithGenericMethod_ListTags() { + ::grpc::Service::MarkMethodGeneric(3); + } + ~WithGenericMethod_ListTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListTags(::grpc::ServerContext* /*context*/, const ::hc900::ListTagsRequest* /*request*/, ::hc900::ListTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + }; + template + class WithGenericMethod_HealthCheck : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithGenericMethod_HealthCheck() { + ::grpc::Service::MarkMethodGeneric(4); + } + ~WithGenericMethod_HealthCheck() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status HealthCheck(::grpc::ServerContext* /*context*/, const ::hc900::HealthCheckRequest* /*request*/, ::hc900::HealthCheckResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + }; + template + class WithRawMethod_ReadTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawMethod_ReadTags() { + ::grpc::Service::MarkMethodRaw(0); + } + ~WithRawMethod_ReadTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ReadTags(::grpc::ServerContext* /*context*/, const ::hc900::ReadTagsRequest* /*request*/, ::hc900::ReadTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestReadTags(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template + class WithRawMethod_WriteTag : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawMethod_WriteTag() { + ::grpc::Service::MarkMethodRaw(1); + } + ~WithRawMethod_WriteTag() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status WriteTag(::grpc::ServerContext* /*context*/, const ::hc900::WriteTagRequest* /*request*/, ::hc900::WriteTagResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestWriteTag(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template + class WithRawMethod_StreamTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawMethod_StreamTags() { + ::grpc::Service::MarkMethodRaw(2); + } + ~WithRawMethod_StreamTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status StreamTags(::grpc::ServerContext* /*context*/, const ::hc900::StreamTagsRequest* /*request*/, ::grpc::ServerWriter< ::hc900::TagValue>* /*writer*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestStreamTags(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncWriter< ::grpc::ByteBuffer>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncServerStreaming(2, context, request, writer, new_call_cq, notification_cq, tag); + } + }; + template + class WithRawMethod_ListTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawMethod_ListTags() { + ::grpc::Service::MarkMethodRaw(3); + } + ~WithRawMethod_ListTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListTags(::grpc::ServerContext* /*context*/, const ::hc900::ListTagsRequest* /*request*/, ::hc900::ListTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestListTags(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template + class WithRawMethod_HealthCheck : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawMethod_HealthCheck() { + ::grpc::Service::MarkMethodRaw(4); + } + ~WithRawMethod_HealthCheck() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status HealthCheck(::grpc::ServerContext* /*context*/, const ::hc900::HealthCheckRequest* /*request*/, ::hc900::HealthCheckResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestHealthCheck(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template + class WithRawCallbackMethod_ReadTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawCallbackMethod_ReadTags() { + ::grpc::Service::MarkMethodRawCallback(0, + new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( + [this]( + ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->ReadTags(context, request, response); })); + } + ~WithRawCallbackMethod_ReadTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ReadTags(::grpc::ServerContext* /*context*/, const ::hc900::ReadTagsRequest* /*request*/, ::hc900::ReadTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerUnaryReactor* ReadTags( + ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/) { return nullptr; } + }; + template + class WithRawCallbackMethod_WriteTag : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawCallbackMethod_WriteTag() { + ::grpc::Service::MarkMethodRawCallback(1, + new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( + [this]( + ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->WriteTag(context, request, response); })); + } + ~WithRawCallbackMethod_WriteTag() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status WriteTag(::grpc::ServerContext* /*context*/, const ::hc900::WriteTagRequest* /*request*/, ::hc900::WriteTagResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerUnaryReactor* WriteTag( + ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/) { return nullptr; } + }; + template + class WithRawCallbackMethod_StreamTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawCallbackMethod_StreamTags() { + ::grpc::Service::MarkMethodRawCallback(2, + new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( + [this]( + ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->StreamTags(context, request); })); + } + ~WithRawCallbackMethod_StreamTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status StreamTags(::grpc::ServerContext* /*context*/, const ::hc900::StreamTagsRequest* /*request*/, ::grpc::ServerWriter< ::hc900::TagValue>* /*writer*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* StreamTags( + ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/) { return nullptr; } + }; + template + class WithRawCallbackMethod_ListTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawCallbackMethod_ListTags() { + ::grpc::Service::MarkMethodRawCallback(3, + new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( + [this]( + ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->ListTags(context, request, response); })); + } + ~WithRawCallbackMethod_ListTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListTags(::grpc::ServerContext* /*context*/, const ::hc900::ListTagsRequest* /*request*/, ::hc900::ListTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerUnaryReactor* ListTags( + ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/) { return nullptr; } + }; + template + class WithRawCallbackMethod_HealthCheck : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithRawCallbackMethod_HealthCheck() { + ::grpc::Service::MarkMethodRawCallback(4, + new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( + [this]( + ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->HealthCheck(context, request, response); })); + } + ~WithRawCallbackMethod_HealthCheck() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status HealthCheck(::grpc::ServerContext* /*context*/, const ::hc900::HealthCheckRequest* /*request*/, ::hc900::HealthCheckResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual ::grpc::ServerUnaryReactor* HealthCheck( + ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/) { return nullptr; } + }; + template + class WithStreamedUnaryMethod_ReadTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithStreamedUnaryMethod_ReadTags() { + ::grpc::Service::MarkMethodStreamed(0, + new ::grpc::internal::StreamedUnaryHandler< + ::hc900::ReadTagsRequest, ::hc900::ReadTagsResponse>( + [this](::grpc::ServerContext* context, + ::grpc::ServerUnaryStreamer< + ::hc900::ReadTagsRequest, ::hc900::ReadTagsResponse>* streamer) { + return this->StreamedReadTags(context, + streamer); + })); + } + ~WithStreamedUnaryMethod_ReadTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable regular version of this method + ::grpc::Status ReadTags(::grpc::ServerContext* /*context*/, const ::hc900::ReadTagsRequest* /*request*/, ::hc900::ReadTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + // replace default version of method with streamed unary + virtual ::grpc::Status StreamedReadTags(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hc900::ReadTagsRequest,::hc900::ReadTagsResponse>* server_unary_streamer) = 0; + }; + template + class WithStreamedUnaryMethod_WriteTag : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithStreamedUnaryMethod_WriteTag() { + ::grpc::Service::MarkMethodStreamed(1, + new ::grpc::internal::StreamedUnaryHandler< + ::hc900::WriteTagRequest, ::hc900::WriteTagResponse>( + [this](::grpc::ServerContext* context, + ::grpc::ServerUnaryStreamer< + ::hc900::WriteTagRequest, ::hc900::WriteTagResponse>* streamer) { + return this->StreamedWriteTag(context, + streamer); + })); + } + ~WithStreamedUnaryMethod_WriteTag() override { + BaseClassMustBeDerivedFromService(this); + } + // disable regular version of this method + ::grpc::Status WriteTag(::grpc::ServerContext* /*context*/, const ::hc900::WriteTagRequest* /*request*/, ::hc900::WriteTagResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + // replace default version of method with streamed unary + virtual ::grpc::Status StreamedWriteTag(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hc900::WriteTagRequest,::hc900::WriteTagResponse>* server_unary_streamer) = 0; + }; + template + class WithStreamedUnaryMethod_ListTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithStreamedUnaryMethod_ListTags() { + ::grpc::Service::MarkMethodStreamed(3, + new ::grpc::internal::StreamedUnaryHandler< + ::hc900::ListTagsRequest, ::hc900::ListTagsResponse>( + [this](::grpc::ServerContext* context, + ::grpc::ServerUnaryStreamer< + ::hc900::ListTagsRequest, ::hc900::ListTagsResponse>* streamer) { + return this->StreamedListTags(context, + streamer); + })); + } + ~WithStreamedUnaryMethod_ListTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable regular version of this method + ::grpc::Status ListTags(::grpc::ServerContext* /*context*/, const ::hc900::ListTagsRequest* /*request*/, ::hc900::ListTagsResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + // replace default version of method with streamed unary + virtual ::grpc::Status StreamedListTags(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hc900::ListTagsRequest,::hc900::ListTagsResponse>* server_unary_streamer) = 0; + }; + template + class WithStreamedUnaryMethod_HealthCheck : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithStreamedUnaryMethod_HealthCheck() { + ::grpc::Service::MarkMethodStreamed(4, + new ::grpc::internal::StreamedUnaryHandler< + ::hc900::HealthCheckRequest, ::hc900::HealthCheckResponse>( + [this](::grpc::ServerContext* context, + ::grpc::ServerUnaryStreamer< + ::hc900::HealthCheckRequest, ::hc900::HealthCheckResponse>* streamer) { + return this->StreamedHealthCheck(context, + streamer); + })); + } + ~WithStreamedUnaryMethod_HealthCheck() override { + BaseClassMustBeDerivedFromService(this); + } + // disable regular version of this method + ::grpc::Status HealthCheck(::grpc::ServerContext* /*context*/, const ::hc900::HealthCheckRequest* /*request*/, ::hc900::HealthCheckResponse* /*response*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + // replace default version of method with streamed unary + virtual ::grpc::Status StreamedHealthCheck(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hc900::HealthCheckRequest,::hc900::HealthCheckResponse>* server_unary_streamer) = 0; + }; + typedef WithStreamedUnaryMethod_ReadTags > > > StreamedUnaryService; + template + class WithSplitStreamingMethod_StreamTags : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service* /*service*/) {} + public: + WithSplitStreamingMethod_StreamTags() { + ::grpc::Service::MarkMethodStreamed(2, + new ::grpc::internal::SplitServerStreamingHandler< + ::hc900::StreamTagsRequest, ::hc900::TagValue>( + [this](::grpc::ServerContext* context, + ::grpc::ServerSplitStreamer< + ::hc900::StreamTagsRequest, ::hc900::TagValue>* streamer) { + return this->StreamedStreamTags(context, + streamer); + })); + } + ~WithSplitStreamingMethod_StreamTags() override { + BaseClassMustBeDerivedFromService(this); + } + // disable regular version of this method + ::grpc::Status StreamTags(::grpc::ServerContext* /*context*/, const ::hc900::StreamTagsRequest* /*request*/, ::grpc::ServerWriter< ::hc900::TagValue>* /*writer*/) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + // replace default version of method with split streamed + virtual ::grpc::Status StreamedStreamTags(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::hc900::StreamTagsRequest,::hc900::TagValue>* server_split_streamer) = 0; + }; + typedef WithSplitStreamingMethod_StreamTags SplitStreamedService; + typedef WithStreamedUnaryMethod_ReadTags > > > > StreamedService; +}; + +} // namespace hc900 + + +#endif // GRPC_modbus_5fgateway_2eproto__INCLUDED diff --git a/industrial-comm/cpp/gen/modbus_gateway.pb.cc b/industrial-comm/cpp/gen/modbus_gateway.pb.cc new file mode 100644 index 0000000..899cf0f --- /dev/null +++ b/industrial-comm/cpp/gen/modbus_gateway.pb.cc @@ -0,0 +1,3199 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: modbus_gateway.proto + +#include "modbus_gateway.pb.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +// @@protoc_insertion_point(includes) +#include + +PROTOBUF_PRAGMA_INIT_SEG + +namespace _pb = ::PROTOBUF_NAMESPACE_ID; +namespace _pbi = _pb::internal; + +namespace hc900 { +PROTOBUF_CONSTEXPR TagValue::TagValue( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.tag_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.timestamp_)*/nullptr + , /*decltype(_impl_.quality_)*/0u + , /*decltype(_impl_.value_)*/{} + , /*decltype(_impl_._cached_size_)*/{} + , /*decltype(_impl_._oneof_case_)*/{}} {} +struct TagValueDefaultTypeInternal { + PROTOBUF_CONSTEXPR TagValueDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~TagValueDefaultTypeInternal() {} + union { + TagValue _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 TagValueDefaultTypeInternal _TagValue_default_instance_; +PROTOBUF_CONSTEXPR TagMetadata::TagMetadata( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.tag_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.type_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.access_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.description_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.eu_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.address_)*/0u + , /*decltype(_impl_.count_)*/0u + , /*decltype(_impl_._cached_size_)*/{}} {} +struct TagMetadataDefaultTypeInternal { + PROTOBUF_CONSTEXPR TagMetadataDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~TagMetadataDefaultTypeInternal() {} + union { + TagMetadata _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 TagMetadataDefaultTypeInternal _TagMetadata_default_instance_; +PROTOBUF_CONSTEXPR ReadTagsRequest::ReadTagsRequest( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.tag_names_)*/{} + , /*decltype(_impl_._cached_size_)*/{}} {} +struct ReadTagsRequestDefaultTypeInternal { + PROTOBUF_CONSTEXPR ReadTagsRequestDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~ReadTagsRequestDefaultTypeInternal() {} + union { + ReadTagsRequest _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 ReadTagsRequestDefaultTypeInternal _ReadTagsRequest_default_instance_; +PROTOBUF_CONSTEXPR ReadTagsResponse::ReadTagsResponse( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.values_)*/{} + , /*decltype(_impl_.from_cache_)*/false + , /*decltype(_impl_._cached_size_)*/{}} {} +struct ReadTagsResponseDefaultTypeInternal { + PROTOBUF_CONSTEXPR ReadTagsResponseDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~ReadTagsResponseDefaultTypeInternal() {} + union { + ReadTagsResponse _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 ReadTagsResponseDefaultTypeInternal _ReadTagsResponse_default_instance_; +PROTOBUF_CONSTEXPR WriteTagRequest::WriteTagRequest( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.tag_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.value_)*/0 + , /*decltype(_impl_._cached_size_)*/{}} {} +struct WriteTagRequestDefaultTypeInternal { + PROTOBUF_CONSTEXPR WriteTagRequestDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~WriteTagRequestDefaultTypeInternal() {} + union { + WriteTagRequest _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 WriteTagRequestDefaultTypeInternal _WriteTagRequest_default_instance_; +PROTOBUF_CONSTEXPR WriteTagResponse::WriteTagResponse( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.error_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.success_)*/false + , /*decltype(_impl_._cached_size_)*/{}} {} +struct WriteTagResponseDefaultTypeInternal { + PROTOBUF_CONSTEXPR WriteTagResponseDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~WriteTagResponseDefaultTypeInternal() {} + union { + WriteTagResponse _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 WriteTagResponseDefaultTypeInternal _WriteTagResponse_default_instance_; +PROTOBUF_CONSTEXPR StreamTagsRequest::StreamTagsRequest( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.tag_names_)*/{} + , /*decltype(_impl_.interval_ms_)*/0 + , /*decltype(_impl_._cached_size_)*/{}} {} +struct StreamTagsRequestDefaultTypeInternal { + PROTOBUF_CONSTEXPR StreamTagsRequestDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~StreamTagsRequestDefaultTypeInternal() {} + union { + StreamTagsRequest _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 StreamTagsRequestDefaultTypeInternal _StreamTagsRequest_default_instance_; +PROTOBUF_CONSTEXPR ListTagsRequest::ListTagsRequest( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.filter_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.limit_)*/0 + , /*decltype(_impl_._cached_size_)*/{}} {} +struct ListTagsRequestDefaultTypeInternal { + PROTOBUF_CONSTEXPR ListTagsRequestDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~ListTagsRequestDefaultTypeInternal() {} + union { + ListTagsRequest _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 ListTagsRequestDefaultTypeInternal _ListTagsRequest_default_instance_; +PROTOBUF_CONSTEXPR ListTagsResponse::ListTagsResponse( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.tags_)*/{} + , /*decltype(_impl_._cached_size_)*/{}} {} +struct ListTagsResponseDefaultTypeInternal { + PROTOBUF_CONSTEXPR ListTagsResponseDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~ListTagsResponseDefaultTypeInternal() {} + union { + ListTagsResponse _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 ListTagsResponseDefaultTypeInternal _ListTagsResponse_default_instance_; +PROTOBUF_CONSTEXPR HealthCheckRequest::HealthCheckRequest( + ::_pbi::ConstantInitialized) {} +struct HealthCheckRequestDefaultTypeInternal { + PROTOBUF_CONSTEXPR HealthCheckRequestDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~HealthCheckRequestDefaultTypeInternal() {} + union { + HealthCheckRequest _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 HealthCheckRequestDefaultTypeInternal _HealthCheckRequest_default_instance_; +PROTOBUF_CONSTEXPR HealthCheckResponse::HealthCheckResponse( + ::_pbi::ConstantInitialized): _impl_{ + /*decltype(_impl_.controller_ip_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.uptime_sec_)*/0 + , /*decltype(_impl_.poll_count_)*/uint64_t{0u} + , /*decltype(_impl_.status_)*/0 + , /*decltype(_impl_.active_tags_)*/0u + , /*decltype(_impl_.last_poll_ms_)*/0 + , /*decltype(_impl_._cached_size_)*/{}} {} +struct HealthCheckResponseDefaultTypeInternal { + PROTOBUF_CONSTEXPR HealthCheckResponseDefaultTypeInternal() + : _instance(::_pbi::ConstantInitialized{}) {} + ~HealthCheckResponseDefaultTypeInternal() {} + union { + HealthCheckResponse _instance; + }; +}; +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 HealthCheckResponseDefaultTypeInternal _HealthCheckResponse_default_instance_; +} // namespace hc900 +static ::_pb::Metadata file_level_metadata_modbus_5fgateway_2eproto[11]; +static const ::_pb::EnumDescriptor* file_level_enum_descriptors_modbus_5fgateway_2eproto[1]; +static constexpr ::_pb::ServiceDescriptor const** file_level_service_descriptors_modbus_5fgateway_2eproto = nullptr; + +const uint32_t TableStruct_modbus_5fgateway_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::TagValue, _internal_metadata_), + ~0u, // no _extensions_ + PROTOBUF_FIELD_OFFSET(::hc900::TagValue, _impl_._oneof_case_[0]), + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::TagValue, _impl_.tag_name_), + ::_pbi::kInvalidFieldOffsetTag, + ::_pbi::kInvalidFieldOffsetTag, + PROTOBUF_FIELD_OFFSET(::hc900::TagValue, _impl_.quality_), + PROTOBUF_FIELD_OFFSET(::hc900::TagValue, _impl_.timestamp_), + PROTOBUF_FIELD_OFFSET(::hc900::TagValue, _impl_.value_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::TagMetadata, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::TagMetadata, _impl_.tag_name_), + PROTOBUF_FIELD_OFFSET(::hc900::TagMetadata, _impl_.address_), + PROTOBUF_FIELD_OFFSET(::hc900::TagMetadata, _impl_.count_), + PROTOBUF_FIELD_OFFSET(::hc900::TagMetadata, _impl_.type_), + PROTOBUF_FIELD_OFFSET(::hc900::TagMetadata, _impl_.access_), + PROTOBUF_FIELD_OFFSET(::hc900::TagMetadata, _impl_.description_), + PROTOBUF_FIELD_OFFSET(::hc900::TagMetadata, _impl_.eu_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::ReadTagsRequest, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::ReadTagsRequest, _impl_.tag_names_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::ReadTagsResponse, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::ReadTagsResponse, _impl_.values_), + PROTOBUF_FIELD_OFFSET(::hc900::ReadTagsResponse, _impl_.from_cache_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::WriteTagRequest, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::WriteTagRequest, _impl_.tag_name_), + PROTOBUF_FIELD_OFFSET(::hc900::WriteTagRequest, _impl_.value_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::WriteTagResponse, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::WriteTagResponse, _impl_.success_), + PROTOBUF_FIELD_OFFSET(::hc900::WriteTagResponse, _impl_.error_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::StreamTagsRequest, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::StreamTagsRequest, _impl_.interval_ms_), + PROTOBUF_FIELD_OFFSET(::hc900::StreamTagsRequest, _impl_.tag_names_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::ListTagsRequest, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::ListTagsRequest, _impl_.filter_), + PROTOBUF_FIELD_OFFSET(::hc900::ListTagsRequest, _impl_.limit_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::ListTagsResponse, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::ListTagsResponse, _impl_.tags_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::HealthCheckRequest, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::hc900::HealthCheckResponse, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + PROTOBUF_FIELD_OFFSET(::hc900::HealthCheckResponse, _impl_.status_), + PROTOBUF_FIELD_OFFSET(::hc900::HealthCheckResponse, _impl_.uptime_sec_), + PROTOBUF_FIELD_OFFSET(::hc900::HealthCheckResponse, _impl_.poll_count_), + PROTOBUF_FIELD_OFFSET(::hc900::HealthCheckResponse, _impl_.last_poll_ms_), + PROTOBUF_FIELD_OFFSET(::hc900::HealthCheckResponse, _impl_.controller_ip_), + PROTOBUF_FIELD_OFFSET(::hc900::HealthCheckResponse, _impl_.active_tags_), +}; +static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { + { 0, -1, -1, sizeof(::hc900::TagValue)}, + { 12, -1, -1, sizeof(::hc900::TagMetadata)}, + { 25, -1, -1, sizeof(::hc900::ReadTagsRequest)}, + { 32, -1, -1, sizeof(::hc900::ReadTagsResponse)}, + { 40, -1, -1, sizeof(::hc900::WriteTagRequest)}, + { 48, -1, -1, sizeof(::hc900::WriteTagResponse)}, + { 56, -1, -1, sizeof(::hc900::StreamTagsRequest)}, + { 64, -1, -1, sizeof(::hc900::ListTagsRequest)}, + { 72, -1, -1, sizeof(::hc900::ListTagsResponse)}, + { 79, -1, -1, sizeof(::hc900::HealthCheckRequest)}, + { 85, -1, -1, sizeof(::hc900::HealthCheckResponse)}, +}; + +static const ::_pb::Message* const file_default_instances[] = { + &::hc900::_TagValue_default_instance_._instance, + &::hc900::_TagMetadata_default_instance_._instance, + &::hc900::_ReadTagsRequest_default_instance_._instance, + &::hc900::_ReadTagsResponse_default_instance_._instance, + &::hc900::_WriteTagRequest_default_instance_._instance, + &::hc900::_WriteTagResponse_default_instance_._instance, + &::hc900::_StreamTagsRequest_default_instance_._instance, + &::hc900::_ListTagsRequest_default_instance_._instance, + &::hc900::_ListTagsResponse_default_instance_._instance, + &::hc900::_HealthCheckRequest_default_instance_._instance, + &::hc900::_HealthCheckResponse_default_instance_._instance, +}; + +const char descriptor_table_protodef_modbus_5fgateway_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = + "\n\024modbus_gateway.proto\022\005hc900\032\037google/pr" + "otobuf/timestamp.proto\"\222\001\n\010TagValue\022\020\n\010t" + "ag_name\030\001 \001(\t\022\025\n\013float32_val\030\002 \001(\002H\000\022\024\n\n" + "uint16_val\030\003 \001(\rH\000\022\017\n\007quality\030\004 \001(\r\022-\n\tt" + "imestamp\030\005 \001(\0132\032.google.protobuf.Timesta" + "mpB\007\n\005value\"~\n\013TagMetadata\022\020\n\010tag_name\030\001" + " \001(\t\022\017\n\007address\030\002 \001(\r\022\r\n\005count\030\003 \001(\r\022\014\n\004" + "type\030\004 \001(\t\022\016\n\006access\030\005 \001(\t\022\023\n\013descriptio" + "n\030\006 \001(\t\022\n\n\002eu\030\007 \001(\t\"$\n\017ReadTagsRequest\022\021" + "\n\ttag_names\030\001 \003(\t\"G\n\020ReadTagsResponse\022\037\n" + "\006values\030\001 \003(\0132\017.hc900.TagValue\022\022\n\nfrom_c" + "ache\030\002 \001(\010\"2\n\017WriteTagRequest\022\020\n\010tag_nam" + "e\030\001 \001(\t\022\r\n\005value\030\002 \001(\001\"2\n\020WriteTagRespon" + "se\022\017\n\007success\030\001 \001(\010\022\r\n\005error\030\002 \001(\t\";\n\021St" + "reamTagsRequest\022\023\n\013interval_ms\030\001 \001(\005\022\021\n\t" + "tag_names\030\002 \003(\t\"0\n\017ListTagsRequest\022\016\n\006fi" + "lter\030\001 \001(\t\022\r\n\005limit\030\002 \001(\005\"4\n\020ListTagsRes" + "ponse\022 \n\004tags\030\001 \003(\0132\022.hc900.TagMetadata\"" + "\024\n\022HealthCheckRequest\"\365\001\n\023HealthCheckRes" + "ponse\0228\n\006status\030\001 \001(\0162(.hc900.HealthChec" + "kResponse.ServingStatus\022\022\n\nuptime_sec\030\002 " + "\001(\001\022\022\n\npoll_count\030\003 \001(\004\022\024\n\014last_poll_ms\030" + "\004 \001(\001\022\025\n\rcontroller_ip\030\005 \001(\t\022\023\n\013active_t" + "ags\030\006 \001(\r\":\n\rServingStatus\022\013\n\007UNKNOWN\020\000\022" + "\013\n\007SERVING\020\001\022\017\n\013NOT_SERVING\020\0022\307\002\n\rModbus" + "Gateway\022;\n\010ReadTags\022\026.hc900.ReadTagsRequ" + "est\032\027.hc900.ReadTagsResponse\022;\n\010WriteTag" + "\022\026.hc900.WriteTagRequest\032\027.hc900.WriteTa" + "gResponse\0229\n\nStreamTags\022\030.hc900.StreamTa" + "gsRequest\032\017.hc900.TagValue0\001\022;\n\010ListTags" + "\022\026.hc900.ListTagsRequest\032\027.hc900.ListTag" + "sResponse\022D\n\013HealthCheck\022\031.hc900.HealthC" + "heckRequest\032\032.hc900.HealthCheckResponseB" + "\020\252\002\rHc900.Gatewayb\006proto3" + ; +static const ::_pbi::DescriptorTable* const descriptor_table_modbus_5fgateway_2eproto_deps[1] = { + &::descriptor_table_google_2fprotobuf_2ftimestamp_2eproto, +}; +static ::_pbi::once_flag descriptor_table_modbus_5fgateway_2eproto_once; +const ::_pbi::DescriptorTable descriptor_table_modbus_5fgateway_2eproto = { + false, false, 1345, descriptor_table_protodef_modbus_5fgateway_2eproto, + "modbus_gateway.proto", + &descriptor_table_modbus_5fgateway_2eproto_once, descriptor_table_modbus_5fgateway_2eproto_deps, 1, 11, + schemas, file_default_instances, TableStruct_modbus_5fgateway_2eproto::offsets, + file_level_metadata_modbus_5fgateway_2eproto, file_level_enum_descriptors_modbus_5fgateway_2eproto, + file_level_service_descriptors_modbus_5fgateway_2eproto, +}; +PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_modbus_5fgateway_2eproto_getter() { + return &descriptor_table_modbus_5fgateway_2eproto; +} + +// Force running AddDescriptors() at dynamic initialization time. +PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_modbus_5fgateway_2eproto(&descriptor_table_modbus_5fgateway_2eproto); +namespace hc900 { +const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* HealthCheckResponse_ServingStatus_descriptor() { + ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_modbus_5fgateway_2eproto); + return file_level_enum_descriptors_modbus_5fgateway_2eproto[0]; +} +bool HealthCheckResponse_ServingStatus_IsValid(int value) { + switch (value) { + case 0: + case 1: + case 2: + return true; + default: + return false; + } +} + +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) +constexpr HealthCheckResponse_ServingStatus HealthCheckResponse::UNKNOWN; +constexpr HealthCheckResponse_ServingStatus HealthCheckResponse::SERVING; +constexpr HealthCheckResponse_ServingStatus HealthCheckResponse::NOT_SERVING; +constexpr HealthCheckResponse_ServingStatus HealthCheckResponse::ServingStatus_MIN; +constexpr HealthCheckResponse_ServingStatus HealthCheckResponse::ServingStatus_MAX; +constexpr int HealthCheckResponse::ServingStatus_ARRAYSIZE; +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) + +// =================================================================== + +class TagValue::_Internal { + public: + static const ::PROTOBUF_NAMESPACE_ID::Timestamp& timestamp(const TagValue* msg); +}; + +const ::PROTOBUF_NAMESPACE_ID::Timestamp& +TagValue::_Internal::timestamp(const TagValue* msg) { + return *msg->_impl_.timestamp_; +} +void TagValue::clear_timestamp() { + if (GetArenaForAllocation() == nullptr && _impl_.timestamp_ != nullptr) { + delete _impl_.timestamp_; + } + _impl_.timestamp_ = nullptr; +} +TagValue::TagValue(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.TagValue) +} +TagValue::TagValue(const TagValue& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + TagValue* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.tag_name_){} + , decltype(_impl_.timestamp_){nullptr} + , decltype(_impl_.quality_){} + , decltype(_impl_.value_){} + , /*decltype(_impl_._cached_size_)*/{} + , /*decltype(_impl_._oneof_case_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _impl_.tag_name_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.tag_name_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_tag_name().empty()) { + _this->_impl_.tag_name_.Set(from._internal_tag_name(), + _this->GetArenaForAllocation()); + } + if (from._internal_has_timestamp()) { + _this->_impl_.timestamp_ = new ::PROTOBUF_NAMESPACE_ID::Timestamp(*from._impl_.timestamp_); + } + _this->_impl_.quality_ = from._impl_.quality_; + clear_has_value(); + switch (from.value_case()) { + case kFloat32Val: { + _this->_internal_set_float32_val(from._internal_float32_val()); + break; + } + case kUint16Val: { + _this->_internal_set_uint16_val(from._internal_uint16_val()); + break; + } + case VALUE_NOT_SET: { + break; + } + } + // @@protoc_insertion_point(copy_constructor:hc900.TagValue) +} + +inline void TagValue::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.tag_name_){} + , decltype(_impl_.timestamp_){nullptr} + , decltype(_impl_.quality_){0u} + , decltype(_impl_.value_){} + , /*decltype(_impl_._cached_size_)*/{} + , /*decltype(_impl_._oneof_case_)*/{} + }; + _impl_.tag_name_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.tag_name_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + clear_has_value(); +} + +TagValue::~TagValue() { + // @@protoc_insertion_point(destructor:hc900.TagValue) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void TagValue::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.tag_name_.Destroy(); + if (this != internal_default_instance()) delete _impl_.timestamp_; + if (has_value()) { + clear_value(); + } +} + +void TagValue::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void TagValue::clear_value() { +// @@protoc_insertion_point(one_of_clear_start:hc900.TagValue) + switch (value_case()) { + case kFloat32Val: { + // No need to clear + break; + } + case kUint16Val: { + // No need to clear + break; + } + case VALUE_NOT_SET: { + break; + } + } + _impl_._oneof_case_[0] = VALUE_NOT_SET; +} + + +void TagValue::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.TagValue) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.tag_name_.ClearToEmpty(); + if (GetArenaForAllocation() == nullptr && _impl_.timestamp_ != nullptr) { + delete _impl_.timestamp_; + } + _impl_.timestamp_ = nullptr; + _impl_.quality_ = 0u; + clear_value(); + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* TagValue::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // string tag_name = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) { + auto str = _internal_mutable_tag_name(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.TagValue.tag_name")); + } else + goto handle_unusual; + continue; + // float float32_val = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 21)) { + _internal_set_float32_val(::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad(ptr)); + ptr += sizeof(float); + } else + goto handle_unusual; + continue; + // uint32 uint16_val = 3; + case 3: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 24)) { + _internal_set_uint16_val(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr)); + CHK_(ptr); + } else + goto handle_unusual; + continue; + // uint32 quality = 4; + case 4: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 32)) { + _impl_.quality_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + // .google.protobuf.Timestamp timestamp = 5; + case 5: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 42)) { + ptr = ctx->ParseMessage(_internal_mutable_timestamp(), ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* TagValue::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.TagValue) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // string tag_name = 1; + if (!this->_internal_tag_name().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_tag_name().data(), static_cast(this->_internal_tag_name().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.TagValue.tag_name"); + target = stream->WriteStringMaybeAliased( + 1, this->_internal_tag_name(), target); + } + + // float float32_val = 2; + if (_internal_has_float32_val()) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteFloatToArray(2, this->_internal_float32_val(), target); + } + + // uint32 uint16_val = 3; + if (_internal_has_uint16_val()) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt32ToArray(3, this->_internal_uint16_val(), target); + } + + // uint32 quality = 4; + if (this->_internal_quality() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt32ToArray(4, this->_internal_quality(), target); + } + + // .google.protobuf.Timestamp timestamp = 5; + if (this->_internal_has_timestamp()) { + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: + InternalWriteMessage(5, _Internal::timestamp(this), + _Internal::timestamp(this).GetCachedSize(), target, stream); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.TagValue) + return target; +} + +size_t TagValue::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.TagValue) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string tag_name = 1; + if (!this->_internal_tag_name().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_tag_name()); + } + + // .google.protobuf.Timestamp timestamp = 5; + if (this->_internal_has_timestamp()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( + *_impl_.timestamp_); + } + + // uint32 quality = 4; + if (this->_internal_quality() != 0) { + total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_quality()); + } + + switch (value_case()) { + // float float32_val = 2; + case kFloat32Val: { + total_size += 1 + 4; + break; + } + // uint32 uint16_val = 3; + case kUint16Val: { + total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_uint16_val()); + break; + } + case VALUE_NOT_SET: { + break; + } + } + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData TagValue::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + TagValue::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*TagValue::GetClassData() const { return &_class_data_; } + + +void TagValue::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.TagValue) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_tag_name().empty()) { + _this->_internal_set_tag_name(from._internal_tag_name()); + } + if (from._internal_has_timestamp()) { + _this->_internal_mutable_timestamp()->::PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom( + from._internal_timestamp()); + } + if (from._internal_quality() != 0) { + _this->_internal_set_quality(from._internal_quality()); + } + switch (from.value_case()) { + case kFloat32Val: { + _this->_internal_set_float32_val(from._internal_float32_val()); + break; + } + case kUint16Val: { + _this->_internal_set_uint16_val(from._internal_uint16_val()); + break; + } + case VALUE_NOT_SET: { + break; + } + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void TagValue::CopyFrom(const TagValue& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.TagValue) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool TagValue::IsInitialized() const { + return true; +} + +void TagValue::InternalSwap(TagValue* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.tag_name_, lhs_arena, + &other->_impl_.tag_name_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::memswap< + PROTOBUF_FIELD_OFFSET(TagValue, _impl_.quality_) + + sizeof(TagValue::_impl_.quality_) + - PROTOBUF_FIELD_OFFSET(TagValue, _impl_.timestamp_)>( + reinterpret_cast(&_impl_.timestamp_), + reinterpret_cast(&other->_impl_.timestamp_)); + swap(_impl_.value_, other->_impl_.value_); + swap(_impl_._oneof_case_[0], other->_impl_._oneof_case_[0]); +} + +::PROTOBUF_NAMESPACE_ID::Metadata TagValue::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[0]); +} + +// =================================================================== + +class TagMetadata::_Internal { + public: +}; + +TagMetadata::TagMetadata(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.TagMetadata) +} +TagMetadata::TagMetadata(const TagMetadata& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + TagMetadata* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.tag_name_){} + , decltype(_impl_.type_){} + , decltype(_impl_.access_){} + , decltype(_impl_.description_){} + , decltype(_impl_.eu_){} + , decltype(_impl_.address_){} + , decltype(_impl_.count_){} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _impl_.tag_name_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.tag_name_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_tag_name().empty()) { + _this->_impl_.tag_name_.Set(from._internal_tag_name(), + _this->GetArenaForAllocation()); + } + _impl_.type_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.type_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_type().empty()) { + _this->_impl_.type_.Set(from._internal_type(), + _this->GetArenaForAllocation()); + } + _impl_.access_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.access_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_access().empty()) { + _this->_impl_.access_.Set(from._internal_access(), + _this->GetArenaForAllocation()); + } + _impl_.description_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.description_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_description().empty()) { + _this->_impl_.description_.Set(from._internal_description(), + _this->GetArenaForAllocation()); + } + _impl_.eu_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.eu_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_eu().empty()) { + _this->_impl_.eu_.Set(from._internal_eu(), + _this->GetArenaForAllocation()); + } + ::memcpy(&_impl_.address_, &from._impl_.address_, + static_cast(reinterpret_cast(&_impl_.count_) - + reinterpret_cast(&_impl_.address_)) + sizeof(_impl_.count_)); + // @@protoc_insertion_point(copy_constructor:hc900.TagMetadata) +} + +inline void TagMetadata::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.tag_name_){} + , decltype(_impl_.type_){} + , decltype(_impl_.access_){} + , decltype(_impl_.description_){} + , decltype(_impl_.eu_){} + , decltype(_impl_.address_){0u} + , decltype(_impl_.count_){0u} + , /*decltype(_impl_._cached_size_)*/{} + }; + _impl_.tag_name_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.tag_name_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.type_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.type_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.access_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.access_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.description_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.description_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.eu_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.eu_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING +} + +TagMetadata::~TagMetadata() { + // @@protoc_insertion_point(destructor:hc900.TagMetadata) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void TagMetadata::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.tag_name_.Destroy(); + _impl_.type_.Destroy(); + _impl_.access_.Destroy(); + _impl_.description_.Destroy(); + _impl_.eu_.Destroy(); +} + +void TagMetadata::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void TagMetadata::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.TagMetadata) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.tag_name_.ClearToEmpty(); + _impl_.type_.ClearToEmpty(); + _impl_.access_.ClearToEmpty(); + _impl_.description_.ClearToEmpty(); + _impl_.eu_.ClearToEmpty(); + ::memset(&_impl_.address_, 0, static_cast( + reinterpret_cast(&_impl_.count_) - + reinterpret_cast(&_impl_.address_)) + sizeof(_impl_.count_)); + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* TagMetadata::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // string tag_name = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) { + auto str = _internal_mutable_tag_name(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.TagMetadata.tag_name")); + } else + goto handle_unusual; + continue; + // uint32 address = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 16)) { + _impl_.address_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + // uint32 count = 3; + case 3: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 24)) { + _impl_.count_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + // string type = 4; + case 4: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 34)) { + auto str = _internal_mutable_type(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.TagMetadata.type")); + } else + goto handle_unusual; + continue; + // string access = 5; + case 5: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 42)) { + auto str = _internal_mutable_access(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.TagMetadata.access")); + } else + goto handle_unusual; + continue; + // string description = 6; + case 6: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 50)) { + auto str = _internal_mutable_description(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.TagMetadata.description")); + } else + goto handle_unusual; + continue; + // string eu = 7; + case 7: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 58)) { + auto str = _internal_mutable_eu(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.TagMetadata.eu")); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* TagMetadata::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.TagMetadata) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // string tag_name = 1; + if (!this->_internal_tag_name().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_tag_name().data(), static_cast(this->_internal_tag_name().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.TagMetadata.tag_name"); + target = stream->WriteStringMaybeAliased( + 1, this->_internal_tag_name(), target); + } + + // uint32 address = 2; + if (this->_internal_address() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt32ToArray(2, this->_internal_address(), target); + } + + // uint32 count = 3; + if (this->_internal_count() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt32ToArray(3, this->_internal_count(), target); + } + + // string type = 4; + if (!this->_internal_type().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_type().data(), static_cast(this->_internal_type().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.TagMetadata.type"); + target = stream->WriteStringMaybeAliased( + 4, this->_internal_type(), target); + } + + // string access = 5; + if (!this->_internal_access().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_access().data(), static_cast(this->_internal_access().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.TagMetadata.access"); + target = stream->WriteStringMaybeAliased( + 5, this->_internal_access(), target); + } + + // string description = 6; + if (!this->_internal_description().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_description().data(), static_cast(this->_internal_description().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.TagMetadata.description"); + target = stream->WriteStringMaybeAliased( + 6, this->_internal_description(), target); + } + + // string eu = 7; + if (!this->_internal_eu().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_eu().data(), static_cast(this->_internal_eu().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.TagMetadata.eu"); + target = stream->WriteStringMaybeAliased( + 7, this->_internal_eu(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.TagMetadata) + return target; +} + +size_t TagMetadata::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.TagMetadata) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string tag_name = 1; + if (!this->_internal_tag_name().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_tag_name()); + } + + // string type = 4; + if (!this->_internal_type().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_type()); + } + + // string access = 5; + if (!this->_internal_access().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_access()); + } + + // string description = 6; + if (!this->_internal_description().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_description()); + } + + // string eu = 7; + if (!this->_internal_eu().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_eu()); + } + + // uint32 address = 2; + if (this->_internal_address() != 0) { + total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_address()); + } + + // uint32 count = 3; + if (this->_internal_count() != 0) { + total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_count()); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData TagMetadata::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + TagMetadata::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*TagMetadata::GetClassData() const { return &_class_data_; } + + +void TagMetadata::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.TagMetadata) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_tag_name().empty()) { + _this->_internal_set_tag_name(from._internal_tag_name()); + } + if (!from._internal_type().empty()) { + _this->_internal_set_type(from._internal_type()); + } + if (!from._internal_access().empty()) { + _this->_internal_set_access(from._internal_access()); + } + if (!from._internal_description().empty()) { + _this->_internal_set_description(from._internal_description()); + } + if (!from._internal_eu().empty()) { + _this->_internal_set_eu(from._internal_eu()); + } + if (from._internal_address() != 0) { + _this->_internal_set_address(from._internal_address()); + } + if (from._internal_count() != 0) { + _this->_internal_set_count(from._internal_count()); + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void TagMetadata::CopyFrom(const TagMetadata& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.TagMetadata) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool TagMetadata::IsInitialized() const { + return true; +} + +void TagMetadata::InternalSwap(TagMetadata* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.tag_name_, lhs_arena, + &other->_impl_.tag_name_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.type_, lhs_arena, + &other->_impl_.type_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.access_, lhs_arena, + &other->_impl_.access_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.description_, lhs_arena, + &other->_impl_.description_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.eu_, lhs_arena, + &other->_impl_.eu_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::memswap< + PROTOBUF_FIELD_OFFSET(TagMetadata, _impl_.count_) + + sizeof(TagMetadata::_impl_.count_) + - PROTOBUF_FIELD_OFFSET(TagMetadata, _impl_.address_)>( + reinterpret_cast(&_impl_.address_), + reinterpret_cast(&other->_impl_.address_)); +} + +::PROTOBUF_NAMESPACE_ID::Metadata TagMetadata::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[1]); +} + +// =================================================================== + +class ReadTagsRequest::_Internal { + public: +}; + +ReadTagsRequest::ReadTagsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.ReadTagsRequest) +} +ReadTagsRequest::ReadTagsRequest(const ReadTagsRequest& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + ReadTagsRequest* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.tag_names_){from._impl_.tag_names_} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + // @@protoc_insertion_point(copy_constructor:hc900.ReadTagsRequest) +} + +inline void ReadTagsRequest::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.tag_names_){arena} + , /*decltype(_impl_._cached_size_)*/{} + }; +} + +ReadTagsRequest::~ReadTagsRequest() { + // @@protoc_insertion_point(destructor:hc900.ReadTagsRequest) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void ReadTagsRequest::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.tag_names_.~RepeatedPtrField(); +} + +void ReadTagsRequest::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void ReadTagsRequest::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.ReadTagsRequest) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.tag_names_.Clear(); + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* ReadTagsRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // repeated string tag_names = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) { + ptr -= 1; + do { + ptr += 1; + auto str = _internal_add_tag_names(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.ReadTagsRequest.tag_names")); + if (!ctx->DataAvailable(ptr)) break; + } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr)); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* ReadTagsRequest::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.ReadTagsRequest) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // repeated string tag_names = 1; + for (int i = 0, n = this->_internal_tag_names_size(); i < n; i++) { + const auto& s = this->_internal_tag_names(i); + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + s.data(), static_cast(s.length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.ReadTagsRequest.tag_names"); + target = stream->WriteString(1, s, target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.ReadTagsRequest) + return target; +} + +size_t ReadTagsRequest::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.ReadTagsRequest) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // repeated string tag_names = 1; + total_size += 1 * + ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(_impl_.tag_names_.size()); + for (int i = 0, n = _impl_.tag_names_.size(); i < n; i++) { + total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + _impl_.tag_names_.Get(i)); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData ReadTagsRequest::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + ReadTagsRequest::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*ReadTagsRequest::GetClassData() const { return &_class_data_; } + + +void ReadTagsRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.ReadTagsRequest) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + _this->_impl_.tag_names_.MergeFrom(from._impl_.tag_names_); + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void ReadTagsRequest::CopyFrom(const ReadTagsRequest& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.ReadTagsRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool ReadTagsRequest::IsInitialized() const { + return true; +} + +void ReadTagsRequest::InternalSwap(ReadTagsRequest* other) { + using std::swap; + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + _impl_.tag_names_.InternalSwap(&other->_impl_.tag_names_); +} + +::PROTOBUF_NAMESPACE_ID::Metadata ReadTagsRequest::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[2]); +} + +// =================================================================== + +class ReadTagsResponse::_Internal { + public: +}; + +ReadTagsResponse::ReadTagsResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.ReadTagsResponse) +} +ReadTagsResponse::ReadTagsResponse(const ReadTagsResponse& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + ReadTagsResponse* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.values_){from._impl_.values_} + , decltype(_impl_.from_cache_){} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _this->_impl_.from_cache_ = from._impl_.from_cache_; + // @@protoc_insertion_point(copy_constructor:hc900.ReadTagsResponse) +} + +inline void ReadTagsResponse::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.values_){arena} + , decltype(_impl_.from_cache_){false} + , /*decltype(_impl_._cached_size_)*/{} + }; +} + +ReadTagsResponse::~ReadTagsResponse() { + // @@protoc_insertion_point(destructor:hc900.ReadTagsResponse) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void ReadTagsResponse::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.values_.~RepeatedPtrField(); +} + +void ReadTagsResponse::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void ReadTagsResponse::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.ReadTagsResponse) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.values_.Clear(); + _impl_.from_cache_ = false; + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* ReadTagsResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // repeated .hc900.TagValue values = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) { + ptr -= 1; + do { + ptr += 1; + ptr = ctx->ParseMessage(_internal_add_values(), ptr); + CHK_(ptr); + if (!ctx->DataAvailable(ptr)) break; + } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr)); + } else + goto handle_unusual; + continue; + // bool from_cache = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 16)) { + _impl_.from_cache_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* ReadTagsResponse::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.ReadTagsResponse) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // repeated .hc900.TagValue values = 1; + for (unsigned i = 0, + n = static_cast(this->_internal_values_size()); i < n; i++) { + const auto& repfield = this->_internal_values(i); + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: + InternalWriteMessage(1, repfield, repfield.GetCachedSize(), target, stream); + } + + // bool from_cache = 2; + if (this->_internal_from_cache() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteBoolToArray(2, this->_internal_from_cache(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.ReadTagsResponse) + return target; +} + +size_t ReadTagsResponse::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.ReadTagsResponse) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // repeated .hc900.TagValue values = 1; + total_size += 1UL * this->_internal_values_size(); + for (const auto& msg : this->_impl_.values_) { + total_size += + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg); + } + + // bool from_cache = 2; + if (this->_internal_from_cache() != 0) { + total_size += 1 + 1; + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData ReadTagsResponse::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + ReadTagsResponse::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*ReadTagsResponse::GetClassData() const { return &_class_data_; } + + +void ReadTagsResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.ReadTagsResponse) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + _this->_impl_.values_.MergeFrom(from._impl_.values_); + if (from._internal_from_cache() != 0) { + _this->_internal_set_from_cache(from._internal_from_cache()); + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void ReadTagsResponse::CopyFrom(const ReadTagsResponse& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.ReadTagsResponse) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool ReadTagsResponse::IsInitialized() const { + return true; +} + +void ReadTagsResponse::InternalSwap(ReadTagsResponse* other) { + using std::swap; + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + _impl_.values_.InternalSwap(&other->_impl_.values_); + swap(_impl_.from_cache_, other->_impl_.from_cache_); +} + +::PROTOBUF_NAMESPACE_ID::Metadata ReadTagsResponse::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[3]); +} + +// =================================================================== + +class WriteTagRequest::_Internal { + public: +}; + +WriteTagRequest::WriteTagRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.WriteTagRequest) +} +WriteTagRequest::WriteTagRequest(const WriteTagRequest& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + WriteTagRequest* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.tag_name_){} + , decltype(_impl_.value_){} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _impl_.tag_name_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.tag_name_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_tag_name().empty()) { + _this->_impl_.tag_name_.Set(from._internal_tag_name(), + _this->GetArenaForAllocation()); + } + _this->_impl_.value_ = from._impl_.value_; + // @@protoc_insertion_point(copy_constructor:hc900.WriteTagRequest) +} + +inline void WriteTagRequest::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.tag_name_){} + , decltype(_impl_.value_){0} + , /*decltype(_impl_._cached_size_)*/{} + }; + _impl_.tag_name_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.tag_name_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING +} + +WriteTagRequest::~WriteTagRequest() { + // @@protoc_insertion_point(destructor:hc900.WriteTagRequest) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void WriteTagRequest::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.tag_name_.Destroy(); +} + +void WriteTagRequest::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void WriteTagRequest::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.WriteTagRequest) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.tag_name_.ClearToEmpty(); + _impl_.value_ = 0; + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* WriteTagRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // string tag_name = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) { + auto str = _internal_mutable_tag_name(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.WriteTagRequest.tag_name")); + } else + goto handle_unusual; + continue; + // double value = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 17)) { + _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad(ptr); + ptr += sizeof(double); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* WriteTagRequest::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.WriteTagRequest) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // string tag_name = 1; + if (!this->_internal_tag_name().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_tag_name().data(), static_cast(this->_internal_tag_name().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.WriteTagRequest.tag_name"); + target = stream->WriteStringMaybeAliased( + 1, this->_internal_tag_name(), target); + } + + // double value = 2; + static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); + double tmp_value = this->_internal_value(); + uint64_t raw_value; + memcpy(&raw_value, &tmp_value, sizeof(tmp_value)); + if (raw_value != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteDoubleToArray(2, this->_internal_value(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.WriteTagRequest) + return target; +} + +size_t WriteTagRequest::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.WriteTagRequest) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string tag_name = 1; + if (!this->_internal_tag_name().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_tag_name()); + } + + // double value = 2; + static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); + double tmp_value = this->_internal_value(); + uint64_t raw_value; + memcpy(&raw_value, &tmp_value, sizeof(tmp_value)); + if (raw_value != 0) { + total_size += 1 + 8; + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData WriteTagRequest::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + WriteTagRequest::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*WriteTagRequest::GetClassData() const { return &_class_data_; } + + +void WriteTagRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.WriteTagRequest) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_tag_name().empty()) { + _this->_internal_set_tag_name(from._internal_tag_name()); + } + static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); + double tmp_value = from._internal_value(); + uint64_t raw_value; + memcpy(&raw_value, &tmp_value, sizeof(tmp_value)); + if (raw_value != 0) { + _this->_internal_set_value(from._internal_value()); + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void WriteTagRequest::CopyFrom(const WriteTagRequest& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.WriteTagRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool WriteTagRequest::IsInitialized() const { + return true; +} + +void WriteTagRequest::InternalSwap(WriteTagRequest* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.tag_name_, lhs_arena, + &other->_impl_.tag_name_, rhs_arena + ); + swap(_impl_.value_, other->_impl_.value_); +} + +::PROTOBUF_NAMESPACE_ID::Metadata WriteTagRequest::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[4]); +} + +// =================================================================== + +class WriteTagResponse::_Internal { + public: +}; + +WriteTagResponse::WriteTagResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.WriteTagResponse) +} +WriteTagResponse::WriteTagResponse(const WriteTagResponse& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + WriteTagResponse* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.error_){} + , decltype(_impl_.success_){} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _impl_.error_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.error_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_error().empty()) { + _this->_impl_.error_.Set(from._internal_error(), + _this->GetArenaForAllocation()); + } + _this->_impl_.success_ = from._impl_.success_; + // @@protoc_insertion_point(copy_constructor:hc900.WriteTagResponse) +} + +inline void WriteTagResponse::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.error_){} + , decltype(_impl_.success_){false} + , /*decltype(_impl_._cached_size_)*/{} + }; + _impl_.error_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.error_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING +} + +WriteTagResponse::~WriteTagResponse() { + // @@protoc_insertion_point(destructor:hc900.WriteTagResponse) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void WriteTagResponse::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.error_.Destroy(); +} + +void WriteTagResponse::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void WriteTagResponse::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.WriteTagResponse) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.error_.ClearToEmpty(); + _impl_.success_ = false; + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* WriteTagResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // bool success = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 8)) { + _impl_.success_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + // string error = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 18)) { + auto str = _internal_mutable_error(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.WriteTagResponse.error")); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* WriteTagResponse::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.WriteTagResponse) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // bool success = 1; + if (this->_internal_success() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteBoolToArray(1, this->_internal_success(), target); + } + + // string error = 2; + if (!this->_internal_error().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_error().data(), static_cast(this->_internal_error().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.WriteTagResponse.error"); + target = stream->WriteStringMaybeAliased( + 2, this->_internal_error(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.WriteTagResponse) + return target; +} + +size_t WriteTagResponse::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.WriteTagResponse) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string error = 2; + if (!this->_internal_error().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_error()); + } + + // bool success = 1; + if (this->_internal_success() != 0) { + total_size += 1 + 1; + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData WriteTagResponse::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + WriteTagResponse::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*WriteTagResponse::GetClassData() const { return &_class_data_; } + + +void WriteTagResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.WriteTagResponse) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_error().empty()) { + _this->_internal_set_error(from._internal_error()); + } + if (from._internal_success() != 0) { + _this->_internal_set_success(from._internal_success()); + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void WriteTagResponse::CopyFrom(const WriteTagResponse& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.WriteTagResponse) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool WriteTagResponse::IsInitialized() const { + return true; +} + +void WriteTagResponse::InternalSwap(WriteTagResponse* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.error_, lhs_arena, + &other->_impl_.error_, rhs_arena + ); + swap(_impl_.success_, other->_impl_.success_); +} + +::PROTOBUF_NAMESPACE_ID::Metadata WriteTagResponse::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[5]); +} + +// =================================================================== + +class StreamTagsRequest::_Internal { + public: +}; + +StreamTagsRequest::StreamTagsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.StreamTagsRequest) +} +StreamTagsRequest::StreamTagsRequest(const StreamTagsRequest& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + StreamTagsRequest* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.tag_names_){from._impl_.tag_names_} + , decltype(_impl_.interval_ms_){} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _this->_impl_.interval_ms_ = from._impl_.interval_ms_; + // @@protoc_insertion_point(copy_constructor:hc900.StreamTagsRequest) +} + +inline void StreamTagsRequest::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.tag_names_){arena} + , decltype(_impl_.interval_ms_){0} + , /*decltype(_impl_._cached_size_)*/{} + }; +} + +StreamTagsRequest::~StreamTagsRequest() { + // @@protoc_insertion_point(destructor:hc900.StreamTagsRequest) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void StreamTagsRequest::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.tag_names_.~RepeatedPtrField(); +} + +void StreamTagsRequest::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void StreamTagsRequest::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.StreamTagsRequest) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.tag_names_.Clear(); + _impl_.interval_ms_ = 0; + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* StreamTagsRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // int32 interval_ms = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 8)) { + _impl_.interval_ms_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + // repeated string tag_names = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 18)) { + ptr -= 1; + do { + ptr += 1; + auto str = _internal_add_tag_names(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.StreamTagsRequest.tag_names")); + if (!ctx->DataAvailable(ptr)) break; + } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<18>(ptr)); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* StreamTagsRequest::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.StreamTagsRequest) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // int32 interval_ms = 1; + if (this->_internal_interval_ms() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteInt32ToArray(1, this->_internal_interval_ms(), target); + } + + // repeated string tag_names = 2; + for (int i = 0, n = this->_internal_tag_names_size(); i < n; i++) { + const auto& s = this->_internal_tag_names(i); + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + s.data(), static_cast(s.length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.StreamTagsRequest.tag_names"); + target = stream->WriteString(2, s, target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.StreamTagsRequest) + return target; +} + +size_t StreamTagsRequest::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.StreamTagsRequest) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // repeated string tag_names = 2; + total_size += 1 * + ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(_impl_.tag_names_.size()); + for (int i = 0, n = _impl_.tag_names_.size(); i < n; i++) { + total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + _impl_.tag_names_.Get(i)); + } + + // int32 interval_ms = 1; + if (this->_internal_interval_ms() != 0) { + total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_interval_ms()); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData StreamTagsRequest::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + StreamTagsRequest::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*StreamTagsRequest::GetClassData() const { return &_class_data_; } + + +void StreamTagsRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.StreamTagsRequest) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + _this->_impl_.tag_names_.MergeFrom(from._impl_.tag_names_); + if (from._internal_interval_ms() != 0) { + _this->_internal_set_interval_ms(from._internal_interval_ms()); + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void StreamTagsRequest::CopyFrom(const StreamTagsRequest& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.StreamTagsRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool StreamTagsRequest::IsInitialized() const { + return true; +} + +void StreamTagsRequest::InternalSwap(StreamTagsRequest* other) { + using std::swap; + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + _impl_.tag_names_.InternalSwap(&other->_impl_.tag_names_); + swap(_impl_.interval_ms_, other->_impl_.interval_ms_); +} + +::PROTOBUF_NAMESPACE_ID::Metadata StreamTagsRequest::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[6]); +} + +// =================================================================== + +class ListTagsRequest::_Internal { + public: +}; + +ListTagsRequest::ListTagsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.ListTagsRequest) +} +ListTagsRequest::ListTagsRequest(const ListTagsRequest& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + ListTagsRequest* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.filter_){} + , decltype(_impl_.limit_){} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _impl_.filter_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.filter_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_filter().empty()) { + _this->_impl_.filter_.Set(from._internal_filter(), + _this->GetArenaForAllocation()); + } + _this->_impl_.limit_ = from._impl_.limit_; + // @@protoc_insertion_point(copy_constructor:hc900.ListTagsRequest) +} + +inline void ListTagsRequest::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.filter_){} + , decltype(_impl_.limit_){0} + , /*decltype(_impl_._cached_size_)*/{} + }; + _impl_.filter_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.filter_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING +} + +ListTagsRequest::~ListTagsRequest() { + // @@protoc_insertion_point(destructor:hc900.ListTagsRequest) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void ListTagsRequest::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.filter_.Destroy(); +} + +void ListTagsRequest::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void ListTagsRequest::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.ListTagsRequest) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.filter_.ClearToEmpty(); + _impl_.limit_ = 0; + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* ListTagsRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // string filter = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) { + auto str = _internal_mutable_filter(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.ListTagsRequest.filter")); + } else + goto handle_unusual; + continue; + // int32 limit = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 16)) { + _impl_.limit_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* ListTagsRequest::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.ListTagsRequest) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // string filter = 1; + if (!this->_internal_filter().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_filter().data(), static_cast(this->_internal_filter().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.ListTagsRequest.filter"); + target = stream->WriteStringMaybeAliased( + 1, this->_internal_filter(), target); + } + + // int32 limit = 2; + if (this->_internal_limit() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_limit(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.ListTagsRequest) + return target; +} + +size_t ListTagsRequest::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.ListTagsRequest) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string filter = 1; + if (!this->_internal_filter().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_filter()); + } + + // int32 limit = 2; + if (this->_internal_limit() != 0) { + total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_limit()); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData ListTagsRequest::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + ListTagsRequest::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*ListTagsRequest::GetClassData() const { return &_class_data_; } + + +void ListTagsRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.ListTagsRequest) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_filter().empty()) { + _this->_internal_set_filter(from._internal_filter()); + } + if (from._internal_limit() != 0) { + _this->_internal_set_limit(from._internal_limit()); + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void ListTagsRequest::CopyFrom(const ListTagsRequest& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.ListTagsRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool ListTagsRequest::IsInitialized() const { + return true; +} + +void ListTagsRequest::InternalSwap(ListTagsRequest* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.filter_, lhs_arena, + &other->_impl_.filter_, rhs_arena + ); + swap(_impl_.limit_, other->_impl_.limit_); +} + +::PROTOBUF_NAMESPACE_ID::Metadata ListTagsRequest::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[7]); +} + +// =================================================================== + +class ListTagsResponse::_Internal { + public: +}; + +ListTagsResponse::ListTagsResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.ListTagsResponse) +} +ListTagsResponse::ListTagsResponse(const ListTagsResponse& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + ListTagsResponse* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.tags_){from._impl_.tags_} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + // @@protoc_insertion_point(copy_constructor:hc900.ListTagsResponse) +} + +inline void ListTagsResponse::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.tags_){arena} + , /*decltype(_impl_._cached_size_)*/{} + }; +} + +ListTagsResponse::~ListTagsResponse() { + // @@protoc_insertion_point(destructor:hc900.ListTagsResponse) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void ListTagsResponse::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.tags_.~RepeatedPtrField(); +} + +void ListTagsResponse::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void ListTagsResponse::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.ListTagsResponse) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.tags_.Clear(); + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* ListTagsResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // repeated .hc900.TagMetadata tags = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) { + ptr -= 1; + do { + ptr += 1; + ptr = ctx->ParseMessage(_internal_add_tags(), ptr); + CHK_(ptr); + if (!ctx->DataAvailable(ptr)) break; + } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr)); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* ListTagsResponse::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.ListTagsResponse) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // repeated .hc900.TagMetadata tags = 1; + for (unsigned i = 0, + n = static_cast(this->_internal_tags_size()); i < n; i++) { + const auto& repfield = this->_internal_tags(i); + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: + InternalWriteMessage(1, repfield, repfield.GetCachedSize(), target, stream); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.ListTagsResponse) + return target; +} + +size_t ListTagsResponse::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.ListTagsResponse) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // repeated .hc900.TagMetadata tags = 1; + total_size += 1UL * this->_internal_tags_size(); + for (const auto& msg : this->_impl_.tags_) { + total_size += + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData ListTagsResponse::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + ListTagsResponse::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*ListTagsResponse::GetClassData() const { return &_class_data_; } + + +void ListTagsResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.ListTagsResponse) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + _this->_impl_.tags_.MergeFrom(from._impl_.tags_); + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void ListTagsResponse::CopyFrom(const ListTagsResponse& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.ListTagsResponse) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool ListTagsResponse::IsInitialized() const { + return true; +} + +void ListTagsResponse::InternalSwap(ListTagsResponse* other) { + using std::swap; + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + _impl_.tags_.InternalSwap(&other->_impl_.tags_); +} + +::PROTOBUF_NAMESPACE_ID::Metadata ListTagsResponse::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[8]); +} + +// =================================================================== + +class HealthCheckRequest::_Internal { + public: +}; + +HealthCheckRequest::HealthCheckRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase(arena, is_message_owned) { + // @@protoc_insertion_point(arena_constructor:hc900.HealthCheckRequest) +} +HealthCheckRequest::HealthCheckRequest(const HealthCheckRequest& from) + : ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase() { + HealthCheckRequest* const _this = this; (void)_this; + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + // @@protoc_insertion_point(copy_constructor:hc900.HealthCheckRequest) +} + + + + + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData HealthCheckRequest::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl, + ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl, +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*HealthCheckRequest::GetClassData() const { return &_class_data_; } + + + + + + + +::PROTOBUF_NAMESPACE_ID::Metadata HealthCheckRequest::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[9]); +} + +// =================================================================== + +class HealthCheckResponse::_Internal { + public: +}; + +HealthCheckResponse::HealthCheckResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned) + : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) { + SharedCtor(arena, is_message_owned); + // @@protoc_insertion_point(arena_constructor:hc900.HealthCheckResponse) +} +HealthCheckResponse::HealthCheckResponse(const HealthCheckResponse& from) + : ::PROTOBUF_NAMESPACE_ID::Message() { + HealthCheckResponse* const _this = this; (void)_this; + new (&_impl_) Impl_{ + decltype(_impl_.controller_ip_){} + , decltype(_impl_.uptime_sec_){} + , decltype(_impl_.poll_count_){} + , decltype(_impl_.status_){} + , decltype(_impl_.active_tags_){} + , decltype(_impl_.last_poll_ms_){} + , /*decltype(_impl_._cached_size_)*/{}}; + + _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); + _impl_.controller_ip_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.controller_ip_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_controller_ip().empty()) { + _this->_impl_.controller_ip_.Set(from._internal_controller_ip(), + _this->GetArenaForAllocation()); + } + ::memcpy(&_impl_.uptime_sec_, &from._impl_.uptime_sec_, + static_cast(reinterpret_cast(&_impl_.last_poll_ms_) - + reinterpret_cast(&_impl_.uptime_sec_)) + sizeof(_impl_.last_poll_ms_)); + // @@protoc_insertion_point(copy_constructor:hc900.HealthCheckResponse) +} + +inline void HealthCheckResponse::SharedCtor( + ::_pb::Arena* arena, bool is_message_owned) { + (void)arena; + (void)is_message_owned; + new (&_impl_) Impl_{ + decltype(_impl_.controller_ip_){} + , decltype(_impl_.uptime_sec_){0} + , decltype(_impl_.poll_count_){uint64_t{0u}} + , decltype(_impl_.status_){0} + , decltype(_impl_.active_tags_){0u} + , decltype(_impl_.last_poll_ms_){0} + , /*decltype(_impl_._cached_size_)*/{} + }; + _impl_.controller_ip_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.controller_ip_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING +} + +HealthCheckResponse::~HealthCheckResponse() { + // @@protoc_insertion_point(destructor:hc900.HealthCheckResponse) + if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) { + (void)arena; + return; + } + SharedDtor(); +} + +inline void HealthCheckResponse::SharedDtor() { + GOOGLE_DCHECK(GetArenaForAllocation() == nullptr); + _impl_.controller_ip_.Destroy(); +} + +void HealthCheckResponse::SetCachedSize(int size) const { + _impl_._cached_size_.Set(size); +} + +void HealthCheckResponse::Clear() { +// @@protoc_insertion_point(message_clear_start:hc900.HealthCheckResponse) + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.controller_ip_.ClearToEmpty(); + ::memset(&_impl_.uptime_sec_, 0, static_cast( + reinterpret_cast(&_impl_.last_poll_ms_) - + reinterpret_cast(&_impl_.uptime_sec_)) + sizeof(_impl_.last_poll_ms_)); + _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); +} + +const char* HealthCheckResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + uint32_t tag; + ptr = ::_pbi::ReadTag(ptr, &tag); + switch (tag >> 3) { + // .hc900.HealthCheckResponse.ServingStatus status = 1; + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 8)) { + uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); + CHK_(ptr); + _internal_set_status(static_cast<::hc900::HealthCheckResponse_ServingStatus>(val)); + } else + goto handle_unusual; + continue; + // double uptime_sec = 2; + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 17)) { + _impl_.uptime_sec_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad(ptr); + ptr += sizeof(double); + } else + goto handle_unusual; + continue; + // uint64 poll_count = 3; + case 3: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 24)) { + _impl_.poll_count_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + // double last_poll_ms = 4; + case 4: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 33)) { + _impl_.last_poll_ms_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad(ptr); + ptr += sizeof(double); + } else + goto handle_unusual; + continue; + // string controller_ip = 5; + case 5: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 42)) { + auto str = _internal_mutable_controller_ip(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "hc900.HealthCheckResponse.controller_ip")); + } else + goto handle_unusual; + continue; + // uint32 active_tags = 6; + case 6: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 48)) { + _impl_.active_tags_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; + default: + goto handle_unusual; + } // switch + handle_unusual: + if ((tag == 0) || ((tag & 7) == 4)) { + CHK_(ptr); + ctx->SetLastTag(tag); + goto message_done; + } + ptr = UnknownFieldParse( + tag, + _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(), + ptr, ctx); + CHK_(ptr != nullptr); + } // while +message_done: + return ptr; +failure: + ptr = nullptr; + goto message_done; +#undef CHK_ +} + +uint8_t* HealthCheckResponse::_InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:hc900.HealthCheckResponse) + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + // .hc900.HealthCheckResponse.ServingStatus status = 1; + if (this->_internal_status() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteEnumToArray( + 1, this->_internal_status(), target); + } + + // double uptime_sec = 2; + static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); + double tmp_uptime_sec = this->_internal_uptime_sec(); + uint64_t raw_uptime_sec; + memcpy(&raw_uptime_sec, &tmp_uptime_sec, sizeof(tmp_uptime_sec)); + if (raw_uptime_sec != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteDoubleToArray(2, this->_internal_uptime_sec(), target); + } + + // uint64 poll_count = 3; + if (this->_internal_poll_count() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt64ToArray(3, this->_internal_poll_count(), target); + } + + // double last_poll_ms = 4; + static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); + double tmp_last_poll_ms = this->_internal_last_poll_ms(); + uint64_t raw_last_poll_ms; + memcpy(&raw_last_poll_ms, &tmp_last_poll_ms, sizeof(tmp_last_poll_ms)); + if (raw_last_poll_ms != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteDoubleToArray(4, this->_internal_last_poll_ms(), target); + } + + // string controller_ip = 5; + if (!this->_internal_controller_ip().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_controller_ip().data(), static_cast(this->_internal_controller_ip().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "hc900.HealthCheckResponse.controller_ip"); + target = stream->WriteStringMaybeAliased( + 5, this->_internal_controller_ip(), target); + } + + // uint32 active_tags = 6; + if (this->_internal_active_tags() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt32ToArray(6, this->_internal_active_tags(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:hc900.HealthCheckResponse) + return target; +} + +size_t HealthCheckResponse::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:hc900.HealthCheckResponse) + size_t total_size = 0; + + uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string controller_ip = 5; + if (!this->_internal_controller_ip().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_controller_ip()); + } + + // double uptime_sec = 2; + static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); + double tmp_uptime_sec = this->_internal_uptime_sec(); + uint64_t raw_uptime_sec; + memcpy(&raw_uptime_sec, &tmp_uptime_sec, sizeof(tmp_uptime_sec)); + if (raw_uptime_sec != 0) { + total_size += 1 + 8; + } + + // uint64 poll_count = 3; + if (this->_internal_poll_count() != 0) { + total_size += ::_pbi::WireFormatLite::UInt64SizePlusOne(this->_internal_poll_count()); + } + + // .hc900.HealthCheckResponse.ServingStatus status = 1; + if (this->_internal_status() != 0) { + total_size += 1 + + ::_pbi::WireFormatLite::EnumSize(this->_internal_status()); + } + + // uint32 active_tags = 6; + if (this->_internal_active_tags() != 0) { + total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_active_tags()); + } + + // double last_poll_ms = 4; + static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); + double tmp_last_poll_ms = this->_internal_last_poll_ms(); + uint64_t raw_last_poll_ms; + memcpy(&raw_last_poll_ms, &tmp_last_poll_ms, sizeof(tmp_last_poll_ms)); + if (raw_last_poll_ms != 0) { + total_size += 1 + 8; + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData HealthCheckResponse::_class_data_ = { + ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck, + HealthCheckResponse::MergeImpl +}; +const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*HealthCheckResponse::GetClassData() const { return &_class_data_; } + + +void HealthCheckResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:hc900.HealthCheckResponse) + GOOGLE_DCHECK_NE(&from, _this); + uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_controller_ip().empty()) { + _this->_internal_set_controller_ip(from._internal_controller_ip()); + } + static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); + double tmp_uptime_sec = from._internal_uptime_sec(); + uint64_t raw_uptime_sec; + memcpy(&raw_uptime_sec, &tmp_uptime_sec, sizeof(tmp_uptime_sec)); + if (raw_uptime_sec != 0) { + _this->_internal_set_uptime_sec(from._internal_uptime_sec()); + } + if (from._internal_poll_count() != 0) { + _this->_internal_set_poll_count(from._internal_poll_count()); + } + if (from._internal_status() != 0) { + _this->_internal_set_status(from._internal_status()); + } + if (from._internal_active_tags() != 0) { + _this->_internal_set_active_tags(from._internal_active_tags()); + } + static_assert(sizeof(uint64_t) == sizeof(double), "Code assumes uint64_t and double are the same size."); + double tmp_last_poll_ms = from._internal_last_poll_ms(); + uint64_t raw_last_poll_ms; + memcpy(&raw_last_poll_ms, &tmp_last_poll_ms, sizeof(tmp_last_poll_ms)); + if (raw_last_poll_ms != 0) { + _this->_internal_set_last_poll_ms(from._internal_last_poll_ms()); + } + _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); +} + +void HealthCheckResponse::CopyFrom(const HealthCheckResponse& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:hc900.HealthCheckResponse) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool HealthCheckResponse::IsInitialized() const { + return true; +} + +void HealthCheckResponse::InternalSwap(HealthCheckResponse* other) { + using std::swap; + auto* lhs_arena = GetArenaForAllocation(); + auto* rhs_arena = other->GetArenaForAllocation(); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.controller_ip_, lhs_arena, + &other->_impl_.controller_ip_, rhs_arena + ); + ::PROTOBUF_NAMESPACE_ID::internal::memswap< + PROTOBUF_FIELD_OFFSET(HealthCheckResponse, _impl_.last_poll_ms_) + + sizeof(HealthCheckResponse::_impl_.last_poll_ms_) + - PROTOBUF_FIELD_OFFSET(HealthCheckResponse, _impl_.uptime_sec_)>( + reinterpret_cast(&_impl_.uptime_sec_), + reinterpret_cast(&other->_impl_.uptime_sec_)); +} + +::PROTOBUF_NAMESPACE_ID::Metadata HealthCheckResponse::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_modbus_5fgateway_2eproto_getter, &descriptor_table_modbus_5fgateway_2eproto_once, + file_level_metadata_modbus_5fgateway_2eproto[10]); +} + +// @@protoc_insertion_point(namespace_scope) +} // namespace hc900 +PROTOBUF_NAMESPACE_OPEN +template<> PROTOBUF_NOINLINE ::hc900::TagValue* +Arena::CreateMaybeMessage< ::hc900::TagValue >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::TagValue >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::TagMetadata* +Arena::CreateMaybeMessage< ::hc900::TagMetadata >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::TagMetadata >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::ReadTagsRequest* +Arena::CreateMaybeMessage< ::hc900::ReadTagsRequest >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::ReadTagsRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::ReadTagsResponse* +Arena::CreateMaybeMessage< ::hc900::ReadTagsResponse >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::ReadTagsResponse >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::WriteTagRequest* +Arena::CreateMaybeMessage< ::hc900::WriteTagRequest >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::WriteTagRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::WriteTagResponse* +Arena::CreateMaybeMessage< ::hc900::WriteTagResponse >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::WriteTagResponse >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::StreamTagsRequest* +Arena::CreateMaybeMessage< ::hc900::StreamTagsRequest >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::StreamTagsRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::ListTagsRequest* +Arena::CreateMaybeMessage< ::hc900::ListTagsRequest >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::ListTagsRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::ListTagsResponse* +Arena::CreateMaybeMessage< ::hc900::ListTagsResponse >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::ListTagsResponse >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::HealthCheckRequest* +Arena::CreateMaybeMessage< ::hc900::HealthCheckRequest >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::HealthCheckRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::hc900::HealthCheckResponse* +Arena::CreateMaybeMessage< ::hc900::HealthCheckResponse >(Arena* arena) { + return Arena::CreateMessageInternal< ::hc900::HealthCheckResponse >(arena); +} +PROTOBUF_NAMESPACE_CLOSE + +// @@protoc_insertion_point(global_scope) +#include diff --git a/industrial-comm/cpp/gen/modbus_gateway.pb.h b/industrial-comm/cpp/gen/modbus_gateway.pb.h new file mode 100644 index 0000000..06efccf --- /dev/null +++ b/industrial-comm/cpp/gen/modbus_gateway.pb.h @@ -0,0 +1,3362 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: modbus_gateway.proto + +#ifndef GOOGLE_PROTOBUF_INCLUDED_modbus_5fgateway_2eproto +#define GOOGLE_PROTOBUF_INCLUDED_modbus_5fgateway_2eproto + +#include +#include + +#include +#if PROTOBUF_VERSION < 3021000 +#error This file was generated by a newer version of protoc which is +#error incompatible with your Protocol Buffer headers. Please update +#error your headers. +#endif +#if 3021012 < PROTOBUF_MIN_PROTOC_VERSION +#error This file was generated by an older version of protoc which is +#error incompatible with your Protocol Buffer headers. Please +#error regenerate this file with a newer version of protoc. +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: export +#include // IWYU pragma: export +#include +#include +#include +// @@protoc_insertion_point(includes) +#include +#define PROTOBUF_INTERNAL_EXPORT_modbus_5fgateway_2eproto +PROTOBUF_NAMESPACE_OPEN +namespace internal { +class AnyMetadata; +} // namespace internal +PROTOBUF_NAMESPACE_CLOSE + +// Internal implementation detail -- do not use these members. +struct TableStruct_modbus_5fgateway_2eproto { + static const uint32_t offsets[]; +}; +extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_modbus_5fgateway_2eproto; +namespace hc900 { +class HealthCheckRequest; +struct HealthCheckRequestDefaultTypeInternal; +extern HealthCheckRequestDefaultTypeInternal _HealthCheckRequest_default_instance_; +class HealthCheckResponse; +struct HealthCheckResponseDefaultTypeInternal; +extern HealthCheckResponseDefaultTypeInternal _HealthCheckResponse_default_instance_; +class ListTagsRequest; +struct ListTagsRequestDefaultTypeInternal; +extern ListTagsRequestDefaultTypeInternal _ListTagsRequest_default_instance_; +class ListTagsResponse; +struct ListTagsResponseDefaultTypeInternal; +extern ListTagsResponseDefaultTypeInternal _ListTagsResponse_default_instance_; +class ReadTagsRequest; +struct ReadTagsRequestDefaultTypeInternal; +extern ReadTagsRequestDefaultTypeInternal _ReadTagsRequest_default_instance_; +class ReadTagsResponse; +struct ReadTagsResponseDefaultTypeInternal; +extern ReadTagsResponseDefaultTypeInternal _ReadTagsResponse_default_instance_; +class StreamTagsRequest; +struct StreamTagsRequestDefaultTypeInternal; +extern StreamTagsRequestDefaultTypeInternal _StreamTagsRequest_default_instance_; +class TagMetadata; +struct TagMetadataDefaultTypeInternal; +extern TagMetadataDefaultTypeInternal _TagMetadata_default_instance_; +class TagValue; +struct TagValueDefaultTypeInternal; +extern TagValueDefaultTypeInternal _TagValue_default_instance_; +class WriteTagRequest; +struct WriteTagRequestDefaultTypeInternal; +extern WriteTagRequestDefaultTypeInternal _WriteTagRequest_default_instance_; +class WriteTagResponse; +struct WriteTagResponseDefaultTypeInternal; +extern WriteTagResponseDefaultTypeInternal _WriteTagResponse_default_instance_; +} // namespace hc900 +PROTOBUF_NAMESPACE_OPEN +template<> ::hc900::HealthCheckRequest* Arena::CreateMaybeMessage<::hc900::HealthCheckRequest>(Arena*); +template<> ::hc900::HealthCheckResponse* Arena::CreateMaybeMessage<::hc900::HealthCheckResponse>(Arena*); +template<> ::hc900::ListTagsRequest* Arena::CreateMaybeMessage<::hc900::ListTagsRequest>(Arena*); +template<> ::hc900::ListTagsResponse* Arena::CreateMaybeMessage<::hc900::ListTagsResponse>(Arena*); +template<> ::hc900::ReadTagsRequest* Arena::CreateMaybeMessage<::hc900::ReadTagsRequest>(Arena*); +template<> ::hc900::ReadTagsResponse* Arena::CreateMaybeMessage<::hc900::ReadTagsResponse>(Arena*); +template<> ::hc900::StreamTagsRequest* Arena::CreateMaybeMessage<::hc900::StreamTagsRequest>(Arena*); +template<> ::hc900::TagMetadata* Arena::CreateMaybeMessage<::hc900::TagMetadata>(Arena*); +template<> ::hc900::TagValue* Arena::CreateMaybeMessage<::hc900::TagValue>(Arena*); +template<> ::hc900::WriteTagRequest* Arena::CreateMaybeMessage<::hc900::WriteTagRequest>(Arena*); +template<> ::hc900::WriteTagResponse* Arena::CreateMaybeMessage<::hc900::WriteTagResponse>(Arena*); +PROTOBUF_NAMESPACE_CLOSE +namespace hc900 { + +enum HealthCheckResponse_ServingStatus : int { + HealthCheckResponse_ServingStatus_UNKNOWN = 0, + HealthCheckResponse_ServingStatus_SERVING = 1, + HealthCheckResponse_ServingStatus_NOT_SERVING = 2, + HealthCheckResponse_ServingStatus_HealthCheckResponse_ServingStatus_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits::min(), + HealthCheckResponse_ServingStatus_HealthCheckResponse_ServingStatus_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits::max() +}; +bool HealthCheckResponse_ServingStatus_IsValid(int value); +constexpr HealthCheckResponse_ServingStatus HealthCheckResponse_ServingStatus_ServingStatus_MIN = HealthCheckResponse_ServingStatus_UNKNOWN; +constexpr HealthCheckResponse_ServingStatus HealthCheckResponse_ServingStatus_ServingStatus_MAX = HealthCheckResponse_ServingStatus_NOT_SERVING; +constexpr int HealthCheckResponse_ServingStatus_ServingStatus_ARRAYSIZE = HealthCheckResponse_ServingStatus_ServingStatus_MAX + 1; + +const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* HealthCheckResponse_ServingStatus_descriptor(); +template +inline const std::string& HealthCheckResponse_ServingStatus_Name(T enum_t_value) { + static_assert(::std::is_same::value || + ::std::is_integral::value, + "Incorrect type passed to function HealthCheckResponse_ServingStatus_Name."); + return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( + HealthCheckResponse_ServingStatus_descriptor(), enum_t_value); +} +inline bool HealthCheckResponse_ServingStatus_Parse( + ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, HealthCheckResponse_ServingStatus* value) { + return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum( + HealthCheckResponse_ServingStatus_descriptor(), name, value); +} +// =================================================================== + +class TagValue final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.TagValue) */ { + public: + inline TagValue() : TagValue(nullptr) {} + ~TagValue() override; + explicit PROTOBUF_CONSTEXPR TagValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + TagValue(const TagValue& from); + TagValue(TagValue&& from) noexcept + : TagValue() { + *this = ::std::move(from); + } + + inline TagValue& operator=(const TagValue& from) { + CopyFrom(from); + return *this; + } + inline TagValue& operator=(TagValue&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const TagValue& default_instance() { + return *internal_default_instance(); + } + enum ValueCase { + kFloat32Val = 2, + kUint16Val = 3, + VALUE_NOT_SET = 0, + }; + + static inline const TagValue* internal_default_instance() { + return reinterpret_cast( + &_TagValue_default_instance_); + } + static constexpr int kIndexInFileMessages = + 0; + + friend void swap(TagValue& a, TagValue& b) { + a.Swap(&b); + } + inline void Swap(TagValue* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(TagValue* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + TagValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const TagValue& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const TagValue& from) { + TagValue::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(TagValue* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.TagValue"; + } + protected: + explicit TagValue(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kTagNameFieldNumber = 1, + kTimestampFieldNumber = 5, + kQualityFieldNumber = 4, + kFloat32ValFieldNumber = 2, + kUint16ValFieldNumber = 3, + }; + // string tag_name = 1; + void clear_tag_name(); + const std::string& tag_name() const; + template + void set_tag_name(ArgT0&& arg0, ArgT... args); + std::string* mutable_tag_name(); + PROTOBUF_NODISCARD std::string* release_tag_name(); + void set_allocated_tag_name(std::string* tag_name); + private: + const std::string& _internal_tag_name() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_tag_name(const std::string& value); + std::string* _internal_mutable_tag_name(); + public: + + // .google.protobuf.Timestamp timestamp = 5; + bool has_timestamp() const; + private: + bool _internal_has_timestamp() const; + public: + void clear_timestamp(); + const ::PROTOBUF_NAMESPACE_ID::Timestamp& timestamp() const; + PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::Timestamp* release_timestamp(); + ::PROTOBUF_NAMESPACE_ID::Timestamp* mutable_timestamp(); + void set_allocated_timestamp(::PROTOBUF_NAMESPACE_ID::Timestamp* timestamp); + private: + const ::PROTOBUF_NAMESPACE_ID::Timestamp& _internal_timestamp() const; + ::PROTOBUF_NAMESPACE_ID::Timestamp* _internal_mutable_timestamp(); + public: + void unsafe_arena_set_allocated_timestamp( + ::PROTOBUF_NAMESPACE_ID::Timestamp* timestamp); + ::PROTOBUF_NAMESPACE_ID::Timestamp* unsafe_arena_release_timestamp(); + + // uint32 quality = 4; + void clear_quality(); + uint32_t quality() const; + void set_quality(uint32_t value); + private: + uint32_t _internal_quality() const; + void _internal_set_quality(uint32_t value); + public: + + // float float32_val = 2; + bool has_float32_val() const; + private: + bool _internal_has_float32_val() const; + public: + void clear_float32_val(); + float float32_val() const; + void set_float32_val(float value); + private: + float _internal_float32_val() const; + void _internal_set_float32_val(float value); + public: + + // uint32 uint16_val = 3; + bool has_uint16_val() const; + private: + bool _internal_has_uint16_val() const; + public: + void clear_uint16_val(); + uint32_t uint16_val() const; + void set_uint16_val(uint32_t value); + private: + uint32_t _internal_uint16_val() const; + void _internal_set_uint16_val(uint32_t value); + public: + + void clear_value(); + ValueCase value_case() const; + // @@protoc_insertion_point(class_scope:hc900.TagValue) + private: + class _Internal; + void set_has_float32_val(); + void set_has_uint16_val(); + + inline bool has_value() const; + inline void clear_has_value(); + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr tag_name_; + ::PROTOBUF_NAMESPACE_ID::Timestamp* timestamp_; + uint32_t quality_; + union ValueUnion { + constexpr ValueUnion() : _constinit_{} {} + ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_; + float float32_val_; + uint32_t uint16_val_; + } value_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + uint32_t _oneof_case_[1]; + + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class TagMetadata final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.TagMetadata) */ { + public: + inline TagMetadata() : TagMetadata(nullptr) {} + ~TagMetadata() override; + explicit PROTOBUF_CONSTEXPR TagMetadata(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + TagMetadata(const TagMetadata& from); + TagMetadata(TagMetadata&& from) noexcept + : TagMetadata() { + *this = ::std::move(from); + } + + inline TagMetadata& operator=(const TagMetadata& from) { + CopyFrom(from); + return *this; + } + inline TagMetadata& operator=(TagMetadata&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const TagMetadata& default_instance() { + return *internal_default_instance(); + } + static inline const TagMetadata* internal_default_instance() { + return reinterpret_cast( + &_TagMetadata_default_instance_); + } + static constexpr int kIndexInFileMessages = + 1; + + friend void swap(TagMetadata& a, TagMetadata& b) { + a.Swap(&b); + } + inline void Swap(TagMetadata* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(TagMetadata* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + TagMetadata* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const TagMetadata& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const TagMetadata& from) { + TagMetadata::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(TagMetadata* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.TagMetadata"; + } + protected: + explicit TagMetadata(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kTagNameFieldNumber = 1, + kTypeFieldNumber = 4, + kAccessFieldNumber = 5, + kDescriptionFieldNumber = 6, + kEuFieldNumber = 7, + kAddressFieldNumber = 2, + kCountFieldNumber = 3, + }; + // string tag_name = 1; + void clear_tag_name(); + const std::string& tag_name() const; + template + void set_tag_name(ArgT0&& arg0, ArgT... args); + std::string* mutable_tag_name(); + PROTOBUF_NODISCARD std::string* release_tag_name(); + void set_allocated_tag_name(std::string* tag_name); + private: + const std::string& _internal_tag_name() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_tag_name(const std::string& value); + std::string* _internal_mutable_tag_name(); + public: + + // string type = 4; + void clear_type(); + const std::string& type() const; + template + void set_type(ArgT0&& arg0, ArgT... args); + std::string* mutable_type(); + PROTOBUF_NODISCARD std::string* release_type(); + void set_allocated_type(std::string* type); + private: + const std::string& _internal_type() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_type(const std::string& value); + std::string* _internal_mutable_type(); + public: + + // string access = 5; + void clear_access(); + const std::string& access() const; + template + void set_access(ArgT0&& arg0, ArgT... args); + std::string* mutable_access(); + PROTOBUF_NODISCARD std::string* release_access(); + void set_allocated_access(std::string* access); + private: + const std::string& _internal_access() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_access(const std::string& value); + std::string* _internal_mutable_access(); + public: + + // string description = 6; + void clear_description(); + const std::string& description() const; + template + void set_description(ArgT0&& arg0, ArgT... args); + std::string* mutable_description(); + PROTOBUF_NODISCARD std::string* release_description(); + void set_allocated_description(std::string* description); + private: + const std::string& _internal_description() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_description(const std::string& value); + std::string* _internal_mutable_description(); + public: + + // string eu = 7; + void clear_eu(); + const std::string& eu() const; + template + void set_eu(ArgT0&& arg0, ArgT... args); + std::string* mutable_eu(); + PROTOBUF_NODISCARD std::string* release_eu(); + void set_allocated_eu(std::string* eu); + private: + const std::string& _internal_eu() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_eu(const std::string& value); + std::string* _internal_mutable_eu(); + public: + + // uint32 address = 2; + void clear_address(); + uint32_t address() const; + void set_address(uint32_t value); + private: + uint32_t _internal_address() const; + void _internal_set_address(uint32_t value); + public: + + // uint32 count = 3; + void clear_count(); + uint32_t count() const; + void set_count(uint32_t value); + private: + uint32_t _internal_count() const; + void _internal_set_count(uint32_t value); + public: + + // @@protoc_insertion_point(class_scope:hc900.TagMetadata) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr tag_name_; + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr type_; + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr access_; + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr description_; + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr eu_; + uint32_t address_; + uint32_t count_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class ReadTagsRequest final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.ReadTagsRequest) */ { + public: + inline ReadTagsRequest() : ReadTagsRequest(nullptr) {} + ~ReadTagsRequest() override; + explicit PROTOBUF_CONSTEXPR ReadTagsRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + ReadTagsRequest(const ReadTagsRequest& from); + ReadTagsRequest(ReadTagsRequest&& from) noexcept + : ReadTagsRequest() { + *this = ::std::move(from); + } + + inline ReadTagsRequest& operator=(const ReadTagsRequest& from) { + CopyFrom(from); + return *this; + } + inline ReadTagsRequest& operator=(ReadTagsRequest&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const ReadTagsRequest& default_instance() { + return *internal_default_instance(); + } + static inline const ReadTagsRequest* internal_default_instance() { + return reinterpret_cast( + &_ReadTagsRequest_default_instance_); + } + static constexpr int kIndexInFileMessages = + 2; + + friend void swap(ReadTagsRequest& a, ReadTagsRequest& b) { + a.Swap(&b); + } + inline void Swap(ReadTagsRequest* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(ReadTagsRequest* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + ReadTagsRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const ReadTagsRequest& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const ReadTagsRequest& from) { + ReadTagsRequest::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(ReadTagsRequest* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.ReadTagsRequest"; + } + protected: + explicit ReadTagsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kTagNamesFieldNumber = 1, + }; + // repeated string tag_names = 1; + int tag_names_size() const; + private: + int _internal_tag_names_size() const; + public: + void clear_tag_names(); + const std::string& tag_names(int index) const; + std::string* mutable_tag_names(int index); + void set_tag_names(int index, const std::string& value); + void set_tag_names(int index, std::string&& value); + void set_tag_names(int index, const char* value); + void set_tag_names(int index, const char* value, size_t size); + std::string* add_tag_names(); + void add_tag_names(const std::string& value); + void add_tag_names(std::string&& value); + void add_tag_names(const char* value); + void add_tag_names(const char* value, size_t size); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& tag_names() const; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_tag_names(); + private: + const std::string& _internal_tag_names(int index) const; + std::string* _internal_add_tag_names(); + public: + + // @@protoc_insertion_point(class_scope:hc900.ReadTagsRequest) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField tag_names_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class ReadTagsResponse final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.ReadTagsResponse) */ { + public: + inline ReadTagsResponse() : ReadTagsResponse(nullptr) {} + ~ReadTagsResponse() override; + explicit PROTOBUF_CONSTEXPR ReadTagsResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + ReadTagsResponse(const ReadTagsResponse& from); + ReadTagsResponse(ReadTagsResponse&& from) noexcept + : ReadTagsResponse() { + *this = ::std::move(from); + } + + inline ReadTagsResponse& operator=(const ReadTagsResponse& from) { + CopyFrom(from); + return *this; + } + inline ReadTagsResponse& operator=(ReadTagsResponse&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const ReadTagsResponse& default_instance() { + return *internal_default_instance(); + } + static inline const ReadTagsResponse* internal_default_instance() { + return reinterpret_cast( + &_ReadTagsResponse_default_instance_); + } + static constexpr int kIndexInFileMessages = + 3; + + friend void swap(ReadTagsResponse& a, ReadTagsResponse& b) { + a.Swap(&b); + } + inline void Swap(ReadTagsResponse* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(ReadTagsResponse* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + ReadTagsResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const ReadTagsResponse& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const ReadTagsResponse& from) { + ReadTagsResponse::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(ReadTagsResponse* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.ReadTagsResponse"; + } + protected: + explicit ReadTagsResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kValuesFieldNumber = 1, + kFromCacheFieldNumber = 2, + }; + // repeated .hc900.TagValue values = 1; + int values_size() const; + private: + int _internal_values_size() const; + public: + void clear_values(); + ::hc900::TagValue* mutable_values(int index); + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagValue >* + mutable_values(); + private: + const ::hc900::TagValue& _internal_values(int index) const; + ::hc900::TagValue* _internal_add_values(); + public: + const ::hc900::TagValue& values(int index) const; + ::hc900::TagValue* add_values(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagValue >& + values() const; + + // bool from_cache = 2; + void clear_from_cache(); + bool from_cache() const; + void set_from_cache(bool value); + private: + bool _internal_from_cache() const; + void _internal_set_from_cache(bool value); + public: + + // @@protoc_insertion_point(class_scope:hc900.ReadTagsResponse) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagValue > values_; + bool from_cache_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class WriteTagRequest final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.WriteTagRequest) */ { + public: + inline WriteTagRequest() : WriteTagRequest(nullptr) {} + ~WriteTagRequest() override; + explicit PROTOBUF_CONSTEXPR WriteTagRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + WriteTagRequest(const WriteTagRequest& from); + WriteTagRequest(WriteTagRequest&& from) noexcept + : WriteTagRequest() { + *this = ::std::move(from); + } + + inline WriteTagRequest& operator=(const WriteTagRequest& from) { + CopyFrom(from); + return *this; + } + inline WriteTagRequest& operator=(WriteTagRequest&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const WriteTagRequest& default_instance() { + return *internal_default_instance(); + } + static inline const WriteTagRequest* internal_default_instance() { + return reinterpret_cast( + &_WriteTagRequest_default_instance_); + } + static constexpr int kIndexInFileMessages = + 4; + + friend void swap(WriteTagRequest& a, WriteTagRequest& b) { + a.Swap(&b); + } + inline void Swap(WriteTagRequest* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(WriteTagRequest* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + WriteTagRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const WriteTagRequest& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const WriteTagRequest& from) { + WriteTagRequest::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(WriteTagRequest* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.WriteTagRequest"; + } + protected: + explicit WriteTagRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kTagNameFieldNumber = 1, + kValueFieldNumber = 2, + }; + // string tag_name = 1; + void clear_tag_name(); + const std::string& tag_name() const; + template + void set_tag_name(ArgT0&& arg0, ArgT... args); + std::string* mutable_tag_name(); + PROTOBUF_NODISCARD std::string* release_tag_name(); + void set_allocated_tag_name(std::string* tag_name); + private: + const std::string& _internal_tag_name() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_tag_name(const std::string& value); + std::string* _internal_mutable_tag_name(); + public: + + // double value = 2; + void clear_value(); + double value() const; + void set_value(double value); + private: + double _internal_value() const; + void _internal_set_value(double value); + public: + + // @@protoc_insertion_point(class_scope:hc900.WriteTagRequest) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr tag_name_; + double value_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class WriteTagResponse final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.WriteTagResponse) */ { + public: + inline WriteTagResponse() : WriteTagResponse(nullptr) {} + ~WriteTagResponse() override; + explicit PROTOBUF_CONSTEXPR WriteTagResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + WriteTagResponse(const WriteTagResponse& from); + WriteTagResponse(WriteTagResponse&& from) noexcept + : WriteTagResponse() { + *this = ::std::move(from); + } + + inline WriteTagResponse& operator=(const WriteTagResponse& from) { + CopyFrom(from); + return *this; + } + inline WriteTagResponse& operator=(WriteTagResponse&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const WriteTagResponse& default_instance() { + return *internal_default_instance(); + } + static inline const WriteTagResponse* internal_default_instance() { + return reinterpret_cast( + &_WriteTagResponse_default_instance_); + } + static constexpr int kIndexInFileMessages = + 5; + + friend void swap(WriteTagResponse& a, WriteTagResponse& b) { + a.Swap(&b); + } + inline void Swap(WriteTagResponse* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(WriteTagResponse* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + WriteTagResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const WriteTagResponse& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const WriteTagResponse& from) { + WriteTagResponse::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(WriteTagResponse* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.WriteTagResponse"; + } + protected: + explicit WriteTagResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kErrorFieldNumber = 2, + kSuccessFieldNumber = 1, + }; + // string error = 2; + void clear_error(); + const std::string& error() const; + template + void set_error(ArgT0&& arg0, ArgT... args); + std::string* mutable_error(); + PROTOBUF_NODISCARD std::string* release_error(); + void set_allocated_error(std::string* error); + private: + const std::string& _internal_error() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_error(const std::string& value); + std::string* _internal_mutable_error(); + public: + + // bool success = 1; + void clear_success(); + bool success() const; + void set_success(bool value); + private: + bool _internal_success() const; + void _internal_set_success(bool value); + public: + + // @@protoc_insertion_point(class_scope:hc900.WriteTagResponse) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr error_; + bool success_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class StreamTagsRequest final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.StreamTagsRequest) */ { + public: + inline StreamTagsRequest() : StreamTagsRequest(nullptr) {} + ~StreamTagsRequest() override; + explicit PROTOBUF_CONSTEXPR StreamTagsRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + StreamTagsRequest(const StreamTagsRequest& from); + StreamTagsRequest(StreamTagsRequest&& from) noexcept + : StreamTagsRequest() { + *this = ::std::move(from); + } + + inline StreamTagsRequest& operator=(const StreamTagsRequest& from) { + CopyFrom(from); + return *this; + } + inline StreamTagsRequest& operator=(StreamTagsRequest&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const StreamTagsRequest& default_instance() { + return *internal_default_instance(); + } + static inline const StreamTagsRequest* internal_default_instance() { + return reinterpret_cast( + &_StreamTagsRequest_default_instance_); + } + static constexpr int kIndexInFileMessages = + 6; + + friend void swap(StreamTagsRequest& a, StreamTagsRequest& b) { + a.Swap(&b); + } + inline void Swap(StreamTagsRequest* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(StreamTagsRequest* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + StreamTagsRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const StreamTagsRequest& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const StreamTagsRequest& from) { + StreamTagsRequest::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(StreamTagsRequest* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.StreamTagsRequest"; + } + protected: + explicit StreamTagsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kTagNamesFieldNumber = 2, + kIntervalMsFieldNumber = 1, + }; + // repeated string tag_names = 2; + int tag_names_size() const; + private: + int _internal_tag_names_size() const; + public: + void clear_tag_names(); + const std::string& tag_names(int index) const; + std::string* mutable_tag_names(int index); + void set_tag_names(int index, const std::string& value); + void set_tag_names(int index, std::string&& value); + void set_tag_names(int index, const char* value); + void set_tag_names(int index, const char* value, size_t size); + std::string* add_tag_names(); + void add_tag_names(const std::string& value); + void add_tag_names(std::string&& value); + void add_tag_names(const char* value); + void add_tag_names(const char* value, size_t size); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& tag_names() const; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_tag_names(); + private: + const std::string& _internal_tag_names(int index) const; + std::string* _internal_add_tag_names(); + public: + + // int32 interval_ms = 1; + void clear_interval_ms(); + int32_t interval_ms() const; + void set_interval_ms(int32_t value); + private: + int32_t _internal_interval_ms() const; + void _internal_set_interval_ms(int32_t value); + public: + + // @@protoc_insertion_point(class_scope:hc900.StreamTagsRequest) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField tag_names_; + int32_t interval_ms_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class ListTagsRequest final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.ListTagsRequest) */ { + public: + inline ListTagsRequest() : ListTagsRequest(nullptr) {} + ~ListTagsRequest() override; + explicit PROTOBUF_CONSTEXPR ListTagsRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + ListTagsRequest(const ListTagsRequest& from); + ListTagsRequest(ListTagsRequest&& from) noexcept + : ListTagsRequest() { + *this = ::std::move(from); + } + + inline ListTagsRequest& operator=(const ListTagsRequest& from) { + CopyFrom(from); + return *this; + } + inline ListTagsRequest& operator=(ListTagsRequest&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const ListTagsRequest& default_instance() { + return *internal_default_instance(); + } + static inline const ListTagsRequest* internal_default_instance() { + return reinterpret_cast( + &_ListTagsRequest_default_instance_); + } + static constexpr int kIndexInFileMessages = + 7; + + friend void swap(ListTagsRequest& a, ListTagsRequest& b) { + a.Swap(&b); + } + inline void Swap(ListTagsRequest* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(ListTagsRequest* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + ListTagsRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const ListTagsRequest& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const ListTagsRequest& from) { + ListTagsRequest::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(ListTagsRequest* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.ListTagsRequest"; + } + protected: + explicit ListTagsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kFilterFieldNumber = 1, + kLimitFieldNumber = 2, + }; + // string filter = 1; + void clear_filter(); + const std::string& filter() const; + template + void set_filter(ArgT0&& arg0, ArgT... args); + std::string* mutable_filter(); + PROTOBUF_NODISCARD std::string* release_filter(); + void set_allocated_filter(std::string* filter); + private: + const std::string& _internal_filter() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_filter(const std::string& value); + std::string* _internal_mutable_filter(); + public: + + // int32 limit = 2; + void clear_limit(); + int32_t limit() const; + void set_limit(int32_t value); + private: + int32_t _internal_limit() const; + void _internal_set_limit(int32_t value); + public: + + // @@protoc_insertion_point(class_scope:hc900.ListTagsRequest) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr filter_; + int32_t limit_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class ListTagsResponse final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.ListTagsResponse) */ { + public: + inline ListTagsResponse() : ListTagsResponse(nullptr) {} + ~ListTagsResponse() override; + explicit PROTOBUF_CONSTEXPR ListTagsResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + ListTagsResponse(const ListTagsResponse& from); + ListTagsResponse(ListTagsResponse&& from) noexcept + : ListTagsResponse() { + *this = ::std::move(from); + } + + inline ListTagsResponse& operator=(const ListTagsResponse& from) { + CopyFrom(from); + return *this; + } + inline ListTagsResponse& operator=(ListTagsResponse&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const ListTagsResponse& default_instance() { + return *internal_default_instance(); + } + static inline const ListTagsResponse* internal_default_instance() { + return reinterpret_cast( + &_ListTagsResponse_default_instance_); + } + static constexpr int kIndexInFileMessages = + 8; + + friend void swap(ListTagsResponse& a, ListTagsResponse& b) { + a.Swap(&b); + } + inline void Swap(ListTagsResponse* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(ListTagsResponse* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + ListTagsResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const ListTagsResponse& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const ListTagsResponse& from) { + ListTagsResponse::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(ListTagsResponse* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.ListTagsResponse"; + } + protected: + explicit ListTagsResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kTagsFieldNumber = 1, + }; + // repeated .hc900.TagMetadata tags = 1; + int tags_size() const; + private: + int _internal_tags_size() const; + public: + void clear_tags(); + ::hc900::TagMetadata* mutable_tags(int index); + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagMetadata >* + mutable_tags(); + private: + const ::hc900::TagMetadata& _internal_tags(int index) const; + ::hc900::TagMetadata* _internal_add_tags(); + public: + const ::hc900::TagMetadata& tags(int index) const; + ::hc900::TagMetadata* add_tags(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagMetadata >& + tags() const; + + // @@protoc_insertion_point(class_scope:hc900.ListTagsResponse) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagMetadata > tags_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class HealthCheckRequest final : + public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:hc900.HealthCheckRequest) */ { + public: + inline HealthCheckRequest() : HealthCheckRequest(nullptr) {} + explicit PROTOBUF_CONSTEXPR HealthCheckRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + HealthCheckRequest(const HealthCheckRequest& from); + HealthCheckRequest(HealthCheckRequest&& from) noexcept + : HealthCheckRequest() { + *this = ::std::move(from); + } + + inline HealthCheckRequest& operator=(const HealthCheckRequest& from) { + CopyFrom(from); + return *this; + } + inline HealthCheckRequest& operator=(HealthCheckRequest&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const HealthCheckRequest& default_instance() { + return *internal_default_instance(); + } + static inline const HealthCheckRequest* internal_default_instance() { + return reinterpret_cast( + &_HealthCheckRequest_default_instance_); + } + static constexpr int kIndexInFileMessages = + 9; + + friend void swap(HealthCheckRequest& a, HealthCheckRequest& b) { + a.Swap(&b); + } + inline void Swap(HealthCheckRequest* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(HealthCheckRequest* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + HealthCheckRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom; + inline void CopyFrom(const HealthCheckRequest& from) { + ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(*this, from); + } + using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom; + void MergeFrom(const HealthCheckRequest& from) { + ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(*this, from); + } + public: + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.HealthCheckRequest"; + } + protected: + explicit HealthCheckRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // @@protoc_insertion_point(class_scope:hc900.HealthCheckRequest) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// ------------------------------------------------------------------- + +class HealthCheckResponse final : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:hc900.HealthCheckResponse) */ { + public: + inline HealthCheckResponse() : HealthCheckResponse(nullptr) {} + ~HealthCheckResponse() override; + explicit PROTOBUF_CONSTEXPR HealthCheckResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); + + HealthCheckResponse(const HealthCheckResponse& from); + HealthCheckResponse(HealthCheckResponse&& from) noexcept + : HealthCheckResponse() { + *this = ::std::move(from); + } + + inline HealthCheckResponse& operator=(const HealthCheckResponse& from) { + CopyFrom(from); + return *this; + } + inline HealthCheckResponse& operator=(HealthCheckResponse&& from) noexcept { + if (this == &from) return *this; + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const HealthCheckResponse& default_instance() { + return *internal_default_instance(); + } + static inline const HealthCheckResponse* internal_default_instance() { + return reinterpret_cast( + &_HealthCheckResponse_default_instance_); + } + static constexpr int kIndexInFileMessages = + 10; + + friend void swap(HealthCheckResponse& a, HealthCheckResponse& b) { + a.Swap(&b); + } + inline void Swap(HealthCheckResponse* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() != nullptr && + GetOwningArena() == other->GetOwningArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetOwningArena() == other->GetOwningArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(HealthCheckResponse* other) { + if (other == this) return; + GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + HealthCheckResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; + void CopyFrom(const HealthCheckResponse& from); + using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; + void MergeFrom( const HealthCheckResponse& from) { + HealthCheckResponse::MergeImpl(*this, from); + } + private: + static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); + public: + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + uint8_t* _InternalSerialize( + uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const final { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(HealthCheckResponse* other); + + private: + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "hc900.HealthCheckResponse"; + } + protected: + explicit HealthCheckResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena, + bool is_message_owned = false); + public: + + static const ClassData _class_data_; + const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; + + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + typedef HealthCheckResponse_ServingStatus ServingStatus; + static constexpr ServingStatus UNKNOWN = + HealthCheckResponse_ServingStatus_UNKNOWN; + static constexpr ServingStatus SERVING = + HealthCheckResponse_ServingStatus_SERVING; + static constexpr ServingStatus NOT_SERVING = + HealthCheckResponse_ServingStatus_NOT_SERVING; + static inline bool ServingStatus_IsValid(int value) { + return HealthCheckResponse_ServingStatus_IsValid(value); + } + static constexpr ServingStatus ServingStatus_MIN = + HealthCheckResponse_ServingStatus_ServingStatus_MIN; + static constexpr ServingStatus ServingStatus_MAX = + HealthCheckResponse_ServingStatus_ServingStatus_MAX; + static constexpr int ServingStatus_ARRAYSIZE = + HealthCheckResponse_ServingStatus_ServingStatus_ARRAYSIZE; + static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* + ServingStatus_descriptor() { + return HealthCheckResponse_ServingStatus_descriptor(); + } + template + static inline const std::string& ServingStatus_Name(T enum_t_value) { + static_assert(::std::is_same::value || + ::std::is_integral::value, + "Incorrect type passed to function ServingStatus_Name."); + return HealthCheckResponse_ServingStatus_Name(enum_t_value); + } + static inline bool ServingStatus_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, + ServingStatus* value) { + return HealthCheckResponse_ServingStatus_Parse(name, value); + } + + // accessors ------------------------------------------------------- + + enum : int { + kControllerIpFieldNumber = 5, + kUptimeSecFieldNumber = 2, + kPollCountFieldNumber = 3, + kStatusFieldNumber = 1, + kActiveTagsFieldNumber = 6, + kLastPollMsFieldNumber = 4, + }; + // string controller_ip = 5; + void clear_controller_ip(); + const std::string& controller_ip() const; + template + void set_controller_ip(ArgT0&& arg0, ArgT... args); + std::string* mutable_controller_ip(); + PROTOBUF_NODISCARD std::string* release_controller_ip(); + void set_allocated_controller_ip(std::string* controller_ip); + private: + const std::string& _internal_controller_ip() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_controller_ip(const std::string& value); + std::string* _internal_mutable_controller_ip(); + public: + + // double uptime_sec = 2; + void clear_uptime_sec(); + double uptime_sec() const; + void set_uptime_sec(double value); + private: + double _internal_uptime_sec() const; + void _internal_set_uptime_sec(double value); + public: + + // uint64 poll_count = 3; + void clear_poll_count(); + uint64_t poll_count() const; + void set_poll_count(uint64_t value); + private: + uint64_t _internal_poll_count() const; + void _internal_set_poll_count(uint64_t value); + public: + + // .hc900.HealthCheckResponse.ServingStatus status = 1; + void clear_status(); + ::hc900::HealthCheckResponse_ServingStatus status() const; + void set_status(::hc900::HealthCheckResponse_ServingStatus value); + private: + ::hc900::HealthCheckResponse_ServingStatus _internal_status() const; + void _internal_set_status(::hc900::HealthCheckResponse_ServingStatus value); + public: + + // uint32 active_tags = 6; + void clear_active_tags(); + uint32_t active_tags() const; + void set_active_tags(uint32_t value); + private: + uint32_t _internal_active_tags() const; + void _internal_set_active_tags(uint32_t value); + public: + + // double last_poll_ms = 4; + void clear_last_poll_ms(); + double last_poll_ms() const; + void set_last_poll_ms(double value); + private: + double _internal_last_poll_ms() const; + void _internal_set_last_poll_ms(double value); + public: + + // @@protoc_insertion_point(class_scope:hc900.HealthCheckResponse) + private: + class _Internal; + + template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + struct Impl_ { + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr controller_ip_; + double uptime_sec_; + uint64_t poll_count_; + int status_; + uint32_t active_tags_; + double last_poll_ms_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_modbus_5fgateway_2eproto; +}; +// =================================================================== + + +// =================================================================== + +#ifdef __GNUC__ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif // __GNUC__ +// TagValue + +// string tag_name = 1; +inline void TagValue::clear_tag_name() { + _impl_.tag_name_.ClearToEmpty(); +} +inline const std::string& TagValue::tag_name() const { + // @@protoc_insertion_point(field_get:hc900.TagValue.tag_name) + return _internal_tag_name(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void TagValue::set_tag_name(ArgT0&& arg0, ArgT... args) { + + _impl_.tag_name_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.TagValue.tag_name) +} +inline std::string* TagValue::mutable_tag_name() { + std::string* _s = _internal_mutable_tag_name(); + // @@protoc_insertion_point(field_mutable:hc900.TagValue.tag_name) + return _s; +} +inline const std::string& TagValue::_internal_tag_name() const { + return _impl_.tag_name_.Get(); +} +inline void TagValue::_internal_set_tag_name(const std::string& value) { + + _impl_.tag_name_.Set(value, GetArenaForAllocation()); +} +inline std::string* TagValue::_internal_mutable_tag_name() { + + return _impl_.tag_name_.Mutable(GetArenaForAllocation()); +} +inline std::string* TagValue::release_tag_name() { + // @@protoc_insertion_point(field_release:hc900.TagValue.tag_name) + return _impl_.tag_name_.Release(); +} +inline void TagValue::set_allocated_tag_name(std::string* tag_name) { + if (tag_name != nullptr) { + + } else { + + } + _impl_.tag_name_.SetAllocated(tag_name, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.tag_name_.IsDefault()) { + _impl_.tag_name_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.TagValue.tag_name) +} + +// float float32_val = 2; +inline bool TagValue::_internal_has_float32_val() const { + return value_case() == kFloat32Val; +} +inline bool TagValue::has_float32_val() const { + return _internal_has_float32_val(); +} +inline void TagValue::set_has_float32_val() { + _impl_._oneof_case_[0] = kFloat32Val; +} +inline void TagValue::clear_float32_val() { + if (_internal_has_float32_val()) { + _impl_.value_.float32_val_ = 0; + clear_has_value(); + } +} +inline float TagValue::_internal_float32_val() const { + if (_internal_has_float32_val()) { + return _impl_.value_.float32_val_; + } + return 0; +} +inline void TagValue::_internal_set_float32_val(float value) { + if (!_internal_has_float32_val()) { + clear_value(); + set_has_float32_val(); + } + _impl_.value_.float32_val_ = value; +} +inline float TagValue::float32_val() const { + // @@protoc_insertion_point(field_get:hc900.TagValue.float32_val) + return _internal_float32_val(); +} +inline void TagValue::set_float32_val(float value) { + _internal_set_float32_val(value); + // @@protoc_insertion_point(field_set:hc900.TagValue.float32_val) +} + +// uint32 uint16_val = 3; +inline bool TagValue::_internal_has_uint16_val() const { + return value_case() == kUint16Val; +} +inline bool TagValue::has_uint16_val() const { + return _internal_has_uint16_val(); +} +inline void TagValue::set_has_uint16_val() { + _impl_._oneof_case_[0] = kUint16Val; +} +inline void TagValue::clear_uint16_val() { + if (_internal_has_uint16_val()) { + _impl_.value_.uint16_val_ = 0u; + clear_has_value(); + } +} +inline uint32_t TagValue::_internal_uint16_val() const { + if (_internal_has_uint16_val()) { + return _impl_.value_.uint16_val_; + } + return 0u; +} +inline void TagValue::_internal_set_uint16_val(uint32_t value) { + if (!_internal_has_uint16_val()) { + clear_value(); + set_has_uint16_val(); + } + _impl_.value_.uint16_val_ = value; +} +inline uint32_t TagValue::uint16_val() const { + // @@protoc_insertion_point(field_get:hc900.TagValue.uint16_val) + return _internal_uint16_val(); +} +inline void TagValue::set_uint16_val(uint32_t value) { + _internal_set_uint16_val(value); + // @@protoc_insertion_point(field_set:hc900.TagValue.uint16_val) +} + +// uint32 quality = 4; +inline void TagValue::clear_quality() { + _impl_.quality_ = 0u; +} +inline uint32_t TagValue::_internal_quality() const { + return _impl_.quality_; +} +inline uint32_t TagValue::quality() const { + // @@protoc_insertion_point(field_get:hc900.TagValue.quality) + return _internal_quality(); +} +inline void TagValue::_internal_set_quality(uint32_t value) { + + _impl_.quality_ = value; +} +inline void TagValue::set_quality(uint32_t value) { + _internal_set_quality(value); + // @@protoc_insertion_point(field_set:hc900.TagValue.quality) +} + +// .google.protobuf.Timestamp timestamp = 5; +inline bool TagValue::_internal_has_timestamp() const { + return this != internal_default_instance() && _impl_.timestamp_ != nullptr; +} +inline bool TagValue::has_timestamp() const { + return _internal_has_timestamp(); +} +inline const ::PROTOBUF_NAMESPACE_ID::Timestamp& TagValue::_internal_timestamp() const { + const ::PROTOBUF_NAMESPACE_ID::Timestamp* p = _impl_.timestamp_; + return p != nullptr ? *p : reinterpret_cast( + ::PROTOBUF_NAMESPACE_ID::_Timestamp_default_instance_); +} +inline const ::PROTOBUF_NAMESPACE_ID::Timestamp& TagValue::timestamp() const { + // @@protoc_insertion_point(field_get:hc900.TagValue.timestamp) + return _internal_timestamp(); +} +inline void TagValue::unsafe_arena_set_allocated_timestamp( + ::PROTOBUF_NAMESPACE_ID::Timestamp* timestamp) { + if (GetArenaForAllocation() == nullptr) { + delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.timestamp_); + } + _impl_.timestamp_ = timestamp; + if (timestamp) { + + } else { + + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:hc900.TagValue.timestamp) +} +inline ::PROTOBUF_NAMESPACE_ID::Timestamp* TagValue::release_timestamp() { + + ::PROTOBUF_NAMESPACE_ID::Timestamp* temp = _impl_.timestamp_; + _impl_.timestamp_ = nullptr; +#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE + auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); + temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); + if (GetArenaForAllocation() == nullptr) { delete old; } +#else // PROTOBUF_FORCE_COPY_IN_RELEASE + if (GetArenaForAllocation() != nullptr) { + temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); + } +#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE + return temp; +} +inline ::PROTOBUF_NAMESPACE_ID::Timestamp* TagValue::unsafe_arena_release_timestamp() { + // @@protoc_insertion_point(field_release:hc900.TagValue.timestamp) + + ::PROTOBUF_NAMESPACE_ID::Timestamp* temp = _impl_.timestamp_; + _impl_.timestamp_ = nullptr; + return temp; +} +inline ::PROTOBUF_NAMESPACE_ID::Timestamp* TagValue::_internal_mutable_timestamp() { + + if (_impl_.timestamp_ == nullptr) { + auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Timestamp>(GetArenaForAllocation()); + _impl_.timestamp_ = p; + } + return _impl_.timestamp_; +} +inline ::PROTOBUF_NAMESPACE_ID::Timestamp* TagValue::mutable_timestamp() { + ::PROTOBUF_NAMESPACE_ID::Timestamp* _msg = _internal_mutable_timestamp(); + // @@protoc_insertion_point(field_mutable:hc900.TagValue.timestamp) + return _msg; +} +inline void TagValue::set_allocated_timestamp(::PROTOBUF_NAMESPACE_ID::Timestamp* timestamp) { + ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); + if (message_arena == nullptr) { + delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.timestamp_); + } + if (timestamp) { + ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = + ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena( + reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(timestamp)); + if (message_arena != submessage_arena) { + timestamp = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( + message_arena, timestamp, submessage_arena); + } + + } else { + + } + _impl_.timestamp_ = timestamp; + // @@protoc_insertion_point(field_set_allocated:hc900.TagValue.timestamp) +} + +inline bool TagValue::has_value() const { + return value_case() != VALUE_NOT_SET; +} +inline void TagValue::clear_has_value() { + _impl_._oneof_case_[0] = VALUE_NOT_SET; +} +inline TagValue::ValueCase TagValue::value_case() const { + return TagValue::ValueCase(_impl_._oneof_case_[0]); +} +// ------------------------------------------------------------------- + +// TagMetadata + +// string tag_name = 1; +inline void TagMetadata::clear_tag_name() { + _impl_.tag_name_.ClearToEmpty(); +} +inline const std::string& TagMetadata::tag_name() const { + // @@protoc_insertion_point(field_get:hc900.TagMetadata.tag_name) + return _internal_tag_name(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void TagMetadata::set_tag_name(ArgT0&& arg0, ArgT... args) { + + _impl_.tag_name_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.TagMetadata.tag_name) +} +inline std::string* TagMetadata::mutable_tag_name() { + std::string* _s = _internal_mutable_tag_name(); + // @@protoc_insertion_point(field_mutable:hc900.TagMetadata.tag_name) + return _s; +} +inline const std::string& TagMetadata::_internal_tag_name() const { + return _impl_.tag_name_.Get(); +} +inline void TagMetadata::_internal_set_tag_name(const std::string& value) { + + _impl_.tag_name_.Set(value, GetArenaForAllocation()); +} +inline std::string* TagMetadata::_internal_mutable_tag_name() { + + return _impl_.tag_name_.Mutable(GetArenaForAllocation()); +} +inline std::string* TagMetadata::release_tag_name() { + // @@protoc_insertion_point(field_release:hc900.TagMetadata.tag_name) + return _impl_.tag_name_.Release(); +} +inline void TagMetadata::set_allocated_tag_name(std::string* tag_name) { + if (tag_name != nullptr) { + + } else { + + } + _impl_.tag_name_.SetAllocated(tag_name, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.tag_name_.IsDefault()) { + _impl_.tag_name_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.TagMetadata.tag_name) +} + +// uint32 address = 2; +inline void TagMetadata::clear_address() { + _impl_.address_ = 0u; +} +inline uint32_t TagMetadata::_internal_address() const { + return _impl_.address_; +} +inline uint32_t TagMetadata::address() const { + // @@protoc_insertion_point(field_get:hc900.TagMetadata.address) + return _internal_address(); +} +inline void TagMetadata::_internal_set_address(uint32_t value) { + + _impl_.address_ = value; +} +inline void TagMetadata::set_address(uint32_t value) { + _internal_set_address(value); + // @@protoc_insertion_point(field_set:hc900.TagMetadata.address) +} + +// uint32 count = 3; +inline void TagMetadata::clear_count() { + _impl_.count_ = 0u; +} +inline uint32_t TagMetadata::_internal_count() const { + return _impl_.count_; +} +inline uint32_t TagMetadata::count() const { + // @@protoc_insertion_point(field_get:hc900.TagMetadata.count) + return _internal_count(); +} +inline void TagMetadata::_internal_set_count(uint32_t value) { + + _impl_.count_ = value; +} +inline void TagMetadata::set_count(uint32_t value) { + _internal_set_count(value); + // @@protoc_insertion_point(field_set:hc900.TagMetadata.count) +} + +// string type = 4; +inline void TagMetadata::clear_type() { + _impl_.type_.ClearToEmpty(); +} +inline const std::string& TagMetadata::type() const { + // @@protoc_insertion_point(field_get:hc900.TagMetadata.type) + return _internal_type(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void TagMetadata::set_type(ArgT0&& arg0, ArgT... args) { + + _impl_.type_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.TagMetadata.type) +} +inline std::string* TagMetadata::mutable_type() { + std::string* _s = _internal_mutable_type(); + // @@protoc_insertion_point(field_mutable:hc900.TagMetadata.type) + return _s; +} +inline const std::string& TagMetadata::_internal_type() const { + return _impl_.type_.Get(); +} +inline void TagMetadata::_internal_set_type(const std::string& value) { + + _impl_.type_.Set(value, GetArenaForAllocation()); +} +inline std::string* TagMetadata::_internal_mutable_type() { + + return _impl_.type_.Mutable(GetArenaForAllocation()); +} +inline std::string* TagMetadata::release_type() { + // @@protoc_insertion_point(field_release:hc900.TagMetadata.type) + return _impl_.type_.Release(); +} +inline void TagMetadata::set_allocated_type(std::string* type) { + if (type != nullptr) { + + } else { + + } + _impl_.type_.SetAllocated(type, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.type_.IsDefault()) { + _impl_.type_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.TagMetadata.type) +} + +// string access = 5; +inline void TagMetadata::clear_access() { + _impl_.access_.ClearToEmpty(); +} +inline const std::string& TagMetadata::access() const { + // @@protoc_insertion_point(field_get:hc900.TagMetadata.access) + return _internal_access(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void TagMetadata::set_access(ArgT0&& arg0, ArgT... args) { + + _impl_.access_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.TagMetadata.access) +} +inline std::string* TagMetadata::mutable_access() { + std::string* _s = _internal_mutable_access(); + // @@protoc_insertion_point(field_mutable:hc900.TagMetadata.access) + return _s; +} +inline const std::string& TagMetadata::_internal_access() const { + return _impl_.access_.Get(); +} +inline void TagMetadata::_internal_set_access(const std::string& value) { + + _impl_.access_.Set(value, GetArenaForAllocation()); +} +inline std::string* TagMetadata::_internal_mutable_access() { + + return _impl_.access_.Mutable(GetArenaForAllocation()); +} +inline std::string* TagMetadata::release_access() { + // @@protoc_insertion_point(field_release:hc900.TagMetadata.access) + return _impl_.access_.Release(); +} +inline void TagMetadata::set_allocated_access(std::string* access) { + if (access != nullptr) { + + } else { + + } + _impl_.access_.SetAllocated(access, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.access_.IsDefault()) { + _impl_.access_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.TagMetadata.access) +} + +// string description = 6; +inline void TagMetadata::clear_description() { + _impl_.description_.ClearToEmpty(); +} +inline const std::string& TagMetadata::description() const { + // @@protoc_insertion_point(field_get:hc900.TagMetadata.description) + return _internal_description(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void TagMetadata::set_description(ArgT0&& arg0, ArgT... args) { + + _impl_.description_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.TagMetadata.description) +} +inline std::string* TagMetadata::mutable_description() { + std::string* _s = _internal_mutable_description(); + // @@protoc_insertion_point(field_mutable:hc900.TagMetadata.description) + return _s; +} +inline const std::string& TagMetadata::_internal_description() const { + return _impl_.description_.Get(); +} +inline void TagMetadata::_internal_set_description(const std::string& value) { + + _impl_.description_.Set(value, GetArenaForAllocation()); +} +inline std::string* TagMetadata::_internal_mutable_description() { + + return _impl_.description_.Mutable(GetArenaForAllocation()); +} +inline std::string* TagMetadata::release_description() { + // @@protoc_insertion_point(field_release:hc900.TagMetadata.description) + return _impl_.description_.Release(); +} +inline void TagMetadata::set_allocated_description(std::string* description) { + if (description != nullptr) { + + } else { + + } + _impl_.description_.SetAllocated(description, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.description_.IsDefault()) { + _impl_.description_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.TagMetadata.description) +} + +// string eu = 7; +inline void TagMetadata::clear_eu() { + _impl_.eu_.ClearToEmpty(); +} +inline const std::string& TagMetadata::eu() const { + // @@protoc_insertion_point(field_get:hc900.TagMetadata.eu) + return _internal_eu(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void TagMetadata::set_eu(ArgT0&& arg0, ArgT... args) { + + _impl_.eu_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.TagMetadata.eu) +} +inline std::string* TagMetadata::mutable_eu() { + std::string* _s = _internal_mutable_eu(); + // @@protoc_insertion_point(field_mutable:hc900.TagMetadata.eu) + return _s; +} +inline const std::string& TagMetadata::_internal_eu() const { + return _impl_.eu_.Get(); +} +inline void TagMetadata::_internal_set_eu(const std::string& value) { + + _impl_.eu_.Set(value, GetArenaForAllocation()); +} +inline std::string* TagMetadata::_internal_mutable_eu() { + + return _impl_.eu_.Mutable(GetArenaForAllocation()); +} +inline std::string* TagMetadata::release_eu() { + // @@protoc_insertion_point(field_release:hc900.TagMetadata.eu) + return _impl_.eu_.Release(); +} +inline void TagMetadata::set_allocated_eu(std::string* eu) { + if (eu != nullptr) { + + } else { + + } + _impl_.eu_.SetAllocated(eu, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.eu_.IsDefault()) { + _impl_.eu_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.TagMetadata.eu) +} + +// ------------------------------------------------------------------- + +// ReadTagsRequest + +// repeated string tag_names = 1; +inline int ReadTagsRequest::_internal_tag_names_size() const { + return _impl_.tag_names_.size(); +} +inline int ReadTagsRequest::tag_names_size() const { + return _internal_tag_names_size(); +} +inline void ReadTagsRequest::clear_tag_names() { + _impl_.tag_names_.Clear(); +} +inline std::string* ReadTagsRequest::add_tag_names() { + std::string* _s = _internal_add_tag_names(); + // @@protoc_insertion_point(field_add_mutable:hc900.ReadTagsRequest.tag_names) + return _s; +} +inline const std::string& ReadTagsRequest::_internal_tag_names(int index) const { + return _impl_.tag_names_.Get(index); +} +inline const std::string& ReadTagsRequest::tag_names(int index) const { + // @@protoc_insertion_point(field_get:hc900.ReadTagsRequest.tag_names) + return _internal_tag_names(index); +} +inline std::string* ReadTagsRequest::mutable_tag_names(int index) { + // @@protoc_insertion_point(field_mutable:hc900.ReadTagsRequest.tag_names) + return _impl_.tag_names_.Mutable(index); +} +inline void ReadTagsRequest::set_tag_names(int index, const std::string& value) { + _impl_.tag_names_.Mutable(index)->assign(value); + // @@protoc_insertion_point(field_set:hc900.ReadTagsRequest.tag_names) +} +inline void ReadTagsRequest::set_tag_names(int index, std::string&& value) { + _impl_.tag_names_.Mutable(index)->assign(std::move(value)); + // @@protoc_insertion_point(field_set:hc900.ReadTagsRequest.tag_names) +} +inline void ReadTagsRequest::set_tag_names(int index, const char* value) { + GOOGLE_DCHECK(value != nullptr); + _impl_.tag_names_.Mutable(index)->assign(value); + // @@protoc_insertion_point(field_set_char:hc900.ReadTagsRequest.tag_names) +} +inline void ReadTagsRequest::set_tag_names(int index, const char* value, size_t size) { + _impl_.tag_names_.Mutable(index)->assign( + reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:hc900.ReadTagsRequest.tag_names) +} +inline std::string* ReadTagsRequest::_internal_add_tag_names() { + return _impl_.tag_names_.Add(); +} +inline void ReadTagsRequest::add_tag_names(const std::string& value) { + _impl_.tag_names_.Add()->assign(value); + // @@protoc_insertion_point(field_add:hc900.ReadTagsRequest.tag_names) +} +inline void ReadTagsRequest::add_tag_names(std::string&& value) { + _impl_.tag_names_.Add(std::move(value)); + // @@protoc_insertion_point(field_add:hc900.ReadTagsRequest.tag_names) +} +inline void ReadTagsRequest::add_tag_names(const char* value) { + GOOGLE_DCHECK(value != nullptr); + _impl_.tag_names_.Add()->assign(value); + // @@protoc_insertion_point(field_add_char:hc900.ReadTagsRequest.tag_names) +} +inline void ReadTagsRequest::add_tag_names(const char* value, size_t size) { + _impl_.tag_names_.Add()->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_add_pointer:hc900.ReadTagsRequest.tag_names) +} +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& +ReadTagsRequest::tag_names() const { + // @@protoc_insertion_point(field_list:hc900.ReadTagsRequest.tag_names) + return _impl_.tag_names_; +} +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* +ReadTagsRequest::mutable_tag_names() { + // @@protoc_insertion_point(field_mutable_list:hc900.ReadTagsRequest.tag_names) + return &_impl_.tag_names_; +} + +// ------------------------------------------------------------------- + +// ReadTagsResponse + +// repeated .hc900.TagValue values = 1; +inline int ReadTagsResponse::_internal_values_size() const { + return _impl_.values_.size(); +} +inline int ReadTagsResponse::values_size() const { + return _internal_values_size(); +} +inline void ReadTagsResponse::clear_values() { + _impl_.values_.Clear(); +} +inline ::hc900::TagValue* ReadTagsResponse::mutable_values(int index) { + // @@protoc_insertion_point(field_mutable:hc900.ReadTagsResponse.values) + return _impl_.values_.Mutable(index); +} +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagValue >* +ReadTagsResponse::mutable_values() { + // @@protoc_insertion_point(field_mutable_list:hc900.ReadTagsResponse.values) + return &_impl_.values_; +} +inline const ::hc900::TagValue& ReadTagsResponse::_internal_values(int index) const { + return _impl_.values_.Get(index); +} +inline const ::hc900::TagValue& ReadTagsResponse::values(int index) const { + // @@protoc_insertion_point(field_get:hc900.ReadTagsResponse.values) + return _internal_values(index); +} +inline ::hc900::TagValue* ReadTagsResponse::_internal_add_values() { + return _impl_.values_.Add(); +} +inline ::hc900::TagValue* ReadTagsResponse::add_values() { + ::hc900::TagValue* _add = _internal_add_values(); + // @@protoc_insertion_point(field_add:hc900.ReadTagsResponse.values) + return _add; +} +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagValue >& +ReadTagsResponse::values() const { + // @@protoc_insertion_point(field_list:hc900.ReadTagsResponse.values) + return _impl_.values_; +} + +// bool from_cache = 2; +inline void ReadTagsResponse::clear_from_cache() { + _impl_.from_cache_ = false; +} +inline bool ReadTagsResponse::_internal_from_cache() const { + return _impl_.from_cache_; +} +inline bool ReadTagsResponse::from_cache() const { + // @@protoc_insertion_point(field_get:hc900.ReadTagsResponse.from_cache) + return _internal_from_cache(); +} +inline void ReadTagsResponse::_internal_set_from_cache(bool value) { + + _impl_.from_cache_ = value; +} +inline void ReadTagsResponse::set_from_cache(bool value) { + _internal_set_from_cache(value); + // @@protoc_insertion_point(field_set:hc900.ReadTagsResponse.from_cache) +} + +// ------------------------------------------------------------------- + +// WriteTagRequest + +// string tag_name = 1; +inline void WriteTagRequest::clear_tag_name() { + _impl_.tag_name_.ClearToEmpty(); +} +inline const std::string& WriteTagRequest::tag_name() const { + // @@protoc_insertion_point(field_get:hc900.WriteTagRequest.tag_name) + return _internal_tag_name(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void WriteTagRequest::set_tag_name(ArgT0&& arg0, ArgT... args) { + + _impl_.tag_name_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.WriteTagRequest.tag_name) +} +inline std::string* WriteTagRequest::mutable_tag_name() { + std::string* _s = _internal_mutable_tag_name(); + // @@protoc_insertion_point(field_mutable:hc900.WriteTagRequest.tag_name) + return _s; +} +inline const std::string& WriteTagRequest::_internal_tag_name() const { + return _impl_.tag_name_.Get(); +} +inline void WriteTagRequest::_internal_set_tag_name(const std::string& value) { + + _impl_.tag_name_.Set(value, GetArenaForAllocation()); +} +inline std::string* WriteTagRequest::_internal_mutable_tag_name() { + + return _impl_.tag_name_.Mutable(GetArenaForAllocation()); +} +inline std::string* WriteTagRequest::release_tag_name() { + // @@protoc_insertion_point(field_release:hc900.WriteTagRequest.tag_name) + return _impl_.tag_name_.Release(); +} +inline void WriteTagRequest::set_allocated_tag_name(std::string* tag_name) { + if (tag_name != nullptr) { + + } else { + + } + _impl_.tag_name_.SetAllocated(tag_name, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.tag_name_.IsDefault()) { + _impl_.tag_name_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.WriteTagRequest.tag_name) +} + +// double value = 2; +inline void WriteTagRequest::clear_value() { + _impl_.value_ = 0; +} +inline double WriteTagRequest::_internal_value() const { + return _impl_.value_; +} +inline double WriteTagRequest::value() const { + // @@protoc_insertion_point(field_get:hc900.WriteTagRequest.value) + return _internal_value(); +} +inline void WriteTagRequest::_internal_set_value(double value) { + + _impl_.value_ = value; +} +inline void WriteTagRequest::set_value(double value) { + _internal_set_value(value); + // @@protoc_insertion_point(field_set:hc900.WriteTagRequest.value) +} + +// ------------------------------------------------------------------- + +// WriteTagResponse + +// bool success = 1; +inline void WriteTagResponse::clear_success() { + _impl_.success_ = false; +} +inline bool WriteTagResponse::_internal_success() const { + return _impl_.success_; +} +inline bool WriteTagResponse::success() const { + // @@protoc_insertion_point(field_get:hc900.WriteTagResponse.success) + return _internal_success(); +} +inline void WriteTagResponse::_internal_set_success(bool value) { + + _impl_.success_ = value; +} +inline void WriteTagResponse::set_success(bool value) { + _internal_set_success(value); + // @@protoc_insertion_point(field_set:hc900.WriteTagResponse.success) +} + +// string error = 2; +inline void WriteTagResponse::clear_error() { + _impl_.error_.ClearToEmpty(); +} +inline const std::string& WriteTagResponse::error() const { + // @@protoc_insertion_point(field_get:hc900.WriteTagResponse.error) + return _internal_error(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void WriteTagResponse::set_error(ArgT0&& arg0, ArgT... args) { + + _impl_.error_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.WriteTagResponse.error) +} +inline std::string* WriteTagResponse::mutable_error() { + std::string* _s = _internal_mutable_error(); + // @@protoc_insertion_point(field_mutable:hc900.WriteTagResponse.error) + return _s; +} +inline const std::string& WriteTagResponse::_internal_error() const { + return _impl_.error_.Get(); +} +inline void WriteTagResponse::_internal_set_error(const std::string& value) { + + _impl_.error_.Set(value, GetArenaForAllocation()); +} +inline std::string* WriteTagResponse::_internal_mutable_error() { + + return _impl_.error_.Mutable(GetArenaForAllocation()); +} +inline std::string* WriteTagResponse::release_error() { + // @@protoc_insertion_point(field_release:hc900.WriteTagResponse.error) + return _impl_.error_.Release(); +} +inline void WriteTagResponse::set_allocated_error(std::string* error) { + if (error != nullptr) { + + } else { + + } + _impl_.error_.SetAllocated(error, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.error_.IsDefault()) { + _impl_.error_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.WriteTagResponse.error) +} + +// ------------------------------------------------------------------- + +// StreamTagsRequest + +// int32 interval_ms = 1; +inline void StreamTagsRequest::clear_interval_ms() { + _impl_.interval_ms_ = 0; +} +inline int32_t StreamTagsRequest::_internal_interval_ms() const { + return _impl_.interval_ms_; +} +inline int32_t StreamTagsRequest::interval_ms() const { + // @@protoc_insertion_point(field_get:hc900.StreamTagsRequest.interval_ms) + return _internal_interval_ms(); +} +inline void StreamTagsRequest::_internal_set_interval_ms(int32_t value) { + + _impl_.interval_ms_ = value; +} +inline void StreamTagsRequest::set_interval_ms(int32_t value) { + _internal_set_interval_ms(value); + // @@protoc_insertion_point(field_set:hc900.StreamTagsRequest.interval_ms) +} + +// repeated string tag_names = 2; +inline int StreamTagsRequest::_internal_tag_names_size() const { + return _impl_.tag_names_.size(); +} +inline int StreamTagsRequest::tag_names_size() const { + return _internal_tag_names_size(); +} +inline void StreamTagsRequest::clear_tag_names() { + _impl_.tag_names_.Clear(); +} +inline std::string* StreamTagsRequest::add_tag_names() { + std::string* _s = _internal_add_tag_names(); + // @@protoc_insertion_point(field_add_mutable:hc900.StreamTagsRequest.tag_names) + return _s; +} +inline const std::string& StreamTagsRequest::_internal_tag_names(int index) const { + return _impl_.tag_names_.Get(index); +} +inline const std::string& StreamTagsRequest::tag_names(int index) const { + // @@protoc_insertion_point(field_get:hc900.StreamTagsRequest.tag_names) + return _internal_tag_names(index); +} +inline std::string* StreamTagsRequest::mutable_tag_names(int index) { + // @@protoc_insertion_point(field_mutable:hc900.StreamTagsRequest.tag_names) + return _impl_.tag_names_.Mutable(index); +} +inline void StreamTagsRequest::set_tag_names(int index, const std::string& value) { + _impl_.tag_names_.Mutable(index)->assign(value); + // @@protoc_insertion_point(field_set:hc900.StreamTagsRequest.tag_names) +} +inline void StreamTagsRequest::set_tag_names(int index, std::string&& value) { + _impl_.tag_names_.Mutable(index)->assign(std::move(value)); + // @@protoc_insertion_point(field_set:hc900.StreamTagsRequest.tag_names) +} +inline void StreamTagsRequest::set_tag_names(int index, const char* value) { + GOOGLE_DCHECK(value != nullptr); + _impl_.tag_names_.Mutable(index)->assign(value); + // @@protoc_insertion_point(field_set_char:hc900.StreamTagsRequest.tag_names) +} +inline void StreamTagsRequest::set_tag_names(int index, const char* value, size_t size) { + _impl_.tag_names_.Mutable(index)->assign( + reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:hc900.StreamTagsRequest.tag_names) +} +inline std::string* StreamTagsRequest::_internal_add_tag_names() { + return _impl_.tag_names_.Add(); +} +inline void StreamTagsRequest::add_tag_names(const std::string& value) { + _impl_.tag_names_.Add()->assign(value); + // @@protoc_insertion_point(field_add:hc900.StreamTagsRequest.tag_names) +} +inline void StreamTagsRequest::add_tag_names(std::string&& value) { + _impl_.tag_names_.Add(std::move(value)); + // @@protoc_insertion_point(field_add:hc900.StreamTagsRequest.tag_names) +} +inline void StreamTagsRequest::add_tag_names(const char* value) { + GOOGLE_DCHECK(value != nullptr); + _impl_.tag_names_.Add()->assign(value); + // @@protoc_insertion_point(field_add_char:hc900.StreamTagsRequest.tag_names) +} +inline void StreamTagsRequest::add_tag_names(const char* value, size_t size) { + _impl_.tag_names_.Add()->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_add_pointer:hc900.StreamTagsRequest.tag_names) +} +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& +StreamTagsRequest::tag_names() const { + // @@protoc_insertion_point(field_list:hc900.StreamTagsRequest.tag_names) + return _impl_.tag_names_; +} +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* +StreamTagsRequest::mutable_tag_names() { + // @@protoc_insertion_point(field_mutable_list:hc900.StreamTagsRequest.tag_names) + return &_impl_.tag_names_; +} + +// ------------------------------------------------------------------- + +// ListTagsRequest + +// string filter = 1; +inline void ListTagsRequest::clear_filter() { + _impl_.filter_.ClearToEmpty(); +} +inline const std::string& ListTagsRequest::filter() const { + // @@protoc_insertion_point(field_get:hc900.ListTagsRequest.filter) + return _internal_filter(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void ListTagsRequest::set_filter(ArgT0&& arg0, ArgT... args) { + + _impl_.filter_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.ListTagsRequest.filter) +} +inline std::string* ListTagsRequest::mutable_filter() { + std::string* _s = _internal_mutable_filter(); + // @@protoc_insertion_point(field_mutable:hc900.ListTagsRequest.filter) + return _s; +} +inline const std::string& ListTagsRequest::_internal_filter() const { + return _impl_.filter_.Get(); +} +inline void ListTagsRequest::_internal_set_filter(const std::string& value) { + + _impl_.filter_.Set(value, GetArenaForAllocation()); +} +inline std::string* ListTagsRequest::_internal_mutable_filter() { + + return _impl_.filter_.Mutable(GetArenaForAllocation()); +} +inline std::string* ListTagsRequest::release_filter() { + // @@protoc_insertion_point(field_release:hc900.ListTagsRequest.filter) + return _impl_.filter_.Release(); +} +inline void ListTagsRequest::set_allocated_filter(std::string* filter) { + if (filter != nullptr) { + + } else { + + } + _impl_.filter_.SetAllocated(filter, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.filter_.IsDefault()) { + _impl_.filter_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.ListTagsRequest.filter) +} + +// int32 limit = 2; +inline void ListTagsRequest::clear_limit() { + _impl_.limit_ = 0; +} +inline int32_t ListTagsRequest::_internal_limit() const { + return _impl_.limit_; +} +inline int32_t ListTagsRequest::limit() const { + // @@protoc_insertion_point(field_get:hc900.ListTagsRequest.limit) + return _internal_limit(); +} +inline void ListTagsRequest::_internal_set_limit(int32_t value) { + + _impl_.limit_ = value; +} +inline void ListTagsRequest::set_limit(int32_t value) { + _internal_set_limit(value); + // @@protoc_insertion_point(field_set:hc900.ListTagsRequest.limit) +} + +// ------------------------------------------------------------------- + +// ListTagsResponse + +// repeated .hc900.TagMetadata tags = 1; +inline int ListTagsResponse::_internal_tags_size() const { + return _impl_.tags_.size(); +} +inline int ListTagsResponse::tags_size() const { + return _internal_tags_size(); +} +inline void ListTagsResponse::clear_tags() { + _impl_.tags_.Clear(); +} +inline ::hc900::TagMetadata* ListTagsResponse::mutable_tags(int index) { + // @@protoc_insertion_point(field_mutable:hc900.ListTagsResponse.tags) + return _impl_.tags_.Mutable(index); +} +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagMetadata >* +ListTagsResponse::mutable_tags() { + // @@protoc_insertion_point(field_mutable_list:hc900.ListTagsResponse.tags) + return &_impl_.tags_; +} +inline const ::hc900::TagMetadata& ListTagsResponse::_internal_tags(int index) const { + return _impl_.tags_.Get(index); +} +inline const ::hc900::TagMetadata& ListTagsResponse::tags(int index) const { + // @@protoc_insertion_point(field_get:hc900.ListTagsResponse.tags) + return _internal_tags(index); +} +inline ::hc900::TagMetadata* ListTagsResponse::_internal_add_tags() { + return _impl_.tags_.Add(); +} +inline ::hc900::TagMetadata* ListTagsResponse::add_tags() { + ::hc900::TagMetadata* _add = _internal_add_tags(); + // @@protoc_insertion_point(field_add:hc900.ListTagsResponse.tags) + return _add; +} +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::hc900::TagMetadata >& +ListTagsResponse::tags() const { + // @@protoc_insertion_point(field_list:hc900.ListTagsResponse.tags) + return _impl_.tags_; +} + +// ------------------------------------------------------------------- + +// HealthCheckRequest + +// ------------------------------------------------------------------- + +// HealthCheckResponse + +// .hc900.HealthCheckResponse.ServingStatus status = 1; +inline void HealthCheckResponse::clear_status() { + _impl_.status_ = 0; +} +inline ::hc900::HealthCheckResponse_ServingStatus HealthCheckResponse::_internal_status() const { + return static_cast< ::hc900::HealthCheckResponse_ServingStatus >(_impl_.status_); +} +inline ::hc900::HealthCheckResponse_ServingStatus HealthCheckResponse::status() const { + // @@protoc_insertion_point(field_get:hc900.HealthCheckResponse.status) + return _internal_status(); +} +inline void HealthCheckResponse::_internal_set_status(::hc900::HealthCheckResponse_ServingStatus value) { + + _impl_.status_ = value; +} +inline void HealthCheckResponse::set_status(::hc900::HealthCheckResponse_ServingStatus value) { + _internal_set_status(value); + // @@protoc_insertion_point(field_set:hc900.HealthCheckResponse.status) +} + +// double uptime_sec = 2; +inline void HealthCheckResponse::clear_uptime_sec() { + _impl_.uptime_sec_ = 0; +} +inline double HealthCheckResponse::_internal_uptime_sec() const { + return _impl_.uptime_sec_; +} +inline double HealthCheckResponse::uptime_sec() const { + // @@protoc_insertion_point(field_get:hc900.HealthCheckResponse.uptime_sec) + return _internal_uptime_sec(); +} +inline void HealthCheckResponse::_internal_set_uptime_sec(double value) { + + _impl_.uptime_sec_ = value; +} +inline void HealthCheckResponse::set_uptime_sec(double value) { + _internal_set_uptime_sec(value); + // @@protoc_insertion_point(field_set:hc900.HealthCheckResponse.uptime_sec) +} + +// uint64 poll_count = 3; +inline void HealthCheckResponse::clear_poll_count() { + _impl_.poll_count_ = uint64_t{0u}; +} +inline uint64_t HealthCheckResponse::_internal_poll_count() const { + return _impl_.poll_count_; +} +inline uint64_t HealthCheckResponse::poll_count() const { + // @@protoc_insertion_point(field_get:hc900.HealthCheckResponse.poll_count) + return _internal_poll_count(); +} +inline void HealthCheckResponse::_internal_set_poll_count(uint64_t value) { + + _impl_.poll_count_ = value; +} +inline void HealthCheckResponse::set_poll_count(uint64_t value) { + _internal_set_poll_count(value); + // @@protoc_insertion_point(field_set:hc900.HealthCheckResponse.poll_count) +} + +// double last_poll_ms = 4; +inline void HealthCheckResponse::clear_last_poll_ms() { + _impl_.last_poll_ms_ = 0; +} +inline double HealthCheckResponse::_internal_last_poll_ms() const { + return _impl_.last_poll_ms_; +} +inline double HealthCheckResponse::last_poll_ms() const { + // @@protoc_insertion_point(field_get:hc900.HealthCheckResponse.last_poll_ms) + return _internal_last_poll_ms(); +} +inline void HealthCheckResponse::_internal_set_last_poll_ms(double value) { + + _impl_.last_poll_ms_ = value; +} +inline void HealthCheckResponse::set_last_poll_ms(double value) { + _internal_set_last_poll_ms(value); + // @@protoc_insertion_point(field_set:hc900.HealthCheckResponse.last_poll_ms) +} + +// string controller_ip = 5; +inline void HealthCheckResponse::clear_controller_ip() { + _impl_.controller_ip_.ClearToEmpty(); +} +inline const std::string& HealthCheckResponse::controller_ip() const { + // @@protoc_insertion_point(field_get:hc900.HealthCheckResponse.controller_ip) + return _internal_controller_ip(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void HealthCheckResponse::set_controller_ip(ArgT0&& arg0, ArgT... args) { + + _impl_.controller_ip_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:hc900.HealthCheckResponse.controller_ip) +} +inline std::string* HealthCheckResponse::mutable_controller_ip() { + std::string* _s = _internal_mutable_controller_ip(); + // @@protoc_insertion_point(field_mutable:hc900.HealthCheckResponse.controller_ip) + return _s; +} +inline const std::string& HealthCheckResponse::_internal_controller_ip() const { + return _impl_.controller_ip_.Get(); +} +inline void HealthCheckResponse::_internal_set_controller_ip(const std::string& value) { + + _impl_.controller_ip_.Set(value, GetArenaForAllocation()); +} +inline std::string* HealthCheckResponse::_internal_mutable_controller_ip() { + + return _impl_.controller_ip_.Mutable(GetArenaForAllocation()); +} +inline std::string* HealthCheckResponse::release_controller_ip() { + // @@protoc_insertion_point(field_release:hc900.HealthCheckResponse.controller_ip) + return _impl_.controller_ip_.Release(); +} +inline void HealthCheckResponse::set_allocated_controller_ip(std::string* controller_ip) { + if (controller_ip != nullptr) { + + } else { + + } + _impl_.controller_ip_.SetAllocated(controller_ip, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.controller_ip_.IsDefault()) { + _impl_.controller_ip_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:hc900.HealthCheckResponse.controller_ip) +} + +// uint32 active_tags = 6; +inline void HealthCheckResponse::clear_active_tags() { + _impl_.active_tags_ = 0u; +} +inline uint32_t HealthCheckResponse::_internal_active_tags() const { + return _impl_.active_tags_; +} +inline uint32_t HealthCheckResponse::active_tags() const { + // @@protoc_insertion_point(field_get:hc900.HealthCheckResponse.active_tags) + return _internal_active_tags(); +} +inline void HealthCheckResponse::_internal_set_active_tags(uint32_t value) { + + _impl_.active_tags_ = value; +} +inline void HealthCheckResponse::set_active_tags(uint32_t value) { + _internal_set_active_tags(value); + // @@protoc_insertion_point(field_set:hc900.HealthCheckResponse.active_tags) +} + +#ifdef __GNUC__ + #pragma GCC diagnostic pop +#endif // __GNUC__ +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + + +// @@protoc_insertion_point(namespace_scope) + +} // namespace hc900 + +PROTOBUF_NAMESPACE_OPEN + +template <> struct is_proto_enum< ::hc900::HealthCheckResponse_ServingStatus> : ::std::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::hc900::HealthCheckResponse_ServingStatus>() { + return ::hc900::HealthCheckResponse_ServingStatus_descriptor(); +} + +PROTOBUF_NAMESPACE_CLOSE + +// @@protoc_insertion_point(global_scope) + +#include +#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_modbus_5fgateway_2eproto diff --git a/industrial-comm/cpp/include/app_init.hpp b/industrial-comm/cpp/include/app_init.hpp new file mode 100644 index 0000000..18dc489 --- /dev/null +++ b/industrial-comm/cpp/include/app_init.hpp @@ -0,0 +1,6 @@ +#pragma once +#include + +class Controller; + +std::unique_ptr init_system(); diff --git a/industrial-comm/cpp/include/codec.hpp b/industrial-comm/cpp/include/codec.hpp new file mode 100644 index 0000000..56dddf4 --- /dev/null +++ b/industrial-comm/cpp/include/codec.hpp @@ -0,0 +1,76 @@ +#pragma once + +#include +#include +#include "data_format.hpp" + +// +// ============================================================ +// 32-bit (float / int32 / uint32) +// ============================================================ + +// float (IEEE-754, Modbus 2 registers) +std::array +encode_float(float value, const DataFormat& fmt); + +float +decode_float(std::uint16_t r0, + std::uint16_t r1, + const DataFormat& fmt); + +// signed 32-bit +std::array +encode_int32(std::int32_t value, const DataFormat& fmt); + +std::int32_t +decode_int32(std::uint16_t r0, + std::uint16_t r1, + const DataFormat& fmt); + +// unsigned 32-bit +std::array +encode_uint32(std::uint32_t value, const DataFormat& fmt); + +std::uint32_t +decode_uint32(std::uint16_t r0, + std::uint16_t r1, + const DataFormat& fmt); + + +// +// ============================================================ +// 64-bit (double / int64 / uint64) +// ============================================================ + +// double (IEEE-754, Modbus 4 registers) +std::array +encode_double(double value, const DataFormat& fmt); + +double +decode_double(std::uint16_t r0, + std::uint16_t r1, + std::uint16_t r2, + std::uint16_t r3, + const DataFormat& fmt); + +// signed 64-bit +std::array +encode_int64(std::int64_t value, const DataFormat& fmt); + +std::int64_t +decode_int64(std::uint16_t r0, + std::uint16_t r1, + std::uint16_t r2, + std::uint16_t r3, + const DataFormat& fmt); + +// unsigned 64-bit +std::array +encode_uint64(std::uint64_t value, const DataFormat& fmt); + +std::uint64_t +decode_uint64(std::uint16_t r0, + std::uint16_t r1, + std::uint16_t r2, + std::uint16_t r3, + const DataFormat& fmt); diff --git a/industrial-comm/cpp/include/controller.hpp b/industrial-comm/cpp/include/controller.hpp new file mode 100644 index 0000000..d94f6a3 --- /dev/null +++ b/industrial-comm/cpp/include/controller.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include +#include +#include +#include "itransport.hpp" +#include "data_format.hpp" + +class Controller { +public: + explicit Controller(std::unique_ptr transport); + + // lifecycle + void poll(); + bool connect(const char* host, std::uint16_t port); + void disconnect(); + bool is_connected() const; + + // raw register + bool read_register(std::uint16_t addr, std::uint16_t& value); + bool write_register(std::uint16_t addr, std::uint16_t value); + bool read_raw(std::uint16_t addr, std::uint16_t count, std::vector& out); + + // 32-bit + bool read_int32(std::uint16_t addr, std::int32_t& value, const DataFormat& fmt); + bool write_int32(std::uint16_t addr, std::int32_t value, const DataFormat& fmt); + + bool read_uint32(std::uint16_t addr, std::uint32_t& value, const DataFormat& fmt); + bool write_uint32(std::uint16_t addr, std::uint32_t value, const DataFormat& fmt); + + // float / double + bool read_float(std::uint16_t addr, float& value, const DataFormat& fmt); + bool write_float(std::uint16_t addr, float value, const DataFormat& fmt); + + bool read_double(std::uint16_t addr, double& value, const DataFormat& fmt); + bool write_double(std::uint16_t addr, double value, const DataFormat& fmt); + + // 64-bit + bool read_int64(std::uint16_t addr, std::int64_t& value, const DataFormat& fmt); + bool write_int64(std::uint16_t addr, std::int64_t value, const DataFormat& fmt); + + bool read_uint64(std::uint16_t addr, std::uint64_t& value, const DataFormat& fmt); + bool write_uint64(std::uint16_t addr, std::uint64_t value, const DataFormat& fmt); + +private: + std::unique_ptr transport_; +}; diff --git a/industrial-comm/cpp/include/data_format.hpp b/industrial-comm/cpp/include/data_format.hpp new file mode 100644 index 0000000..69df28d --- /dev/null +++ b/industrial-comm/cpp/include/data_format.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include + +// Byte order inside a 16-bit Modbus register +enum class ByteOrder { + BigEndian, // AB + LittleEndian // BA +}; + +// Order of 16-bit registers +enum class WordOrder { + HighFirst, // Reg[N] = high word + LowFirst // Reg[N] = low word +}; + +// Order of register groups (for 64-bit+ types) +enum class RegisterOrder { + Normal, // ABCD EFGH + Swapped // EFGH ABCD +}; + +struct DataFormat { + ByteOrder byte_order; + WordOrder word_order; + RegisterOrder register_order; +}; diff --git a/industrial-comm/cpp/include/gateway.h b/industrial-comm/cpp/include/gateway.h new file mode 100644 index 0000000..b0844e1 --- /dev/null +++ b/industrial-comm/cpp/include/gateway.h @@ -0,0 +1,103 @@ +#ifndef HC900_GATEWAY_H +#define HC900_GATEWAY_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "modbus_gateway.grpc.pb.h" +#include "modbus_gateway.pb.h" + +class Controller; + +struct RegisterEntry { + std::string tag; + uint32_t addr; + uint32_t count; // register count (1 or 2) + std::string type; // "float32" or "uint16" + std::string access; // "R" or "RW" +}; + +struct CachedValue { + float float32_val; + uint32_t uint16_val; + bool is_float; + uint32_t quality; // 192=good, 0=bad + std::chrono::system_clock::time_point timestamp; +}; + +class Hc900Gateway final { +public: + Hc900Gateway(const std::string& host, uint16_t port, + const std::string& map_path, + int poll_interval_ms = 1000, + int grpc_port = 50051); + ~Hc900Gateway(); + + bool Start(); + void Stop(); + +private: + void PollLoop(); + void LoadRegisterMap(const std::string& path); + void ReadAllRegisters(); + CachedValue ReadRegister(const RegisterEntry& entry); + + // gRPC service implementation + class GatewayServiceImpl final : public hc900::ModbusGateway::Service { + public: + GatewayServiceImpl(Hc900Gateway& gateway); + grpc::Status ReadTags(grpc::ServerContext* ctx, + const hc900::ReadTagsRequest* req, + hc900::ReadTagsResponse* resp) override; + grpc::Status WriteTag(grpc::ServerContext* ctx, + const hc900::WriteTagRequest* req, + hc900::WriteTagResponse* resp) override; + grpc::Status ListTags(grpc::ServerContext* ctx, + const hc900::ListTagsRequest* req, + hc900::ListTagsResponse* resp) override; + grpc::Status HealthCheck(grpc::ServerContext* ctx, + const hc900::HealthCheckRequest* req, + hc900::HealthCheckResponse* resp) override; + grpc::Status StreamTags(grpc::ServerContext* ctx, + const hc900::StreamTagsRequest* req, + grpc::ServerWriter* writer) override; + private: + Hc900Gateway& gateway_; + }; + + std::string host_; + uint16_t port_; + int poll_interval_ms_; + std::unique_ptr controller_; + + // Register map + std::vector registers_; + std::unordered_map tag_index_; + std::vector sorted_indices_; // indices into registers_, sorted by address + + // Cache + std::unordered_map cache_; + mutable std::mutex cache_mutex_; + + // Transport — shared between poll thread and gRPC handlers + mutable std::mutex transport_mutex_; + + // Poller + std::atomic running_; + std::thread poll_thread_; + uint64_t poll_count_{0}; + std::chrono::milliseconds last_poll_duration_{0}; + + // gRPC server + std::unique_ptr grpc_server_; + std::unique_ptr grpc_service_; + std::string grpc_listen_; +}; + +#endif // HC900_GATEWAY_H diff --git a/industrial-comm/cpp/include/itransport.hpp b/industrial-comm/cpp/include/itransport.hpp new file mode 100644 index 0000000..e17beb3 --- /dev/null +++ b/industrial-comm/cpp/include/itransport.hpp @@ -0,0 +1,47 @@ +// ITransport 인터페이스 (🔥 최종본) +// itransport.hpp + + +#pragma once + +#include +#include +#include "transport_error.hpp" + +// transport 상태관리 +enum class TransportState { + Disconnected, + Connecting, + Connected, + Reconnecting, + Fault, +}; +class ITransport { +public: + virtual ~ITransport() = default; + + // connection + virtual bool connect(const char* host, std::uint16_t port) = 0; + virtual void disconnect() = 0; + virtual bool is_connected() const = 0; + + // state & error handling + virtual TransportState state() const = 0; + virtual TransportError last_error() const = 0; + + // io policy + virtual bool can_io() const = 0; // ⭐ 추가 (권장) + + // watchdog / reconnect / state machine + virtual void poll() = 0; + virtual void reset() = 0; // ⭐ 추가 + + // register access + virtual bool read_registers(std::uint16_t addr, + std::uint16_t count, + std::vector& out) = 0; + + virtual bool write_registers(std::uint16_t addr, + const std::vector& values) = 0; + +}; \ No newline at end of file diff --git a/industrial-comm/cpp/include/json.hpp b/industrial-comm/cpp/include/json.hpp new file mode 100644 index 0000000..8b72ea6 --- /dev/null +++ b/industrial-comm/cpp/include/json.hpp @@ -0,0 +1,24765 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file docs/README.md. * +\****************************************************************************/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 3 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 3 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // nullptr_t +#include // exception +#if JSON_DIAGNOSTICS + #include // accumulate +#endif +#include // runtime_error +#include // to_string +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // declval, pair +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + + +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson +// SPDX-License-Identifier: MIT + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// #include + + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifndef JSON_HAS_STATIC_RTTI + #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 + #define JSON_HAS_STATIC_RTTI 1 + #else + #define JSON_HAS_STATIC_RTTI 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1); + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +// inspired from https://stackoverflow.com/a/26745591 +// allows to call any std function as if (e.g. with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif + +#if JSON_HAS_THREE_WAY_COMPARISON + #include // partial_ordering +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +#if JSON_HAS_THREE_WAY_COMPARISON + inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* +#else + inline bool operator<(const value_t lhs, const value_t rhs) noexcept +#endif +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); +#if JSON_HAS_THREE_WAY_COMPARISON + if (l_index < order.size() && r_index < order.size()) + { + return order[l_index] <=> order[r_index]; // *NOPAD* + } + return std::partial_ordering::unordered; +#else + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +#endif +} + +// GCC selects the built-in operator< over an operator rewritten from +// a user-defined spaceship operator +// Clang, MSVC, and ICC select the rewritten candidate +// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) +#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + return std::is_lt(lhs <=> rhs); // *NOPAD* +} +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +template +inline void replace_substring(StringType& s, const StringType& f, + const StringType& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != StringType::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +template +inline StringType escape(StringType s) +{ + replace_substring(s, StringType{"~"}, StringType{"~0"}); + replace_substring(s, StringType{"/"}, StringType{"~1"}); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +template +static void unescape(StringType& s) +{ + replace_substring(s, StringType{"~1"}, StringType{"/"}); + replace_substring(s, StringType{"~0"}, StringType{"~"}); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // size_t + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +inline constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval +#include // tuple +#include // char_traits + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // random_access_iterator_tag + +// #include + +// #include + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.3 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann +// SPDX-License-Identifier: MIT + +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ + #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + #include // int64_t, uint64_t + #include // map + #include // allocator + #include // string + #include // vector + + // #include + + + /*! + @brief namespace for Niels Lohmann + @see https://github.com/nlohmann + @since version 1.0.0 + */ + NLOHMANN_JSON_NAMESPACE_BEGIN + + /*! + @brief default JSONSerializer template argument + + This serializer ignores the template arguments and uses ADL + ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) + for serialization. + */ + template + struct adl_serializer; + + /// a class to store JSON values + /// @sa https://json.nlohmann.me/api/basic_json/ + template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector, // cppcheck-suppress syntaxError + class CustomBaseClass = void> + class basic_json; + + /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document + /// @sa https://json.nlohmann.me/api/json_pointer/ + template + class json_pointer; + + /*! + @brief default specialization + @sa https://json.nlohmann.me/api/json/ + */ + using json = basic_json<>; + + /// @brief a minimal map-like container that preserves insertion order + /// @sa https://json.nlohmann.me/api/ordered_map/ + template + struct ordered_map; + + /// @brief specialization that maintains the insertion order of object keys + /// @sa https://json.nlohmann.me/api/ordered_json/ + using ordered_json = basic_json; + + NLOHMANN_JSON_NAMESPACE_END + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +///////////////// +// char_traits // +///////////////// + +// Primary template of char_traits calls std char_traits +template +struct char_traits : std::char_traits +{}; + +// Explicitly define char traits for unsigned char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = unsigned char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(EOF); + } +}; + +// Explicitly define char traits for signed char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = signed char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(EOF); + } +}; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& + is_complete_type < + detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template