Skip to content
/ petri Public

A petri net module for building Discrete Event Systems.

Notifications You must be signed in to change notification settings

jt05610/petri

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Petri

Petri is a full-stack framework for designing and automating lab research processes.

Petri is designed to be easy to use, and easy to extend. It has a user interface, code generator, and gRPC API.

Rationale

Install

Usage

How to automate your research with Petri

Define the components within the system

Individual automata within Petri are defined with elementary Petri Nets. Petri Nets were chosen over finite state machines for system modeling because they are easily composable. Petri Nets have been used to model chemical processes for decades, and are a natural fit for modeling lab processes.

While Petri Nets could theoretically be used to model everything that happens down to the molecular level, we have found it most useful to start to model components at the highest level possible (i.e. the places and transitions that you want to affect other components, rather than every possible thing something can do).

The components in the standard library are a good place to see examples of the components used to automate the author's research.

Generate the code

Currently, code generation in Go is fully supported, and Python is almost there.

Implement the code

Petri currently supports the following serial protocols for communicating with devices:

  • Modbus (support up to 255 devices on one bus)
  • Marlin (Used to make 3D printers do lab things)
  • grbl (Used to quickly make stepper motors do things using a GRBL shield and an arduino, supports up to 4 motors.)

Network protocols:

Run the code

Run your generated servers and the Petri Daemon will automatically discover them and connect them to the network. This is done using simple heartbeating over RabbitMQ.

Sequence events with the UI

You can create a sequence of events using the Petri UI. The Petri Net acts like a contract between devices, so they will always know how to play nicely together once defined.

Run your system

Single executions are performed with the UI. Batch executions are currently performed using the GraphQL API and the otto python client which incorporates Design of Experiments algorithms, Batch Bayesian Optimization, and a CouchDB database to manage samples, batches, results, analyses, and optimization experiments.

About

A petri net module for building Discrete Event Systems.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages