This article explains how to integrate a South-Tek FPS fire protection nitrogen generator with a PLC, SCADA system, or BMS over Modbus TCP. It applies to the touchscreen FPS models that carry the Unitronics controller and Ethernet card. For hardwired alarm signaling instead of, or alongside, Modbus, see the dry-contact wiring article linked at the foot of this page.
1) Protocol and connection
- Protocol: Modbus TCP/IP
- Port: 502
- Device role: Slave (the generator PLC is the slave; the JACE / SCADA / BMS is the master)
- Physical layer: Ethernet, static IP required
The Communication Settings screens on the touchscreen are used to assign the static IP and confirm the link. The Network Communications Status screen reports Ethernet Card Exists: Yes, which is the fastest way to confirm a unit is equipped for Modbus before you start the integration.
2) What you need from the customer or network
- Generator PLC static IP address
- Routing so the master can reach the generator (same VLAN/subnet, or proper routing in place)
- TCP port 502 allowed between the master and the generator PLC
3) Addressing and data format (read this first)
Addressing mode varies by client software. The table below lists holding registers as “4xxxx” and coils as “0xxxx”, and the addresses carry an offset of 1. Many drivers (including Niagara / JACE) want a zero-based offset instead. Confirm which convention your driver uses and adjust, or every point will read one register off.
| Listed address | If your driver uses zero-based offsets | Example |
|---|---|---|
| Holding register 40006 | Offset 5 | 40006 → 5 |
| Holding register 40119 | Offset 118 | 40119 → 118 |
| Coil 00355 | Offset 354 | 00355 → 354 |
Data types:
- 16-bit holding registers: start with Unsigned/Int16. If a value looks scaled (e.g. 2150 instead of 21.50), apply scaling in the client (for example, multiply by 0.01).
- 32-bit holding registers (run hours and leakage averages): use a 32-bit integer type (DINT/UDINT). If the number is wrong, swap word order (endianness) in your driver.
4) Register map
Holding Registers (16-bit)
| Tag / Point | Unitronics | Modbus Address | Units | Access |
|---|---|---|---|---|
| Nitrogen Storage Pressure | MI 118 | 40119 | PSIG | R |
| Oxygen Concentration (%) | MI 5 | 40006 | % O2 | R |
| Generator Cut-In Pressure | MI 20 | 40021 | PSIG | R/W |
| Generator Cut-Out Pressure | MI 21 | 40022 | PSIG | R/W |
| Bypass Cut-In Pressure | MI 254 | 40255 | PSIG | R/W |
| Bypass Cut-Off Pressure | MI 259 | 40260 | PSIG | R/W |
| Low Tank Pressure Alarm Point | MI 98 | 40099 | PSIG | R/W |
| Low Tank Pressure Cut-Out Point | MI 346 | 40347 | PSIG | R/W |
| O2% Alarm Point | MI 14 | 40015 | % O2 | R/W |
| O2% Alarm Cut-Out Point | MI 3 | 40004 | % O2 | R/W |
Holding Registers (32-bit)
| Tag / Point | Unitronics | Modbus Address | Units | Access |
|---|---|---|---|---|
| Generator Total Run Hours | ML 14 | 28687 | Hours | R |
| Average N2 Leakage for Last Standby | ML 44 | 28717 | SCFH | R |
| Average N2 Leakage for Today | ML 68 | 28741 | SCFH | R |
| Average N2 Leakage for this Month | ML 70 | 28743 | SCFH | R |
| Particulate Filter Run Hours | ML 46 | 28719 | Hours | R |
| Coalescing Filter Run Hours | ML 47 | 28720 | Hours | R |
| Absorbing Filter Run Hours | ML 48 | 28721 | Hours | R |
Coils (Discrete)
| Tag / Point | Unitronics | Modbus Address | States | Access |
|---|---|---|---|---|
| Start / Stop | MB 354 | 00355 | 0 = Off, 1 = On | R/W |
| Running / Standby | MB 7 | 00008 | 0 = Standby, 1 = Running | R |
| Common Alarm | MB 61 | 00062 | 0 = Good, 1 = Alarm | R |
| Oxygen Concentration Alarm | MB 0 | 00001 | 0 = Good, 1 = Alarm | R |
| Low Tank Pressure Alarm | MB 106 | 00107 | 0 = Good, 1 = Alarm | R |
| BlastOff Alarm | MB 2050 | 02051 | 0 = Good, 1 = Alarm | R |
| Automatic Bypass† | MB 315 | 00097† | 0 = Normal, 1 = Bypass | R |
| Particulate Filter Status | MB 14 | 00015 | 0 = Good, 1 = Change Needed | R |
| Coalescing Filter Status | MB 28 | 00029 | 0 = Good, 1 = Change Needed | R |
| Absorbing Filter Status | MB 29 | 00030 | 0 = Good, 1 = Change Needed | R |
| Low Battery Indicator | SB 8 | 20489 | 0 = Good, 1 = Low Batt | R |
| Local Alarm Buzzer Toggle | MB 227 | 00228 | 0 = Off, 1 = On | R/W |
| Low Tank Pressure Alarm Toggle | MB 386 | 00387 | 0 = Off, 1 = On | R/W |
| BlastOff Alarm Toggle | MB 2051 | 02052 | 0 = Off, 1 = On | R/W |
| Automatic Bypass Toggle | MB 2062 | 02063 | 0 = Off, 1 = On | R/W |
| Automatic Bypass Manual Activation | MB 382 | 00383 | 0 = Off, 1 = On | R/W |
† Automatic Bypass status address pending engineering confirmation. The listed coil does not follow the +1 offset used by every other point in the map; confirm before relying on it.
5) Example client setup
Channel: Modbus TCP/IP | Device: FPS_PLC (IP = generator static IP, Port = 502, Unit ID typically 1)
N2_Storage_Pressure Register Type: Holding Register Address: 40119 (or offset 118) Data Type: 16-bit Integer (Unsigned first); scale 0.01 if value reads 100x high O2_Percent Register Type: Holding Register Address: 40006 (or offset 5) Data Type: 16-bit Integer Filter_Status_Particulate Register Type: Coil Address: 00015 (or offset 14) Data Type: Boolean (1 = Change Needed) Start_Stop_Command Register Type: Coil Address: 00355 (or offset 354) <-- FPS coil, not 00013 Data Type: Boolean
6) Quick troubleshooting
- Cannot ping the generator IP: check the Ethernet link, switch, and VLAN; confirm the static IP, subnet, and that the Ethernet card shows present on the Network Communications Status screen.
- Ping works, no Modbus connection: confirm TCP port 502 is open end to end (firewall/ACL) and the master is pointed at the correct IP.
- Connected, values look wrong: check the addressing mode (listed 4xxxx/0xxxx vs zero-based offset), 16-bit vs 32-bit data type, scaling on decimals, and word order on 32-bit values.
- Cannot write Start/Stop: verify write permissions, the correct FPS coil address (00355), and that the unit is not held in a local or interlocked state.
Related articles
- Fire Alarm & BMS Wiring for FPS Generator Dry Contacts
- Modbus Communication – PSA Nitrogen Generator
- FPS Fire Protection Systems — Contractor Installation & Startup Checklist
- What BlastOff Means and What to Check First