Release HistoryΒΆ



  • ✨ added support for string CIP paths in generic_message for route_path

  • πŸ› fixed bug where errors during discovery prevent any results from being returned

  • πŸ› fixed issue where get_module_info would always use first hop in path instead of the last


  • πŸ› fixed issue with multi-request message size tracking being off by 2 bytes

  • πŸ› fixed issue with AOI structure handling with > 8 BOOL members being mapped to types larger than a USINT (SISAutomationIMA)


  • ✨ added ability to configure custom logger via the configure_default_logger function


  • πŸ› fixed issue with logging configuration

  • 🎨 formatted project with black

  • πŸ“ misc. documentation updates


  • πŸ› fixed issue with writing a tag multiple times failing after the first write

  • ✨ added tags_json property


  • πŸ› fixed issue with parsing IO addresses

  • ⚑ improved address parsing speed by pre-compiling regex



  • πŸ› fixed read/write errors by preventing program-scoped tags from using instance ids in the request



  • πŸ› fixed bugs in handling of built-in types (TIMER, CONTROL, etc)

  • πŸ› fixed bugs in structure tag handling when padding exists between attributes

  • ✨ 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.


  • πŸ› Fixed incorrect/no error in response Tag for some failed requests in a multi-request

  • ♻️ Minor refactor to status and extended status parsing


  • ✨ 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

    • πŸ’₯ [Breaking] generic_message replaced the data_format argument with data_type, see documentation for details.

  • ✨ Added a new discover() method for finding Ethernet/IP devices on the local network

  • ✨ Added a configure_default_logger method for simple logging setup
    • Packet contents are now logged using a custom VERBOSE level

  • 🎨 Internal package structure changed.

  • ♻️ Lots of refactoring, decoupling, etc

  • βœ… Increased test coverage

  • πŸ“ New and improved documentation
    • 🚧 Still a work-in-progress

Logix DriverΒΆ

  • 🚩 Upload of program-scoped tags is now enabled by default
    • Use init_program_tags=False in initializer for to upload controller-scoped only tags

  • πŸ’₯ 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