{"id":16221593,"url":"https://github.com/rahix/profirust","last_synced_at":"2025-04-09T09:04:43.991Z","repository":{"id":214507136,"uuid":"736690480","full_name":"Rahix/profirust","owner":"Rahix","description":"A PROFIBUS-DP compatible communication stack written in Rust","archived":false,"fork":false,"pushed_at":"2025-02-23T11:06:26.000Z","size":604,"stargazers_count":36,"open_issues_count":12,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-07T06:37:02.494Z","etag":null,"topics":["industrial-automation","profibus","profibus-dp","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rahix.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-28T15:41:07.000Z","updated_at":"2025-03-27T22:04:05.000Z","dependencies_parsed_at":"2023-12-28T16:59:34.501Z","dependency_job_id":"2fe2c354-0f02-4d1a-b2ab-a137e956ffb9","html_url":"https://github.com/Rahix/profirust","commit_stats":null,"previous_names":["rahix/profirust"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahix%2Fprofirust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahix%2Fprofirust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahix%2Fprofirust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahix%2Fprofirust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rahix","download_url":"https://codeload.github.com/Rahix/profirust/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248008631,"owners_count":21032556,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["industrial-automation","profibus","profibus-dp","rust"],"created_at":"2024-10-10T12:09:01.802Z","updated_at":"2025-04-09T09:04:43.968Z","avatar_url":"https://github.com/Rahix.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"img/logo-header.svg\" alt=\"profirust\"\u003e\u003cbr/\u003e\n  \u003ca href=\"https://crates.io/crates/profirust\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/profirust.svg\" alt=\"crates.io page\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://docs.rs/profirust/latest/profirust/\"\u003e\u003cimg src=\"https://docs.rs/profirust/badge.svg\" alt=\"docs.rs page\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/rahix/profirust/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/rahix/profirust/actions/workflows/ci.yml/badge.svg\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003cbr/\u003e\n  A PROFIBUS-DP compatible communication stack written in Rust.\n\u003c/p\u003e\n\n## What's this?\n**profirust** is a pure-Rust [PROFIBUS-DP] compatible communication stack.\nPROFIBUS is an industrial bus protocol used to communicate with field devices\nlike remote I/O, transducers, valves, drives, etc.\n\nIf you want to learn more, I suggest reading my blog posts about\n[profirust][blog-post] or my [PROFIBUS Primer][blog-profibus].\n\n[blog-post]: https://blog.rahix.de/profirust/\n[blog-profibus]: https://blog.rahix.de/profibus-primer/\n\n## Project Status\n**profirust** works well for the features it currently supports, however it has\nnot proven itself in a real application yet.  There are still some features\nmissing which are needed for production use.  Check the roadmap below.\n\nAt this time, **profirust** is developed as a spare time project.  If you are\ninterested in this project, help is gladly accepted in the following forms:\n\n- Code Contributions\n- Donation of PROFIBUS peripherals or other equipment for testing purposes\n- Funding of access to the needed IEC standards for improving compliance\n- Reporting any kinds of issues encountered while using **profirust**\n\n## Supported Hardware\n**profirust** is designed to have as little hardware dependency as possible.\nAll you need is a UART interface with an RS-485 transceiver.  You can then\nwrite a matching implementation of [`ProfibusPhy`].  It is encouraged to submit\nsuch implementations for inclusion in **profirust**.\n\nAt the moment, the following implementations are available:\n\n- [`SerialPortPhy`]: Platform-independent PHY implementation for serial port devices\n- [`LinuxRs485Phy`]: Linux userspace PHY implementation for UART TTY devices\n- [`Rp2040Phy`]: Implementation for RP2040 microcontrollers\n- _Planned:_ Generic implementation for [`embedded-hal`]-supported microcontrollers\n\n[`ProfibusPhy`]: https://docs.rs/profirust/latest/profirust/phy/trait.ProfibusPhy.html\n[`SerialPortPhy`]: https://docs.rs/profirust/latest/profirust/phy/struct.SerialPortPhy.html\n[`LinuxRs485Phy`]: https://docs.rs/profirust/latest/profirust/phy/struct.LinuxRs485Phy.html\n[`Rp2040Phy`]: https://docs.rs/profirust/latest/profirust/phy/struct.Rp2040Phy.html\n[`embedded-hal`]: https://github.com/rust-embedded/embedded-hal\n\n## Roadmap\n- [x] Single-master bus up to 6 Mbit/s\n- [x] Cyclic communication with DP-V0 peripherals\n- [x] Basic Diagnostics\n- [x] Extended Diagnostics (DP-V0)\n- [x] Multi-master bus\n- [x] Bus discovery utilities\n- [ ] Bus error tracking\n- [ ] Reliable communication at 12 Mbit/s\n- [ ] Communication with DP-V1 peripherals\n- [ ] Equidistant bus cycle\n- [ ] Isochronous bus cycle\n- [ ] Passive Station (Peripheral)\n\n## Getting Started\nThis is a short guide for getting communication up and running with your\nPROFIBUS peripheral:\n\n1. Find the GSD (generic station description) file for your peripheral.\n   Usually, the manufacturer offers these for download somewhere.\n2. Run the `gsdtool` to set up the configuration and parameterization of your\n   peripheral:\n   ```bash\n   cargo run -p gsdtool -- config-wizard path/to/peripheral.gsd\n   ```\n   The configuration wizard will walk you through all the settings you need to\n   make.  At this stage, you also need to setup the modules of your peripheral.\n   The wizard will then give you Rust code for configuring the peripheral\n   options to your selected values.\n3. Modify an example for your peripheral.  Update the peripheral address.  Then\n   paste the `PeripheralOptions` block and I/O buffers that `gsdtool` emitted.\n4. Run the example, ideally with `RUST_LOG=trace` to see bus communication.\n   Hopefully, you should now be able to establish cyclic communication with\n   your peripheral.\n\n## License\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or\n  \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or\n  \u003chttp://opensource.org/licenses/MIT\u003e)\n\nat your option.\n\n### Contribution\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall\nbe dual licensed as above, without any additional terms or conditions.\n\n[PROFIBUS-DP]: https://en.wikipedia.org/wiki/Profibus\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahix%2Fprofirust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frahix%2Fprofirust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahix%2Fprofirust/lists"}