# Differential pressure transmitter

DP transmitter with coplanar flange (H / L marked) and Ex d head on a 5-valve manifold: two block, two equalise, two vent valves. Pipe-stand mounted with an optional stainless sunshade; separate HP and LP 1/2" impulse lines with compression fittings and tube clamps fall at 1:10 to two 1/2" flanged process connections (gas service, transmitter above the taps).

**Standards:** IEC 60079-1, IEC 61518, ASME B16.5, ISO 5167 impulse lines

## Installation

```bash
npx -y https://decktwin.com/cli/deck-twin-0.2.2.tgz add dp-transmitter
```

Copies `instruments/dp-transmitter.tsx`, any helper files it imports and the shared `lib/` into `src/components/deck-twin/`. Needs `three`, `@react-three/fiber` and `@react-three/drei`.

## Usage

```tsx
import { Canvas } from '@react-three/fiber'
import { OrbitControls } from '@react-three/drei'
import { Stage } from './components/deck-twin/lib/stage'
import { DpTransmitter } from './components/deck-twin/instruments/dp-transmitter'

export default function Scene() {
  return (
    <Canvas shadows camera={{ position: [8, 5, 9], fov: 35 }}>
      <Stage>
        <DpTransmitter />
      </Stage>
      <OrbitControls makeDefault />
    </Canvas>
  )
}
```

## Props

| Prop | Type | Default | Range |
| --- | --- | --- | --- |
| `height` | `number (m)` | `1.35` | 0.9 – 1.8 |
| `rating` | `150 \| 300 \| 600 \| 900 \| 1500 \| 2500` | `600` |  |
| `sunshade` | `boolean` | `true` |  |
| `housing` | `"actuatorBlue" \| "stainless" \| "aluminium" \| "equipmentPaintDark"` | `"actuatorBlue"` |  |
| `tag` | `string` | `"PDT-1001"` |  |
| `...group` | position, rotation, scale… |  |  |

## Ports

Flange faces in the component's local frame, metres. Origin: centre of the footprint at deck level (y = 0).

| Id | Label | Position | Direction | Size | Class |
| --- | --- | --- | --- | --- | --- |
| `hp` | High-pressure side | -0.240, 0.688, 0.121 | -1, 0, 0 | 1/2" | 600 |
| `lp` | Low-pressure side | -0.240, 0.538, 0.121 | -1, 0, 0 | 1/2" | 600 |

## P&ID

Field bubble with PDT (or PDIT, FT, LT) joined by two process connection lines, the high side and the low side, to two points on the pipe or vessel, e.g. either side of a filter, strainer or exchanger.

ISA PDT · ISA PDIT · ISA FT · ISA LT · ISA 5.1 (field-mounted instrument bubble)

Two impulse lines from one bubble = differential pressure. If the two taps straddle an orifice plate the loop is a flow measurement (orifice-flowmeter); if they are on the top and bottom of a vessel it is a DP level transmitter. ISA codes here: FT = with orifice; LT = DP level.

Differential pressure transmitter specification form (ISA-TR20.00.01) fields and the props they set:

| Field | Prop |
| --- | --- |
| Process connection rating | `rating` |
| Housing material / finish | `housing` |
| Sunshade | `sunshade` |
| Tag number | `tag` |

## Typical suppliers

Emerson (Rosemount) · Yokogawa. The geometry is generic and sized from public standards. It is not vendor CAD.

## Source

`instruments/dp-transmitter.tsx`. This is the component file only: it imports shared code, so install it with the command above rather than pasting it alone. https://decktwin.com/r/dp-transmitter.json has every file.

```tsx
// Differential pressure transmitter: coplanar sensor and Ex d head with LCD on a 5-valve manifold, 2" pipe stand, HP / LP impulse tubing to flanged process connections. IEC 60079-1, ASME B16.5.
import type { MatKey } from '../lib/kit'
import { KitMesh, useKit, type GroupProps } from '../lib/mesh'
import { port, type Port } from '../lib/ports'
import type { Rating } from '../lib/standards'
import { buildStand, standLayout } from './_stand'

export interface DpTransmitterProps {
  /** LCD centreline height above deck, m */
  height?: number
  /** class of the 1/2" process flanges */
  rating?: Rating
  housing?: MatKey
  /** stainless sunshade over the head */
  sunshade?: boolean
  tag?: string
}

export const defaults = { height: 1.35, rating: 600 as Rating, housing: 'actuatorBlue' as MatKey, tag: 'PDT-1001', sunshade: true }

export function ports(p: DpTransmitterProps = {}): Port[] {
  const { height, rating } = { ...defaults, ...p }
  const { faces } = standLayout({ valves: 5, height })
  return [
    port('hp', 'High-pressure side', faces[0], [-1, 0, 0], 0.5, rating, 'instrument'),
    port('lp', 'Low-pressure side', faces[1], [-1, 0, 0], 0.5, rating, 'instrument'),
  ]
}

export function DpTransmitter({ height = defaults.height, rating = defaults.rating, housing = defaults.housing, tag = defaults.tag, sunshade = defaults.sunshade, ...group }: DpTransmitterProps & GroupProps) {
  const data = useKit((k) => buildStand(k, { valves: 5, height, rating, housing, tag, sunshade }), [height, rating, housing, tag, sunshade])
  return (
    <group {...group}>
      <KitMesh data={data} />
    </group>
  )
}

export default DpTransmitter
```
