Skip to main content

Factory IO Modbus Interface

Project description

PyFactoryIO

PyFactoryIO is a Python library that provides a high-level, modular Modbus interface for interacting with Factory I/O. It allows you to easily connect your Python control logic to Factory I/O simulations, abstracting away the low-level Modbus TCP communication and mapping digital/register inputs and outputs by name.

Features

  • Easy Configuration: Map Factory I/O sensors and actuators using descriptive names instead of Modbus addresses.
  • Event-Driven & Loop-Based Execution: Provides decorators to run callbacks on state changes, or a continuous control loop for cyclic execution.
  • Auto-Mapping: Automatically handles Modbus coils, discrete inputs, holding registers, and input registers.
  • Lightweight: Built on top of pyModbusTCP.

Installation

You can install pyfactoryio directly via pip:

pip install pyfactoryio

Quick Start

1. Configure Factory I/O

Ensure Factory I/O is configured to use the Modbus TCP Server driver. By default, PyFactoryIO listens on 127.0.0.1 port 5020.

2. Basic Example

Here is a simple example demonstrating how to read a sensor and trigger an actuator.

from pyfactoryio import FactoryIOServer

# Define your input and output names in the order they appear in Factory I/O
DI_NAMES = ["Sensor_1", "Start_Button"]
DO_NAMES = ["Conveyor", "Warning_Light"]

# Initialize the server
server = FactoryIOServer(
    di_names=DI_NAMES,
    do_names=DO_NAMES
)

# Example 1: Event-driven callback
@server.on_change("Start_Button")
def on_start_pressed(value):
    if value:
        print("Start button pressed!")
        server.Conveyor = True
    else:
        print("Start button released!")
        server.Conveyor = False

# Example 2: Continuous control loop
def my_logic(srv):
    # This function is called continuously by run_loop
    if srv.Sensor_1:
        srv.Warning_Light = True
    else:
        srv.Warning_Light = False

if __name__ == "__main__":
    # Start the event loop (e.g., at 10Hz)
    server.run_loop(logic_func=my_logic, hz=10)

3. Robotic Sorting Example

A more advanced example demonstrating a robust state machine for a Two-Axis Pick & Place robot. It uses a retroreflective sensor to detect incoming items, a vision sensor to determine their color, and automatically feeds the conveyor belt while sorting items to the left or right belts.

Sorting Robot Task

See the full implementation in sorting_robot.py.

Supported Variable Types

  • di_names: Digital Inputs (Sensors, Buttons) - Read from Factory I/O via Coils.
  • do_names: Digital Outputs (Conveyors, Lights) - Written to Factory I/O via Discrete Inputs.
  • ri_names: Register Inputs (Analog Sensors) - Read from Factory I/O via Holding Registers.
  • ro_names: Register Outputs (Analog Actuators) - Written to Factory I/O via Input Registers.

License

This project is licensed under the MIT License.

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

pyfactoryio-0.1.1.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyfactoryio-0.1.1-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file pyfactoryio-0.1.1.tar.gz.

File metadata

  • Download URL: pyfactoryio-0.1.1.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyfactoryio-0.1.1.tar.gz
Algorithm Hash digest
SHA256 520b3e8f5508df6afdc2760e45d76a4cd79302154481f8a905cd26c43a4b1422
MD5 47b68e250deb0530aecfd43b17169c87
BLAKE2b-256 388c039840dff75c37041c0e5f78b79c56f506f5f7e0e631a6b0949f9a53ba1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfactoryio-0.1.1.tar.gz:

Publisher: pypi-publish.yml on Mostafasaad1/pyfactoryio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfactoryio-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pyfactoryio-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyfactoryio-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 150d4ab5f7cf3761166dd073c4dd2070ccd6f1ddce49940f1ac39079f665c69d
MD5 3c192f07d8f20fa25483fa85c3a73118
BLAKE2b-256 81a26b213f792bdc1c25b1393180978fe94016f2ba76fe31f9e59fccef39444f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfactoryio-0.1.1-py3-none-any.whl:

Publisher: pypi-publish.yml on Mostafasaad1/pyfactoryio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page