{"id":46064118,"url":"https://github.com/sanny32/openmodsim","last_synced_at":"2026-04-13T09:00:39.534Z","repository":{"id":140117741,"uuid":"594985737","full_name":"sanny32/OpenModSim","owner":"sanny32","description":"Open ModSim is a Free Modbus Slave (Server) Utility ","archived":false,"fork":false,"pushed_at":"2026-04-07T14:11:17.000Z","size":7221,"stargazers_count":205,"open_issues_count":12,"forks_count":30,"subscribers_count":10,"default_branch":"main","last_synced_at":"2026-04-07T16:06:26.785Z","etag":null,"topics":["linux","modbus","modbus-rtu","modbus-server","modbus-slave","modbus-tcp","modsim","windows"],"latest_commit_sha":null,"homepage":"https://sanny32.github.io/OpenModSim","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sanny32.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-30T06:29:58.000Z","updated_at":"2026-04-07T03:23:43.000Z","dependencies_parsed_at":"2025-12-15T10:12:48.594Z","dependency_job_id":"7434aa9f-601d-4937-8af3-d484ca47e953","html_url":"https://github.com/sanny32/OpenModSim","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/sanny32/OpenModSim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanny32%2FOpenModSim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanny32%2FOpenModSim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanny32%2FOpenModSim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanny32%2FOpenModSim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sanny32","download_url":"https://codeload.github.com/sanny32/OpenModSim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanny32%2FOpenModSim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31746113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T06:26:45.479Z","status":"ssl_error","status_checked_at":"2026-04-13T06:26:44.645Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["linux","modbus","modbus-rtu","modbus-server","modbus-slave","modbus-tcp","modsim","windows"],"created_at":"2026-03-01T12:01:36.431Z","updated_at":"2026-04-13T09:00:39.523Z","avatar_url":"https://github.com/sanny32.png","language":"C++","readme":"# Open ModSim\n\n[![GitHub all releases](https://img.shields.io/github/downloads/sanny32/OpenModSim/total?logo=github\u0026cacheSeconds=3600)](https://github.com/sanny32/OpenModSim/releases)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/sanny32/OpenModSim?logo=github\u0026cacheSeconds=3600)](https://github.com/sanny32/OpenModSim/releases/latest)\n[![License](https://img.shields.io/github/license/sanny32/OpenModSim)](LICENSE.md)\n\nOpen ModSim is a free implimentation of modbus slave (server) utility for modbus-tcp and modbus-rtu protocols.\n\n\u003cimg width=\"1292\" height=\"759\" alt=\"image\" src=\"https://github.com/user-attachments/assets/5e3bb093-1d12-48e6-89fa-e688d08fa0be\" /\u003e\n\n\u003cimg width=\"1292\" height=\"759\" alt=\"image\" src=\"https://github.com/user-attachments/assets/2e5ca631-b219-44a6-9983-9a3367d71d51\" /\u003e\n\n\n# Features\n\nThe following Modbus functions are available:\n\n- Discrete Coils/Flags\n```\n    0x01 - Read Coils\n    0x02 - Read Discrete Inputs\n    0x05 - Write Single Coil\n    0x0F - Write Multiple Coils\n```\n\n- Registers\n```\n    0x03 - Read Holding Registers\n    0x04 - Read Input Registers\n    0x06 - Write Single Register\n    0x10 - Write Multiple Registers\n    0x16 - Mask Write Register\n```\n    \nThe following simulations are available:\n\n- Discrete Coils/Flags\n```\n    Random - simulate flag randomly\n    Toggle - simulate flag on/off periodicaly\n```\n\n- Registers\n```\n    Random - simulate register randomly\n    Increment - simulate register from Low Limit to High Limit with a given Step\n    Decrement - simulate register from High Limit to Low Limit with a given Step\n```\n\n# Modbus Logging\n\n\u003cimg width=\"1292\" height=\"759\" alt=\"image\" src=\"https://github.com/user-attachments/assets/4bfad217-2d0c-4d14-a8c2-f434d7ac93e4\" /\u003e\n\n\n# Extended Featues\n\n- Modbus Message Parser\n\n\u003cimg width=\"674\" height=\"463\" alt=\"image\" src=\"https://github.com/user-attachments/assets/774e3ff1-1bf2-46a6-a685-e6702e2e7fe5\" /\u003e\n\n- Modbus Definitions\n  \n\u003cimg width=\"416\" height=\"346\" alt=\"image\" src=\"https://github.com/user-attachments/assets/2dc6c13e-e4be-434b-9266-1de4f3ccda4a\" /\u003e\n\n- Error Simualtions\n\n\u003cimg width=\"416\" height=\"346\" alt=\"image\" src=\"https://github.com/user-attachments/assets/af1701d9-d576-4f1f-9bf9-7e70e85cd9da\" /\u003e\n\n  \n# Scripting\n  From version 1.2.0 Open ModSim supports scripting. Qt runtime implements the [ECMAScript Language Specification](http://www.ecma-international.org/publications/standards/Ecma-262.htm) standard, so Javascript is used to write code.\n  \n\u003cimg width=\"1288\" height=\"749\" alt=\"image\" src=\"https://github.com/user-attachments/assets/6f37b58a-798c-4b45-ad88-165ad5a373c2\" /\u003e\n\n  Scripts can be launched in two modes: Once or Periodically. If you run script in Once mode the script will stop after it finishes executing. In Periodically mode, the script will start after a certain period of time until the user stops it or the method is called\n  ```javascript\n  Script.stop();\n  ```\nHere is an example of using the script in the Periodically mode\n```javascript\n/**************************************************************************/\n/*\n/* Example script that store value after 3 seconds\n/*\n***************************************************************************/\n\n/* Set the server address base starts from one (1-based) */\nServer.addressBase = AddressBase.Base1;\n\nlet deviceId = 1;\nlet address1 = 1;\nlet address10 = 10;\n\nfunction reset()\n{\n    /* Write to a Holding register at address1 zero value */\n    Server.writeHolding(address1, 0, deviceId);\n}\n\n/* init function */\nfunction init()\n{\n    reset();\n\n\t/* Print server error if occured and stop script execution */\n\tServer.onError(deviceId, (error)=\u003e {\n\t\tconsole.error(error);\n \t\tScript.stop();\n\t});   \n\n    /* Runs when Hodling register value at address1 was changed */\n    Server.onChange(deviceId, Register.Holding, address1, (value)=\u003e\n    {\n        if(value === 1)\n        {\n            /* Runs after 3 seconds and increase Holding register value at address10 \n             * Then reset register value at address1 and stop script execution\n             */\n            Script.setTimeout(function()\n            {\n                Server.writeHolding(address10, Server.readHolding(address10, deviceId) + 1, deviceId);\n\t\t\t\treset();\n                Script.stop();\n            }, 3000);\n        }\n     });\n}\n\n/* Runs once when script started */\nScript.onInit(init);\n```\n\n# Building\n  Building is available via cmake (with installed Qt version 5.15 and above) or Qt Creator. Supports Microsoft Windows, Linux and macOS.\n\n## Microsoft Windows Building\n\nThe minimum supported version of Microsoft Windows for building OpenModSim from sources is Windows 10.\n\n1. Install latest [git](https://git-scm.com/downloads/win) version\n2. Run Windows PowerShell terminal as an Administrator\n3. Clone OpenModSim sources from github repository\n```powershell\ngit clone https://github.com/sanny32/OpenModSim.git\n```\n4. Go to OpenModSim folder\n```powershell\ncd OpenModSim\n```\n5. Allow script execution in PowerShell terminal\n```powershell\nSet-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass\n```\n6. Run the build script\n```powershell\n.\\build.ps1\n```\nIf you need to specify Qt framework major version (5 or 6), you can do it in the parameters\n  - `.\\build.ps1 -qt5` or  `.\\build.ps1 -qt6`\n\nThe build script supports building the application only for 64-bit architecture.\n\n## Linux Building\n1. Install [git](https://git-scm.com/downloads/linux) for your Linux distribution\n2. Run the following commands from the console:\n```bash\ngit clone https://github.com/sanny32/OpenModSim.git\n```\n```bash\ncd OpenModSim\n```\n```bash\n./build.sh\n```\n\nIf you need to specify Qt framework major version (5 or 6), you can do it in the parameters\n  - `./build.sh -qt5` or  `./build.sh -qt6`\n\n## macOS Building\n\nThe minimum supported version of macOS for building OpenModSim from sources is macOS 11 (Big Sur).\n\n1. Install [Homebrew](https://brew.sh) if not already installed\n2. Install required dependencies:\n```bash\nbrew install qt@6 cmake ninja\n```\n3. Clone OpenModSim sources from github repository:\n```bash\ngit clone https://github.com/sanny32/OpenModSim.git\n```\n4. Go to OpenModSim folder:\n```bash\ncd OpenModSim\n```\n5. Run the build script:\n```bash\n./build-macos.sh\n```\n\nThe build script generates a macOS application bundle (`omodsim.app`). To run the application:\n```bash\nopen build-omodsim-Qt_*/omodsim.app\n```\n\n# About supported operating systems\n\nThe following minimum operating system versions are supported for OpenModSim:\n\n- \u003cimg src=\"docs/icons/logo_windows7.svg\" width=\"16\" height=\"16\" /\u003e **Microsoft Windows 7**\n- \u003cimg src=\"docs/icons/logo_apple.svg\" width=\"16\" height=\"16\" /\u003e **macOS 11 (Big Sur)** (experimental support)\n- \u003cimg src=\"docs/icons/logo_debian.svg\" width=\"16\" height=\"16\" /\u003e **Debian Linux 11**\n- \u003cimg src=\"docs/icons/logo_ubuntu.svg\" width=\"16\" height=\"16\" /\u003e **Ubuntu Linux 22.04**\n- \u003cimg src=\"docs/icons/logo_mint.png\"  width=\"16\" height=\"16\" /\u003e **Mint Linux 22**\n- \u003cimg src=\"docs/icons/logo_zorin.png\" width=\"16\" height=\"16\" /\u003e **Zorin OS 18**\n- \u003cimg src=\"docs/icons/logo_fedora.svg\" width=\"16\" height=\"16\" /\u003e **Fedora Linux 41**\n- \u003cimg src=\"docs/icons/logo_rocky.png\" width=\"16\" height=\"16\" /\u003e **Rocky Linux 9.7**\n- \u003cimg src=\"docs/icons/logo_opensuse.svg\" width=\"16\" height=\"16\" /\u003e **OpenSuse Linux 15.6**\n- \u003cimg src=\"docs/icons/logo_alt.png\" width=\"16\" height=\"16\" /\u003e **Alt Linux 11**\n- \u003cimg src=\"docs/icons/logo_astra.png\"  width=\"18\" height=\"18\" /\u003e **Astra Linux 1.7**\n- \u003cimg src=\"docs/icons/logo_redos.png\" width=\"16\" height=\"16\" /\u003e **RedOS 8**\n\n  \n# Install from [binary distributions](https://github.com/sanny32/OpenModSim/releases/latest)\n\nBelow are the methods for installing the OpenModSim for different OS\n\n## \u003cimg src=\"docs/icons/logo_windows.svg\" width=\"16\" height=\"16\"\u003e Microsoft Windows\nRun the installer:\n\n- For 32-bit Windows: `qt5-omodsim_1.12.1_x86.exe`\n- For 64-bit Windows: `qt5-omodsim_1.12.1_x64.exe` or `qt6-omodsim_1.12.1_x64.exe`\n\n## \u003cimg src=\"docs/icons/logo_debian.svg\" width=\"20\" height=\"20\"\u003e Debian / \u003cimg src=\"docs/icons/logo_ubuntu.svg\" width=\"20\" height=\"20\"\u003e Ubuntu / \u003cimg width=\"20\" height=\"20\" src=\"docs/icons/logo_mint.png\" /\u003e Mint / \u003cimg src=\"docs/icons/logo_zorin.png\" width=\"20\" height=\"20\"\u003e Zorin / \u003cimg width=\"22\" height=\"22\" src=\"docs/icons/logo_astra.png\" /\u003e Astra Linux\n### Install\nInstall the DEB package from the command line:\n```bash\nsudo apt install ./qt6-omodsim_1.12.1-1_amd64.deb\n```\nor if you want to use Qt5 libraries:\n```bash\nsudo apt install ./qt5-omodsim_1.12.1-1_amd64.deb\n```\n\n### Remove\nTo remove the DEB package run:\n```bash\nsudo apt remove qt6-omodsim\n```\nor for Qt5 package:\n```bash\nsudo apt remove qt5-omodsim\n```\n\n## \u003cimg src=\"docs/icons/logo_redhat.svg\" width=\"24\" height=\"24\"\u003e RedHat / \u003cimg src=\"docs/icons/logo_fedora.svg\" width=\"20\" height=\"20\"\u003e Fedora / \u003cimg src=\"docs/icons/logo_rocky.png\" width=\"20\" height=\"20\"\u003e Rocky / \u003cimg width=\"20\" height=\"20\" src=\"docs/icons/logo_redos.png\" /\u003e RedOS Linux\n### Install\nInstall the RPM package from the command line:\n```bash\nsudo dnf install ./qt6-omodsim-1.12.1-1.x86_64.rpm\n```\n\n### Remove\nTo remove the RPM package run:\n```bash\nsudo dnf remove qt6-omodsim\n```\n\n## \u003cimg src=\"docs/icons/logo_alt.png\" width=\"24\" height=\"24\"\u003e Alt Linux\n### Install\nInstall the RPM package from the command line as root user:\n```bash\napt-get install ./qt6-omodsim-1.12.1-1.x86_64.rpm\n```\n\n### Remove\nTo remove the RPM package run as root user:\n```bash\napt-get remove qt6-omodsim\n```\n\n## \u003cimg width=\"20\" height=\"20\" src=\"docs/icons/logo_suse.png\" /\u003e SUSE / \u003cimg src=\"docs/icons/logo_opensuse.svg\" width=\"24\" height=\"24\" /\u003e OpenSUSE Linux\n### Install\nImport qt6-omodsim.rpm.pubkey to rpm repository:\n```bash\nsudo rpm --import qt6-omodsim.rpm.pubkey\n```\nInstall the RPM package using Zypper:\n```bash\nsudo zypper install ./qt6-omodsim-1.12.1-1.x86_64.rpm\n```\n\n### Remove\nTo remove the RPM package run:\n```bash\nsudo zypper remove qt6-omodsim\n```\n\n# Code Signing Sponsor\nWindows binaries for this project are signed thanks to **SignPath Foundation**.\n*   🔐 **Free code signing service:** [SignPath.io](https://signpath.io)\n*   📜 **Certificate provider:** [SignPath Foundation](https://signpath.org)\n\n# MIT License\nCopyright 2023-2026 Alexandr Ananev [mail@ananev.org]\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanny32%2Fopenmodsim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsanny32%2Fopenmodsim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanny32%2Fopenmodsim/lists"}