├── .gitignore ├── LICENSE ├── README.md ├── docfx ├── .gitignore ├── .idea │ └── .idea.docfx.dir │ │ └── .idea │ │ ├── .gitignore │ │ ├── encodings.xml │ │ ├── indexLayout.xml │ │ └── vcs.xml ├── api │ ├── .gitignore │ └── index.md ├── articles │ ├── Release Notes v2.0.md │ ├── intro.md │ └── toc.yml ├── docfx.json ├── index.md └── toc.yml ├── docs ├── api │ ├── L5Sharp.Catalog.CatalogEntry.html │ ├── L5Sharp.Catalog.ModuleCatalog.html │ ├── L5Sharp.Catalog.PortInfo.html │ ├── L5Sharp.Catalog.html │ ├── L5Sharp.Common.Address.html │ ├── L5Sharp.Common.Dimensions.html │ ├── L5Sharp.Common.NeutralText.html │ ├── L5Sharp.Common.ProductType.html │ ├── L5Sharp.Common.Revision.html │ ├── L5Sharp.Common.ScanRate.html │ ├── L5Sharp.Common.TagName.html │ ├── L5Sharp.Common.TagNameComparer.html │ ├── L5Sharp.Common.TaskPriority.html │ ├── L5Sharp.Common.Vendor.html │ ├── L5Sharp.Common.Watchdog.html │ ├── L5Sharp.Common.html │ ├── L5Sharp.Components.AddOnInstruction.html │ ├── L5Sharp.Components.Controller.html │ ├── L5Sharp.Components.DataType.html │ ├── L5Sharp.Components.DataTypeMember.html │ ├── L5Sharp.Components.LocalTag.html │ ├── L5Sharp.Components.Module.html │ ├── L5Sharp.Components.Parameter.html │ ├── L5Sharp.Components.Pen.html │ ├── L5Sharp.Components.Program.html │ ├── L5Sharp.Components.Routine.html │ ├── L5Sharp.Components.Tag.html │ ├── L5Sharp.Components.Task.html │ ├── L5Sharp.Components.Trend.html │ ├── L5Sharp.Components.WatchList.html │ ├── L5Sharp.Components.html │ ├── L5Sharp.Core.Address.html │ ├── L5Sharp.Core.Dimensions.html │ ├── L5Sharp.Core.NeutralText.html │ ├── L5Sharp.Core.ProductType.html │ ├── L5Sharp.Core.Revision.html │ ├── L5Sharp.Core.ScanRate.html │ ├── L5Sharp.Core.TagName.html │ ├── L5Sharp.Core.TagNameComparer.html │ ├── L5Sharp.Core.TaskPriority.html │ ├── L5Sharp.Core.Vendor.html │ ├── L5Sharp.Core.Watchdog.html │ ├── L5Sharp.Core.html │ ├── L5Sharp.Elements.Communications.html │ ├── L5Sharp.Elements.Connection.html │ ├── L5Sharp.Elements.Line.html │ ├── L5Sharp.Elements.ParameterConnection.html │ ├── L5Sharp.Elements.Port.html │ ├── L5Sharp.Elements.RedundancyInfo.html │ ├── L5Sharp.Elements.Rung.html │ ├── L5Sharp.Elements.SafetyInfo.html │ ├── L5Sharp.Elements.Security.html │ ├── L5Sharp.Elements.WatchTag.html │ ├── L5Sharp.Elements.html │ ├── L5Sharp.Enums.CaptureSizeType.html │ ├── L5Sharp.Enums.ConnectionPriority.html │ ├── L5Sharp.Enums.ConnectionType.html │ ├── L5Sharp.Enums.DataFormat.html │ ├── L5Sharp.Enums.DataTypeClass.html │ ├── L5Sharp.Enums.DataTypeFamily.html │ ├── L5Sharp.Enums.ElectronicKeying.html │ ├── L5Sharp.Enums.ExternalAccess.html │ ├── L5Sharp.Enums.Function.html │ ├── L5Sharp.Enums.Instruction.html │ ├── L5Sharp.Enums.ModuleCategory.html │ ├── L5Sharp.Enums.OnlineEditType.html │ ├── L5Sharp.Enums.Operator.html │ ├── L5Sharp.Enums.PassThroughOption.html │ ├── L5Sharp.Enums.PenType.html │ ├── L5Sharp.Enums.ProductionTrigger.html │ ├── L5Sharp.Enums.ProgramType.html │ ├── L5Sharp.Enums.Radix.html │ ├── L5Sharp.Enums.RoutineType.html │ ├── L5Sharp.Enums.RungType.html │ ├── L5Sharp.Enums.SFCExecutionControl.html │ ├── L5Sharp.Enums.SFCLastScan.html │ ├── L5Sharp.Enums.SFCRestartPosition.html │ ├── L5Sharp.Enums.SamplesType.html │ ├── L5Sharp.Enums.Scope.html │ ├── L5Sharp.Enums.SheetOrientation.html │ ├── L5Sharp.Enums.SheetSize.html │ ├── L5Sharp.Enums.TagType.html │ ├── L5Sharp.Enums.TagUsage.html │ ├── L5Sharp.Enums.TaskEventTrigger.html │ ├── L5Sharp.Enums.TaskType.html │ ├── L5Sharp.Enums.TransmissionType.html │ ├── L5Sharp.Enums.TriggerOperation.html │ ├── L5Sharp.Enums.TriggerTargetType.html │ ├── L5Sharp.Enums.TriggerType.html │ ├── L5Sharp.Enums.Use.html │ ├── L5Sharp.Enums.html │ ├── L5Sharp.Extensions.Catalog.CatalogEntry.html │ ├── L5Sharp.Extensions.Catalog.ModuleCatalog.html │ ├── L5Sharp.Extensions.Catalog.PortInfo.html │ ├── L5Sharp.Extensions.Catalog.html │ ├── L5Sharp.Extensions.DataTypeExtensions.html │ ├── L5Sharp.Extensions.InstructionExtensions.html │ ├── L5Sharp.Extensions.LogixTypeExtensions.html │ ├── L5Sharp.Extensions.ModuleExtensions.html │ ├── L5Sharp.Extensions.NeutralTextExtensions.html │ ├── L5Sharp.Extensions.RungExtensions.html │ ├── L5Sharp.Extensions.TagDictionary.html │ ├── L5Sharp.Extensions.TagExtensions.html │ ├── L5Sharp.Extensions.html │ ├── L5Sharp.ILogixSerializable.html │ ├── L5Sharp.L5X.html │ ├── L5Sharp.L5XException.html │ ├── L5Sharp.L5XName.html │ ├── L5Sharp.L5XParser.html │ ├── L5Sharp.Logix.html │ ├── L5Sharp.LogixComponent-1.html │ ├── L5Sharp.LogixContainer-1.html │ ├── L5Sharp.LogixContent.html │ ├── L5Sharp.LogixData.html │ ├── L5Sharp.LogixElement.html │ ├── L5Sharp.LogixEnum-2.html │ ├── L5Sharp.LogixExtensions.html │ ├── L5Sharp.LogixMember.html │ ├── L5Sharp.LogixSerializer.html │ ├── L5Sharp.LogixType.html │ ├── L5Sharp.ScanMode.html │ ├── L5Sharp.Tests.Catalog.LogixCatalogTests.html │ ├── L5Sharp.Tests.Catalog.html │ ├── L5Sharp.Tests.Components.DataTypeMemberTests.html │ ├── L5Sharp.Tests.Components.DataTypeTests.html │ ├── L5Sharp.Tests.Components.ModuleTests.html │ ├── L5Sharp.Tests.Components.ProgramTests.html │ ├── L5Sharp.Tests.Components.RoutineTests.html │ ├── L5Sharp.Tests.Components.TagTests.html │ ├── L5Sharp.Tests.Components.TaskTests.html │ ├── L5Sharp.Tests.Components.html │ ├── L5Sharp.Tests.Core.AddressTests.html │ ├── L5Sharp.Tests.Core.DimensionsTests.html │ ├── L5Sharp.Tests.Core.NeutralTextTests.html │ ├── L5Sharp.Tests.Core.PortTests.html │ ├── L5Sharp.Tests.Core.ProductTypeTests.html │ ├── L5Sharp.Tests.Core.RevisionTests.html │ ├── L5Sharp.Tests.Core.ScanRateTests.html │ ├── L5Sharp.Tests.Core.TagNameTests.html │ ├── L5Sharp.Tests.Core.TaskPriorityTests.html │ ├── L5Sharp.Tests.Core.VendorTests.html │ ├── L5Sharp.Tests.Core.WatchdogTests.html │ ├── L5Sharp.Tests.Core.html │ ├── L5Sharp.Tests.Enums.ConnectionPriorityTests.html │ ├── L5Sharp.Tests.Enums.ConnectionTypeTests.html │ ├── L5Sharp.Tests.Enums.DataFormatTests.html │ ├── L5Sharp.Tests.Enums.DataTypeClassTests.html │ ├── L5Sharp.Tests.Enums.DataTypeFamilyTests.html │ ├── L5Sharp.Tests.Enums.ExternalAccessTests.html │ ├── L5Sharp.Tests.Enums.FunctionTests.html │ ├── L5Sharp.Tests.Enums.InstructionTests.html │ ├── L5Sharp.Tests.Enums.KeyingStateTests.html │ ├── L5Sharp.Tests.Enums.ModuleTypeTests.html │ ├── L5Sharp.Tests.Enums.OperationTests.html │ ├── L5Sharp.Tests.Enums.ProductionTriggerTests.html │ ├── L5Sharp.Tests.Enums.ProgramTypeTests.html │ ├── L5Sharp.Tests.Enums.RadixAsciiTests.html │ ├── L5Sharp.Tests.Enums.RadixBinaryTests.html │ ├── L5Sharp.Tests.Enums.RadixDateTimeNsTests.html │ ├── L5Sharp.Tests.Enums.RadixDateTimeTests.html │ ├── L5Sharp.Tests.Enums.RadixDecimalTests.html │ ├── L5Sharp.Tests.Enums.RadixExponentialTests.html │ ├── L5Sharp.Tests.Enums.RadixFloatTests.html │ ├── L5Sharp.Tests.Enums.RadixHexTests.html │ ├── L5Sharp.Tests.Enums.RadixNullTests.html │ ├── L5Sharp.Tests.Enums.RadixOctalTests.html │ ├── L5Sharp.Tests.Enums.RadixTests.html │ ├── L5Sharp.Tests.Enums.RoutineTypeTests.html │ ├── L5Sharp.Tests.Enums.RungTypeTests.html │ ├── L5Sharp.Tests.Enums.ScopeTests.html │ ├── L5Sharp.Tests.Enums.TagTypeTests.html │ ├── L5Sharp.Tests.Enums.TagUsageTests.html │ ├── L5Sharp.Tests.Enums.TaskTriggerTests.html │ ├── L5Sharp.Tests.Enums.TaskTypeTests.html │ ├── L5Sharp.Tests.Enums.TransmissionTypeTests.html │ ├── L5Sharp.Tests.Enums.UseTests.html │ ├── L5Sharp.Tests.Enums.html │ ├── L5Sharp.Tests.Examples.html │ ├── L5Sharp.Tests.Known.html │ ├── L5Sharp.Tests.LogixContentDataTypeTests.html │ ├── L5Sharp.Tests.LogixContentExportTests.html │ ├── L5Sharp.Tests.LogixContentMergeTests.html │ ├── L5Sharp.Tests.LogixContentTagTests.html │ ├── L5Sharp.Tests.LogixContentTasksTests.html │ ├── L5Sharp.Tests.LogixContentTemplateTests.html │ ├── L5Sharp.Tests.LogixDataTests.html │ ├── L5Sharp.Tests.LogixMemberTests.html │ ├── L5Sharp.Tests.LogixTests.html │ ├── L5Sharp.Tests.ProofTests.html │ ├── L5Sharp.Tests.Specimens.BoolGenerator.html │ ├── L5Sharp.Tests.Specimens.DintGenerator.html │ ├── L5Sharp.Tests.Specimens.IntGenerator.html │ ├── L5Sharp.Tests.Specimens.LintGenerator.html │ ├── L5Sharp.Tests.Specimens.RealGenerator.html │ ├── L5Sharp.Tests.Specimens.SintGenerator.html │ ├── L5Sharp.Tests.Specimens.UDintGenerator.html │ ├── L5Sharp.Tests.Specimens.UIntGenerator.html │ ├── L5Sharp.Tests.Specimens.ULintGenerator.html │ ├── L5Sharp.Tests.Specimens.USintGenerator.html │ ├── L5Sharp.Tests.Specimens.html │ ├── L5Sharp.Tests.Types.ArrayTypeGenericTests.html │ ├── L5Sharp.Tests.Types.ArrayTypeTests.html │ ├── L5Sharp.Tests.Types.AtomicTests.html │ ├── L5Sharp.Tests.Types.Atomics.BoolTests.html │ ├── L5Sharp.Tests.Types.Atomics.DintTests.html │ ├── L5Sharp.Tests.Types.Atomics.IntTests.html │ ├── L5Sharp.Tests.Types.Atomics.LintTests.html │ ├── L5Sharp.Tests.Types.Atomics.RealTests.html │ ├── L5Sharp.Tests.Types.Atomics.SintTests.html │ ├── L5Sharp.Tests.Types.Atomics.UDintTests.html │ ├── L5Sharp.Tests.Types.Atomics.UIntTests.html │ ├── L5Sharp.Tests.Types.Atomics.ULintTests.html │ ├── L5Sharp.Tests.Types.Atomics.USintTests.html │ ├── L5Sharp.Tests.Types.Atomics.html │ ├── L5Sharp.Tests.Types.ComplexTypeTests.html │ ├── L5Sharp.Tests.Types.Custom.MyNestedType.html │ ├── L5Sharp.Tests.Types.Custom.MyNestedTypeTests.html │ ├── L5Sharp.Tests.Types.Custom.MySimpleType.html │ ├── L5Sharp.Tests.Types.Custom.MySimpleTypeTests.html │ ├── L5Sharp.Tests.Types.Custom.html │ ├── L5Sharp.Tests.Types.Predefined.AlarmAnalogTest.html │ ├── L5Sharp.Tests.Types.Predefined.AlarmDigitalTests.html │ ├── L5Sharp.Tests.Types.Predefined.AlarmTests.html │ ├── L5Sharp.Tests.Types.Predefined.ControlTests.html │ ├── L5Sharp.Tests.Types.Predefined.CounterTests.html │ ├── L5Sharp.Tests.Types.Predefined.MessageTests.html │ ├── L5Sharp.Tests.Types.Predefined.StringTests.html │ ├── L5Sharp.Tests.Types.Predefined.TimerTests.html │ ├── L5Sharp.Tests.Types.Predefined.html │ ├── L5Sharp.Tests.Types.StringTypeTests.html │ ├── L5Sharp.Tests.Types.html │ ├── L5Sharp.Tests.html │ ├── L5Sharp.Types.ArrayType-1.html │ ├── L5Sharp.Types.ArrayType.html │ ├── L5Sharp.Types.Atomic.html │ ├── L5Sharp.Types.AtomicType.html │ ├── L5Sharp.Types.Atomics.BOOL.html │ ├── L5Sharp.Types.Atomics.DINT.html │ ├── L5Sharp.Types.Atomics.INT.html │ ├── L5Sharp.Types.Atomics.LINT.html │ ├── L5Sharp.Types.Atomics.LREAL.html │ ├── L5Sharp.Types.Atomics.REAL.html │ ├── L5Sharp.Types.Atomics.SINT.html │ ├── L5Sharp.Types.Atomics.UDINT.html │ ├── L5Sharp.Types.Atomics.UINT.html │ ├── L5Sharp.Types.Atomics.ULINT.html │ ├── L5Sharp.Types.Atomics.USINT.html │ ├── L5Sharp.Types.Atomics.html │ ├── L5Sharp.Types.ComplexType.html │ ├── L5Sharp.Types.ModuleDefined.CHANNEL_AI_I.html │ ├── L5Sharp.Types.ModuleDefined.html │ ├── L5Sharp.Types.NullType.html │ ├── L5Sharp.Types.Predefined.ALARM.html │ ├── L5Sharp.Types.Predefined.ALARM_ANALOG.html │ ├── L5Sharp.Types.Predefined.ALARM_DIGITAL.html │ ├── L5Sharp.Types.Predefined.CONTROL.html │ ├── L5Sharp.Types.Predefined.COUNTER.html │ ├── L5Sharp.Types.Predefined.MESSAGE.html │ ├── L5Sharp.Types.Predefined.PHASE.html │ ├── L5Sharp.Types.Predefined.PID.html │ ├── L5Sharp.Types.Predefined.STRING.html │ ├── L5Sharp.Types.Predefined.TIMER.html │ ├── L5Sharp.Types.Predefined.html │ ├── L5Sharp.Types.StringType.html │ ├── L5Sharp.Types.StructureType.html │ ├── L5Sharp.Types.html │ ├── L5Sharp.html │ ├── index.html │ ├── toc.html │ └── toc.json ├── articles │ ├── Release Notes v2.0.html │ ├── intro.html │ ├── toc.html │ └── toc.json ├── favicon.ico ├── index.html ├── logo.svg ├── manifest.json ├── public │ ├── bootstrap-icons-AJUF3K7A.woff2 │ ├── bootstrap-icons-QRR4WHQW.woff │ ├── c4Diagram-9cddb37f-WIM3O2PZ.min.js │ ├── c4Diagram-9cddb37f-WIM3O2PZ.min.js.map │ ├── chunk-2UQKBPYM.min.js │ ├── chunk-2UQKBPYM.min.js.map │ ├── chunk-4QUVCJ43.min.js │ ├── chunk-4QUVCJ43.min.js.map │ ├── chunk-5D33ZLWF.min.js │ ├── chunk-5D33ZLWF.min.js.map │ ├── chunk-CCEUEXYU.min.js │ ├── chunk-CCEUEXYU.min.js.map │ ├── chunk-EJ5OGHAS.min.js │ ├── chunk-EJ5OGHAS.min.js.map │ ├── chunk-LT3ASRYW.min.js │ ├── chunk-LT3ASRYW.min.js.map │ ├── chunk-OL7Q2QRB.min.js │ ├── chunk-OL7Q2QRB.min.js.map │ ├── chunk-QE7DPUIN.min.js │ ├── chunk-QE7DPUIN.min.js.map │ ├── chunk-QSDWJHKZ.min.js │ ├── chunk-QSDWJHKZ.min.js.map │ ├── chunk-RDO2XUNR.min.js │ ├── chunk-RDO2XUNR.min.js.map │ ├── chunk-V67V7LTN.min.js │ ├── chunk-V67V7LTN.min.js.map │ ├── chunk-YBEN64OV.min.js │ ├── chunk-YBEN64OV.min.js.map │ ├── chunk-YFWH55TJ.min.js │ ├── chunk-YFWH55TJ.min.js.map │ ├── classDiagram-bc733c3b-ZOUC3QMI.min.js │ ├── classDiagram-bc733c3b-ZOUC3QMI.min.js.map │ ├── classDiagram-v2-8931bdaf-4M3HVNWR.min.js │ ├── classDiagram-v2-8931bdaf-4M3HVNWR.min.js.map │ ├── docfx.min.css │ ├── docfx.min.css.map │ ├── docfx.min.js │ ├── docfx.min.js.map │ ├── erDiagram-f6946109-WZMSETWO.min.js │ ├── erDiagram-f6946109-WZMSETWO.min.js.map │ ├── es-XWLYB2L6.min.js │ ├── es-XWLYB2L6.min.js.map │ ├── flowDiagram-93327f21-QBBFYOS3.min.js │ ├── flowDiagram-93327f21-QBBFYOS3.min.js.map │ ├── flowDiagram-v2-476db779-UMAI32QJ.min.js │ ├── flowDiagram-v2-476db779-UMAI32QJ.min.js.map │ ├── flowchart-elk-definition-5082a990-ILAKSSWI.min.js │ ├── flowchart-elk-definition-5082a990-ILAKSSWI.min.js.map │ ├── ganttDiagram-7ce12d6b-FKNSHKPL.min.js │ ├── ganttDiagram-7ce12d6b-FKNSHKPL.min.js.map │ ├── gitGraphDiagram-1e960c50-FRVWDVJI.min.js │ ├── gitGraphDiagram-1e960c50-FRVWDVJI.min.js.map │ ├── infoDiagram-264bed3e-EUZW63TP.min.js │ ├── infoDiagram-264bed3e-EUZW63TP.min.js.map │ ├── journeyDiagram-31be0096-3T7BZ4VA.min.js │ ├── journeyDiagram-31be0096-3T7BZ4VA.min.js.map │ ├── main.css │ ├── main.js │ ├── mermaid.core-GLNXVV4Q.min.js │ ├── mermaid.core-GLNXVV4Q.min.js.map │ ├── mindmap-definition-4fc2557c-LSYHS73U.min.js │ ├── mindmap-definition-4fc2557c-LSYHS73U.min.js.map │ ├── pieDiagram-157505fe-YFAHXN2T.min.js │ ├── pieDiagram-157505fe-YFAHXN2T.min.js.map │ ├── quadrantDiagram-fd70f2d0-GOM66O4O.min.js │ ├── quadrantDiagram-fd70f2d0-GOM66O4O.min.js.map │ ├── requirementDiagram-19c99588-JW7FAA4Q.min.js │ ├── requirementDiagram-19c99588-JW7FAA4Q.min.js.map │ ├── search-worker.min.js │ ├── search-worker.min.js.map │ ├── sequenceDiagram-5dfd0049-S5NMT534.min.js │ ├── sequenceDiagram-5dfd0049-S5NMT534.min.js.map │ ├── stateDiagram-133e3642-3YNW7YDK.min.js │ ├── stateDiagram-133e3642-3YNW7YDK.min.js.map │ ├── stateDiagram-v2-6371a76b-K36QD2HX.min.js │ ├── stateDiagram-v2-6371a76b-K36QD2HX.min.js.map │ ├── tex-svg-full-2UKKUQHI.min.js │ ├── tex-svg-full-2UKKUQHI.min.js.map │ ├── timeline-definition-5ed366f4-LPRDTIVS.min.js │ └── timeline-definition-5ed366f4-LPRDTIVS.min.js.map ├── search-stopwords.json ├── toc.html ├── toc.json └── xrefmap.yml ├── refs ├── Allen Bradley - Logic 5000 General Instructions.pdf ├── Logix 5000 Controllers Import Export.pdf ├── Logix5000_Controllers_ASCII_Strings.pdf └── logix-tag-descriptions.pdf ├── src ├── .idea │ └── .idea.L5Sharp │ │ └── .idea │ │ ├── .name │ │ ├── encodings.xml │ │ ├── indexLayout.xml │ │ ├── projectSettingsUpdater.xml │ │ ├── shelf │ │ ├── Uncommitted_changes_before_Checkout_at_3_27_2024_1_03_PM_[Changes] │ │ │ └── shelved.patch │ │ ├── Uncommitted_changes_before_Checkout_at_3_27_2024_1_03_PM_[Changes]1 │ │ │ └── shelved.patch │ │ └── Uncommitted_changes_before_Checkout_at_3_27_2024_1_03_PM__Changes_.xml │ │ └── vcs.xml ├── L5Sharp.Core │ ├── Builders │ │ ├── Scope │ │ │ ├── IScopeBuilder.cs │ │ │ ├── IScopeNameBuilder.cs │ │ │ ├── IScopeProgramBuilder.cs │ │ │ ├── IScopeRoutineBuilder.cs │ │ │ ├── IScopeTypeBuilder.cs │ │ │ └── ScopeBuilder.cs │ │ └── Tag │ │ │ ├── ITagAliasBuilder.cs │ │ │ ├── ITagBaseAtomicArrayBuilder.cs │ │ │ ├── ITagBaseAtomicBuilder.cs │ │ │ ├── ITagBaseBuilder.cs │ │ │ ├── ITagBaseStructureArrayBuilder.cs │ │ │ ├── ITagBaseStructureBuilder.cs │ │ │ ├── ITagBaseTypeBuilder.cs │ │ │ ├── ITagBuilder.cs │ │ │ ├── ITagConsumerBuilder.cs │ │ │ ├── ITagMemberAtomicArrayBuilder.cs │ │ │ ├── ITagMemberAtomicBuilder.cs │ │ │ ├── ITagMemberStructureArrayBuilder.cs │ │ │ ├── ITagMemberStructureBuilder.cs │ │ │ ├── ITagMemberTypeBuilder.cs │ │ │ ├── ITagProducerBuilder.cs │ │ │ ├── TagAliasBuilder.cs │ │ │ ├── TagBaseAtomicArrayBuilder.cs │ │ │ ├── TagBaseAtomicBuilder.cs │ │ │ ├── TagBaseBuilder.cs │ │ │ ├── TagBaseStructureArrayBuilder.cs │ │ │ ├── TagBaseStructureBuilder.cs │ │ │ ├── TagBaseTypeBuilder.cs │ │ │ ├── TagConsumerBuilder.cs │ │ │ ├── TagMemberAtomicArrayBuilder.cs │ │ │ ├── TagMemberAtomicBuilder.cs │ │ │ ├── TagMemberStructureArrayBuilder.cs │ │ │ ├── TagMemberStructureBuilder.cs │ │ │ ├── TagMemberTypeBuilder.cs │ │ │ └── TagProducerBuilder.cs │ ├── Common │ │ ├── Address.cs │ │ ├── Argument.cs │ │ ├── CrossReference.cs │ │ ├── Dimensions.cs │ │ ├── Instruction.cs │ │ ├── NeutralText.cs │ │ ├── ProductType.cs │ │ ├── Revision.cs │ │ ├── ScanRate.cs │ │ ├── Scope.cs │ │ ├── TagName.cs │ │ ├── TaskPriority.cs │ │ ├── Vendor.cs │ │ └── Watchdog.cs │ ├── Components │ │ ├── AddOnInstruction.cs │ │ ├── Controller.cs │ │ ├── DataType.cs │ │ ├── LocalTag.cs │ │ ├── Module.cs │ │ ├── Program.cs │ │ ├── Routine.cs │ │ ├── Tag.cs │ │ ├── Task.cs │ │ ├── Trend.cs │ │ └── WatchList.cs │ ├── Data │ │ ├── ArrayData.cs │ │ ├── AtomicData.cs │ │ ├── Atomics │ │ │ ├── BOOL.cs │ │ │ ├── DINT.cs │ │ │ ├── INT.cs │ │ │ ├── LINT.cs │ │ │ ├── LREAL.cs │ │ │ ├── REAL.cs │ │ │ ├── SINT.cs │ │ │ ├── UDINT.cs │ │ │ ├── UINT.cs │ │ │ ├── ULINT.cs │ │ │ └── USINT.cs │ │ ├── ComplexData.cs │ │ ├── Member.cs │ │ ├── NullData.cs │ │ ├── Predefined │ │ │ ├── ALARM.cs │ │ │ ├── ALARM_ANALOG.cs │ │ │ ├── ALARM_DIGITAL.cs │ │ │ ├── CONTROL.cs │ │ │ ├── COUNTER.cs │ │ │ ├── MESSAGE.cs │ │ │ ├── PHASE.cs │ │ │ ├── PID.cs │ │ │ ├── STRING.cs │ │ │ └── TIMER.cs │ │ ├── StringData.cs │ │ └── StructureData.cs │ ├── Elements │ │ ├── Block.cs │ │ ├── Chart.cs │ │ ├── Comment.cs │ │ ├── Communications.cs │ │ ├── Connection.cs │ │ ├── ConsumeInfo.cs │ │ ├── DataTypeMember.cs │ │ ├── Diagram.cs │ │ ├── DiagramElement.cs │ │ ├── Line.cs │ │ ├── Parameter.cs │ │ ├── ParameterConnection.cs │ │ ├── Pen.cs │ │ ├── Port.cs │ │ ├── ProduceInfo.cs │ │ ├── RedundancyInfo.cs │ │ ├── Rung.cs │ │ ├── SafetyInfo.cs │ │ ├── SafetyTagMap.cs │ │ ├── Security.cs │ │ ├── Sheet.cs │ │ ├── TextBox.cs │ │ ├── Unit.cs │ │ ├── WatchTag.cs │ │ └── Wire.cs │ ├── Enums │ │ ├── CaptureSizeType.cs │ │ ├── ComponentClass.cs │ │ ├── ConnectionPriority.cs │ │ ├── ConnectionType.cs │ │ ├── DataFormat.cs │ │ ├── DataTypeClass.cs │ │ ├── DataTypeFamily.cs │ │ ├── ElectronicKeying.cs │ │ ├── ExternalAccess.cs │ │ ├── Keyword.cs │ │ ├── MessageType.cs │ │ ├── ModuleCategory.cs │ │ ├── OnlineEditType.cs │ │ ├── OpcUAAccess.cs │ │ ├── Operator.cs │ │ ├── PassThroughOption.cs │ │ ├── PenType.cs │ │ ├── ProductionTrigger.cs │ │ ├── ProgramType.cs │ │ ├── Radix.cs │ │ ├── ReferenceType.cs │ │ ├── RoutineType.cs │ │ ├── RungType.cs │ │ ├── SFCExecutionControl.cs │ │ ├── SFCLastScan.cs │ │ ├── SFCRestartPosition.cs │ │ ├── SamplesType.cs │ │ ├── ScopeLevel.cs │ │ ├── ScopeType.cs │ │ ├── SheetOrientation.cs │ │ ├── SheetSize.cs │ │ ├── TagType.cs │ │ ├── TagUsage.cs │ │ ├── TaskEventTrigger.cs │ │ ├── TaskType.cs │ │ ├── TokenType.cs │ │ ├── TransmissionType.cs │ │ ├── TriggerOperation.cs │ │ ├── TriggerTargetType.cs │ │ ├── TriggerType.cs │ │ └── Use.cs │ ├── ILogixLookup.cs │ ├── ILogixParsable.cs │ ├── ILogixSerializable.cs │ ├── L5Sharp.Core.csproj │ ├── L5Sharp.Core.csproj.DotSettings │ ├── L5X.cs │ ├── LogixCode.cs │ ├── LogixComponent.cs │ ├── LogixContainer.cs │ ├── LogixData.cs │ ├── LogixElement.cs │ ├── LogixEnum.cs │ ├── LogixIndex.cs │ ├── LogixInfo.cs │ ├── LogixLookup.cs │ ├── LogixObject.cs │ ├── LogixParser.cs │ ├── LogixScoped.cs │ ├── LogixSerializer.cs │ └── Utilities │ │ ├── Catalog │ │ ├── CatalogEntry.cs │ │ ├── ModuleCatalog.cs │ │ └── PortInfo.cs │ │ ├── L5XExtensions.cs │ │ ├── L5XName.cs │ │ ├── L5XScopeGenerator.cs │ │ └── L5XTypeAttribute.cs ├── L5Sharp.Logix │ ├── ACD.cs │ └── L5Sharp.Logix.csproj ├── L5Sharp.sln └── L5Sharp.sln.DotSettings └── tests ├── L5Sharp.Benchmarks ├── L5Sharp.Benchmarks.csproj ├── NeutralTextBenchmarks.cs └── Program.cs ├── L5Sharp.Console ├── L5Sharp.Console.csproj ├── Program.cs └── TestClass.cs ├── L5Sharp.Samples ├── DataTypes │ ├── AlarmType.L5X │ ├── ArrayType.L5X │ ├── BoolTest.L5X │ ├── ComplexType.L5X │ ├── InvalidType.L5X │ ├── ModuleType.L5X │ ├── MultipleDataTypes.L5X │ ├── NestedType.L5X │ ├── SimpleType.L5X │ └── aoi_Test.L5X ├── Empty.L5X ├── Instructions │ └── aoi_Test.L5X ├── Known.cs ├── L5Sharp.Samples.csproj ├── LotOfTags.L5X ├── Modules │ ├── FlexBus.L5X │ ├── Flex_Mod_1_Module.L5X │ ├── Flex_Mod_8.L5X │ ├── L1M1.L5X │ ├── L1M1D1.L5X │ ├── LM6C1.L5X │ ├── Local_Mod_1.L5X │ ├── Local_Mod_4.L5X │ ├── Local_Mod_9.L5X │ ├── RackIO.L5X │ ├── Rack_Mod_2.L5X │ ├── Rack_Mode_3.L5X │ ├── TestCard.L5X │ ├── TestEtap.L5X │ └── TestImport.L5X ├── Programs │ ├── Empty.L5X │ ├── Main.L5X │ └── TestProgram.L5X ├── Routines │ ├── FBD.L5X │ ├── Main.L5X │ ├── SFC.L5X │ └── ST.L5X ├── Rungs │ ├── Message_Rung.L5X │ ├── Rung0_from_Main.L5X │ ├── Rung1_from_Main.L5X │ └── Rung2_from_Main.L5X ├── Sample.cs ├── Test.ACD ├── Test.L5X └── Trends │ ├── Test.L5X │ └── TriggerTrend.L5X ├── L5Sharp.Tests.Core ├── Common │ ├── AddressTests.cs │ ├── ArgumentTests.cs │ ├── CrossReferenceTests.cs │ ├── DimensionsTests.cs │ ├── InstructionTests.cs │ ├── NeutralTextTests.cs │ ├── ProductTypeTests.cs │ ├── RevisionTests.cs │ ├── ScanRateTests.cs │ ├── ScopeTests.cs │ ├── TagNameTests.cs │ ├── TaskPriorityTests.cs │ ├── VendorTests.cs │ └── WatchdogTests.cs ├── Components │ ├── AddOnInstructionTests.Export_WhenCalled_ShouldBeVerified.verified.xml │ ├── AddOnInstructionTests.New_Default_ShouldBeValid.verified.xml │ ├── AddOnInstructionTests.Serialize_WithRungsAndTag_ShouldBeVerified.verified.xml │ ├── AddOnInstructionTests.cs │ ├── ControllerTests.Serialize_Overriden_ShouldBeVerified.verified.xml │ ├── ControllerTests.cs │ ├── CrossReferenceTests.cs │ ├── DataTypeTests.Serialize_Default_ShouldBeVerified.verified.txt │ ├── DataTypeTests.Serialize_Parameterized_ShouldBeVerified.verified.txt │ ├── DataTypeTests.ToTag_ComplexType_ShouldBeVerified.verified.txt │ ├── DataTypeTests.ToTag_SimpleType_ShouldBeVerified.verified.txt │ ├── DataTypeTests.cs │ ├── ModuleTests.Configure_ExistingValidCatalogNumber_ShouldBeVerified.verified.txt │ ├── ModuleTests.Create_CatalogNumberAndConfig_ShouldBeVerified.verified.txt │ ├── ModuleTests.Create_ExistingValidCatalogNumber_ShouldBeVerified.verified.txt │ ├── ModuleTests.Create_ValidNameAndCatalogNumber_ShouldBeVerified.verified.txt │ ├── ModuleTests.Local_ValidCatalogNumber_ShouldBeVerified.verified.txt │ ├── ModuleTests.Serialize_Default_ShouldBeVerified.verified.txt │ ├── ModuleTests.Serialize_Initialized_ShouldBeVerified.verified.txt │ ├── ModuleTests.cs │ ├── ProgramTests.AddRoutine_ValidRoutine_ShouldBeVerified.verified.txt │ ├── ProgramTests.AddTag_ValidTag_ShouldBeVerified.verified.txt │ ├── ProgramTests.Duplicate_ValidConfig_ShouldBeVerified.verified.txt │ ├── ProgramTests.Serialize_Initialized_ShouldBeVerified.verified.txt │ ├── ProgramTests.cs │ ├── RoutineTests.AddSheet_ValidSheetObject_ShouldWork.verified.txt │ ├── RoutineTests.cs │ ├── TagTests.Add_ComplexType_ShouldBeVerified.verified.txt │ ├── TagTests.Build_AtomicArrayWithSetValue_ShouldBeVerified.verified.txt │ ├── TagTests.Build_ComplexNestedStructure_ShouldBeVerified.verified.txt │ ├── TagTests.Build_SimpleAliasTag_ShouldBeVerified.verified.txt │ ├── TagTests.Build_SimpleStructureWithConfiguredMembers_ShouldBeVerified.verified.txt │ ├── TagTests.Build_StructureArrayWithNestedConfig_ShouldBeVerified.verified.txt │ ├── TagTests.Build_StructureWithPredefinedMember_ShouldBeVerified.verified.txt │ ├── TagTests.Class_SetValidValue_ShouldBeVerified.verified.xml │ ├── TagTests.Comments_ValidCollection_ShouldBeVerified.verified.txt │ ├── TagTests.ConsumeInfo_SetNewValue_ShouldBeVerified.verified.xml │ ├── TagTests.Duplicate_ValidConfig_ShouldBeVerified.verified.txt │ ├── TagTests.ProduceInfo_SetNewValue_ShouldBeVerified.verified.xml │ ├── TagTests.Remove_ValidTag_ShouldBeVerified.verified.txt │ ├── TagTests.SetDescription_OnMemberTag_ShouldCreateAndUpdateCommentsElement.verified.txt │ ├── TagTests.SetDescription_OnRoot_ShouldUpdateRootDescriptionElement.verified.txt │ ├── TagTests.SetValue_AnalogAlarm_ShouldBeVerified.verified.txt │ ├── TagTests.SetValue_StaticMemberOfNestedType_ShouldBeVerifiedXml.verified.txt │ ├── TagTests.SetValue_StaticMemberOfStructureType_ShouldBeVerifiedXml.verified.txt │ ├── TagTests.cs │ ├── TaskTests.AddProgram_ValidProgram_ShouldBeVerified.verified.xml │ ├── TaskTests.Serialize_Default_ShouldBeVerified.verified.txt │ ├── TaskTests.Serialize_Initialized_ShouldBeVerified.verified.txt │ └── TaskTests.cs ├── Data │ ├── ArrayDataTests.Serialize_ArrayOfNull_ShouldBeVerified.verified.txt │ ├── ArrayDataTests.Serialize_EmptyArray_ShouldBeVerified.verified.txt │ ├── ArrayDataTests.Serialize_SimpleOneDimensional_ShouldBeVerified.verified.txt │ ├── ArrayDataTests.Serialize_SimpleThreeDimensional_ShouldBeVerified.verified.txt │ ├── ArrayDataTests.Serialize_SimpleTwoDimensional_ShouldBeVerified.verified.txt │ ├── ArrayDataTests.Serialize_StringTypeArray_ShouldBeVerified.verified.txt │ ├── ArrayDataTests.Serialize_StructureTypeArray_ShouldBeVerified.verified.txt │ ├── ArrayDataTests.cs │ ├── AtomicDataTests.cs │ ├── Atomics │ │ ├── BoolTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── BoolTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── BoolTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── BoolTests.cs │ │ ├── DintTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── DintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── DintTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── DintTests.cs │ │ ├── IntTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── IntTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── IntTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── IntTests.cs │ │ ├── LintTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── LintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── LintTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── LintTests.cs │ │ ├── LrealTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── LrealTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── LrealTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── LrealTests.cs │ │ ├── RealTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── RealTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── RealTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── RealTests.cs │ │ ├── SintTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── SintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── SintTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── SintTests.cs │ │ ├── UDintTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── UDintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── UDintTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── UDintTests.cs │ │ ├── UIntTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── UIntTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── UIntTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── UIntTests.cs │ │ ├── ULintTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── ULintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── ULintTests.Serialize_Value_ShouldBeValid.verified.txt │ │ ├── ULintTests.cs │ │ ├── USintTests.Serialize_Default_ShouldBeValid.verified.txt │ │ ├── USintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt │ │ ├── USintTests.Serialize_Value_ShouldBeValid.verified.txt │ │ └── USintTests.cs │ ├── ComplexDataTests.Serialize_Default_ShouldBeVerified.verified.txt │ ├── ComplexDataTests.Serialize_Test_ShouldBeVerified.verified.txt │ ├── ComplexDataTests.cs │ ├── Custom │ │ ├── MyNestedData.cs │ │ ├── MyNestedTypeTests.SetSimpleM4_Valid_ShouldBeValid.verified.txt │ │ ├── MyNestedTypeTests.cs │ │ ├── MySimpleData.cs │ │ ├── MySimpleTypeTests.Serialize_Default_ShouldBeVerified.verified.txt │ │ ├── MySimpleTypeTests.Serialize_UpdatedMember_ShouldBeVerified.verified.txt │ │ └── MySimpleTypeTests.cs │ ├── LogixDataTests.cs │ ├── MemberTests.Serialize_ArrayOfAtomicDataType_ShouldBeVerified.verified.txt │ ├── MemberTests.Serialize_ArrayOfStringDataType_ShouldBeVerified.verified.txt │ ├── MemberTests.Serialize_ArrayOfStructureDataType_ShouldBeVerified.verified.txt │ ├── MemberTests.Serialize_AtomicDataType_ShouldBeVerified.verified.txt │ ├── MemberTests.Serialize_StringDataType_ShouldBeVerified.verified.txt │ ├── MemberTests.Serialize_StructureDataType_ShouldBeVerified.verified.txt │ ├── MemberTests.cs │ ├── NullDataTests.SerializeShouldBeVerified.verified.txt │ ├── NullDataTests.cs │ ├── Predefined │ │ ├── AlarmAnalogTest.Serialize_WhenCalled_ShouldBeVerified.verified.xml │ │ ├── AlarmAnalogTest.SetMember_ValidType_ShouldBeVerified.verified.xml │ │ ├── AlarmAnalogTest.cs │ │ ├── AlarmDigitalTests.Serialize_WhenCalled_ShouldBeVerified.verified.txt │ │ ├── AlarmDigitalTests.cs │ │ ├── AlarmTests.Serialize_Default_ShouldBeVerified.verified.txt │ │ ├── AlarmTests.cs │ │ ├── ControlTests.Serialize_Default_ShouldBeVerified.verified.txt │ │ ├── ControlTests.cs │ │ ├── CounterTests.Serialize_Default_ShouldBeVerified.verified.txt │ │ ├── CounterTests.cs │ │ ├── MessageTests.Serialize_Default_ShouldBeVerified.verified.txt │ │ ├── MessageTests.cs │ │ ├── StringTests.cs │ │ ├── TimerTests.Serialize_Default_ShouldBeVerified.verified.txt │ │ ├── TimerTests.Serialize_Overload_ShouldBeVerified.verified.txt │ │ └── TimerTests.cs │ ├── StringDataTests.SerializeStructure_Default_ShouldBeVerified.verified.txt │ ├── StringDataTests.SerializeStructure_WithValues_ShouldBeVerified.verified.txt │ ├── StringDataTests.Serialize_Default_ShouldBeVerified.verified.txt │ ├── StringDataTests.Serialize_WithValues_ShouldBeVerified.verified.txt │ └── StringDataTests.cs ├── Elements │ ├── BlockTests.New_Overriden_ShouldBeVerified.verified.txt │ ├── BlockTests.cs │ ├── CommentTests.SetValue_ValidValue_ShouldBeVerified.verified.txt │ ├── CommentTests.cs │ ├── ConnectionTests.New_Overridden_ShouldBeVerified.verified.txt │ ├── ConnectionTests.cs │ ├── DataTypeMemberTests.Serialize_WhenCalled_ShouldBeVerified.verified.txt │ ├── DataTypeMemberTests.cs │ ├── LineTests.cs │ ├── ParameterTests.cs │ ├── PortTests.cs │ ├── RungTests.New_Default_ShouldBeVerified.verified.xml │ ├── RungTests.New_TextOverload_ShouldBeVerified.verified.xml │ ├── RungTests.SetCommentThenText_ShouldBeValid.verified.xml │ ├── RungTests.SetComment_DefaultRung_ShouldBeValid.verified.xml │ ├── RungTests.SetTextToNullThenCommentThenTextAgainShouldBeValid.verified.xml │ ├── RungTests.cs │ ├── SafetyInfoTests.New_Overriden_ShouldBeVerified.verified.xml │ ├── SafetyInfoTests.cs │ ├── SafetyTagMapTests.New_WithTags_ShouldBeVerified.verified.xml │ ├── SafetyTagMapTests.cs │ ├── SheetTests.Add_BlocksOutOfOrder_ShouldBeVerified.verified.txt │ ├── SheetTests.InputConnectors_AddAfterConnector_ShouldBeVerified.verified.txt │ ├── SheetTests.InputConnectors_AddValidConnector_ShouldBeVerified.verified.txt │ ├── SheetTests.InputReferences_AddAfterFirstElement_ShouldBeVerified.verified.txt │ ├── SheetTests.InputReferences_AddValidReference_ShouldBeVerified.verified.txt │ ├── SheetTests.OutputReferences_AddAfterFirstElement_ShouldBeVerified.verified.txt │ ├── SheetTests.OutputReferences_AddValidReference_ShouldBeVerified.verified.txt │ ├── SheetTests.Wire_ValidOperands_ShouldBeVerified.verified.txt │ ├── SheetTests.cs │ └── WireTests.cs ├── Enums │ ├── ConnectionPriorityTests.cs │ ├── ConnectionTypeTests.cs │ ├── DataFormatTests.cs │ ├── DataTypeClassTests.cs │ ├── DataTypeFamilyTests.cs │ ├── ExternalAccessTests.cs │ ├── KeyingStateTests.cs │ ├── KeywordTests.cs │ ├── ModuleTypeTests.cs │ ├── OpcUAAccessTests.cs │ ├── OperatorTests.cs │ ├── ProductionTriggerTests.cs │ ├── ProgramTypeTests.cs │ ├── RadixAsciiTests.cs │ ├── RadixBinaryTests.cs │ ├── RadixDateTimeNsTests.cs │ ├── RadixDateTimeTests.cs │ ├── RadixDecimalTests.cs │ ├── RadixExponentialTests.cs │ ├── RadixFloatTests.cs │ ├── RadixHexTests.cs │ ├── RadixNullTests.cs │ ├── RadixOctalTests.cs │ ├── RadixTests.cs │ ├── RoutineTypeTests.cs │ ├── RungTypeTests.cs │ ├── ScopeLevelTests.cs │ ├── ScopeTypeTests.cs │ ├── TagTypeTests.cs │ ├── TagUsageTests.cs │ ├── TaskTriggerTests.cs │ ├── TaskTypeTests.cs │ ├── TransmissionTypeTests.cs │ └── UseTests.cs ├── Examples.cs ├── GlobalUsing.cs ├── L5Sharp.Tests.Core.csproj ├── L5XBasicTests.Add_ValidComponent_ShouldBeVerified.verified.xml ├── L5XBasicTests.New_ValidComponent_ShouldBeVerified.verified.xml ├── L5XBasicTests.New_ValidValues_ShouldBeVerified.verified.xml ├── L5XBasicTests.Serialize_WhenCalled_ShouldBeValid.verified.xml ├── L5XBasicTests.cs ├── L5XDataTypeTests.Add_ValidComponent_ShouldBeVerified.verified.txt ├── L5XDataTypeTests.RemoveAt_ValidIndex_ShouldBeVerified.verified.txt ├── L5XDataTypeTests.Update_ValidDelegateAndCondition_ShouldBeVerified.verified.txt ├── L5XDataTypeTests.Update_ValidDelegate_ShouldBeVerified.verified.txt ├── L5XDataTypeTests.cs ├── L5XReferenceTests.cs ├── L5XTagTests.SetValue_RackConnectionAliasTag_ShouldUpdateTheParentModuleTagElement.verified.txt ├── L5XTagTests.cs ├── L5XTasksTests.cs ├── LogixContainerTests.cs ├── LogixElementTests.AddAfter_AlternateType_ShouldBeVerified.verified.txt ├── LogixElementTests.AddAfter_ValidElement_ShouldBeVerified.verified.txt ├── LogixElementTests.AddBefore_AlternateType_ShouldBeVerified.verified.txt ├── LogixElementTests.AddBefore_ValidElement_ShouldBeVerified.verified.txt ├── LogixElementTests.Remove_HasParent_ShouldBeVerified.verified.txt ├── LogixElementTests.Replace_AlternateType_ShouldBeVerified.verified.txt ├── LogixElementTests.Replace_ValidElement_ShouldBeVerified.verified.txt ├── LogixElementTests.SetChildValue_HasValueDifferentValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetChildValue_HasValueToNull_ShouldBeVerified.verified.txt ├── LogixElementTests.SetChildValue_NoValueToValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetComplex_HasValueDifferentValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetComplex_HasValueToNull_ShouldBeVerified.verified.txt ├── LogixElementTests.SetComplex_NoValueToValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetContainer_HasValueDifferentValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetContainer_HasValueToNull_ShouldBeVerified.verified.txt ├── LogixElementTests.SetContainer_NoValueCollectionWithElements_ShouldBeVerified.verified.txt ├── LogixElementTests.SetContainer_NoValueToEmptyCollection_ShouldBeVerified.verified.txt ├── LogixElementTests.SetDateTime_HasValueDifferentValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetDateTime_HasValueToNull_ShouldBeVerified.verified.txt ├── LogixElementTests.SetDateTime_NoValueToValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetDescription_HasValueDifferentValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetDescription_HasValueToNull_ShouldBeVerified.verified.txt ├── LogixElementTests.SetDescription_NoValueToValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetProperty_HasValueDifferentValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetProperty_HasValueToNull_ShouldBeVerified.verified.txt ├── LogixElementTests.SetProperty_NoValueToValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetRequiredValue_HasValueDifferentValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetRequiredValue_NoValueToValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetSelectorValue_HasValueDifferentValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetSelectorValue_HasValueToNull_ShouldBeVerified.verified.txt ├── LogixElementTests.SetSelectorValue_NoValueToValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetValue_ToEmptyHasValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetValue_ToNullHasValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetValue_ToValueEmptyValue_ShouldBeVerified.verified.txt ├── LogixElementTests.SetValue_ToValueFromNull_ShouldBeVerified.verified.txt ├── LogixElementTests.SetValue_ToValueHasValue_ShouldBeVerified.verified.txt ├── LogixElementTests.cs ├── LogixEnumTests.cs ├── LogixIndexTests.cs ├── LogixLookupTests.cs ├── LogixParserTests.cs ├── ProofTesting.cs ├── Serialization │ ├── AddOnInstructionSerializerTests.Serialize_BasicType_ShouldBeApproved.verified.xml │ ├── AddOnInstructionSerializerTests.Serialize_OverloadedInstruction_ShouldBeApproved.verified.xml │ ├── AddOnInstructionSerializerTests.cs │ ├── AlarmAnalogDataSerializerTests.Serialize_ValidType_ShouldBeApproved.verified.txt │ ├── AlarmAnalogDataSerializerTests.cs │ ├── AlarmDataSerializerTests.Serialize_AlarmAnalog_ShouldBeApproved.verified.txt │ ├── AlarmDataSerializerTests.Serialize_AlarmDigital_ShouldBeApproved.verified.txt │ ├── AlarmDataSerializerTests.cs │ ├── AlarmDigitalDataSerializerTests.Serialize_ValidType_ShouldBeApproved.verified.txt │ ├── AlarmDigitalDataSerializerTests.cs │ ├── ArrayMemberSerializerTests.Serialize_StructureTypeArray_ShouldBeApproved.verified.txt │ ├── ArrayMemberSerializerTests.Serialize_ValueTypeArray_ShouldBeApproved.verified.txt │ ├── ArrayMemberSerializerTests.cs │ ├── ArraySerializerTests.Serialize_StructureTypeArray_ShouldBeApproved.verified.txt │ ├── ArraySerializerTests.Serialize_ValueTypeArray_ShouldBeApproved.verified.txt │ ├── ArraySerializerTests.cs │ ├── ConnectionSerializerTests.Serialize_ValidComponent_ShouldBeApproved.verified.txt │ ├── ConnectionSerializerTests.cs │ ├── ControllerSerializerTests.Serialize_WhenCalled_ShouldNotBeApproved.verified.txt │ ├── ControllerSerializerTests.cs │ ├── DataTypeMemberSerializerTests.Serialize_AtomicArray_ShouldBeApproved.verified.txt │ ├── DataTypeMemberSerializerTests.Serialize_Basic_ShouldBeApproved.verified.txt │ ├── DataTypeMemberSerializerTests.Serialize_Complex_ShouldBeApproved.verified.txt │ ├── DataTypeMemberSerializerTests.Serialize_OverLoaded_ShouldBeApproved.verified.txt │ ├── DataTypeMemberSerializerTests.cs │ ├── DataTypeSerializerTests.Serialize_AtomicType_ShouldBeApproved.verified.xml │ ├── DataTypeSerializerTests.cs │ ├── DataValueMemberSerializerTests.Serialize_Bool_ShouldBeApproved.verified.txt │ ├── DataValueMemberSerializerTests.Serialize_Dint_ShouldBeApproved.verified.txt │ ├── DataValueMemberSerializerTests.Serialize_Int_ShouldBeApproved.verified.txt │ ├── DataValueMemberSerializerTests.Serialize_Lint_ShouldBeApproved.verified.txt │ ├── DataValueMemberSerializerTests.Serialize_Real_ShouldBeApproved.verified.txt │ ├── DataValueMemberSerializerTests.Serialize_Sint_ShouldBeApproved.verified.txt │ ├── DataValueMemberSerializerTests.cs │ ├── DataValueSerializerTests.Serialize_Bool_ShouldBeApproved.verified.txt │ ├── DataValueSerializerTests.Serialize_Dint_ShouldBeApproved.verified.txt │ ├── DataValueSerializerTests.Serialize_Int_ShouldBeApproved.verified.txt │ ├── DataValueSerializerTests.Serialize_Lint_ShouldBeApproved.verified.txt │ ├── DataValueSerializerTests.Serialize_Real_ShouldBeApproved.verified.txt │ ├── DataValueSerializerTests.Serialize_Sint_ShouldBeApproved.verified.txt │ ├── DataValueSerializerTests.cs │ ├── DecoratedDataSerializerTests.Serialize_CounterArray_ShouldBeApproved.verified.txt │ ├── DecoratedDataSerializerTests.Serialize_Dint_ShouldBeApproved.verified.txt │ ├── DecoratedDataSerializerTests.Serialize_EmptyStructure_ShouldBeApproved.verified.txt │ ├── DecoratedDataSerializerTests.Serialize_RealArray_ShouldBeApproved.verified.txt │ ├── DecoratedDataSerializerTests.Serialize_Timer_ShouldBeApproved.verified.txt │ ├── DecoratedDataSerializerTests.cs │ ├── FormattedDataSerializerTests.Serialize_AlarmType_ShouldBeApproved.verified.txt │ ├── FormattedDataSerializerTests.Serialize_ComplexType_ShouldBeApproved.verified.txt │ ├── FormattedDataSerializerTests.Serialize_StringType_ShouldBeApproved.verified.txt │ ├── FormattedDataSerializerTests.cs │ ├── LogixSerializerTests.cs │ ├── ModuleSerializerTests.Serialize_ValueTypeArray_ShouldBeApproved.verified.txt │ ├── ModuleSerializerTests.cs │ ├── ParameterSerializerTests.Serialize_Basic_ShouldBeApproved.verified.txt │ ├── ParameterSerializerTests.Serialize_OverLoaded_ShouldBeApproved.verified.txt │ ├── ParameterSerializerTests.cs │ ├── PortSerializerTests.Serialize_ValidComponentNoBus_ShouldBeApproved.verified.txt │ ├── PortSerializerTests.Serialize_ValidComponent_ShouldBeApproved.verified.txt │ ├── PortSerializerTests.cs │ ├── ProgramSerializerTests.Serialize_BasicProgram_ShouldBeApproved.verified.txt │ ├── ProgramSerializerTests.cs │ ├── RungSerializerTests.Serialize_Bool_ShouldBeApproved.verified.txt │ ├── RungSerializerTests.cs │ ├── StructureMemberSerializerTests.SerializeArrayMembers_ShouldBeApproved.verified.txt │ ├── StructureMemberSerializerTests.Serialize_DataValueValueMembers_ShouldBeApproved.verified.txt │ ├── StructureMemberSerializerTests.Serialize_StructureMembers_ShouldBeApproved.verified.txt │ ├── StructureMemberSerializerTests.cs │ ├── StructureSerializerTests.SerializeArrayMembers_ShouldBeApproved.verified.txt │ ├── StructureSerializerTests.Serialize_DataValueValueMembers_ShouldBeApproved.verified.txt │ ├── StructureSerializerTests.Serialize_EmptyStructure_ShouldBeApproved.verified.txt │ ├── StructureSerializerTests.Serialize_StructureMembers_ShouldBeApproved.verified.txt │ ├── StructureSerializerTests.cs │ ├── TagSerializerTests.Serialize_AlarmDigital_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleBoolArray_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleBool_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleDintArray_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleDint_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleIntArray_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleInt_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleLintArray_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleLint_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleRealArray_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleReal_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleSintArray_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_SimpleSint_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_String_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.Serialize_Timer_ShouldBeApproved.verified.txt │ ├── TagSerializerTests.cs │ ├── TaskSerializerTests.Serialize_ContinuousTask_ShouldBeApproved.verified.txt │ ├── TaskSerializerTests.Serialize_EventTask_ShouldBeApproved.verified.txt │ ├── TaskSerializerTests.Serialize_PeriodicTask_ShouldBeApproved.verified.txt │ └── TaskSerializerTests.cs ├── Specimens │ ├── BoolGenerator.cs │ ├── DintGenerator.cs │ ├── IntGenerator.cs │ ├── LintGenerator.cs │ ├── RealGenerator.cs │ ├── SintGenerator.cs │ ├── UDintGenerator.cs │ ├── UIntGenerator.cs │ ├── ULintGenerator.cs │ └── USintGenerator.cs └── Utilities │ ├── L5XExtensionTests.cs │ ├── LogixCatalogTests.cs │ └── ParseTests.cs └── L5Sharp.Tests.Logix ├── AcdTests.cs └── L5Sharp.Tests.Logix.csproj /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Timothy Nunnink 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docfx/.gitignore: -------------------------------------------------------------------------------- 1 | ############### 2 | # folder # 3 | ############### 4 | /**/DROP/ 5 | /**/TEMP/ 6 | /**/packages/ 7 | /**/bin/ 8 | /**/obj/ 9 | 10 | -------------------------------------------------------------------------------- /docfx/.idea/.idea.docfx.dir/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Rider ignored files 5 | /modules.xml 6 | /contentModel.xml 7 | /.idea.docfx.iml 8 | /projectSettingsUpdater.xml 9 | # Editor-based HTTP Client requests 10 | /httpRequests/ 11 | # Datasource local storage ignored files 12 | /dataSources/ 13 | /dataSources.local.xml 14 | -------------------------------------------------------------------------------- /docfx/.idea/.idea.docfx.dir/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docfx/.idea/.idea.docfx.dir/.idea/indexLayout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /docfx/.idea/.idea.docfx.dir/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docfx/api/.gitignore: -------------------------------------------------------------------------------- 1 | ############### 2 | # temp file # 3 | ############### 4 | *.yml 5 | .manifest 6 | -------------------------------------------------------------------------------- /docfx/api/index.md: -------------------------------------------------------------------------------- 1 | # PLACEHOLDER 2 | TODO: Add .NET projects to the *src* folder and run `docfx` to generate **REAL** *API Documentation*! 3 | -------------------------------------------------------------------------------- /docfx/articles/intro.md: -------------------------------------------------------------------------------- 1 | # Add your introductions here! 2 | -------------------------------------------------------------------------------- /docfx/articles/toc.yml: -------------------------------------------------------------------------------- 1 | - name: Introduction 2 | href: intro.md 3 | - name: Release Notes 2.0 4 | href: Release Notes v2.0.md 5 | -------------------------------------------------------------------------------- /docfx/docfx.json: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": [ 3 | { 4 | "src": [ 5 | { 6 | "files": ["**/**.csproj"], 7 | "src": "../src" 8 | } 9 | ], 10 | "dest": "api", 11 | "includePrivateMembers": false, 12 | "disableGitFeatures": false, 13 | "disableDefaultFilter": false, 14 | "noRestore": false, 15 | "namespaceLayout": "flattened", 16 | "memberLayout": "samePage", 17 | "allowCompilationErrors": false 18 | } 19 | ], 20 | "build": { 21 | "content": [ 22 | { 23 | "files": [ 24 | "api/**.yml", 25 | "api/index.md" 26 | ] 27 | }, 28 | { 29 | "files": [ 30 | "articles/**.md", 31 | "articles/**/toc.yml", 32 | "toc.yml", 33 | "*.md" 34 | ] 35 | } 36 | ], 37 | "resource": [ 38 | { 39 | "files": [ 40 | "images/**" 41 | ] 42 | } 43 | ], 44 | "output": "../docs", 45 | "globalMetadataFiles": [], 46 | "fileMetadataFiles": [], 47 | "template": [ 48 | "default", 49 | "modern" 50 | ], 51 | "postProcessors": [], 52 | "keepFileLink": false, 53 | "disableGitFeatures": false 54 | } 55 | } -------------------------------------------------------------------------------- /docfx/toc.yml: -------------------------------------------------------------------------------- 1 | - name: Articles 2 | href: articles/ 3 | - name: Api 4 | href: api/ 5 | homepage: api/index.md 6 | -------------------------------------------------------------------------------- /docs/articles/toc.html: -------------------------------------------------------------------------------- 1 |  2 |
3 |
4 |
5 |
6 | 7 | 8 | 9 |
10 |
11 |
12 |
13 | 14 | 22 |
23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /docs/articles/toc.json: -------------------------------------------------------------------------------- 1 | 2 | {"items":[{"name":"Introduction","href":"intro.html","topicHref":"intro.html"},{"name":"Release Notes 2.0","href":"Release%20Notes%20v2.0.html","topicHref":"Release%20Notes%20v2.0.html"}]} 3 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/docs/favicon.ico -------------------------------------------------------------------------------- /docs/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by Docfx 9 | 10 | 12 | 15 | 21 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/public/bootstrap-icons-AJUF3K7A.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/docs/public/bootstrap-icons-AJUF3K7A.woff2 -------------------------------------------------------------------------------- /docs/public/bootstrap-icons-QRR4WHQW.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/docs/public/bootstrap-icons-QRR4WHQW.woff -------------------------------------------------------------------------------- /docs/public/chunk-CCEUEXYU.min.js: -------------------------------------------------------------------------------- 1 | var g=Object.create;var e=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var m=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(b,c)=>(typeof require<"u"?require:b)[c]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+a+'" is not supported')});var n=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports),o=(a,b)=>{for(var c in b)e(a,c,{get:b[c],enumerable:!0})},l=(a,b,c,f)=>{if(b&&typeof b=="object"||typeof b=="function")for(let d of i(b))!k.call(a,d)&&d!==c&&e(a,d,{get:()=>b[d],enumerable:!(f=h(b,d))||f.enumerable});return a};var p=(a,b,c)=>(c=a!=null?g(j(a)):{},l(b||!a||!a.__esModule?e(c,"default",{value:a,enumerable:!0}):c,a));export{m as a,n as b,o as c,p as d}; 2 | //# sourceMappingURL=chunk-CCEUEXYU.min.js.map 3 | -------------------------------------------------------------------------------- /docs/public/chunk-CCEUEXYU.min.js.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "sources": [], 4 | "sourcesContent": [], 5 | "mappings": "", 6 | "names": [] 7 | } 8 | -------------------------------------------------------------------------------- /docs/public/flowDiagram-v2-476db779-UMAI32QJ.min.js: -------------------------------------------------------------------------------- 1 | import{a as i,b as e}from"./chunk-YFWH55TJ.min.js";import"./chunk-EJ5OGHAS.min.js";import{a as m,b as o}from"./chunk-RDO2XUNR.min.js";import"./chunk-4QUVCJ43.min.js";import"./chunk-LT3ASRYW.min.js";import"./chunk-OL7Q2QRB.min.js";import"./chunk-V67V7LTN.min.js";import"./chunk-QSDWJHKZ.min.js";import{b as a,c as s,ma as p,z as l}from"./chunk-5D33ZLWF.min.js";import{d as t}from"./chunk-CCEUEXYU.min.js";var g=t(a(),1),n=t(s(),1),c=t(l(),1);var y={parser:m,db:o,renderer:i,styles:e,init:r=>{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,p({flowchart:{arrowMarkerAbsolute:r.arrowMarkerAbsolute}}),i.setConf(r.flowchart),o.clear(),o.setGen("gen-2")}};export{y as diagram}; 2 | //# sourceMappingURL=flowDiagram-v2-476db779-UMAI32QJ.min.js.map 3 | -------------------------------------------------------------------------------- /docs/public/main.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/docs/public/main.css -------------------------------------------------------------------------------- /docs/public/main.js: -------------------------------------------------------------------------------- 1 | export default {} 2 | -------------------------------------------------------------------------------- /docs/public/mermaid.core-GLNXVV4Q.min.js: -------------------------------------------------------------------------------- 1 | import{Oa as p,b as r,c as t,z as m}from"./chunk-5D33ZLWF.min.js";import{d as o}from"./chunk-CCEUEXYU.min.js";var e=o(r(),1),f=o(t(),1);var l=o(m(),1);export{p as default}; 2 | //# sourceMappingURL=mermaid.core-GLNXVV4Q.min.js.map 3 | -------------------------------------------------------------------------------- /docs/public/mermaid.core-GLNXVV4Q.min.js.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "sources": ["../../node_modules/mermaid/dist/mermaid.core.mjs"], 4 | "sourcesContent": ["import \"ts-dedent\";\nimport { K } from \"./mermaid-b0ad2de1.js\";\nimport \"dayjs\";\nimport \"@braintree/sanitize-url\";\nimport \"d3\";\nimport \"dompurify\";\nimport \"khroma\";\nimport \"lodash-es/memoize.js\";\nimport \"stylis\";\nimport \"lodash-es/isEmpty.js\";\nexport {\n K as default\n};\n"], 5 | "mappings": "8GAEA,IAAAA,EAAO,SACPC,EAAO,SAEP,IAAAC,EAAO", 6 | "names": ["import_dayjs", "import_sanitize_url", "import_dompurify"] 7 | } 8 | -------------------------------------------------------------------------------- /docs/toc.html: -------------------------------------------------------------------------------- 1 |  2 |
3 |
4 |
5 |
6 | 7 | 8 | 9 |
10 |
11 |
12 |
13 | 14 | 22 |
23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /docs/toc.json: -------------------------------------------------------------------------------- 1 | 2 | {"items":[{"name":"Articles","href":"articles/intro.html","tocHref":"articles/toc.html","topicHref":"articles/intro.html"},{"name":"Api","href":"api/index.html","tocHref":"api/toc.html","topicHref":"api/index.html","homepage":"api/index.html"}]} 3 | -------------------------------------------------------------------------------- /refs/Allen Bradley - Logic 5000 General Instructions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/refs/Allen Bradley - Logic 5000 General Instructions.pdf -------------------------------------------------------------------------------- /refs/Logix 5000 Controllers Import Export.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/refs/Logix 5000 Controllers Import Export.pdf -------------------------------------------------------------------------------- /refs/Logix5000_Controllers_ASCII_Strings.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/refs/Logix5000_Controllers_ASCII_Strings.pdf -------------------------------------------------------------------------------- /refs/logix-tag-descriptions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/refs/logix-tag-descriptions.pdf -------------------------------------------------------------------------------- /src/.idea/.idea.L5Sharp/.idea/.name: -------------------------------------------------------------------------------- 1 | L5Sharp -------------------------------------------------------------------------------- /src/.idea/.idea.L5Sharp/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/.idea/.idea.L5Sharp/.idea/indexLayout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ../docfx 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.L5Sharp/.idea/projectSettingsUpdater.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /src/.idea/.idea.L5Sharp/.idea/shelf/Uncommitted_changes_before_Checkout_at_3_27_2024_1_03_PM_[Changes]1/shelved.patch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/src/.idea/.idea.L5Sharp/.idea/shelf/Uncommitted_changes_before_Checkout_at_3_27_2024_1_03_PM_[Changes]1/shelved.patch -------------------------------------------------------------------------------- /src/.idea/.idea.L5Sharp/.idea/shelf/Uncommitted_changes_before_Checkout_at_3_27_2024_1_03_PM__Changes_.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/.idea/.idea.L5Sharp/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Scope/IScopeNameBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// A nested builder interface for specifying the target name of the a instance. 5 | /// 6 | public interface IScopeNameBuilder 7 | { 8 | /// 9 | /// Specifies the name (or number) of the target element in the scope instance. 10 | /// 11 | /// The name or number of the target element. 12 | /// The next step in the build fluent interface. 13 | Scope Named(string name); 14 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagAliasBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents a builder for configuring a tag as an alias in a Logix-based control system. 5 | /// Provides the ability to associate descriptive information with the alias tag during its configuration. 6 | /// 7 | public interface ITagAliasBuilder : ITagBuilder 8 | { 9 | /// 10 | /// Sets the description for the tag being built. 11 | /// 12 | /// The description text to associate with the tag. 13 | /// An updated instance of the to allow for method chaining. 14 | ITagBuilder WithDescription(string description); 15 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagBaseAtomicArrayBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents a builder interface for creating and configuring atomic tag arrays in a Logix-based project. 5 | /// 6 | public interface ITagBaseAtomicArrayBuilder : ITagBaseBuilder> 7 | where TAtomic : AtomicData 8 | { 9 | /// 10 | /// Sets a specified value at a given index within the tag array. 11 | /// 12 | /// The zero-based index of the tag array where the value will be set. 13 | /// The value to assign at the specified index. 14 | /// An instance of for further configuration. 15 | ITagBaseAtomicArrayBuilder WithElement(int index, TAtomic value); 16 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagBaseAtomicBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents a builder for configuring and constructing atomic tags in a Logix environment. 5 | /// 6 | /// 7 | /// The type of atomic data for the tag to be built. Must inherit from and have a parameterless constructor. 8 | /// 9 | public interface ITagBaseAtomicBuilder : ITagBaseBuilder> 10 | where TAtomic : AtomicData, new() 11 | { 12 | /// 13 | /// Sets the value of the atomic tag being constructed. 14 | /// 15 | /// The value to be assigned to the tag. This must be of type . 16 | /// An instance of for further configuration. 17 | ITagBaseAtomicBuilder WithValue(TAtomic value); 18 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagBaseStructureArrayBuilder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace L5Sharp.Core; 4 | 5 | /// 6 | /// Represents a builder for configuring an array of tag elements within a Logix structure, 7 | /// supporting configuration of individual structures at specific indices. 8 | /// 9 | public interface ITagBaseStructureArrayBuilder : ITagBaseBuilder 10 | { 11 | /// 12 | /// Configures a structure at a specified index within the tag array, using the provided builder action. 13 | /// 14 | /// The zero-based index of the tag array where the structure will be configured. 15 | /// An action that provides a builder for defining the structure's members and properties. 16 | /// An instance of for further configuration. 17 | ITagBaseStructureArrayBuilder WithElement(int index, Action action); 18 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagBaseStructureBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents a builder interface for constructing tag base structures in a Logix environment. 5 | /// 6 | public interface ITagBaseStructureBuilder : ITagBaseBuilder 7 | { 8 | /// 9 | /// Adds a member to the tag structure with the specified name. 10 | /// 11 | /// The name of the member to add. 12 | /// A new interface to define the type of the added member. 13 | ITagMemberTypeBuilder AddMember(string name); 14 | 15 | /// 16 | /// Sets a specific value to a tag member with the given name. 17 | /// 18 | /// The name of the tag member to which the value will be assigned. 19 | /// The value to be assigned to the specified tag member. 20 | /// The current instance of the for method chaining. 21 | ITagBaseStructureBuilder WithValue(TagName name, LogixData value); 22 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents a builder interface for creating and configuring instances of . 5 | /// Provides methods to finalize the configuration and construct the resulting tag. 6 | /// 7 | public interface ITagBuilder 8 | { 9 | /// 10 | /// Finalizes the configuration of the builder and creates an instance of the class. 11 | /// 12 | /// An instance of the configured . 13 | Tag Build(); 14 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagMemberAtomicArrayBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Defines a builder interface for configuring tag member arrays, allowing for the assignment 5 | /// of values, structures, and descriptions within the array elements. 6 | /// 7 | public interface ITagMemberAtomicArrayBuilder where TAtomic : AtomicData 8 | { 9 | /// 10 | /// Assigns a value to the array element at the specified index. 11 | /// 12 | /// The zero-based index of the array element to which the value will be assigned. 13 | /// The value to be assigned to the specified array element. 14 | /// An instance of for further configuration. 15 | ITagMemberAtomicArrayBuilder WithElement(int index, TAtomic value); 16 | 17 | /// 18 | /// Assigns a description to the tag member array. 19 | /// 20 | /// The description to be applied to the tag member array. 21 | /// An instance of for further configuration. 22 | ITagMemberAtomicArrayBuilder WithDescription(string description); 23 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagMemberAtomicBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Defines a builder interface for configuring atomic tag members in a structured and fluent manner. 5 | /// 6 | /// The type of the atomic tag data being built. 7 | /// The type of the builder implementing this interface, enabling fluent configuration. 8 | public interface ITagMemberAtomicBuilder where TAtomic : AtomicData 9 | { 10 | /// 11 | /// Assigns a value to the current tag member being built. 12 | /// 13 | /// The value to set for the tag member. 14 | /// The current tag member atomic builder instance. 15 | TBuilder WithValue(TAtomic value); 16 | 17 | /// 18 | /// Sets the description for the current tag member being built. 19 | /// 20 | /// The description to assign to the tag member. 21 | /// The current tag member atomic builder instance. 22 | ITagMemberAtomicBuilder WithDescription(string description); 23 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagMemberStructureArrayBuilder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace L5Sharp.Core; 4 | 5 | /// 6 | /// Defines an interface for building and configuring a structure-based tag array member within a control system. 7 | /// 8 | public interface ITagMemberStructureArrayBuilder 9 | { 10 | /// 11 | /// Configures a structure at a specified index within the tag array, using the provided builder action. 12 | /// 13 | /// The zero-based index of the tag array where the structure will be configured. 14 | /// An action that provides a builder for defining the structure's members and properties. 15 | /// An instance of for further configuration. 16 | ITagMemberStructureArrayBuilder WithElement(int index, Action action); 17 | 18 | /// 19 | /// Assigns a description to the tag structure array, providing additional details or context. 20 | /// 21 | /// The description to be applied to the tag structure array. 22 | /// An instance of for continued configuration. 23 | ITagMemberStructureArrayBuilder WithDescription(string description); 24 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/ITagProducerBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Defines a builder for configuring and constructing a tag . 5 | /// 6 | public interface ITagProducerBuilder 7 | { 8 | /// 9 | /// Configures the builder with the specified maximum number of consumer connected tags. 10 | /// 11 | /// The maximum number of tags to be produced. 12 | /// An instance configured with the specified maximum count. 13 | ITagProducerBuilder WithMaxCount(int maximum); 14 | 15 | /// 16 | /// Configures the builder to enable the programmatic sending of event triggers for produced tags. 17 | /// 18 | /// An instance configured to enable programmatic event triggering. 19 | ITagProducerBuilder SendEventTrigger(); 20 | 21 | /// 22 | /// Configures the builder to allow unicast communication for produced tags. 23 | /// 24 | /// An instance configured to permit unicast communication. 25 | ITagProducerBuilder Unicast(); 26 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagAliasBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | internal class TagAliasBuilder(Tag instance) : ITagAliasBuilder 4 | { 5 | public Tag Build() 6 | { 7 | return instance; 8 | } 9 | 10 | public ITagBuilder WithDescription(string description) 11 | { 12 | instance.Description = description; 13 | return this; 14 | } 15 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagBaseAtomicArrayBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | internal class TagBaseAtomicArrayBuilder(Tag instance) 4 | : TagBaseBuilder>(instance), 5 | ITagBaseAtomicArrayBuilder where TAtomic : AtomicData, new() 6 | { 7 | /*public ITagBaseArrayBuilder WithStructure(int index, Action action) 8 | { 9 | var element = instance[$"[{index}]"]; 10 | var builder = new TagMemberStructureBuilder(element); 11 | action.Invoke(builder); 12 | return this; 13 | }*/ 14 | 15 | public ITagBaseAtomicArrayBuilder WithElement(int index, TAtomic value) 16 | { 17 | Instance[$"[{index}]"].Value = value; 18 | return this; 19 | } 20 | 21 | protected override ITagBaseAtomicArrayBuilder GetBuilder() 22 | { 23 | return this; 24 | } 25 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagBaseAtomicBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | internal class TagBaseAtomicBuilder(Tag instance) : TagBaseBuilder>(instance), 4 | ITagBaseAtomicBuilder where TAtomic : AtomicData, new() 5 | { 6 | public ITagBaseAtomicBuilder WithValue(TAtomic value) 7 | { 8 | Instance.Value = value; 9 | return this; 10 | } 11 | 12 | protected override ITagBaseAtomicBuilder GetBuilder() 13 | { 14 | return this; 15 | } 16 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagBaseStructureArrayBuilder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace L5Sharp.Core; 4 | 5 | internal class TagBaseStructureArrayBuilder(Tag instance) 6 | : TagBaseBuilder(instance), ITagBaseStructureArrayBuilder 7 | { 8 | public ITagBaseStructureArrayBuilder WithElement(int index, Action action) 9 | { 10 | var element = Instance[$"[{index}]"]; 11 | var builder = new TagMemberStructureBuilder(element); 12 | action.Invoke(builder); 13 | return this; 14 | } 15 | 16 | protected override ITagBaseStructureArrayBuilder GetBuilder() 17 | { 18 | return this; 19 | } 20 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagBaseStructureBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | internal class TagBaseStructureBuilder(Tag instance) 4 | : TagBaseBuilder(instance), ITagBaseStructureBuilder 5 | { 6 | public ITagMemberTypeBuilder AddMember(string name) 7 | { 8 | return new TagMemberTypeBuilder(Instance, name, this); 9 | } 10 | 11 | public ITagBaseStructureBuilder WithValue(TagName name, LogixData value) 12 | { 13 | Instance[name].Value = value; 14 | return this; 15 | } 16 | 17 | protected override ITagBaseStructureBuilder GetBuilder() 18 | { 19 | return this; 20 | } 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagMemberAtomicArrayBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | internal class TagMemberAtomicArrayBuilder(Tag member) 4 | : ITagMemberAtomicArrayBuilder where TAtomic : AtomicData 5 | { 6 | public ITagMemberAtomicArrayBuilder WithElement(int index, TAtomic value) 7 | { 8 | member[$"[{index}]"].Value = value; 9 | return this; 10 | } 11 | 12 | public ITagMemberAtomicArrayBuilder WithDescription(string description) 13 | { 14 | member.Description = description; 15 | return this; 16 | } 17 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagMemberAtomicBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | internal class TagMemberAtomicBuilder(Tag member, TBuilder parent) 4 | : ITagMemberAtomicBuilder where TAtomic : AtomicData, new() 5 | { 6 | public TBuilder WithValue(TAtomic value) 7 | { 8 | member.Value = value; 9 | return parent; 10 | } 11 | 12 | public ITagMemberAtomicBuilder WithDescription(string description) 13 | { 14 | member.Description = description; 15 | return this; 16 | } 17 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagMemberStructureArrayBuilder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace L5Sharp.Core; 4 | 5 | internal class TagMemberStructureArrayBuilder(Tag member) : ITagMemberStructureArrayBuilder 6 | { 7 | public ITagMemberStructureArrayBuilder WithElement(int index, Action action) 8 | { 9 | var element = member[$"[{index}]"]; 10 | var builder = new TagMemberStructureBuilder(element); 11 | action.Invoke(builder); 12 | return this; 13 | } 14 | 15 | public ITagMemberStructureArrayBuilder WithDescription(string description) 16 | { 17 | member.Description = description; 18 | return this; 19 | } 20 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagMemberStructureBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | internal class TagMemberStructureBuilder(Tag member) : ITagMemberStructureBuilder 4 | { 5 | public ITagMemberTypeBuilder AddMember(string name) 6 | { 7 | return new TagMemberTypeBuilder(member, name, this); 8 | } 9 | 10 | public ITagMemberStructureBuilder WithValue(TagName name, LogixData value) 11 | { 12 | member[name].Value = value; 13 | return this; 14 | } 15 | 16 | public ITagMemberStructureBuilder WithDescription(string description) 17 | { 18 | member.Description = description; 19 | return this; 20 | } 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Builders/Tag/TagProducerBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | internal class TagProducerBuilder : ITagProducerBuilder 4 | { 5 | private int _maxCount = 1; 6 | private bool _sendEventTrigger; 7 | private bool _unicast; 8 | 9 | public ITagProducerBuilder WithMaxCount(int maximum) 10 | { 11 | _maxCount = maximum; 12 | return this; 13 | } 14 | 15 | public ITagProducerBuilder SendEventTrigger() 16 | { 17 | _sendEventTrigger = true; 18 | return this; 19 | } 20 | 21 | public ITagProducerBuilder Unicast() 22 | { 23 | _unicast = true; 24 | return this; 25 | } 26 | 27 | public ProduceInfo Build() 28 | { 29 | return new ProduceInfo 30 | { 31 | ProduceCount = _maxCount, 32 | ProgrammaticallySendEventTrigger = _sendEventTrigger, 33 | UnicastPermitted = _unicast 34 | }; 35 | } 36 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Data/NullData.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace L5Sharp.Core; 5 | 6 | /// 7 | /// Represents a null implementation, or a type that is neither atomic, structure, array, 8 | /// nor string. 9 | /// 10 | /// This would be the default for any tag that has no data type defined. 11 | public sealed class NullData : LogixData 12 | { 13 | private static readonly NullData Singleton = new(); 14 | 15 | private NullData() : base(L5XName.Data) 16 | { 17 | } 18 | 19 | /// 20 | public override string Name => "NULL"; 21 | 22 | /// 23 | public override IEnumerable Members => Enumerable.Empty(); 24 | 25 | /// 26 | /// Gets the singleton instance of the logix type. 27 | /// 28 | public static readonly NullData Instance = Singleton; 29 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/CaptureSizeType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// An enumeration of all for a Logix . 5 | /// 6 | public class CaptureSizeType : LogixEnum 7 | { 8 | private CaptureSizeType(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a Samples . 14 | /// 15 | public static readonly CaptureSizeType Samples = new(nameof(Samples), nameof(Samples)); 16 | 17 | /// 18 | /// Represents a TimePeriod . 19 | /// 20 | public static readonly CaptureSizeType TimePeriod = new(nameof(TimePeriod), nameof(TimePeriod)); 21 | 22 | /// 23 | /// Represents a NoLimit . 24 | /// 25 | public static readonly CaptureSizeType NoLimit = new(nameof(NoLimit), nameof(NoLimit)); 26 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/ComponentClass.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// An enumeration of all for a various components. 5 | /// 6 | public class ComponentClass : LogixEnum 7 | { 8 | private ComponentClass(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a Standard value. 14 | /// 15 | public static readonly ComponentClass Standard = new(nameof(Standard), nameof(Standard)); 16 | 17 | /// 18 | /// Represents a Safety value. 19 | /// 20 | public static readonly ComponentClass Safety = new(nameof(Safety), nameof(Safety)); 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/ConnectionPriority.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// An enumeration of all for a Logix . 5 | /// 6 | public sealed class ConnectionPriority : LogixEnum 7 | { 8 | private ConnectionPriority(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a Scheduled . 14 | /// 15 | public static readonly ConnectionPriority Scheduled = new(nameof(Scheduled), nameof(Scheduled)); 16 | 17 | /// 18 | /// Represents a Low . 19 | /// 20 | public static readonly ConnectionPriority Low = new(nameof(Low), nameof(Low)); 21 | 22 | /// 23 | /// Represents a High . 24 | /// 25 | public static readonly ConnectionPriority High = new(nameof(High), nameof(High)); 26 | 27 | /// 28 | /// Represents a Urgent . 29 | /// 30 | public static readonly ConnectionPriority Urgent = new(nameof(Urgent), nameof(Urgent)); 31 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/DataTypeFamily.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// An enumeration of all Logix options for a given . 5 | /// Valid options are None and String. 6 | /// 7 | public sealed class DataTypeFamily : LogixEnum 8 | { 9 | private DataTypeFamily(string name, string value) : base(name, value) 10 | { 11 | } 12 | 13 | /// 14 | /// Represents no specific data type family. 15 | /// All objects except should have this option. 16 | /// 17 | public static readonly DataTypeFamily None = new(nameof(None), "NoFamily"); 18 | 19 | 20 | /// 21 | /// Represents a string family. Only objects should have this option. 22 | /// 23 | public static readonly DataTypeFamily String = new(nameof(String), "StringFamily"); 24 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/ElectronicKeying.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// An enumeration of all values for a given Logix 5 | /// 6 | public class ElectronicKeying : LogixEnum 7 | { 8 | private ElectronicKeying(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents the ExactMatch value. 14 | /// 15 | public static readonly ElectronicKeying ExactMatch = new(nameof(ExactMatch), nameof(ExactMatch)); 16 | 17 | /// 18 | /// Represents the CompatibleModule value. 19 | /// 20 | public static readonly ElectronicKeying CompatibleModule = new(nameof(CompatibleModule), nameof(CompatibleModule)); 21 | 22 | /// 23 | /// Represents the Disabled value. 24 | /// 25 | public static readonly ElectronicKeying Disabled = new(nameof(Disabled), nameof(Disabled)); 26 | 27 | /// 28 | /// Represents the Custom value. 29 | /// 30 | public static readonly ElectronicKeying Custom = new(nameof(Custom), nameof(Custom)); 31 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/ExternalAccess.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// An enumeration of all Logix options. 5 | /// 6 | /// is a Logix setting that determines the ability to read from or write to a given component. 7 | /// 8 | /// 9 | public sealed class ExternalAccess : LogixEnum 10 | { 11 | private ExternalAccess(string name, string value) : base(name, value) 12 | { 13 | } 14 | 15 | /// 16 | /// Represents no read or write . 17 | /// 18 | public static readonly ExternalAccess None = new(nameof(None), nameof(None)); 19 | 20 | /// 21 | /// Represents read but not write . 22 | /// 23 | public static readonly ExternalAccess ReadOnly = new(nameof(ReadOnly), "Read Only"); 24 | 25 | /// 26 | /// Represents read and write . 27 | /// 28 | public static readonly ExternalAccess ReadWrite = new(nameof(ReadWrite), "Read/Write"); 29 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/OnlineEditType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public class OnlineEditType : LogixEnum 7 | { 8 | private OnlineEditType(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a 'Original' value. 14 | /// 15 | public static readonly OnlineEditType Original = new(nameof(Original), nameof(Original)); 16 | 17 | /// 18 | /// Represents a 'PendingEdits' value. 19 | /// 20 | public static readonly OnlineEditType PendingEdits = new(nameof(PendingEdits), nameof(PendingEdits)); 21 | 22 | /// 23 | /// Represents a 'TestEdits' value. 24 | /// 25 | public static readonly OnlineEditType TestEdits = new(nameof(TestEdits), nameof(TestEdits)); 26 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/OpcUAAccess.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// An enumeration of all Logix options. 5 | /// 6 | /// is a Logix setting that determines the ability to read from or write to a given component from OPC UA. 7 | /// 8 | /// 9 | public sealed class OpcUAAccess : LogixEnum 10 | { 11 | private OpcUAAccess(string name, string value) : base(name, value) 12 | { 13 | } 14 | 15 | /// 16 | /// Represents no read or write . 17 | /// 18 | public static readonly OpcUAAccess None = new(nameof(None), nameof(None)); 19 | 20 | /// 21 | /// Represents read but not write . 22 | /// 23 | public static readonly OpcUAAccess ReadOnly = new(nameof(ReadOnly), "Read Only"); 24 | 25 | /// 26 | /// Represents read and write . 27 | /// 28 | public static readonly OpcUAAccess ReadWrite = new(nameof(ReadWrite), "Read/Write"); 29 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/PassThroughOption.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// An enumeration of all for a Logix . 5 | /// 6 | public class PassThroughOption : LogixEnum 7 | { 8 | private PassThroughOption(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a Disabled . 14 | /// 15 | public static readonly PassThroughOption Disabled = new(nameof(Disabled), nameof(Disabled)); 16 | 17 | /// 18 | /// Represents a Enabled . 19 | /// 20 | public static readonly PassThroughOption Enabled = new(nameof(Enabled), nameof(Enabled)); 21 | 22 | /// 23 | /// Represents a EnabledWithAppend . 24 | /// 25 | public static readonly PassThroughOption EnabledWithAppend = 26 | new(nameof(EnabledWithAppend), nameof(EnabledWithAppend)); 27 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/PenType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public class PenType : LogixEnum 7 | { 8 | private PenType(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a 'Analog' value. 14 | /// 15 | public static readonly PenType Analog = new(nameof(Analog), nameof(Analog)); 16 | 17 | /// 18 | /// Represents a 'Digital' value. 19 | /// 20 | public static readonly PenType Digital = new(nameof(Digital), nameof(Digital)); 21 | 22 | /// 23 | /// Represents a 'Full-Width' value. 24 | /// 25 | public static readonly PenType FullWidth = new(nameof(FullWidth), "Full-Width"); 26 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/ProductionTrigger.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// An enumeration of all Logix options for a given . 5 | /// 6 | public class ProductionTrigger : LogixEnum 7 | { 8 | private ProductionTrigger(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a Cyclic value. 14 | /// 15 | public static readonly ProductionTrigger Cyclic = new(nameof(Cyclic), nameof(Cyclic)); 16 | 17 | /// 18 | /// Represents a COS value. 19 | /// 20 | public static readonly ProductionTrigger Cos = new(nameof(Cos), nameof(Cos)); 21 | 22 | /// 23 | /// Represents a Application value. 24 | /// 25 | public static readonly ProductionTrigger Application = new(nameof(Application), nameof(Application)); 26 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/ProgramType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Provides an enumeration of all Logix options or a given component. 5 | /// 6 | public class ProgramType : LogixEnum 7 | { 8 | private ProgramType(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a Normal value. 14 | /// 15 | public static readonly ProgramType Normal = new(nameof(Normal), nameof(Normal)); 16 | 17 | /// 18 | /// Represents a EquipmentPhase value. 19 | /// 20 | public static readonly ProgramType EquipmentPhase = new(nameof(EquipmentPhase), nameof(EquipmentPhase)); 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/SFCExecutionControl.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public sealed class SFCExecutionControl : LogixEnum 7 | { 8 | private SFCExecutionControl(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a 'CurrentActive' value. 14 | /// 15 | public static readonly SFCExecutionControl CurrentActive = new(nameof(CurrentActive), nameof(CurrentActive)); 16 | 17 | /// 18 | /// Represents a 'UntilFalse' value. 19 | /// 20 | public static readonly SFCExecutionControl UntilFalse = new(nameof(UntilFalse), nameof(UntilFalse)); 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/SFCLastScan.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public sealed class SFCLastScan : LogixEnum 7 | { 8 | private SFCLastScan(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a 'AutomaticReset' value. 14 | /// 15 | public static readonly SFCLastScan AutomaticReset = new(nameof(AutomaticReset), nameof(AutomaticReset)); 16 | 17 | /// 18 | /// Represents a 'ProgrammaticReset' value. 19 | /// 20 | public static readonly SFCLastScan ProgrammaticReset = new(nameof(ProgrammaticReset), nameof(ProgrammaticReset)); 21 | 22 | /// 23 | /// Represents a 'DontScan' value. 24 | /// 25 | public static readonly SFCLastScan DontScan = new(nameof(DontScan), nameof(DontScan)); 26 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/SFCRestartPosition.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public sealed class SFCRestartPosition : LogixEnum 7 | { 8 | private SFCRestartPosition(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a 'MostRecent' value. 14 | /// 15 | public static readonly SFCRestartPosition MostRecent = new(nameof(MostRecent), nameof(MostRecent)); 16 | 17 | /// 18 | /// Represents a 'InitialStep' value. 19 | /// 20 | public static readonly SFCRestartPosition InitialStep = new(nameof(InitialStep), nameof(InitialStep)); 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/SamplesType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public class SamplesType : LogixEnum 7 | { 8 | private SamplesType(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a Samples value. 14 | /// 15 | public static readonly SamplesType Samples = new(nameof(Samples), "Samples"); 16 | 17 | /// 18 | /// Represents a TimePeriod value. 19 | /// 20 | public static readonly SamplesType TimePeriod = new(nameof(TimePeriod), "Time Period"); 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/SheetOrientation.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public class SheetOrientation : LogixEnum 7 | { 8 | private SheetOrientation(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a 'Landscape' value. 14 | /// 15 | public static readonly SheetOrientation Landscape = new(nameof(Landscape), nameof(Landscape)); 16 | 17 | /// 18 | /// Represents a 'Portrait' value. 19 | /// 20 | public static readonly SheetOrientation Portrait = new(nameof(Portrait), nameof(Portrait)); 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/TagType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of Logix options for a given . 5 | /// 6 | public class TagType : LogixEnum 7 | { 8 | private TagType(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a Base value. 14 | /// 15 | public static readonly TagType Base = new(nameof(Base), nameof(Base)); 16 | 17 | /// 18 | /// Represents a Alias value. 19 | /// 20 | public static readonly TagType Alias = new(nameof(Alias), nameof(Alias)); 21 | 22 | /// 23 | /// Represents a Produced value. 24 | /// 25 | public static readonly TagType Produced = new(nameof(Produced), nameof(Produced)); 26 | 27 | /// 28 | /// Represents a Consumed value. 29 | /// 30 | public static readonly TagType Consumed = new(nameof(Consumed), nameof(Consumed)); 31 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/TaskType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Provides an enumeration of all Logix Task types. 5 | /// Value must be , , or . 6 | /// 7 | public sealed class TaskType : LogixEnum 8 | { 9 | private TaskType(string name, string value) : base(name, value) 10 | { 11 | } 12 | 13 | /// 14 | /// Represents a Continuous , or a task that is configured to run continuously. 15 | /// 16 | public static readonly TaskType Continuous = new(nameof(Continuous), nameof(Continuous).ToUpper()); 17 | 18 | /// 19 | /// Represents a Periodic , or a task that is configured to run at a specified rate. 20 | /// 21 | public static readonly TaskType Periodic = new(nameof(Periodic), nameof(Periodic).ToUpper()); 22 | 23 | /// 24 | /// Represents an Event , or a task that is configured to run when a specified event occurs. 25 | /// 26 | public static readonly TaskType Event = new(nameof(Event), nameof(Event).ToUpper()); 27 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/TransmissionType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public sealed class TransmissionType : LogixEnum 7 | { 8 | private TransmissionType(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a Null value. 14 | /// 15 | public static readonly TransmissionType Null = new(nameof(Null), nameof(Null)); 16 | 17 | /// 18 | /// Represents a Multicast value. 19 | /// 20 | public static readonly TransmissionType Multicast = new(nameof(Multicast), nameof(Multicast)); 21 | 22 | /// 23 | /// Represents a Unicast value. 24 | /// 25 | public static readonly TransmissionType Unicast = new(nameof(Unicast), nameof(Unicast)); 26 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/TriggerTargetType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public class TriggerTargetType : LogixEnum 7 | { 8 | private TriggerTargetType(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a TargetValue value. 14 | /// 15 | public static readonly TriggerTargetType TargetValue = new(nameof(TargetValue), nameof(TargetValue)); 16 | 17 | /// 18 | /// Represents a TargetTag value. 19 | /// 20 | public static readonly TriggerTargetType TargetTag = new(nameof(TargetTag), nameof(TargetTag)); 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Enums/TriggerType.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an enumeration of all options for a given . 5 | /// 6 | public class TriggerType : LogixEnum 7 | { 8 | private TriggerType(string name, string value) : base(name, value) 9 | { 10 | } 11 | 12 | /// 13 | /// Represents a NoTrigger value. 14 | /// 15 | public static readonly TriggerType NoTrigger = new(nameof(NoTrigger), nameof(NoTrigger)); 16 | 17 | /// 18 | /// Represents a EventTrigger value. 19 | /// 20 | public static readonly TriggerType EventTrigger = new(nameof(EventTrigger), nameof(EventTrigger)); 21 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/ILogixParsable.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// Represents an interface that defines methods to parse string values into an object of type T. 5 | /// 6 | /// The type of object to parse the string value into. 7 | public interface ILogixParsable where T : ILogixParsable 8 | { 9 | //This is only available in newer versions of .NET, and we are supporting .NET standard 2.0. Classes still have to 10 | //implement this interface where applied to satisfy the newer version, but will technically be an empty marker 11 | //interface for older versions. 12 | #if NET7_0_OR_GREATER 13 | /// 14 | /// Parses the provided string into an instance of this type. 15 | /// 16 | /// The string to parse. 17 | /// A new instance of this type representing the parsed value. 18 | static abstract T Parse(string value); 19 | 20 | /// 21 | /// Tries to parse the provided string into an instance of this type. 22 | /// 23 | /// The string to parse. 24 | /// A new instance of this type representing the parsed value if successful; Otherwise, null. 25 | static abstract T? TryParse(string? value); 26 | #endif 27 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/ILogixSerializable.cs: -------------------------------------------------------------------------------- 1 | using System.Xml.Linq; 2 | 3 | namespace L5Sharp.Core; 4 | 5 | /// 6 | /// An interface defining the method for serialization of an object to a . 7 | /// 8 | public interface ILogixSerializable 9 | { 10 | /// 11 | /// Returns a representing the serialized L5X data for a given object. 12 | /// 13 | /// A containing the XML data. 14 | XElement Serialize(); 15 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Utilities/Catalog/PortInfo.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Core; 2 | 3 | /// 4 | /// A entity class representing the data returned from a module catalog entry. 5 | /// 6 | public class PortInfo 7 | { 8 | /// 9 | /// The unique identifying number of the port. 10 | /// 11 | /// 12 | /// All Modules have at least one port which defines how it connects to other peripherals or devices. 13 | /// Each port is identified by the number. Default value is 1. 14 | /// 15 | public int Number { get; set; } = 1; 16 | 17 | /// 18 | /// Gets the value that represents the port type. 19 | /// 20 | /// 21 | /// This value appears to be specific to the product. Ports with IP will have 'Network' for their type. 22 | /// 23 | public string Type { get; set; } = string.Empty; 24 | 25 | /// 26 | /// Gets a value indicating whether the port allows upstream connection, or if it is a downstream only port. 27 | /// 28 | public bool DownstreamOnly { get; set; } 29 | } -------------------------------------------------------------------------------- /src/L5Sharp.Core/Utilities/L5XTypeAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace L5Sharp.Core; 4 | 5 | /// 6 | /// A custom attribute that defines the L5X type name for a logic type class in order to match XML 7 | /// elements to a given class. This attribute is mostly needed for class types whose names do not match the L5X element type 8 | /// found in the L5X, or for classes that support multiple L5X element types. 9 | /// 10 | [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)] 11 | public class L5XTypeAttribute : Attribute 12 | { 13 | /// 14 | /// Creates a new instance with type name. 15 | /// 16 | /// The L5X type name for the class. 17 | /// typeName is null. 18 | public L5XTypeAttribute(string typeName) 19 | { 20 | TypeName = typeName ?? throw new ArgumentNullException(nameof(typeName)); 21 | } 22 | 23 | /// 24 | /// The L5X type name. This name corresponds to the name of the L5X/XML element, and is 25 | /// used to retrieve elements from an L5X file for the type. 26 | /// 27 | /// A representing the name of the element for the type. (e.g. DataType, Tag, etc.) 28 | public string TypeName { get; } 29 | } -------------------------------------------------------------------------------- /tests/L5Sharp.Benchmarks/L5Sharp.Benchmarks.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | enable 6 | enable 7 | net7.0;net8.0 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /tests/L5Sharp.Benchmarks/NeutralTextBenchmarks.cs: -------------------------------------------------------------------------------- 1 | using BenchmarkDotNet.Attributes; 2 | using L5Sharp.Core; 3 | 4 | namespace L5Sharp.Benchmarks; 5 | 6 | [MemoryDiagnoser] 7 | public class NeutralTextBenchmarks 8 | { 9 | private const string Sample = 10 | "GRT(SimpleInt,400)XIO(MultiDimensionalArray[1,3].3)CMP(ATN(_Test) > 1.0)[TON(TimerArray[0],?,?),OTU(TestComplexTag.SimpleMember.BoolMember)];"; 11 | 12 | [Params(1000, 10000)] 13 | public int N; 14 | 15 | private NeutralText _text; 16 | 17 | [GlobalSetup] 18 | public void Setup() 19 | { 20 | _text = new NeutralText(Sample); 21 | } 22 | 23 | [Benchmark] 24 | public List Regex() 25 | { 26 | var instructions = new List(); 27 | 28 | for (var i = 0; i < N; i++) 29 | { 30 | instructions.AddRange(_text.Instructions()); 31 | } 32 | 33 | return instructions; 34 | } 35 | } -------------------------------------------------------------------------------- /tests/L5Sharp.Benchmarks/Program.cs: -------------------------------------------------------------------------------- 1 | using BenchmarkDotNet.Running; 2 | using L5Sharp.Benchmarks; 3 | 4 | var summary = BenchmarkRunner.Run(); -------------------------------------------------------------------------------- /tests/L5Sharp.Console/L5Sharp.Console.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Exe 5 | net8.0 6 | 12 7 | enable 8 | enable 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /tests/L5Sharp.Console/Program.cs: -------------------------------------------------------------------------------- 1 | using L5Sharp.Console; 2 | 3 | while (Console.ReadLine() != "exit") 4 | { 5 | var test = new TestClass(); 6 | await test.RunExample(); 7 | } -------------------------------------------------------------------------------- /tests/L5Sharp.Console/TestClass.cs: -------------------------------------------------------------------------------- 1 | using L5Sharp.Core; 2 | using L5Sharp.Samples; 3 | using Task = System.Threading.Tasks.Task; 4 | 5 | namespace L5Sharp.Console; 6 | 7 | public class TestClass 8 | { 9 | public async Task RunExample() 10 | { 11 | var content = await L5X.LoadAsync(Known.Example); 12 | 13 | var tags = content.Query().Where(t => t.TagName.Contains("Test")); 14 | 15 | foreach (var tag in tags) 16 | { 17 | if (tag.Description is not null) 18 | { 19 | System.Console.WriteLine($"{tag.TagName}: {tag.Description}"); 20 | } 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/DataTypes/AlarmType.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/DataTypes/BoolTest.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/DataTypes/InvalidType.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/DataTypes/ModuleType.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/Modules/Flex_Mod_8.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/Modules/TestCard.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | Rockwell Automation/Allen-Bradley1756-EN2T4325481 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/Modules/TestEtap.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 1311771783-ETAP 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/Modules/TestImport.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/Programs/Empty.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/Rungs/Message_Rung.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/Test.ACD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnunnink/L5Sharp/528aafabc02edfcc5ae445f2dc6f3707a99492a5/tests/L5Sharp.Samples/Test.ACD -------------------------------------------------------------------------------- /tests/L5Sharp.Samples/Trends/Test.L5X: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Common/CrossReferenceTests.cs: -------------------------------------------------------------------------------- 1 | namespace L5Sharp.Tests.Core.Common; 2 | 3 | [TestFixture] 4 | public class CrossReferenceTests 5 | { 6 | [Test] 7 | public void New_ValidElement_ShouldNotBeNull() 8 | { 9 | /*var reference = new CrossReference()*/ 10 | } 11 | } -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/AddOnInstructionTests.New_Default_ShouldBeValid.verified.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Enable Input - System Defined Parameter 5 | 6 | 7 | 8 | 9 | 10 | Enable Output - System Defined Parameter 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/DataTypeTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/DataTypeTests.Serialize_Parameterized_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/DataTypeTests.ToTag_SimpleType_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ModuleTests.Configure_ExistingValidCatalogNumber_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Rockwell Automation/Allen-Bradley 16 | 1756-EN2T 17 | 4325481 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ModuleTests.Create_CatalogNumberAndConfig_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ModuleTests.Create_ExistingValidCatalogNumber_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Rockwell Automation/Allen-Bradley 16 | 1756-EN2T 17 | 4325481 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ModuleTests.Create_ValidNameAndCatalogNumber_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ModuleTests.Local_ValidCatalogNumber_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ModuleTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ModuleTests.Serialize_Initialized_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ProgramTests.AddRoutine_ValidRoutine_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ProgramTests.AddTag_ValidTag_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/ProgramTests.Serialize_Initialized_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.Add_ComplexType_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.Build_AtomicArrayWithSetValue_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.Build_SimpleAliasTag_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.Build_SimpleStructureWithConfiguredMembers_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.Build_StructureWithPredefinedMember_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.Class_SetValidValue_ShouldBeVerified.verified.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.Comments_ValidCollection_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.ConsumeInfo_SetNewValue_ShouldBeVerified.verified.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.Duplicate_ValidConfig_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.ProduceInfo_SetNewValue_ShouldBeVerified.verified.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.Remove_ValidTag_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.SetDescription_OnMemberTag_ShouldCreateAndUpdateCommentsElement.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.SetDescription_OnRoot_ShouldUpdateRootDescriptionElement.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.SetValue_AnalogAlarm_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TagTests.SetValue_StaticMemberOfStructureType_ShouldBeVerifiedXml.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TaskTests.AddProgram_ValidProgram_ShouldBeVerified.verified.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TaskTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Components/TaskTests.Serialize_Initialized_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/ArrayDataTests.Serialize_ArrayOfNull_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/ArrayDataTests.Serialize_EmptyArray_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/ArrayDataTests.Serialize_SimpleOneDimensional_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/ArrayDataTests.Serialize_SimpleThreeDimensional_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/ArrayDataTests.Serialize_SimpleTwoDimensional_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/ArrayDataTests.Serialize_StringTypeArray_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/BoolTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/BoolTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/BoolTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/DintTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/DintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/DintTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/IntTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/IntTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/IntTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/LintTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/LintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/LintTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/LrealTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/LrealTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/LrealTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/RealTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/RealTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/RealTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/SintTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/SintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/SintTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/UDintTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/UDintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/UDintTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/UIntTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/UIntTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/UIntTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/ULintTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/ULintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/ULintTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/USintTests.Serialize_Default_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/USintTests.Serialize_ValueAndRadix_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Atomics/USintTests.Serialize_Value_ShouldBeValid.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/ComplexDataTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/ComplexDataTests.Serialize_Test_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Custom/MySimpleData.cs: -------------------------------------------------------------------------------- 1 | using System.Xml.Linq; 2 | 3 | namespace L5Sharp.Tests.Core.Data.Custom; 4 | 5 | public class MySimpleData : ComplexData 6 | { 7 | public MySimpleData() : base(nameof(MySimpleData)) 8 | { 9 | M1 = new BOOL(); 10 | M2 = new SINT(); 11 | M3 = new INT(); 12 | M4 = new DINT(); 13 | M5 = new LINT(); 14 | M6 = new REAL(); 15 | } 16 | 17 | public MySimpleData(XElement element) : base(element) 18 | { 19 | } 20 | 21 | public BOOL M1 22 | { 23 | get => GetMember(); 24 | set => SetMember(value); 25 | } 26 | 27 | public SINT M2 28 | { 29 | get => GetMember(); 30 | set => SetMember(value); 31 | } 32 | 33 | public INT M3 34 | { 35 | get => GetMember(); 36 | set => SetMember(value); 37 | } 38 | 39 | public DINT M4 40 | { 41 | get => GetMember(); 42 | set => SetMember(value); 43 | } 44 | 45 | public LINT M5 46 | { 47 | get => GetMember(); 48 | set => SetMember(value); 49 | } 50 | 51 | public REAL M6 52 | { 53 | get => GetMember(); 54 | set => SetMember(value); 55 | } 56 | } -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Custom/MySimpleTypeTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Custom/MySimpleTypeTests.Serialize_UpdatedMember_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/MemberTests.Serialize_ArrayOfAtomicDataType_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/MemberTests.Serialize_ArrayOfStringDataType_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/MemberTests.Serialize_AtomicDataType_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/MemberTests.Serialize_StringDataType_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/MemberTests.Serialize_StructureDataType_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/NullDataTests.SerializeShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/NullDataTests.cs: -------------------------------------------------------------------------------- 1 | using FluentAssertions; 2 | 3 | namespace L5Sharp.Tests.Core.Data; 4 | 5 | [TestFixture] 6 | public class NullDataTests 7 | { 8 | [Test] 9 | public void HasExpectedValues() 10 | { 11 | var type = NullData.Instance; 12 | 13 | type.Name.Should().Be("NULL"); 14 | type.Members.Should().BeEmpty(); 15 | } 16 | 17 | [Test] 18 | public Task SerializeShouldBeVerified() 19 | { 20 | var type = NullData.Instance; 21 | 22 | var xml = type.Serialize().ToString(); 23 | 24 | return Verify(xml); 25 | } 26 | } -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Predefined/AlarmAnalogTest.Serialize_WhenCalled_ShouldBeVerified.verified.xml: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Predefined/AlarmAnalogTest.SetMember_ValidType_ShouldBeVerified.verified.xml: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Predefined/AlarmDigitalTests.Serialize_WhenCalled_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Predefined/ControlTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Predefined/CounterTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Predefined/MessageTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Predefined/TimerTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/Predefined/TimerTests.Serialize_Overload_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/StringDataTests.SerializeStructure_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/StringDataTests.SerializeStructure_WithValues_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/StringDataTests.Serialize_Default_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Data/StringDataTests.Serialize_WithValues_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Elements/BlockTests.New_Overriden_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Elements/CommentTests.SetValue_ValidValue_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /tests/L5Sharp.Tests.Core/Elements/DataTypeMemberTests.Serialize_WhenCalled_ShouldBeVerified.verified.txt: -------------------------------------------------------------------------------- 1 |