Skip to content

Release/6.0#65

Open
tnunnink wants to merge 117 commits intomainfrom
release/6.0
Open

Release/6.0#65
tnunnink wants to merge 117 commits intomainfrom
release/6.0

Conversation

@tnunnink
Copy link
Owner

@tnunnink tnunnink commented Dec 5, 2025

Overall, a lot of updates but here are the main ones that comes to mind:

  • L5Sharp.Generators: New project that contains core source generators for registering ILogixElements with the LogixSerializer class. This lets us remove reflection-based deserialization and reflection-based type instantiation so that others can use this library in source generators without compile time errors. This also should improve performance and make the library more extensible.
  • Interfaces consolidated. No more ILogixSerializable or ILogixParsable. Move some things to new ILogixElement interface, which is the new base interface for type system. Other base abstract classes also have interface abstractions ILogixObject, ILogixEntity etc. These are kept for pattern matching scenarios, and the abstract class implementation use generic type parameters to make various methds more type safe.
  • Removed the LogixParser functionality and replaced with based class protected methods accepting parsing function for each overload (GetValue, GetRequiredValue, etc). This again remove reflection and need for ILogixParsable interface. Most common types still have parse methods.
  • Removed all .NET8 as target framework. Only relying on the .NET standard 2.0.
  • Addition of new builder interfaces that give fluent API for building tags, importing components, or building references.
  • Overhauled the Scope and Reference implementation. Reference is now completely a wrapper around XPathExpression that allows faster lookup of components in XML tree.
  • Removed L5XOptions from API. Updated internal LogixIndex class to handle indexing file. When methods are called that require index lookup, the L5X will be indexed, and won't reindex again unless changes to the underlying XML are detected.
  • Updated internals to Radix class to fix bugs and make dependent on .NET primitive value types and not AtomicData to prevent this circular dependency with the two classes that was causing issues.
  • Added new time and date time based atomic data classes with corresponding Radix formats. (still working on testing)
  • Added new source generator project that will generate static UDT types from L5X files added to the project.
  • Added all Logix predefined structure types to library (auto generate). Also added remaining data formats. (Still need to work on support for special data formats).
  • Lots of other cleanup and removal of code or types that were not adding much value.

tnunnink added 23 commits May 25, 2025 19:38
…ned operations and a centralized `ImportPlan` approach. Updated `Controller` and `L5X` integration to support this enhanced system.
- Development of ImportBuilder interface to configure specifics of how the import process will handle components, updates, and dependencies.
- Some additional API methods for DataType
- Implementation of Dependencies for all components.
- Added some initial tests for import builder.
- Minor regor of L5X/Controller/LogixInfo.
- Made LogixInfo properties read-only and added normalization to that class.
- Generic refactor and documentation fixes.
… `ImportTypeBuilder`) and introduced streamlined builders (`ImportBuilder`, `IImportSourceBuilder`, `IImportDefaultBuilder`). Improved handling of operations and dependencies with centralized `Import` model. Enhanced XML documentation and fixed `Scope` and related methods for consistency.
…ethods.

- Split out Scope.cs to new classes with a single responsibility (getting scope).
- Created new Reference.cs class to represent the XPath to a given entity element.
- Replaced LogixScoped.cs with LogixEntity.cs to support both components and code with Reference and Scope property, along with required Usages (was References) and Dependencies methods for getting references in the current Document.
- ILogixLookup.cs refinement and rework.
- IReferenceBuilder.cs rework.
- Import Builder design and testing.
- Removal of CrossReference.cs
- Actually finished implementations for Dependencies.
- Lots of other reorg and updates to fix bugs, improve functionality, and clean up the codebase.
…code cleanup.

- Deleted unused Diagram.cs and DiagramElement.cs files.
- Removed core components like Line.cs and NeutralText.cs no longer required.
- Deleted corresponding tests for eliminated classes.
- Cleaned up related project file references.
- Streamlined codebase by removing redundant and legacy elements.
- Added initial CLI and Model projects.
…nctions on member calls to LogixElement.cs base class which removes reflection needs.

Update LogixEnum.cs to not use assembly scanning.

Removed LogixIndex.cs and all L5XOptions.cs and corresponding APIs to simplify codebased and functionality (indexing is not super helpful and can easily be accomplished externally from library).
… and making L5X use LogixIndex.cs for main API. Troublleshooting bug with analog data and stack overflow issues.
…g and improved clarity in overriding behavior.
…nsistency, replace LINQ `.Count()` with `.Count`, and add new tests for `LogixContent` and `WriteTag`.
…entation for clarity, and enhance `L5XExtensions.Replace` logic. Rename `Find` to `GetOrDefault` in `LogixContainer`. Increment version to `6.0.0-beta.8`.
…ypes to support modification, and add `Clear` functionality for resetting values. Optimize radix formatting and parsing logic.
…ation logic. Optimize exponential and numeric value checks.
…ring and managing PLC tag changes. Refactor `PlcClient` watch methods to return subscription objects. Rename `ReadInterval` to `PollRate` in `PlcOptions` for clarity. Add new utility methods and validation logic for tag handling.
… formats. Simplify `DINT.Update` test logic.
…ot` workflows. Introduce `PollRate` terminology in `PlcOptionsTests`. Enhance `ExtensionTests` to validate tag responses and performance.
…r` for improved response handling and monitoring. Replace `ITagSubscription` with `TagMonitor`, and deprecate unused subscription logic. Streamline validation and error aggregation for read/write operations.
…Tag` workflows. Replace deprecated `WatchTag` terminology with `MonitorTag`, and refactor assertions for improved result validation.
…depth-based retrieval, and improve parent-child relationship checks using `IsMemberOf` and `IsMemberOrSelf`.
…andling, improved tag monitoring, and enhanced error aggregation.
…bers` for improved readability and consistency.
…recent terminology changes (`Timestamp`, `Rate`, `Updates`).
…lExtensions`. Update `Tag` methods and rename for improved clarity. Refactor README to fix NuGet install command format.
…rity, enhance error aggregation, streamline read/write operations, and add new `UpdateTag` and `PollTag` overloads.
…n `TagNameTests` and `TagTests`, replace `Slice` with `Members`, align `Tag.Create` with `Tag.Named`, and add new test cases for member depth and parent relationship checks.
…ments for better coverage, including new assertions, new overloads, and additional scenarios like invalid tags and callback validations. Add `BasicClientTests`.
…xibility and reusability. Update tests and README for clarity and consistency with terminology and behavior changes.
…ty: rename methods (`Member` to `GetMember`, `Update` to `UpdateData`, `Clear` to `ResetData`), add overloads to `RemoveMember` and `UpdateMember`, and introduce the `GetSize` method. Enhance `DataTypeMember` handling for array and structure-based definitions.
…LogixMemberInfo` and `LogixTypeInfo`. Introduce diagnostics for type definition and parsing errors. Update project to version 2.0.0.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants