Skip to content

Complete 4.0 feature set: setters, array helpers, block transfer, CPU state#693

Merged
gijzelaerr merged 2 commits intomasterfrom
feature/4.0-completeness
Apr 15, 2026
Merged

Complete 4.0 feature set: setters, array helpers, block transfer, CPU state#693
gijzelaerr merged 2 commits intomasterfrom
feature/4.0-completeness

Conversation

@gijzelaerr
Copy link
Copy Markdown
Owner

Summary

Fills the remaining feature gaps for 4.0 completeness.

Missing data type setters:

  • set_lint, set_ulint, set_ltime, set_ltod, set_ldt
  • All exported from snap7.util, registered in SymbolTable dispatch maps
  • Corresponding type sizes added to _TYPE_SIZE

Optimized SymbolTable.read_many():

  • Now batches reads via read_multi_vars (using the optimizer when enabled) instead of reading one tag at a time
  • Falls back to single read for single-tag requests

Array read/write helpers:

  • db_read_array(db, start, count, fmt) — read N values with struct format
  • db_write_array(db, start, values, fmt) — pack and write N values
  • e.g. client.db_read_array(1, 0, 20, ">f") reads 20 REALs

S7CommPlus operations (experimental):

  • get_cpu_state() — via EXPLORE on CPU exec unit
  • upload_block(block_type, block_number) — via GET_VAR_SUBSTREAMED, legacy fallback
  • download_block(block_type, block_number, data) — via SET_VAR_SUBSTREAMED, legacy fallback

Test plan

  • 1475 tests pass (including new read_many tests)
  • mypy and ruff clean
  • Test block transfer against real PLC

🤖 Generated with Claude Code

gijzelaerr and others added 2 commits April 15, 2026 15:02
Missing data type setters:
- set_lint, set_ulint: 64-bit signed/unsigned integer
- set_ltime: nanosecond timedelta (LTIME)
- set_ltod: nanosecond time-of-day (LTOD)
- set_ldt: nanosecond epoch datetime (LDT)
- All exported from snap7.util and registered in SymbolTable dispatch

Optimized SymbolTable.read_many():
- Now uses read_multi_vars for batched reads (via optimizer when enabled)
  instead of reading each tag individually
- Falls back to single read for single-tag requests

Array read/write helpers:
- db_read_array(db, start, count, fmt): read N values using struct format
- db_write_array(db, start, values, fmt): pack and write N values
- Supports any struct format (REAL, INT, DINT, etc.)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
S7CommPlus operations (experimental):
- get_cpu_state(): read CPU state via EXPLORE on CPU exec unit object
- upload_block(block_type, block_number): read program block via
  GET_VAR_SUBSTREAMED, with legacy full_upload fallback
- download_block(block_type, block_number, data): write program block
  via SET_VAR_SUBSTREAMED, with legacy download fallback

All exposed through s7.Client with S7CommPlus/legacy fallback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@gijzelaerr gijzelaerr added this to the 4.0 milestone Apr 15, 2026
@gijzelaerr gijzelaerr merged commit 02a87ea into master Apr 15, 2026
39 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant