Skip to content

CeeVeeX/modbus-ts

Repository files navigation

modbus-ts

GitHub stars GitHub issues License

TypeScript Modbus runtime for Node.js, browsers, and Electron.

modbus-ts is an ESM-first monorepo with composable packages for protocol encoding/decoding, transport adapters, scheduling, subscription polling, and a high-level client API.

Packages

  • NPM Version high-level Modbus client
  • NPM Version shared contracts, types, and errors
  • NPM Version FC1/FC2/FC3/FC4/FC5/FC6/FC15/FC16 frame encode/decode for TCP/RTU/ASCII
  • NPM Version serial request queue with priority
  • NPM Version polling engine and range merge
  • NPM Version Node TCP transport with reconnect
  • NPM Version Node UDP transport
  • NPM Version browser WebSocket transport with reconnect
  • NPM Version typed Electron main/renderer bridge
  • NPM Version Electron IPC transport adapter
  • NPM Version WebSocket to TCP binary relay gateway
  • NPM Version register-value codec helpers
  • NPM Version shared async and comparison utilities

Highlights

  • Multi-wire protocol support: TCP, RTU, ASCII
  • Transports: TCP, UDP, WebSocket, Electron IPC
  • High-level client API for read, write, and subscribe
  • Priority scheduler with timeout handling
  • Subscription engine with range merge and change detection
  • Browser WebSocket gateway with TCP connection pooling
  • Industrial data codec with byte-swap and word-swap options

Quick Start

pnpm install
pnpm build
pnpm test

Run examples:

pnpm --filter @modbus-ts/node-tcp-example dev
pnpm --filter @modbus-ts/node-udp-example dev
pnpm --filter @modbus-ts/browser-example dev

Minimal Client Example

import { ModbusClient } from '@modbus-ts/client'
import { TcpTransport } from '@modbus-ts/transport-tcp'

const transport = new TcpTransport({ host: '127.0.0.1', port: 502 })
const client = new ModbusClient({ transport, defaultUnitId: 1, mode: 'tcp' })

await client.connect()
const regs = await client.readHoldingRegisters(0, 4)
const inputRegs = await client.readInputRegisters(0, 4)
const coils = await client.readCoils(0, 8)
const discreteInputs = await client.readDiscreteInputs(0, 8)

await client.writeSingleRegister(10, 123)
await client.writeSingleCoil(11, true)
await client.writeMultipleCoils(12, [true, false, true])

console.log({ regs, inputRegs, coils, discreteInputs })
await client.close()

Development Commands

pnpm lint
pnpm typecheck
pnpm test:coverage

License

MIT

About

TypeScript Modbus runtime for Node.js, browsers, and Electron.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

Generated from antfu/starter-ts