pamoja-modbus
Modbus RTU requests and replies with CRC-16/MODBUS for RS485 field devices. One capability of pamoja, one memory-safe Rust core with bindings for TypeScript, Python, and C#.
Install
pip install pamoja-modbus
from pamoja import modbus
This pulls in pamoja-native, the compiled engine. pip install pamoja is the whole framework in one package.
Example
The script the test suite runs, spliced here as it ran.
From bindings/python/guides/modbus.py:
from pamoja.core import PamojaError
from pamoja.modbus import parse_frame, read_holding_registers, read_holding_registers_reply
# The device this gateway polls: a power meter at unit 17, whose manual says the three
# registers holding voltage, current and a fault word start at address 107.
METER = 17
FIRST_REGISTER = 107
# Ask it for those three registers. The frame is complete, checksum included, exactly as
# it goes out on the wire.
request = read_holding_registers(METER, FIRST_REGISTER, 3)
print(f"polling unit {METER}, {len(request)} bytes out")
# A stand-in for the meter. On a running gateway this frame arrives over RS485; here the
# library builds what a meter reporting those three values would send back.
from_the_meter = read_holding_registers_reply(METER, [2301, 418, 0])
# Everything below is the gateway's own code. A reply carries its own checksum, so the
# frame is validated before any value is read out of it.
reply = parse_frame(from_the_meter)
registers = reply.registers()
print(f"voltage {registers[0] / 10:.1f} V")
print(f"current {registers[1] / 100:.2f} A")
print(f"faults {registers[2]}")
# One flipped bit anywhere in the frame fails the checksum, which is the whole point of
# carrying one over a long RS485 run.
mangled = bytearray(from_the_meter)
mangled[2] ^= 0xFF
try:
parse_frame(bytes(mangled))
print("mangled frame accepted, which should never happen")
except PamojaError as error:
print(f"mangled frame rejected: {error}")
The same capability in every language
| Language | Package | Reference |
|---|---|---|
| Rust | pamoja-modbus |
reference, docs.rs, install |
| TypeScript | @pamoja/modbus |
reference, install |
| Python | pamoja-modbus |
reference, install |
| C# | Pamoja.Modbus |
reference, install |
Documentation
pamoja.modbusreference, every class and function in this module.- The Modbus RTU guide, with the same example in Rust, TypeScript, and C#.
- Every capability, and the install page.
License
MIT
Release files for pamoja-modbus 0.1.17
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pamoja_modbus-0.1.17.tar.gz | 5.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pamoja_modbus-0.1.17-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.4 kB
Release files / pamoja_modbus-0.1.17.tar.gz
| Download URL | pamoja_modbus-0.1.17.tar.gz |
|---|---|
| Size | 5.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
34ada1c1b478f8fb1fcb9582f7060cb58c7b03b50829e4e2e4183e79593d4d19
|
|
BLAKE2b-256 checksum How to use checksums |
723f2467ea1a304ad9397f9597d5c71c48d33645a39f42be41a0c623d61636a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / pamoja_modbus-0.1.17-py3-none-any.whl
| Download URL | pamoja_modbus-0.1.17-py3-none-any.whl |
|---|---|
| Size | 6.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1039d0ef5acbbbbfd41075ec2560d8b454ff857e6aca90438924d0fb98c8660b
|
|
BLAKE2b-256 checksum How to use checksums |
753cd1b0466534d29e521656cb69f6c1ba547e991482dab2eaef3e1e54826251
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|