Modbus/TCP to websocket router.
Project description
Modbus2Websocket
Modbus2Websocket (further, M2W) is an python-based application that routes data between Modbus TCP protocol and Websockets.
Purpose
The main goal of M2W router is to deliver data between industrial system and web application. Modbus TCP - industrial protocol, used to exchange information between industrial devices and HMIs. Usually, to visualize data engineers have to use heavy and expensive SCADA or HMI. On other hand web technologies provide easy and powerful tools for data visualization in your own web browser, without any thick client. That is why M2W was created in first place - to make simple webHMI server that works with Industrial systems.
Components
- async Modbus TCP server
async_modbus_server.py
- async Modbus TCP client
async_modbus_client.py
- async Websocket server
async_websocket_server.py
- Router
router.py
Future development:
- Async Modbus Server
- Async Modbus Client
- Async Websocket Server
- Router
- Html example page
- Database connection
Installation steps
Installation
Module installation
Modbus2websocket library installs with pip:
pip install modbus2websocket
Details
Before creating you application you have to specify following:
- Websocket server IP, for example, 192.168.220.10
- Websocket port, by default, it is 8888
- Modbus/TCP server's IP, for example, 192.168.220.5
Modbus server
If you don't have running Modbus/TCP server, you can use server simulator.
Creating app
Class Router will manage data between Modbus/TCP and websockets client, that runs in your browser
from modbus2websocket.router import Router
Router has two public methods:
Router.add_modbus_reg()
- that adds registers you want to readRouter.run()
- that runs router.
You should add registers that you want to read, as a list of dictionaries. Structure of single registers looks like that:
Input_register_1 = {'ir':
{
'adr': 0,
'num': 1,
'name': 'Input Register 1',
},
},
Where:
ir
- registers type. (see Modbus details).adr
- regsiter's address. It starts from 0 to 65535.num
- number of registers to read. It is limited between 1 to 2000.name
- unique name for your register.
Example
from modbus2websocket.router import Router
if __name__ == '__main__':
ws_ip = '192.168.220.10' # websocket ip address
ws_port = 8888 # websocket port
modbus_ip = '192.168.220.5' # Modbus ip address
router = Router(ws_ip, ws_port, modbus_ip)
# Modbus registers to read
regs = [
{'ir':
{
'adr': 0,
'num': 1,
'name': 'Reg1',
},
},
{'hr':
{
'adr': 1,
'num': 1,
'name': 'Reg2',
},
},
{'ir':
{
'adr': 2,
'num': 1,
'name': 'Reg3',
},
},
]
router.add_modbus_reg(regs)
router.run()
Modbus details
Registers type | Short name | Description |
---|---|---|
Digital Input | DI | Read only, bool, 1-bit |
Input Register | IR | Read only, float/int, 16-bit |
Coil | C | Read/write, bool, 1-bit |
Holding register | HR | Read/write, float/int, 16-bit |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for modbus2websocket-0.0.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b0150adece44ae2a850a9e7832f45215f2e98f393145af4bccf3638c036cc711 |
|
MD5 | ece100869b79dee3e2e076b122861853 |
|
BLAKE2b-256 | ea7cad48f91ce5452d528c1a149b83f3dc7e617031421f7e44a3dc9c8d3b2f86 |