Pycomm3 Versions Save

A Python Ethernet/IP library for communicating with Allen-Bradley PLCs.

v.1.2.3

2 years ago

LogixDriver

  • :bug: fixed issue with bit-level access to integers inside nested structs #170

v1.2.2

2 years ago

CIPDriver

  • :sparkles: added support for string CIP paths in generic_message for route_path
  • :bug: fixed bug where errors during discovery prevent any results from being returned (#167)
  • :bug: fixed issue where get_module_info would always use first hop in path instead of the last

LogixDriver

  • :bug: fixed issue with multi-request message size tracking being off by 2 bytes (#168)
  • :bug: fixed issue with AOI structure handling with > 8 BOOL members being mapped to types larger than a USINT (SISAutomationIMA)

v1.2.1

2 years ago
  • :sparkles: added ability to configure custom logger via the configure_default_logger function

v1.2.0

2 years ago
  • :bug: fixed issue with logging configuration (#148)
  • :art: formatted project with black
  • :memo: misc. documentation updates

LogixDriver

  • :bug: fixed issue with writing a tag multiple times failing after the first write (#158 )
  • :sparkles: added tags_json property (#141)

SLCDriver

  • :bug: fixed issue with parsing IO addresses (#137)
  • :zap: improved address parsing speed by pre-compiling regex

v1.1.1

3 years ago

LogixDriver

  • :bug: fixed read/write errors by preventing program-scoped tags from using instance ids in the request

v1.1.0

3 years ago

LogixDriver

  • :bug: fixed bugs in handling of built-in types (TIMER, CONTROL, etc)
  • :bug: fixed bugs in structure tag handling when padding exists between attributes
  • :sparkles: changed the meaning of the element count for BOOL arrays
    • Previously, the {#} referred to the underlying DWORD elements of the BOOL array. A BOOL[64] array is actually a DWORD[2] array, so array{1} translated to BOOL elements 0-31 or the first DWORD element. Now, the {#} refers to the number of BOOL elements. So array{1} is only a single BOOL element and array{32} would be the 0-31 BOOL elements.
    • Refer to the documentation for limitations on writing.

v1.0.1

3 years ago
  • :bug: Fixed incorrect/no error in response Tag for some failed requests in a multi-request
  • :recycle: Minor refactor to status and extended status parsing

v1.0.0

3 years ago

Changes

  • :sparkles: New type system to replace the Pack and Unpack helper classes
    • New types represent any CIP type or object and allow encoding and decoding of values
    • Allows users to create their own custom types
    • :boom: [Breaking] generic_message replaced the data_format argument with data_type, see documentation for details.
  • :sparkles: Added a new discover() method for finding Ethernet/IP devices on the local network
  • :sparkles: Added a configure_default_logger method for simple logging setup
    • Packet contents are now logged using a custom VERBOSE level
  • :art: Internal package structure changed.
  • :recycle: Lots of refactoring, decoupling, etc
  • :white_check_mark: Increased test coverage
  • :memo: New and improved documentation
    • :construction: Still a work-in-progress

LogixDriver Changes

  • :triangular_flag_on_post: Upload of program-scoped tags is now enabled by default
    • Use init_program_tags=False in initializer to upload controller-scoped only tags
  • :boom: Removed the init_info and micro800 init args and the use_instance_ids property
    • These have all been automatic for awhile now, but were left for backwards compatibility
    • If you need to customize this behavior, override the _initialize_driver method

v1.0.0b1

3 years ago

This is a beta release for the new V1 release. This release is intended only for test purposes and as a draft for the stable 1.0.0 release.

Major Changes:

  • new type system, removed the Pack and Unpack helper classes
    • old: Pack.uint(100) -> new: UINT.encode(100)
    • types as classes that can encode and decode any elementary or structured data type
    • when parsing the tag list a type is created for every tag to encode or decode their value
    • can create custom types for any struct, array, etc
    • replaces the data_format arg for generic messaging
    • TODO: full documentation on how to use types. Examples have been updated for now.
  • Internal package structure changed, may break imports if not importing from top level package
  • Lots of refactoring, decoupling, etc improvements internally, helping improve testability
  • added a configure_default_logger method for simple logging setup
  • packet contents are now logged with a custom VERBOSE log level
    • removed the RequestPacket.VERBOSE_DEBUG option used previously
    • improved the packet formatting too to look similar to wireshark
  • [BREAKING] generic_message now uses the new type system. The data_format arg was replaced with data_type.
  • added new discover() method to discover Ethernet/IP devices on the local network

LogixDriver

  • upload of program scoped tags is now on by default, use init_program_tags=False in initializer to disable.
  • removed the init_info and micro800 init args, also removed the use_instance_ids property
    • feature selection is all automatic now, if it needs to be customized, subclass and overwrite the _initialize_driver method

v0.12.0

3 years ago
  • added support for backslashes in the PLC paths
  • improved parsing of PLC paths
  • improved testing

LogixDriver

  • added support for writing structures using dicts
  • added get_tag_info method for looking up data type and other information about a tags
  • added new data_type_name for all tag definitions
    • makes filtering lists simpler due to differences between struct and atomic tags
  • fixed bit writes >.31 for LINTs
  • fixed some issues with writing boolean arrays longer than 32 elements
  • fixed issues when duplicate tags are in the same read/write call
    • especially with duplicate bit level writes having unexpected results
  • improved packet size estimation

SLCDriver

  • fixed bit level writing in SLCDriver