From 96ed822ebb871accfde4a66611051ea4503d3515 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 30 Sep 2026 22:41:23 -0600 Subject: [PATCH] Cleanud up --- .gitattributes | 9 + .gitignore | 16 ++ README.md | 103 +++----- SHA256SUMS.txt | 26 +- .../CmpAtomModbus_library.precompilecache | Bin 172716 -> 0 bytes component-source/generated/CmpAtomModbus.c | 10 - .../generated/CmpAtomModbusItf.m4 | 70 ------ docs/API-REFERENCE.md | 2 +- docs/BUILD-AND-USAGE.md | 237 ++++-------------- docs/CLEANUP.md | 25 ++ docs/DOCUMENTATION-VALIDATION.md | 11 - docs/USER-GUIDE.md | 8 +- docs/VALIDATION.md | 24 +- docs/document_export.py | 194 -------------- 14 files changed, 169 insertions(+), 566 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore delete mode 100644 artifacts/arm64/CmpAtomModbus_library.precompilecache delete mode 100644 component-source/generated/CmpAtomModbus.c delete mode 100644 component-source/generated/CmpAtomModbusItf.m4 create mode 100644 docs/CLEANUP.md delete mode 100644 docs/DOCUMENTATION-VALIDATION.md delete mode 100644 docs/document_export.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8761e98 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +* text=auto +*.py text eol=lf +*.c text eol=lf +*.h text eol=lf +*.m4 text eol=lf +*.md text eol=lf +*.so binary +*.precompilecache binary +*.library binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..82d6b34 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Native build outputs +component-source/component/out/ +component-source/component/*.o +component-source/tests/driver +component-source/tests/bridge_driver +component-source/tests/test_bridge +__pycache__/ +*.pyc +# CODESYS local working caches +*.precompilecache +*.compileinfo +*.bootinfo +*.bak +*.opt +# Keep the supplied cache as a reference artifact +!artifacts/arm64/CmpAtomModbus_library.precompilecache diff --git a/README.md b/README.md index 1d2fce1..a3ee7b3 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,37 @@ -# atMb — documented working library +# Atom Modbus Library (`atMb`) -Start with `library/atMb-Documented.export`: comments-only documentation of your -working CmpAtomModbus export, retaining its embedded C library object. It uses -`ClientTCP`, matching the uploaded working interface. +CODESYS library with a native C engine for Modbus TCP client, RTU client and TCP +slave operation. Public namespace: `atMb`. No ModbusFB dependency is required. -Read `docs/USER-GUIDE.md` for setup and examples and `docs/API-REFERENCE.md` for -all 95 code objects, parameters, outputs, methods and properties. -`docs/DOCUMENTATION-VALIDATION.md` records code/payload preservation checks. -`reference/Working-CmpAtomModbus.export` is the exact uploaded original. +## Use the library -The earlier development export and generator are retained for source history. -`library/build_native_export.py` generates the earlier migration export; it does -not generate or supersede the newly documented working export. Do not overwrite -working IDE changes by regenerating that migration export. The documentation -adds no C changes; the source-to-uploaded-binary match remains unverified. +Open `library/CmpAtomModbus.library` in CODESYS, or install it using Library +Repository and reference it from your application. Keep its project title and +external C interface settings intact. The development target is Raspberry Pi +64 SL (ARM64), using CODESYS 3.5 SP22; runtime/target compatibility must be checked +when changing platforms. Read [the user guide](docs/USER-GUIDE.md) for examples +and [the API reference](docs/API-REFERENCE.md) for members and methods. -The rest of the source/build kit remains below. +## Repository contents -# atMb — native Modbus for CODESYS +| Path | Purpose | +|---|---| +| `library/CmpAtomModbus.library` | Working CODESYS library file; edit IEC code here | +| `component-source/src/` | C protocol, client, serial and server implementation | +| `component-source/component/` | Active component frame, ABI interface and makefile | +| `component-source/tests/` | Host protocol and bridge tests | +| `ExtensionSDK/` | Supplied SDK required for component builds | +| `artifacts/arm64/libCmpAtomModbus.so` | Supplied ARM64 native binary | +| `docs/BUILD-AND-USAGE.md` | Native build and deployment instructions | +| `docs/USER-GUIDE.md` | Calling patterns, configuration and diagnostics | +| `docs/API-REFERENCE.md` | Detailed IEC reference based on the last working export | +| `docs/CLEANUP.md` | Removed files, preservation checks and update workflow | +| `docs/VALIDATION.md` | Validation scope | +| `SHA256SUMS.txt` | Current working-file snapshot checksums, excluding Git metadata | -Git-ready source snapshot, revision 0.9.1. Public namespace `atMb`. -C implementation supports TCP client, RTU client and TCP slave; IEC code has -no ModbusFB dependency. Online-change support remains future work. +## Build on the Pi -## Files - -- `component-source/`: C engine, CODESYS component frame/interface and host tests. -- `ExtensionSDK/`: supplied SDK used by the component build. -- `library/atMb-Native.export`: corrected IEC import; includes public status declarations. -- `library/atMb-Native-Review.st`: readable generated IEC source. -- `library/build_native_export.py`: reproducible export generator. -- `reference/CmpAtomModbus-AllInOne.export`: required generator baseline, not the final import. -- `artifacts/arm64/`: your uploaded shared object and precompile cache, preserved unchanged. -- `docs/BUILD-AND-USAGE.md`: import, deployment, API, diagnostics and limitations. -- `SHA256SUMS.txt`: snapshot file checksums. - -## Build and test on the Pi +Run from the repository root: ```sh sudo apt install build-essential m4 dos2unix python3 @@ -44,38 +40,21 @@ make -C component-source/component SDKDIR="$(realpath ExtensionSDK)" all make -C component-source test ``` -Build natively for each Linux target architecture; the uploaded ARM64 `.so` -cannot run on ARM32 or x86-64. Runtime/SDK compatibility must also be checked -for each CODESYS target. The host tests exercise protocol code independently -of the CODESYS runtime. +Native output: `component-source/component/out/libCmpAtomModbus.so`. +See the build guide before updating the embedded component. An ARM64 binary +cannot run on ARM32 or x86-64; build for each architecture and verify the SDK/runtime +combination. The supplied binary has not been proven byte-equivalent to this source. -## IEC export +## Update and review -```sh -python3 library/build_native_export.py -``` +Edit the IEC library in CODESYS. After significant IEC changes, export the current +objects and update the API reference against that export. Binary `.library` files +cannot be reviewed as ordinary text diffs. This snapshot intentionally contains no +old migration exports or generators that overwrite current IDE changes. -Import `library/atMb-Native.export` into a fresh CODESYS library project, -namespace `atMb`, and embed the newly built `.so` in a C Implemented Library -object. See the full instructions in `docs/BUILD-AND-USAGE.md`. -The export is source, not a compiled `.library`. The supplied precompile cache -is an opaque reference artifact and is not a substitute for the library project. +This ZIP retains the existing Git history and remote metadata. Cleanup changes +are uncommitted and unstaged. Review locally with `git status` and `git diff`, +then stage/commit when ready. No push is performed by this package. -Your uploaded `.so` is ARM64 and contains RTU/server symbols. Its exact match -to this source snapshot and its operation in the runtime have not been verified; -rebuild from source before making a release. The older development instructions -say no prebuilt binary is included: that applies to the earlier kit; this repo -snapshot adds your uploaded binary under `artifacts/arm64/`. - -## Start a repository - -```sh -cd atMb-repo -git init -git add . -git commit -m "Initial atMb native Modbus source" -``` - -No Git history or remote is included. The SDK and baseline came from supplied -files; review their redistribution terms before publishing a public repository. -No new license is assigned by this snapshot. +Online-change qualification remains future work. Keep all native calls owned by +one IEC task. No new license is assigned to the supplied SDK/source files. diff --git a/SHA256SUMS.txt b/SHA256SUMS.txt index 977275c..c99521e 100644 --- a/SHA256SUMS.txt +++ b/SHA256SUMS.txt @@ -1,5 +1,5 @@ d1192772047955638e8bb171080ed9b37e10683de935e4e0503c93b6d26f03fc .gitattributes -675d431f63e2c212360b692b18de50a344aed5664d17b3683f0b687b96479f24 .gitignore +02f0eff1a80c9a8f2fe037d1b5980eb391b65e4dc07dba6fe5d109b08c180c1a .gitignore 0ac6e4fe82a82d1bd27ff20dec2f18820c0e0a5057cd0cb1a8020f6dc506603f ExtensionSDK/README 1cc355e875e572de3829d28bff9c100a4eecbfd741d938654be97881023c84d5 ExtensionSDK/include/CmpErrors.h 2010310fbeb8b4734e638610d2f6dc01b600fe42b8b104155806ef0784e95f2d ExtensionSDK/include/CmpItf.h @@ -10,16 +10,13 @@ a8de018bfde8d10d3f281bb45de03c4b4f3cd28466eb0fa0981086bc4033a69c ExtensionSDK/i 814d06ca83d775f3bcb93f80859602b6c1debe9511b3d42ef337948bd2e2b5d0 ExtensionSDK/makefile 4fc8013238169e924ee2eb5dd6c2b39c9d274f4c7c2219dc0b9a530687097519 ExtensionSDK/makefile_template aa7ccad11508ccbf4f9b24aa8db8f22392f9d723ae3af5cbfa67e38271cfbac3 ExtensionSDK/src/CmpFrame.c -67076180ec906d9f27f5b63406d8a2701faa58771f76e0f4487ae750660ce7e4 README.md -f0279c023b82eeda388cdc1b9c9f358b7794869360a06684df670cd34d5cab56 artifacts/arm64/CmpAtomModbus_library.precompilecache +11aee0c6ff01eaff1aac5aa46c470ea8367d5eae655068320869a1bcdce1ef53 README.md 07527262a8efcf9add5554cfcaed22cf927af63b985e431ab5341078a6864667 artifacts/arm64/libCmpAtomModbus.so 14db5bb96e65494eed63da0139b37734dfc08e312a3cb0924ad10b7d9476d442 component-source/Makefile d91cffa9751bca79f13ae80552d654519333536c894bb13b41a1182c179c53b7 component-source/component/CmpAtomModbus.c 30a8d7d5dfd372d171d4acdafd0b77cedca684e0b6e661ae1ab67e2627d35708 component-source/component/CmpAtomModbusItf.m4 513586eed183bcc53cdf008c483da03feff6b5cb0f3ed3eff17de1462def12c3 component-source/component/CmpFrame.c 0972948a5cc88892421433fb01875f4f51609cda3b0df57ff58f05c61390e1c2 component-source/component/makefile -c362c04636cb2cfc00eec8800f0aa9631709cd9eba76b66332f61a988823a055 component-source/generated/CmpAtomModbus.c -fa9b00a24ff9f24b63c9a08b8eba4d585a23f4fd6e19f990ec36dcc70f745427 component-source/generated/CmpAtomModbusItf.m4 78240595fa115d3706cbc7316bdcd4e0101a3269e5faacce98826bc32143e9d9 component-source/src/atom_bridge.c 4a3eaca066d0c06ac7fa95d802ff78b270a1ccdc3fc67c6a072b7e09efba08c0 component-source/src/atom_bridge.h 4f772a0dab94053bfa2f073f6877ec63a8c6b7999d8e3415160705db441f6068 component-source/src/atom_mb.c @@ -33,16 +30,9 @@ d770393632f9d3d1acddf229f562148648792398a39d90851aa529d2923f8382 component-sour 3af1a5f71d69bae2abda3de9dba31740ad254d7157d702847fb921fc2b64df3d component-source/tests/test_bridge.c 2a4b582bed0404f865f4fa2c905dd251c3dccfc4961f20467723c7349793a7f2 component-source/tests/test_native.py 0cf8f8fefda6376cacf0c56729d24aaa76241e807b0dee0b36001b3ad3cea509 component-source/tests/test_tcp.py -c1f09f7498453182f7ed88c1cb343b637ca6c6507e728ac71591a826588c0d3a docs/API-REFERENCE.md -a3cd41084413b1f7c2045e6a7a647b793c8df1c9fa338e146439031b269a1dcb docs/BUILD-AND-USAGE.md -17d84b44d288b46012d9e52d7c8a247592ad28f3d5c3032fffbab701a8478418 docs/DOCUMENTATION-VALIDATION.md -3a2d04af7a1fc7f2e39fea1401d12653fda16864cf4cb7d8edfe2d9988091453 docs/USER-GUIDE.md -fe7df15839ff4bcf3272cbec71cd67a026e514c79df4bd0be829c8a373391f4d docs/VALIDATION.md -8aa5a11a22263ea04902ce883b14fd31c3de270c711deca13f57889a05b689a0 docs/document_export.py -87e2f904f08d7ee8c37ba8362989d2453b2860e91336f21623d0ab91eb8a178b library/atMb-Documented-Review.st -19a979f94b437fc6c523fdfbd24fd8f6038860cb107b45dea2466020e2a319fe library/atMb-Documented.export -0efb6d1760ea5104331cd0fb13b7324fd468c5ab2ec415f0dd9e38db74961e70 library/atMb-Native-Review.st -e2223cf6cef8cecb71cd41093c67f095559764eaa52e22f0f31347e3faec7238 library/atMb-Native.export -1d66a3b8cefa95e39815b12d1e802192b83d416ad281aaca5b8efa8c90ed4f77 library/build_native_export.py -c3be3f6ee2e065633f8e8e04482c95fe5c30f61e34cf6223d6454500a756dbb2 reference/CmpAtomModbus-AllInOne.export -5a07da11853e955633a977bdd59a7d1f8f292c594c2116bc220bd63c8edc9329 reference/Working-CmpAtomModbus.export +ca8eca5c351bcc426676213c162606d1be9ef6a07d017dad74aa10c198e4ea91 docs/API-REFERENCE.md +43eb385327aa81deb28a55b08068a9b6e565ad290257d2cbd5819d1ab7558ae3 docs/BUILD-AND-USAGE.md +a0931348b32a336798b7d93a5956fd14bd481597626bc1d40b1597ee6ed5e6a3 docs/CLEANUP.md +ef14901695852012e92ae7dde304244e441c17f2bc17abd4fb7e7a2e30f2e9df docs/USER-GUIDE.md +b35e03e6cd3e23719794802a65663ddc22986731dd52f6713ab71b94d1798f53 docs/VALIDATION.md +be0edea894f02a6f525307da69fd52498d4ff76e4b95728608ff6db8f6877e39 library/CmpAtomModbus.library diff --git a/artifacts/arm64/CmpAtomModbus_library.precompilecache b/artifacts/arm64/CmpAtomModbus_library.precompilecache deleted file mode 100644 index 06722cd897f012cd4b9fc7ccd7ec7cdcb525b6e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172716 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

a;->}AW`xnP7=}BM0ukMZQ;EEpeVlBDGK>r2% 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⁡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 diff --git a/component-source/generated/CmpAtomModbus.c b/component-source/generated/CmpAtomModbus.c deleted file mode 100644 index be3373b..0000000 --- a/component-source/generated/CmpAtomModbus.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "CmpStd.h" -#include "CmpErrors.h" -#include "CmpItf.h" -#include "CmpAtomModbusDep.h" - -void CDECL CDECL_EXT atmbcall_cext(atmbcall_cext_struct *p) -{ - -} - diff --git a/component-source/generated/CmpAtomModbusItf.m4 b/component-source/generated/CmpAtomModbusItf.m4 deleted file mode 100644 index 0f01230..0000000 --- a/component-source/generated/CmpAtomModbusItf.m4 +++ /dev/null @@ -1,70 +0,0 @@ -/** - * CmpAtomModbus - * - * - * - */ - -SET_INTERFACE_NAME(`CmpAtomModbus') - -/** EXTERN LIB SECTION BEGIN **/ -/* Comments are ignored for m4 compiler so restructured text can be used. changecom(`/*', `*/') */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * - * Create FUNCTION atMbCall_cext returning UDINT, paste this declaration. - * Properties > Build > External implementation must be selected. - * Library filename and Project Information title: CmpAtomModbus. - * This declaration is the SINGLE external entry point for the C engine. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * -*/ -typedef struct tagatmbcall_cext_struct -{ - RTS_IEC_UDINT command; - RTS_IEC_UDINT handle; - RTS_IEC_DWORD ipAddress; - RTS_IEC_UINT port; - RTS_IEC_BYTE unitId; - RTS_IEC_BYTE functionCode; - RTS_IEC_UINT startAddress; - RTS_IEC_UINT quantity; - RTS_IEC_WORD *pData; - RTS_IEC_UDINT dataCapacity; - RTS_IEC_UDINT *pStatus; - RTS_IEC_UDINT statusCapacity; - RTS_IEC_ULINT nowMs; - RTS_IEC_UDINT connectTimeoutMs; - RTS_IEC_UDINT responseTimeoutMs; - RTS_IEC_UDINT retryDelayMs; - RTS_IEC_UDINT atMbCall_cext; -} atmbcall_cext_struct; - -DEF_API(`void',`CDECL',`atmbcall_cext',`(atmbcall_cext_struct *p)',1,0x709EE65B,0x00020000) - -#ifdef __cplusplus -} -#endif - -/** EXTERN LIB SECTION END **/ - diff --git a/docs/API-REFERENCE.md b/docs/API-REFERENCE.md index 34ee4c8..8599947 100644 --- a/docs/API-REFERENCE.md +++ b/docs/API-REFERENCE.md @@ -1,6 +1,6 @@ # atMb API reference -Generated from your working `CmpAtomModbus(1).export`. Documents every code object, including internal methods and property accessors. Runtime implementations, identifiers, declarations and embedded native payloads are preserved in the documented export; additions are comments only. +Reference based on the last supplied working `CmpAtomModbus(1).export`, with 95 code objects. The current editable/installable library is `library/CmpAtomModbus.library`. This reference includes internal methods and property accessors. The binary library was preserved unchanged but not decoded to independently confirm its current declarations. Update this document against a fresh export when IEC code changes. ## atMbCall_cext diff --git a/docs/BUILD-AND-USAGE.md b/docs/BUILD-AND-USAGE.md index 43929eb..21009e0 100644 --- a/docs/BUILD-AND-USAGE.md +++ b/docs/BUILD-AND-USAGE.md @@ -1,203 +1,68 @@ -# atMb native TCP + RTU + TCP slave — development revision 0.9 +# Build and deployment -The IEC export and C implementation have no ModbusFB dependency. All socket/ -serial/frame processing runs in the native component. Public namespace: atMb. -Standard and SysTime are still required for IEC timers and time measurement. +## Build native C -This is a tested host development build, not a compiled CODESYS library or a -hardware-qualified Pi release. Full CODESYS compilation and physical RTU testing -remain required. Online-change ownership/pointer relocation is future work. - -## Rebuild on the Pi (required) - -Extract this bundle on the Pi, preserving component-source and ExtensionSDK -as siblings. Install build-essential, m4, dos2unix, make and python3 if absent. +From the repository root on the target Linux machine: ```sh -cd component-source -make -C component SDKDIR="$(realpath ../ExtensionSDK)" clean -make -C component SDKDIR="$(realpath ../ExtensionSDK)" all -file component/out/libCmpAtomModbus.so -make test +sudo apt install build-essential m4 dos2unix python3 +make -C component-source/component SDKDIR="$(realpath ExtensionSDK)" clean +make -C component-source/component SDKDIR="$(realpath ExtensionSDK)" all +file component-source/component/out/libCmpAtomModbus.so +make -C component-source test ``` -The component registration version is now 0.3.0.0. The external atMbCall_cext -function ABI, signature 0x709EE65B and generated API version 0.2.0.0 are unchanged. -No regeneration of runtime interface files is required for these extra commands. -Keep the supplied generated interface; do not regenerate blindly from a changed -library title/version. No prebuilt Pi binary is included. A strict host compile -of the component function used the supplied SDK headers and original real -parameter struct; the full SDK/M4/component frame build must run on your Pi. +`component-source/component/` is the active SDK build directory. Its +`CmpAtomModbus.c` includes the protocol source files as one translation unit. +The removed `generated/` directory contained original unimplemented stubs; +it was not used by this makefile. Preserve the active `CmpAtomModbusItf.m4` and +`CmpFrame.c`; they define ABI registration and cleanup. -## Build the IEC library without legacy objects +The makefile registers component version 0.3.0.0. The supplied external +`atMbCall_cext` API retains signature 0x709EE65B and API version 0.2.0.0. +Do not change the external parameter layout or regenerate it just because the +library title/version was edited. Full SDK/M4 builds must be checked on the target. -1. Create a fresh library project saved as CmpAtomModbus.library (or a backup copy - with the old Modbus master/slave folders removed). Import atMb-Native.export. - A fresh project is preferred because import does not delete omitted old methods. -2. Keep Project Information title CmpAtomModbus and default namespace atMb, as - supplied in the export. This is one combined library, not a wrapper referencing - a second CmpAtomModbus/atMb library. Remove those self/wrapper references. -3. Add only Standard and SysTime references needed by this IEC code. Remove the - ModbusFB reference. Resolve their ordinary dependencies if the IDE requests it. -4. Add a C Implemented Library object and embed your NEWLY BUILT ARM64 - component/out/libCmpAtomModbus.so for the exact Raspberry Pi 64 SL target. - Use CmpAtomModbus for the component name. The old TCP-only embedded object was - deliberately omitted from this export; do not reuse its binary. -5. Compile, save/install and update references in the Atom library/application. -6. Perform a full download. Verify runtime loads the new component version. +## Update the CODESYS library -For automatic deployment, stop using the old manually preloaded component -before testing the embedded one: remove only its ComponentManager entry, then -restart the runtime during maintenance. Alternatively, for a manual bench test, -stop the runtime and replace /usr/lib/libCmpAtomModbus.so with the new binary. -Inspect /var/log/codesyscontrol.log. No production install is performed by this kit. +1. Back up `library/CmpAtomModbus.library` and open it in CODESYS. +2. Retain Project Information title `CmpAtomModbus` and namespace `atMb`. +3. Retain the Standard and SysTime references required by the IEC code. +4. In its C Implemented Library object, update the native binary for the exact + device target with the newly built `libCmpAtomModbus.so`. Use the component + naming/settings already present in the working project. +5. Compile the library, save/install it in Library Repository and update application + references. Test with a full download for native component changes. -## TCP client +The working `.library` is preserved unchanged in this cleanup. Updating a separate +`.so` file does not automatically update the binary embedded inside the library. +The standalone artifact is retained for deployment/build comparison; rebuilding it +does not imply it is identical to the currently embedded implementation. -Existing atMb.Client and ReqReadHolding/ReqReadInput/ReqReadCoil/ReqReadDiscrete/ -ReqWriteHolding/ReqWriteCoil calls remain. Supported C function codes are -1,2,3,4,5,6,15,16. Automatic retry continues while enabled; normal Modbus -exception replies do not force reconnects. The default retry delay is 100 ms. +## Runtime deployment -## Native RTU +Use the established embedded-library deployment or a manual bench installation; +avoid loading two versions of the same component simultaneously. The earlier Pi +setup manually loaded `/usr/lib/libCmpAtomModbus.so` with +`Component.1=CmpAtomModbus` under `[ComponentManager]` in +`/etc/CODESYSControl_User.cfg`. When switching to embedded deployment, remove only +that manual preload entry during maintenance and restart the runtime as required. -```iecst -VAR - bus : atMb.ClientRTU; - read : atMb.ReqReadHolding; - registers : ARRAY[0..9] OF UINT; -END_VAR -``` +For a manual installation, stop the runtime before replacing its component and +restart afterwards. Check `/var/log/codesyscontrol.log` for the loaded component +and version; `/var/opt/codesys/codesyscontrol.log` was stale on the development Pi. +No deployment or runtime restart is performed by this cleanup. -```iecst -bus( - in_device := '/dev/ttyUSB0', - in_baudRate := 9600, - in_parity := 0, - in_dataBits := 8, - in_stopBits := 1, - in_timeout := T#500MS, - in_reconnectDelay := T#100MS -); -read(client := bus, in_unitId := 1, in_startAddr := 0, - in_quantity := 10, in_dataOffset := 0, in_minDelay := T#100MS, - data := registers); -``` +## Different Linux targets -Call client/requests every scan in ONE task. One RTU client owns each serial bus; -register different unit IDs on that same client, rather than opening multiple -clients on the same tty. The native open uses exclusive serial access. +Build natively on the desired CPU or use a matching cross-toolchain. ARM64, +ARM32 and x86-64 outputs are distinct. SDK, CODESYS runtime interface and libc +compatibility also matter. A successful host protocol test does not validate native +component loading into every runtime version. RTU support uses Linux termios/ioctl; +verify serial permissions, driver behavior and physical timing on the target. -Use /dev/serial/by-id/... when it fits the 127-byte path limit, or a stable -short udev symlink. The runtime OS user must have access to the device; check the -actual service user and device group on your Pi. Stop other serial consumers. -The old numeric in_port selection was removed; a numeric index is not a portable -Linux device mapping. in_baudRate is now UDINT so 115200 fits. +## Further documentation -Supported baud rates: 1200,2400,4800,9600,19200,38400,57600,115200. -RTU uses 8 data bits; parity 0 none/1 odd/2 even; stop bits 1 or 2. -Unit IDs 1..247 are accepted. Broadcast unit 0 is explicitly rejected because -broadcast completion cannot be reported as an acknowledged write. - -For automatic-direction USB RS485 adapters leave in_rs485 FALSE. TRUE requests -Linux TIOCSRS485 with RTS during transmit; unsupported drivers report an OS error. -No software GPIO direction control or adapter-specific configuration is included. - -CRC, unit/function, length and write echo are validated before accepting replies. -Faults close/reopen the tty after the configured retry delay. No raw write packet -is replayed by the engine. The existing scheduler can issue fresh cyclic writes; -use in_holdUncertainWrites TRUE for commands requiring an application decision. -Delayed serial replies have no transaction ID: use suitable timeout/retry settings -for slow devices. Serial silence is conservatively scheduled in milliseconds; -physical adapter/baud/parity/line-turnaround tests are still necessary. PTY tests -cannot certify electrical timing, parity generation or RS485 direction behavior. - -out_connected on RTU means the tty is open/ready, not proof that a remote unit -responds. Use per-request online/stale/error status. out_socketError carries the -OS errno for tty failures too. All existing client status counters are shared. - -## Native TCP slave - -atMb.ModbusSlave and atMb.SlaveTCP both run the C server (no ModbusFB server). -Map four BOOL/UINT arrays using aDiscreteInputsMemory/aCoilsMemory/ -aInputRegistersMemory/aHoldingRegistersMemory. Their actual LOWER_BOUND is their -zero-based protocol starting address; each table is limited to 2000 items and -must fit within addresses 0..65535. A full 65536-item table is not supported. - -Use in_ipAddress DWORD = 0 to bind all addresses, or numeric IPv4 in human octet -order (16#7F000001 for 127.0.0.1). port defaults to 502. The legacy interfaceName -field is retained but must be empty; numeric bind IP replaces interface-name -binding. Nonempty names are reported as parameter errors rather than ignored. - -Example: `slave : atMb.ModbusSlave;` with all four arrays passed every scan: - -```iecst -slave(in_enable := TRUE, in_ipAddress := DWORD#0, port := 502, - aDiscreteInputsMemory := discreteInputs, - aCoilsMemory := coils, - aInputRegistersMemory := inputRegisters, - aHoldingRegistersMemory := holdingRegisters); -``` - -FC1/2/3/4/5/6/15/16 are implemented, with exception replies for unsupported -functions, invalid quantities or unmapped addresses. Four server contexts, -eight simultaneous peers per server. Requests are bounded and processed in -order per connection. A server tick accepts at most one peer and performs at -most one nonblocking I/O action per peer per IEC call. Incomplete frames/send -stall timeout after 5 seconds; idle peers close after 60 seconds. - -The wrapper pushes PLC table snapshots, ticks the engine, then pulls completed -remote writes in the same scan. C retains no PLC pointers between calls. Application -writes between calls become the next snapshot. Arrange application order accordingly. -The fixed server limits and scan-bounded throughput differ from the old ModbusFB -server; load test your actual client count/polling rates. No RTU slave is provided. - -in_enable controls listening, in_reset recreates the context, endpoint changes -recreate it, and listener failures retry automatically after in_reconnectDelay. -Outputs: out_running/out_error/out_errorId/out_parameterError/out_socketError, -out_connectedClients/out_requestsReceived/out_repliesSent/out_exceptionReplies. - -## Native lifecycle and API - -All bridge/server contexts are fixed-pool, generation-checked and single-task. -No RETAIN/PERSISTENT handles. release() disables client enable and closes its -context. STOP alone does not guarantee FB_exit: disable and scan before STOP. -New full download required; online-change safety is not claimed in this revision. - -Own Error and ExceptionCodes DUTs replace the ModbusFB enums. Error retains the -named compatibility labels used by request statistics. Legacy dynamically -allocated request methods are removed or become native recreateRequest BOOL. -Old allocation-alarm outputs/legacy request reset fields were removed because -these contexts use fixed native pools. A pool-full result is native error 257. - -Command 20: open RTU. data contains one device-path ASCII byte per WORD, quantity -is path length; ipAddress=baud; unitId=parity; functionCode=bits; -startAddress=stop bits; connectTimeoutMs=kernel RS485 flag (0/1). -The existing commands 2..11 configure/tick/submit/close this client normally. -Commands 30..36: server open/close/enable/disable/tick/push/pull. Push/pull use -functionCode as table 0 coils/1 discrete/2 holding/3 input, startAddress as base -and quantity as length. Server handles use distinct low-byte tags from clients. -Server status indices: 0 handle,1 running,2 error,3 result,4 OS errno,5 peers, -6 requests,7 replies,8 exception replies. Client status layout is unchanged. - -## Tests and remaining checks - -Run make test on Linux. Includes existing nine TCP scenarios directly and through -the bridge, pool/handle tests, PTY RTU read/fragment/CRC/timeout/recovery/exception/ -register-write/coil-write/invalid-write-echo recovery tests and native slave FC1/2/3/4/5/6/15/16, nonzero mapping, -exception/listener-recovery/stale-handle tests. All passed on the development host. -The CODESYS XML has no ModbusFB identifiers and passes structural checks. It has -not been compiled in the IDE; hardware Pi/serial and embedded deployment tests -remain. Do not interpret host tests as target or online-change qualification. - - -v0.9.1 export correction ------------------------- -Restores ClientBase public diagnostics: msgLastSecondCnt, msgLastSecondTime, -numMsgSent, numMsgReply, allRequestsOnline and reqStats. The generator now -checks these declarations and balanced VAR sections. Replace matching objects -when importing the corrected export. C sources are unchanged from v0.9; this -correction alone does not require rebuilding an already installed v0.9 component. -The full native migration still requires the C build and embedding described above. -Validated XML and declaration checks locally; CODESYS compilation must be checked -in the IDE. +- [User guide](USER-GUIDE.md): examples, polling, RTU, slave, timeout and recovery. +- [API reference](API-REFERENCE.md): all objects from the last supplied working export. +- [Validation](VALIDATION.md): exact scope of checks performed. diff --git a/docs/CLEANUP.md b/docs/CLEANUP.md new file mode 100644 index 0000000..9d2a035 --- /dev/null +++ b/docs/CLEANUP.md @@ -0,0 +1,25 @@ +# Repository cleanup + +Removed unused files: + +- `component-source/generated/`: original empty C stubs; active makefile builds + from `component-source/component/`. +- Both `CmpAtomModbus_library.precompilecache` files: local CODESYS caches, + regenerated by the IDE; older duplicate was under artifacts. +- `docs/document_export.py`: depended on an export already absent from this ZIP. +- `docs/DOCUMENTATION-VALIDATION.md`: report for an export absent from this ZIP; + current validation is consolidated in `VALIDATION.md`. + +Rewrote README/build instructions to use the actual working `.library`, removing +references to deleted exports, migration scripts and first-time Git initialization. +Retained API/usage details and stated that their baseline is the last supplied export. +Updated ignore rules and file checksums. + +Preserved exact bytes of the `.library`, ARM64 `.so`, active C sources, SDK, tests +and all existing Git metadata. Git changes are not staged, committed or pushed. +Old files remain recoverable from Git history where previously committed. + +To apply to an existing checkout, replacing files alone will not remove obsolete +files. Prefer extracting this full snapshot into a separate directory and reviewing +its existing Git status; alternatively remove the listed obsolete paths explicitly +while applying updated files, keeping your checkout's own `.git` directory. diff --git a/docs/DOCUMENTATION-VALIDATION.md b/docs/DOCUMENTATION-VALIDATION.md deleted file mode 100644 index 8a636a7..0000000 --- a/docs/DOCUMENTATION-VALIDATION.md +++ /dev/null @@ -1,11 +0,0 @@ -# Documentation validation - -Documented 95 code objects. - -- All interface executable tokens unchanged after removing comments/whitespace. -- All XML content outside Interface text identical after parse/serialization. -- Implementations, GUIDs, native payloads, project information and references unchanged. -- Documented XML parses successfully. -- No CODESYS IDE compile performed; this is a comments-only change. - -Input SHA256: `5a07da11853e955633a977bdd59a7d1f8f292c594c2116bc220bd63c8edc9329` diff --git a/docs/USER-GUIDE.md b/docs/USER-GUIDE.md index 806fdb0..c0eb333 100644 --- a/docs/USER-GUIDE.md +++ b/docs/USER-GUIDE.md @@ -1,6 +1,10 @@ # atMb usage and behavior -This guide describes the supplied working export, including its renamed `ClientTCP`. The documented export changes comments only and retains the embedded C Implemented Library object. Import with replacement of matching objects into your existing library project. No C rebuild is needed for these documentation changes. +This guide describes the last supplied working IEC export, including `ClientTCP`. +The current repository stores the working file at `library/CmpAtomModbus.library`. +Use that file in CODESYS. No IEC or C implementation is changed by repository cleanup. +The binary library format was not decoded to reverify its member declarations; +when changing IEC code, update this guide against a fresh CODESYS export. ## Choosing the block @@ -211,6 +215,6 @@ States: 0 disabled, 1 retry wait, 2 connecting, 3 ready, 4 sending, 5 receiving. ## Maintenance and scope -The documented export preserves the working implementations, metadata and embedded payloads. Internal native fields are sometimes exposed as VAR_INPUT for compatibility; leave them under library control. Several legacy BOOL methods do not assign a return value; the API reference identifies them so callers rely on their side effects. +The cleanup preserves the supplied working library and standalone native binary. Internal native fields are sometimes exposed as VAR_INPUT for compatibility; leave them under library control. Several legacy BOOL methods do not assign a return value; the API reference identifies them so callers rely on their side effects. Lifecycle hooks exist, but reliable online-change ownership and pointer relocation remain future work. Documentation adds no behavior changes or online-change guarantee. Use the API reference for every method/property, including internal accessors. diff --git a/docs/VALIDATION.md b/docs/VALIDATION.md index 322a86b..1c1476d 100644 --- a/docs/VALIDATION.md +++ b/docs/VALIDATION.md @@ -1,14 +1,14 @@ -# Snapshot validation +# Cleanup validation -- Export generator completed: 99 objects, no ModbusFB references. -- Public diagnostics and balanced VAR declaration checks passed. -- Strict host C compilation passed. -- Bridge pool/stale handle/configuration/shutdown tests passed. -- Nine TCP scenarios passed directly and through the native bridge. -- RTU pseudo-terminal tests passed, including CRC/timeout recovery, partial frames, - writes, exceptions and invalid write echo recovery. -- TCP slave FC 1/2/3/4/5/6/15/16, exception, nonzero base, listener recovery - and stale handle tests passed. +- Working `.library`, standalone ARM64 `.so`, active C/component sources, tests, + SDK and all Git metadata compared byte-for-byte with the uploaded ZIP: unchanged. +- Removed precompile caches, unused generated stubs and broken generator script. +- README/build instructions no longer refer to absent migration exports/scripts. +- Strict host compilation and bridge tests passed after cleanup. +- Nine direct TCP and nine bridge TCP scenarios passed. +- RTU frame/write/error/recovery tests passed. +- TCP slave FC1/2/3/4/5/6/15/16, exception/address and recovery tests passed. -No CODESYS IDE compile, full ARM64 SDK build, physical serial hardware test, -or online-change qualification was performed for this repository package. +No CODESYS compile or full ARM64 SDK build was run. Physical RTU operation and +online-change behavior were not qualified by these checks. API documentation is +based on the last supplied working IEC export, not a decoded binary `.library`. diff --git a/docs/document_export.py b/docs/document_export.py deleted file mode 100644 index 92b6be8..0000000 --- a/docs/document_export.py +++ /dev/null @@ -1,194 +0,0 @@ -from pathlib import Path -import xml.etree.ElementTree as E -import re,hashlib,json,zipfile -B=Path(__file__).resolve().parent -src=B.parent/'reference/Working-CmpAtomModbus.export' -r=E.parse(src).getroot();entries=list(r.find('.//List2[@Name="EntryList"]')) -def meta(e,n):return e.find('./Single[@Name="MetaObject"]/Single[@Name="'+n+'"]') -names={meta(e,'Guid').text:meta(e,'Name').text for e in entries} -def path(e): - n=meta(e,'Name').text;p=e.find('./Single[@Name="ParentSVNodeGuid"]').text - return names.get(p,''),n -def blob(e,p):return e.find('./Single[@Name="Object"]/Single[@Name="'+p+'"]//Single[@Name="TextBlobForSerialisation"]') -summary={ -'ClientBase':'Abstract shared client scheduler and native transport owner. Use ClientTCP or ClientRTU. Holds up to 100 registered requests and runs one transaction at a time. Call the concrete client once per scan, from the same task as its requests.', -'ClientTCP':'Modbus TCP client with automatic retry after connection or transaction failure. Call every scan. Endpoint or timeout/retry configuration changes close the current context and reopen it on subsequent scans. Requests share this connection and execute sequentially.', -'ClientRTU':'Modbus RTU client using a Linux serial device. Call every scan. Supports 8 data bits, parity 0 none/1 odd/2 even, and 1 or 2 stop bits. Uses unit IDs 1..247; broadcast 0 is unsupported. Serial-setting changes recreate the context. Automatic recovery proceeds while enabled and scanned.', -'RequestBase':'Abstract request binding, scheduling and diagnostics. Derived requests register automatically when called with a valid initialized client. Call each instance every scan with stable array storage. Quantity zero disables this request. Actual length is MIN(in_quantity, remaining array capacity).', -'RequestStats':'Request counters, completion properties, online/offline tracking and 100 ms indicator lights. Normally maintained by RequestBase. Online means a valid response was received, including a Modbus exception; it does not guarantee successful data. Several fields are declared VAR_INPUT for compatibility but are maintained internally.', -'To_IPAddress':'Returns the four supplied bytes as ARRAY[0..3] OF BYTE. Example: atMb.To_IPAddress(192,168,50,10). This is the ClientTCP address format; the slave bind address instead uses a packed DWORD.', -'ModbusSlave':'Native Modbus TCP server. Same implementation and interface as SlaveTCP. Call once per scan with all four memory arrays. Array bounds are protocol addresses; each table is limited to 2000 elements and addresses 0..65535. Pushes application memory, performs bounded network processing, then copies native memory back. This is TCP only, not an RTU slave.', -'SlaveTCP':'Native Modbus TCP server with four separate memory tables. Same implementation and interface as ModbusSlave. FC 1/2/3/4 read the tables; FC 5/6/15/16 write coils/holding registers. Array lower bounds define Modbus addresses. Call every scan and retain array storage. This is TCP only.', -'ClientStatus':'Aggregate request status used by the RTU monitoring property: noneOk=0, someOk=1, allOk=2. This describes request online flags, not the physical connection. The current toString getter compares onlineCnt with all registered requests and reports allOk for an empty registry.', -'Error':'IEC error classification. TCP-named socket/timeout members are also used for RTU failures. For the precise native reason inspect out_nativeError/out_lastNativeError; for an OS failure inspect out_socketError.', -'ExceptionCodes':'Modbus exception response values plus local TIMEOUT=-1. A valid Modbus exception proves communication, but the requested operation failed. In current statistics, non-exception errors can also be classified as TIMEOUT; use native diagnostics to distinguish their actual cause.', -'atMbCall_cext':'External C ABI entry point used by the wrappers. Application code should normally call the function blocks. Do not change parameter order/types or external implementation settings. Pointers are accessed synchronously by C; provide distinct valid data/status buffers and truthful capacities. Client status requires 24 UDINT elements. All calls must be owned by one IEC task.', -'addRequest':'Register a non-null RequestBase pointer once. Duplicate pointers are ignored. Capacity is 100 requests per client; overflow sets out_registrationFull. No removal API is provided. Normally called automatically by the request FB.', -'nativeCall':'Internal adapter to atMbCall_cext. Command 20 packs the ASCII serial path into WORD storage and passes serial settings in ABI fields; other commands use normal client arguments and status buffers. Return is the native command result, 0 for success.', -'nativeCycle':'Internal per-scan engine: acquire context, tick nonblocking I/O, update diagnostics, copy completed read data, process registered requests, acknowledge completion, select the next request, and publish statistics. Invalid native handles are discarded and reopened on a later scan.', -'nativeEnsureContext':'Acquire/configure/enable a native context if absent. Returns TRUE when a handle exists or initialization succeeds. A handle does not mean connected; check out_connected. Failure records a native error and closes partially initialized contexts.', -'nativeRelease':'Close the native context, complete any active request as cancelled, clear selection, set registered requests offline and invalidate cached read data. Returns TRUE. It does not set in_enable FALSE; an enabled scanned client can reopen.', -'nativeSelectNextRequest':'Select an active, unheld request that meets in_minDelay and was not just completed this scan. Lowest in_priorityCurrent wins; oldest sinceLastExec breaks ties. Positive priorities are decremented when the best selected priority is positive. The selected request is submitted immediately; zero priority is not a prerequisite for execution.', -'nativeUpdateDiagnostics':'Publish native connection state, last error, errno and reconnect count. States 3..5 count as connected. A connected-to-disconnected transition marks registered requests offline.', -'nativeUpdateStatistics':'Publish IEC send/reply counters, registered statistics pointers and active-request aggregate online flags. Every elapsed window of at least 1000 ms publishes submitted-request count and successful transaction-duration sum, then restarts the window.', -'processAllRequests':'Internal loop over registered non-null requests, dispatching processRequest. Returns immediately for an empty or invalid registry. Usually invoked by nativeCycle rather than application code.', -'recreateClient':'Close/release the current context so the next enabled scan creates a fresh one with current settings. Cancels an active transaction and invalidates cached read data. Abstract on ClientBase; implemented by both concrete clients.', -'release':'Stop this client by setting in_enable FALSE, then release its native context. Returns the release result. To resume, set in_enable TRUE and keep calling the client. A call that supplies in_enable := TRUE every scan will re-enable it.', -'setAllRequestsOffline':'Internal helper marking every registered request offline via its statistics FB. Returns TRUE after processing a nonempty valid registry; early return does not explicitly assign the return value.', -'setupClient':'Returns whether nativeHandle is nonzero. It does not create a context or guarantee transport connectivity. Normal FB scanning performs initialization.', -'activeIndex':'Get the current active request registry index, or -1 when idle. Setting a valid index sets that request stats.execute TRUE; it does not bypass native scheduler selection or directly submit a transaction.', -'activeReqCnt':'Private count of registered requests whose stats.active is TRUE. Zero quantity/usable length requests are inactive.', -'allRequestsComplete':'Private legacy completion check. TRUE only if none of the registered requests has execute, reqDone, reqBusy or reqError set. Empty registry returns FALSE. This is not a network completion pulse.', -'onlineCnt':'Count registered requests with stats.online TRUE. Includes any registered request with that flag; used for aggregate reporting.', -'requestExecuting':'Private property returning activeIndex <> -1. Represents selected/active request state maintained by the scheduler.', -'toString':'ClientRTU monitoring property returning ClientStatus based on onlineCnt versus requestCnt. Reports allOk for an empty registry. RequestStats also has an internal STRING field of this name; these are different values.', -'busy':'Assign stats.reqBusy from input in. Internal request helper. Although declared BOOL, its implementation does not assign a return value; use the side effect rather than the return.', -'done':'Set stats.reqDone. When in is TRUE, restore in_priorityCurrent to in_prioritySetpoint for the next scheduler cycle. Successful completion counters are maintained by the stats property setter.', -'err':'Set stats.reqError and, on TRUE, record errorId/exceptionCode. Set next priority to 10 * MIN(consecutive errors,3)^2. Lower numeric priority wins, so this backs off repeated failures relative to lower-priority-number requests.', -'invalidateNativeData':'Mark cached data invalid and stale. Does not erase the application array. Called during client release; applications should gate use of cached values with validity and age flags.', -'nativeFinish':'Complete a request from native result. Map errors, copy errno/write uncertainty, clear busy, update response/counters and successful-read freshness. Modbus exceptions count as replies and communication-online evidence. If enabled, uncertain writes are held pending writeNow().', -'nativeProcess':'Shared request processing called by derived processRequest. Completes native results or submits a selected request, sets its timeout and records busy/send counters. Updates data age and stale flags during ordinary processing. Completion branches can return before age refresh, so allow a subsequent scan for freshness diagnostics.', -'replyTimeout':'Protected timeout property expressed internally in microseconds. Request in_timeout is milliseconds and takes precedence, then client TIME in_timeout, then a dataRate formula, then 1 second fallback. Submission rounds up to milliseconds and clamps to at least 1 ms.', -'setClientOffline':'Clear nativeResponseSeen and consecutive-success count, force online FALSE/offline TRUE. Does not clear data arrays. Declared BOOL but does not assign a return value.', -'setToString':'Private statistics helper formatting OK:/Er: into STRING(20). Declared BOOL but does not assign a return value.', -'execute':'Statistics execution property. Setting TRUE starts the execution state only when reqDone and reqError are FALSE; otherwise the setter clears execution. Usually controlled by the scheduler.', -'reqBusy':'Get/set the underlying request-busy flag. Normally managed by the native wrapper. The scan-held reqBusyLight provides a more visible monitoring indicator.', -'reqDone':'Get/set completion flag. When TRUE during execution, record duration, increment total/consecutive successes, clear consecutive errors and last error, clear execution and update the monitor string. Do not repeatedly drive this manually.', -'reqError':'Get/set error flag. When TRUE during execution, increment total/consecutive errors, clear consecutive successes and execution. If lastExceptionCode is success, increment timeoutCnt and set TIMEOUT even for some non-timeout native errors.', -'recreateRequest':'Clear this request nativeInFlight. If it is the client active request, recreate the whole client connection first. Returns TRUE. May affect other requests sharing the same connection; this is not an independent transport.', -'writeNow':'Clear uncertain-write hold and out_writeUncertain, then set in_priorityCurrent to 0. Returns TRUE. Requests a prompt opportunity at the next scheduler selection; does not guarantee transmission in this call and does not bypass connection/minimum-delay requirements.', -'serverCall':'Private adapter for native server commands. Uses separate server status and WORD staging buffers. Returns the command result; 0 means command accepted, not necessarily that the listener has bound.', -'FB_exit':'CODESYS lifecycle hook releasing owned native resources. Applications should use release/recreateClient rather than call lifecycle hooks manually. Server hooks close the server context; the client hook calls nativeRelease.', -'FB_reinit':'CODESYS lifecycle hook clearing native handles and in-flight state. ClientBase also clears the request registry for re-registration; RequestBase clears execution/completion flags; servers clear their handle. These hooks alone do not establish qualified online-change support.'} -for name,fc,kind,limit in [('ReqReadCoil',1,'BOOL coils',2000),('ReqReadDiscrete',2,'BOOL discrete inputs',2000),('ReqReadHolding',3,'UINT holding registers',125),('ReqReadInput',4,'UINT input registers',125),('ReqWriteCoil',15,'BOOL coils',1968),('ReqWriteHolding',16,'UINT holding registers',123)]: - summary[name]=f'Modbus FC {fc}: '+('write ' if fc>=15 else 'read ')+f'{kind}. Call every scan with a client reference and data array. Protocol start address is zero-based; in_dataOffset is the actual array index. Maximum transaction length is {limit}. Usable length is clamped to array capacity. '+('Values are copied into native storage at submission. This FB uses the multiple-write FC even for one element. Use writeNow() to release a held uncertain write.' if fc>=15 else 'Only a successful validated reply updates the destination slice. Old values remain after failures; check out_validData and out_stale.') -fields={ -'in_enable':'Enable processing; TRUE by default. FALSE releases transport. Continue scanning to refresh state.', -'in_timeout':'Reply timeout override. ClientBase: TIME; RequestBase: SYSTIME numeric milliseconds (not microseconds). Zero selects inherited/calculated timeout.', -'in_resetStats':'Reset request consumed and cleared by nativeCycle. Supplying TRUE on every call resets statistics every scan; pulse once.', -'in_ipAddress':'ClientTCP: four IPv4 bytes. Slave: packed numeric DWORD, 0 binds all interfaces; e.g. DWORD#16#C0A8321F for 192.168.50.31.', -'in_port':'Remote TCP port, default 502.', 'in_baudrate':'TCP gateway serial baud-rate hint for calculated reply timeout; 0 uses internal dataRate 105200. Does not configure a serial port.', -'in_connectTimeout':'TCP connection-attempt deadline, default 2 s; clamped to at least 1 ms.', -'in_reconnectDelay':'Delay before native recovery attempt, default 100 ms; clamped to at least 1 ms. Effective timing also depends on scan interval and failure detection.', -'in_holdUncertainWrites':'FALSE allows normal retries after uncertain writes. TRUE holds affected write requests until writeNow(); read requests can continue.', -'in_device':'Linux serial device path, default /dev/ttyUSB0, at most 127 ASCII characters. Runtime account needs access.', -'in_baudRate':'Serial baud rate, default 9600. Supplied C source accepts 1200,2400,4800,9600,19200,38400,57600,115200.', -'in_parity':'0 none, 1 odd, 2 even. Must match the slave.', 'in_dataBits':'Only 8 supported by supplied native implementation.', 'in_stopBits':'1 or 2; must match the slave.', -'in_rs485':'Request Linux kernel RS485 direction control. Leave FALSE for USB adapters handling direction automatically. Requires driver support.', -'client':'Reference to the owning ClientBase concrete instance. Initialize/call client before first registration; retain a stable instance.', -'in_startAddr':'Zero-based Modbus protocol address, not a 40001/30001 display reference. Must fit the transaction into address space.', -'in_quantity':'Requested item count; actual stats.reqLength is MIN(this, available destination/source capacity). Zero makes the request inactive.', -'in_dataOffset':'Actual first index in the application array. For ARRAY[1..10], use 1 to start at the first element; not a relative offset.', -'in_unitId':'Modbus unit/slave ID, default 0. RTU requires explicit 1..247; TCP/gateway values depend on the target.', -'in_minDelay':'Minimum start-to-start time before scheduler eligibility, default 10 ms. Not a fixed polling period.', -'in_prioritySetpoint':'Priority restored on success, default 50. Lower values win. Error backoff can replace current priority.', -'in_priorityCurrent':'Mutable scheduler priority. Lower values win, equal values use age. WriteNow sets 0. Application need not maintain it each scan.', -'in_staleAfter':'Read data age threshold, default 2 s. out_stale becomes TRUE when age is strictly greater; does not stop polling.', -'data':'Open array: BOOL for coils/discretes; UINT for registers. Stable VAR_IN_OUT storage. Writes snapshot values at submission; reads replace only their successful slice.', -'stats':'Per-request RequestStats instance maintained by request processing; inspect rather than overwrite.', -'out_connected':'Transport is in ready/sending/receiving state. Does not prove a request succeeded or data is fresh.', -'out_connectionState':'0 disabled, 1 retry wait, 2 TCP connecting, 3 ready, 4 sending, 5 receiving.', -'out_lastNativeError':'Native last transport error; may persist after recovery. Check current connection and request diagnostics too.', -'out_nativeError':'Result of the last completed/failed request; 0 success. Precise native code, distinct from IEC Error enum.', -'out_socketError':'Native Linux errno snapshot as UDINT; may be historical. Used for both serial and sockets.', -'out_reconnectCount':'Native successful reconnections after the first connection. Context recreation resets its native lifetime counters.', -'out_registrationFull':'Sticky request registry overflow indicator; max 100 requests/client. Client reinitialization clears it.', -'out_writeUncertain':'Write may have reached target without a confirmed response. It is not proof of failure or success. Relevant for write requests.', -'out_validData':'TRUE after a successful read; subsequent read failures do not necessarily clear it. Client release or invalidateNativeData clears it.', -'out_dataAgeMs':'Age since last successful read in milliseconds. Updated by normal processing; completion early returns can defer refresh by one scan.', -'out_stale':'TRUE before valid read data or when age exceeds in_staleAfter. Array contents are retained.', -'out_parameterError':'Array-offset validation for requests; full transaction validation can instead appear in out_nativeError/stats.lastErrorId. Slave: invalid port/interfaceName/table bounds or capacity.', -'msgLastSecondCnt':'Submitted request count in the last completed window of at least 1000 ms, not necessarily an exact sliding second.', -'msgLastSecondTime':'Sum of successful transaction durations in that completed window (ms); excludes failed durations.', -'numMsgSent':'IEC accepted submission count since resetStats; not a count of physical packets.', -'numMsgReply':'IEC successful or Modbus-exception reply count since resetStats.', -'allRequestsOnline':'TRUE when at least one active request exists and onlineCnt equals activeReqCnt. Online can include exception replies.', -'reqStats':'Pointers to registered request statistics by registry index, populated on client scans. Null entries are unused; validate before dereference.', -'in_reset':'Slave one-shot recreation input. FB clears it internally; supplying TRUE every scan recreates every scan.', -'interfaceName':'Legacy slave field. Must be empty; nonempty is rejected. Use packed in_ipAddress instead.', -'port':'Slave listening port, default 502, must be nonzero.', -'aCoilsMemory':'Read/write BOOL coil table. Array bounds are protocol addresses; FC1 reads, FC5/15 write.', -'aDiscreteInputsMemory':'Read-only from network BOOL input table; FC2 reads. Application updates it.', -'aHoldingRegistersMemory':'Read/write UINT holding table; FC3 reads, FC6/16 write.', -'aInputRegistersMemory':'Read-only from network UINT input table; FC4 reads. Application updates it.', -'out_running':'Native listener is bound and enabled. Does not mean a peer is connected.', -'out_error':'Current server error flag when outputs are refreshed; some early returns leave other diagnostics unchanged.', -'out_errorId':'IEC server error classification: parameter/internal/native socket class. Consult errno for OS detail.', -'out_connectedClients':'Number of native TCP peers connected (max 8 per server in supplied C source).', -'out_requestsReceived':'Native request count for current server context.', -'out_repliesSent':'Native fully transmitted reply count for current context, including exception replies.', -'out_exceptionReplies':'Number of Modbus exception replies for current server context.', -'lastErrorId':'Last mapped IEC error; successful completion resets to OK.', 'lastExceptionCode':'Last Modbus exception, success=0; stats may substitute TIMEOUT=-1 for non-exception failures.', -'lastValidDuration':'Last successful request duration (ms).','longestValidDuration':'Maximum successful duration recorded; resetStats does not clear it.', -'interval':'Start-to-start execution interval (ms).','offlineCnt':'Count of NOT online rising edges; can include initial not-online state, not only a physical disconnect.', -'doneCnt':'Total successful completions; resetStats clears.','errorCnt':'Total failed completions; resetStats clears.', -'doneCntRst':'Consecutive successes; reset on error/offline/resetStats.','errorCntRst':'Consecutive errors; reset on successful completion/resetStats.', -'sinceLastExec':'Age since last execution start (ms), capped around 60000 by the statistics clock logic.', - 'timeoutCnt':'Statistics non-exception error count; can include other native failures. Not exclusively reply timeouts; resetStats does not clear it.', -'reqLength':'Effective transaction length; zero means inactive.', 'online':'Communication status; valid normal/exception response sets evidence. Distinct from valid data.', -'offline':'Offline status; initialized FALSE, explicitly set on client-offline or repeated failures.', 'active':'TRUE when reqLength is nonzero.', -'executeLight':'Execution indicator with 100 ms off-delay.','reqDoneLight':'Completion indicator with 100 ms off-delay.','reqErrorLight':'Error indicator with 100 ms off-delay.','reqBusyLight':'Busy indicator with 100 ms off-delay.', -'executeMbFb':'Legacy retained output; no assignment in current native implementation. Do not use as a trigger.', -'nativeResponseSeen':'Internal communication-response evidence, maintained by nativeFinish and offline handling.', 'nativeLastSuccessMs':'Internal successful-read timestamp in monotonic milliseconds.', -'command':'Native command selector. Use wrappers in application code.', 'handle':'Generation-checked native context handle; 0 for open.', -'ipAddress':'Packed IPv4 for TCP commands; command 20 overloads this field with RTU baud rate.', -'unitId':'Transaction unit ID; command 20 overloads it with serial parity.', 'functionCode':'Modbus FC; command 20 uses data bits, server push/pull use table ID.', -'startAddress':'Protocol start; command 20 uses stop bits.', 'quantity':'Item count; command 20 uses serial path byte count.', -'pData':'WORD buffer; client reads/writes, serial ASCII path, or server table staging.', 'dataCapacity':'Available WORD elements, not bytes.', -'pStatus':'UDINT status buffer; requires at least 24 elements.', 'statusCapacity':'Available UDINT elements, not bytes.', -'nowMs':'Monotonic time in milliseconds; wrappers use SysTimeGetUs / 1000.', 'connectTimeoutMs':'TCP connection timeout; command 20 uses kernel RS485 flag.', -'responseTimeoutMs':'Reply deadline in milliseconds.', 'retryDelayMs':'Native recovery wait in milliseconds.', -'byte1':'First IPv4 octet.','byte2':'Second IPv4 octet.','byte3':'Third IPv4 octet.','byte4':'Fourth IPv4 octet.', -'bInCopyCode':'Runtime lifecycle copy-code indicator; current implementation does not branch on it.', -'in':'New state to assign. Normally used internally by completion helpers.', 'errorId':'Mapped IEC error supplied to the error helper.', 'exceptionCode':'Modbus exception classification supplied to the error helper.', 'result':'Native completion result; 0 success.'} -original={} -sections=[];count=0 -for e in entries: - parent,name=path(e);t=blob(e,'Interface');impl=blob(e,'Implementation') - if t is None:continue - old=t.text or '';original[meta(e,'Guid').text]=old - if name=='resetStats': - desc=('Reset IEC send/reply/window counters and call each registered stats.resetStats. Does not clear native errno/reconnect counters or all per-request history. No transport recreation.' if parent=='ClientBase' else 'Reset only doneCnt, doneCntRst, errorCnt and errorCntRst. Retains durations, offlineCnt, timeoutCnt and timestamps.') - elif name=='processRequest':desc=('Derived request dispatch: performs '+parent+' transaction using shared nativeProcess, validates copy bounds and transfers the configured slice. Called by client scheduler; application calls the request FB body to register/bind its data.' if parent!='RequestBase' else 'Abstract internal request dispatch implemented by each concrete read/write block.') - elif name in ['Get','Set']:desc=f'{name} accessor for {parent}; see the owning property reference for side effects. Runtime/property syntax normally invokes this accessor.' - else:desc=summary.get(name) - assert desc,(parent,name) - header=f'(* atMb API reference: {parent+"." if parent else ""}{name}\n{desc}\n*)\n' - # Add comments only to declaration lines, never change code or types. - lines=[];scope='' - for line in old.splitlines(keepends=True): - sm=re.match(r'\s*(VAR(?:_INPUT|_OUTPUT|_IN_OUT|_TEMP)?)(?:\s+CONSTANT)?\s*$',line) - if sm:scope=sm.group(1) - if re.match(r'\s*END_VAR',line):scope='' - m=re.match(r'\s*(\w+)\s*:',line) - if m and m.group(1) in fields: - lines.append(' // '+fields[m.group(1)]+'\n') - lines.append(line) - t.text=header+''.join(lines);count+=1 - sections.append('## '+(parent+'.' if parent else '')+name+'\n\n'+desc+'\n\n```iecst\n'+old.strip()+'\n```\n\n') - # Parameter table scoped to input/output/open-array sections. - rows=[];scope='' - for line in old.splitlines(): - sm=re.match(r'\s*(VAR(?:_INPUT|_OUTPUT|_IN_OUT)?)(?:\s+CONSTANT)?\s*$',line) - if sm:scope=sm.group(1) - if re.match(r'\s*END_VAR',line):scope='' - m=re.match(r'\s*(\w+)\s*:\s*(.*?);',line) - if m and scope in ['VAR_INPUT','VAR_OUTPUT','VAR_IN_OUT']: - fn=m.group(1); explanation=fields.get(fn,'Internal wrapper state exposed for compatibility; normally leave under library control.') - rows.append('| `'+fn+'` | '+scope+' | `'+m.group(2).replace('|','\\|')+'` | '+explanation+' |') - if rows:sections.append('| Member | Direction | Declaration | Meaning |\n|---|---|---|---|\n'+'\n'.join(rows)+'\n\n') -# Verify executable tokens and all non-Interface XML content unchanged. -def without_comments(s):return re.sub(r'\s+','',re.sub(r'//[^\n]*','',re.sub(r'\(\*.*?\*\)','',s,flags=re.S))) -for e in entries: - guid=meta(e,'Guid').text - if guid in original:assert without_comments(original[guid])==without_comments(blob(e,'Interface').text),path(e) -output=B/'atMb-Documented.export';E.ElementTree(r).write(output,encoding='utf-8',xml_declaration=True) -check=E.parse(output).getroot();orig=E.parse(src).getroot() -for root in [check,orig]: - for e in root.find('.//List2[@Name="EntryList"]'): - t=blob(e,'Interface') - if t is not None:t.text='DOCUMENTATION_ONLY' -assert E.tostring(check)==E.tostring(orig),'Non-documentation content changed' -(B/'API-REFERENCE.md').write_text('# atMb API reference\n\nGenerated from your working `CmpAtomModbus(1).export`. Documents every code object, including internal methods and property accessors. Runtime implementations, identifiers, declarations and embedded native payloads are preserved in the documented export; additions are comments only.\n\n'+''.join(sections)) -(B/'VALIDATION.md').write_text(f'# Documentation validation\n\nDocumented {count} code objects.\n\n- All interface executable tokens unchanged after removing comments/whitespace.\n- All XML content outside Interface text identical after parse/serialization.\n- Implementations, GUIDs, native payloads, project information and references unchanged.\n- Documented XML parses successfully.\n- No CODESYS IDE compile performed; this is a comments-only change.\n\nInput SHA256: `{hashlib.sha256(src.read_bytes()).hexdigest()}`\n') -print('Documented',count,'objects; comment-only and native-payload preservation checks passed')