{"id":13714141,"url":"https://github.com/libplctag/libplctag","last_synced_at":"2026-02-10T03:01:18.320Z","repository":{"id":3505640,"uuid":"4562820","full_name":"libplctag/libplctag","owner":"libplctag","description":"This C library provides a portable and simple API for accessing Allen-Bradley and Modbus PLC data over Ethernet.  ","archived":false,"fork":false,"pushed_at":"2026-01-14T22:16:12.000Z","size":4951,"stargazers_count":838,"open_issues_count":41,"forks_count":262,"subscribers_count":62,"default_branch":"release","last_synced_at":"2026-01-15T02:37:58.785Z","etag":null,"topics":["allen-bradley","c","c-sharp","cip","dotnet","ethernet","ethernet-ip","go","golang","java","labview","linux","modbus","pascal","pccc","plc","portable","rockwell","windows"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/libplctag.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE-1.MPL","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},"funding":{"github":"libplctag","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2012-06-05T16:58:40.000Z","updated_at":"2026-01-14T18:03:31.000Z","dependencies_parsed_at":"2024-05-01T17:40:57.360Z","dependency_job_id":"3e0af6ff-32a8-4f0e-8ffb-69189c59d7cd","html_url":"https://github.com/libplctag/libplctag","commit_stats":{"total_commits":1126,"total_committers":18,"mean_commits":62.55555555555556,"dds":"0.039964476021314366","last_synced_commit":"c55bc5876d938dda1c609750cde5ae4812d7b8a8"},"previous_names":[],"tags_count":136,"template":false,"template_full_name":null,"purl":"pkg:github/libplctag/libplctag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libplctag%2Flibplctag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libplctag%2Flibplctag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libplctag%2Flibplctag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libplctag%2Flibplctag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/libplctag","download_url":"https://codeload.github.com/libplctag/libplctag/tar.gz/refs/heads/release","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libplctag%2Flibplctag/sbom","scorecard":{"id":32955,"data":{"date":"2025-08-04","repo":{"name":"github.com/libplctag/libplctag","commit":"0b185e9950fd7cc728bb26d6def072cb5672dd23"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":3.1,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/16 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"10 commit(s) and 19 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1192: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:1200: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1229: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1268: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1352: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1362: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1479: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1524: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:1536: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:173: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:504: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:535: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:556: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:564: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:709: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:730: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:875: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:883: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1027: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1048: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:1444: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:193: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:329: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:350: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:483: update your workflow using https://app.stepsecurity.io/secureworkflow/libplctag/libplctag/ci.yml/release?enable=pin","Info:   0 out of  22 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Dangerous-Workflow","score":0,"reason":"dangerous workflow patterns detected","details":["Warn: script injection with untrusted input ' github.event.pull_request.title ': .github/workflows/ci.yml:1485","Warn: script injection with untrusted input ' github.event.pull_request.body ': .github/workflows/ci.yml:1485","Warn: script injection with untrusted input ' github.head_ref ': .github/workflows/ci.yml:1367","Warn: script injection with untrusted input ' github.event.pull_request.title ': .github/workflows/ci.yml:1367","Warn: script injection with untrusted input ' github.event.pull_request.body ': .github/workflows/ci.yml:1367","Warn: script injection with untrusted input ' github.event.pull_request.title ': .github/workflows/ci.yml:1397","Warn: script injection with untrusted input ' github.event.pull_request.body ': .github/workflows/ci.yml:1397"],"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE-1.MPL:0","Info: FSF or OSI recognized license: Mozilla Public License 2.0: LICENSE-1.MPL:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.6.9 not signed: https://api.github.com/repos/libplctag/libplctag/releases/236720177","Warn: release artifact v2.6.8 not signed: https://api.github.com/repos/libplctag/libplctag/releases/234546772","Warn: release artifact v2.6.7 not signed: https://api.github.com/repos/libplctag/libplctag/releases/230324142","Warn: release artifact v2.6.6 not signed: https://api.github.com/repos/libplctag/libplctag/releases/225405507","Warn: release artifact v2.6.5 not signed: https://api.github.com/repos/libplctag/libplctag/releases/215628750","Warn: release artifact v2.6.9 does not have provenance: https://api.github.com/repos/libplctag/libplctag/releases/236720177","Warn: release artifact v2.6.8 does not have provenance: https://api.github.com/repos/libplctag/libplctag/releases/234546772","Warn: release artifact v2.6.7 does not have provenance: https://api.github.com/repos/libplctag/libplctag/releases/230324142","Warn: release artifact v2.6.6 does not have provenance: https://api.github.com/repos/libplctag/libplctag/releases/225405507","Warn: release artifact v2.6.5 does not have provenance: https://api.github.com/repos/libplctag/libplctag/releases/215628750"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-14T19:36:43.386Z","repository_id":3505640,"created_at":"2025-08-14T19:36:43.387Z","updated_at":"2025-08-14T19:36:43.387Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29289899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T02:32:08.756Z","status":"ssl_error","status_checked_at":"2026-02-10T02:30:31.937Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["allen-bradley","c","c-sharp","cip","dotnet","ethernet","ethernet-ip","go","golang","java","labview","linux","modbus","pascal","pccc","plc","portable","rockwell","windows"],"created_at":"2024-08-02T23:01:53.196Z","updated_at":"2026-02-10T03:01:18.313Z","avatar_url":"https://github.com/libplctag.png","language":"C","funding_links":["https://github.com/sponsors/libplctag"],"categories":["Repositories"],"sub_categories":[],"readme":"# libplctag - a C library for PLC communication\n\n- [libplctag - a C library for PLC communication](#libplctag---a-c-library-for-plc-communication)\n  - [What is libplctag?](#what-is-libplctag)\n  - [Tier One Platforms](#tier-one-platforms)\n  - [WARNING - DISCLAIMER](#warning---disclaimer)\n  - [Get It!](#get-it)\n  - [Features](#features)\n    - [High Level Features](#high-level-features)\n    - [Detailed Features](#detailed-features)\n      - [PLC Support](#plc-support)\n      - [Platform Support](#platform-support)\n    - [Alternate Programming Languages](#alternate-programming-languages)\n  - [Code](#code)\n    - [How to Get The Code](#how-to-get-the-code)\n    - [Example Code](#example-code)\n    - [API](#api)\n  - [Help Wanted](#help-wanted)\n    - [How to Contribute](#how-to-contribute)\n  - [History](#history)\n  - [Contact and Support](#contact-and-support)\n    - [libplctag Forum](#libplctag-forum)\n    - [GitHub](#github)\n  - [License](#license)\n  - [Attributions and Trademarks](#attributions-and-trademarks)\n  - [End Note](#end-note)\n\n## What is libplctag?\n\n**libplctag** is an open source C library for Linux, Windows and macOS using **EtherNet/IP** or **Modbus TCP** to read and write tags in PLCs.  The library has been in production since early 2012 and is used by multiple organizations for many tasks including controlling radio telescopes, large and precision manufacturing, controlling fitness equipment, food handling and many, many more.\n\n| **Latest Stable Release:** |\n|             :-:            | \n| ![Latest Release](https://img.shields.io/github/v/release/libplctag/libplctag) |\n\n## Tier One Platforms\n\nThese are OS/compiler combinations that are fully tested with each release:\n\n| **OS**       | **OS Version** | **Compiler**    | **Compiler Version** | **Architecture** | **Status** |\n|    :-:       |    :-:         |    :-:          |    :-:               |        :-:       | :-         |\n| Alpine Linux | v3.23.0-62     | GCC             | 15.2.0               | x86-64           | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| Alpine Linux | v3.23.0-62     | GCC             | 15.2.0               | Aarch64          | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| macOS        | 14             | Apple-Clang     | 17.0.0               | x86-64           | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| macOS        | 15             | Apple-Clang     | 17.0.0               | Aarch64          | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| Ubuntu Linux | 24.04          | GCC             | 13.3.0               | x86-64           | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| Ubuntu Linux | 24.04          | GCC-musl        | 13.3.0               | x86-64           | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| Ubuntu Linux | 24.04          | GCC             | 13.3.0               | Aarch64          | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| Ubuntu Linux | 24.04          | GCC             | 13.3.0               | x86              | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| Windows      | 11 (Server 22) | MSVC            | 19.44.35221.0        | x86-64           | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| Windows      | 11 (Server 22) | MSVC            | 19.44.35221.0        | x86              | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| Windows      | 11 (Server 22) | MSVC            | 19.44.35221.0        | Aarch64          | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n| Windows      | 11 (Server 22) | MinGW-GCC.      | 14.2.0               | x86-64           | ![Release branch CI status](https://github.com/libplctag/libplctag/actions/workflows/ci.yml/badge.svg?branch=release) |\n\n## WARNING - DISCLAIMER\n\nNote: **PLCs control many kinds of equipment and loss of property, production or even life can happen if mistakes in programming or access are made.  Always use caution when accessing or programming PLCs!**\n\nWe make no claims or warrants about the suitability of this code for any purpose.\n\nBe careful!\n\n## Get It!\n\nDownload it from the [releases page](https://github.com/libplctag/libplctag/releases)!\n\n## Features\n\n### High Level Features\n\n- EtherNet/IP and Modbus TCP support.\n- Open source licensing under the MPL 2.0 or LGPL 2+.\n- Pure C library for portability across Linux, Windows and macOS as well as 32-bit and 64-bit.\n- Support for x86, ARM and MIPS, and probably others.\n- Very stable API with almost no changes other than feature additions since 2012.\n- Low memory use and very high performance and capacity.  Uses protocol-specific features to increase performance.\n- Simple API with minimal use of language-specific data to enable easy wrapping in other languages.\n- Extensive example programs showing use of all library features.\n- Wrappers for higher level languages like C#/.Net, Julia etc.\n- Free!\n\n### Detailed Features\n\n#### PLC Support\n\n- support for Rockwell/Allen-Bradley ControlLogix(tm) PLCs via CIP-EtherNet/IP (CIP/EIP or EIP).\n  - read/write 8, 16, 32, and 64-bit signed and unsigned integers.\n  - read/write single bits/booleans.\n  - read/write 32-bit and 64-bit IEEE format (little endian) floating point.\n  - raw support for user-defined structures (you need to pull out the data piece by piece)\n  - read/write arrays of the above.\n  - multiple-request support per packet.\n  - packet size negotiation with newer firmware (version 20+) and hardware.\n  - tag listing, both controller and program tags.\n- support for Rockwell/Allen-Bradley Micro 850 PLCs.\n  - Support as for ControlLogix where possible.\n- support for older Rockwell/Allen-Bradley such as PLC-5 PLCs (Ethernet upgraded to support Ethernet/IP), SLC 500 and MicroLogix with Ethernet via CIP.\n  - read/write of 16-bit INT.\n  - read/write of 32-bit floating point.\n  - read/write of 32-bit integer (L data file) on Micrologix.\n  - read/write of arrays of the above (arrays not tested on SLC 500).\n  - read/write single bits for B and N data files.\n- support for older Rockwell/Allen-Bradley PLCs accessed over a DH+ bridge (i.e. a LGX chassis with a DHRIO module) such as PLC/5, SLC 500 and MicroLogix.\n  - read/write of 16-bit INT.\n  - read/write of 32-bit floating point.\n  - read/write of arrays of the above.\n- extensive example code.  Including\n  - tag listing.\n  - setting up and handling callbacks.\n  - logging data from multiple tags.\n  - reading and writing tags from the command line.\n  - getting and setting individual bits as tags.\n- Support for Omron NX/NJ series PLCs as for Allen-Bradley Micro800.\n- Support for Modbus TCP.\n\n#### Platform Support\n\n- CMake build system for better cross-platform support on Windows, Linux and macOS.\n  - Native CMake support is present in recent versions of Microsoft Visual Studio.\n- Semantic versioning used and supported with specific library APIs for compatibility and feature checking.\n- C library has no dependencies apart from libc, or musl, and pthreads on some platforms.\n- Binary release for all Tier 1 platforms as well as Linux (Ubuntu/Debian) Arm v6 and Arm v7-hf.\n- RaspberryPi supported. Both Linux and Windows IoT-based (some effort required to configure Visual Studio to build).\n\n### Alternate Programming Languages\n\nThe C library is designed for easy wrapping.  Wrappers for many other languages include the following:\n\n- wrappers that are part of the GitHub libplctag organization:\n  - **.Net Core, .Net Framework, [libplctag.NET](https://github.com/libplctag/libplctag.NET). Very popular!**\n  - Go [goplctag](https://github.com/libplctag/goplctag)\n  - Java [libplctag4j](https://github.com/libplctag/libplctag4j)\n  - Julia, [PLCTag.jl](https://github.com/libplctag/PLCTag.jl)\n- Minimal wrappers included with the C source:\n  -  C++\n  -  Python\n  -  Pascal\n- Other wrappers on GitHub:\n  - C#, [Corsinvest](https://github.com/Corsinvest/cv4ab-api-dotnet)\n  - C#, [Mesta Automation](https://github.com/mesta1/libplctag-csharp)\n  - Labview, (see [libplctag-labview](https://github.com/dirtyb15/libplctag-labview))\n\n## Code\n\n### How to Get The Code\n\nThe code for the core library is at [libplctag](https://github.com/libplctag/libplctag).   Stable code is on the default _release_ branch.   If you check out code from GitHub, it will default to the _release_ branch.\n\nIf you want pre-built binaries, we have them available on the [releases](https://github.com/libplctag/libplctag/releases) page.   Just pick the one you want and download the ZIP file for your system.   We have 32 and 64-bit builds for x86 Linux and Windows and 64-bit builds for x86-64 macOS.\n\nGo to the main project at the [libplctag organization](https://github.com/libplctag) to see the other wrappers.\n\n### Example Code\n\nOh, wait, you want code!   There are many examples in the [examples](https://github.com/libplctag/libplctag/tree/release/src/examples) directory.\n\nA good place to start is [simple.c](https://github.com/libplctag/libplctag/blob/release/src/examples/simple.c).\n\nThis code reads several 32-bit signed integers (DINT), updates them,\nthen writes them back out and rereads them from a tag named TestBigArray\nin a Logix-class Allen-Bradley PLC.\n\nThe README file in the examples directory describes some of the more interesting ones.\n\n### API\n\nMost of the functions in the API are for data access.   Direct support for single bits, 8-bit, 16-bit, 32-bit and\n64-bit words (integer and floating point) are provided by the library.\n\nSee the [API](https://github.com/libplctag/libplctag/wiki/API) for more information.\n\n## Help Wanted\n\nWe need and welcome help with the following:\n\n- bug reports!   We may not have your hardware so your bugs can help us make sure the library works in cases we cannot find!\n- bug fixes.\n- other protocols like Modbus, SBus etc.\n- other platforms like Android, iOS etc.\n- changes and additions for other PLCs.\n- additional compilers.\n- more language wrappers!\n- patches and updates for existing language wrappers!\n- Testing and more testing!\n\n### How to Contribute\n\nWe love contributions!   Many users have contributed wrappers, extra functionality and bug fixes over the years.   The library is much better for all the help that users have provided.   **We ask that your code contributions to the core library are under the same dual MPL/LGPL license.**\n\nTesting is difficult for us as we do not have access to all the different hardware out there.   If you can, a great way to contribute is to test prereleases.  These are on the _prerelease_ branch!  We appreciate all the help we get from our users this way.\n\nThe easiest way to contribute to the core library is to raise a PR on GitHub.\n\nWrappers in other languages are generally split off into separate projects.  Those may have different licenses and contribution processes.  Please look at the documentation for the wrapper in question.\n\n## History\n\nSee the [wiki history page](https://github.com/libplctag/libplctag/wiki/History) for more details on how libplctag was created and why we built it.\n\n## Contact and Support\n\nThere are two ways to ask for help or contact us.\n\n### libplctag Forum\n\nIf you have general questions or comments about the\nlibrary, its use, or about one of the wrapper libraries, please join the Google group\n[libplctag](https://groups.google.com/forum/#!forum/libplctag)!\n\nThe forum is open to all, but is by request only to keep the spammers down.  The traffic is fairly\nlight with usually a small number of emails per month.  It is our primary means for users to\nask questions and for discussions to happen.   Announcements about releases happen on the forum.\n\n### GitHub\n\nIf you find bugs or need specific features, please file them on [GitHub's issue tracker](https://github.com/libplctag/libplctag/issues) for\nthe main C library project.  Each individual wrapper project has its own issue tracker.\n\nIf needed, we will initiate private communication from there.\n\n## License\n\nSee the license files (LICENSE.MPL or LICENSE.LGPL) for our legal disclaimers of responsibility, fitness or\nmerchantability of this library as well as your rights with regards\nto use of this library.  This code is **dual licensed** under the Mozilla Public License 2.0 (MPL 2.0) or the GNU\nLesser/Library General Public License 2 or later (LGPL 2+).\n\nThis dual license applies to the core C library.  Additional wrappers for other languages may be under different licenses.   Please see those projects for more information.\n\n## Attributions and Trademarks\n\nPLC5, SLC 500, MicroLogix, Micro8X0, CompactLogix and ControlLogix are trademarks of Rockwell/Allen Bradley.\nWindows and Visual Studio are trademarks of Microsoft.  Apple owns the trademark on macOS.\n\nPlease let us know if we missed some so that we can get all the attributions correct!\n\n## End Note\n\nHave fun and let us know if this library is useful to you.  Please send test\ncases if you run into bugs.  As PLC hardware is fairly expensive, we may not\nbe able to test out your test scenarios.  If possible, please send patches.\nWe do not ask that you transfer copyright over to us, but we do ask that you\nmake any submitted patches under the same licenses we use.  We will not\ntake any patches under the GPL license or licenses that are incompatible with the\nMPL 2.0 license.\n\nWe hope you find this library as useful as we do!\n\n- the libplctag team\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibplctag%2Flibplctag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flibplctag%2Flibplctag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibplctag%2Flibplctag/lists"}