# Automation Professionals' Integration Toolkit Module

**URL:** <https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934>\
**Category:** 3rd Party Modules\
**Tags:** perspective, ignition81, ignition83, vision, scripting\
**Created:** [June 13, 2023, 12:42am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934 "2023-06-13T00:42:35Z")\
**Posts on this page:** 1\
**Showing post:** 212

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [March 25, 2025, 6:26pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/212 "2025-03-25T18:26:13Z")

</div>

Meanwhile....

Automation Professionals is pleased to announce a **BETA** release of this module, with a significant new feature: Tag Actors.

For Ignition v8.1+: ~~v2.1.0.250841756~~

The details of the new functionality are in the freshly updated documentation, under [Tag Actors](https://www.automation-pros.com/toolkit/doc/actors.html).

The **Republish** action provides a built-in alternative to the Modbus Publishing algorithm I recommend over here:

> [@Modbus Slave/Server to Generate Read Only Tags](https://forum.inductiveautomation.com/t/modbus-slave-server-to-generate-read-only-tags/87583/21):
>
> I've create a generic "Modbus Publish" script that eliminates the need for a second set of tags. I've publicly posted it here: [https://www.automation-pros.com/ignition/modbusPublish.py](https://www.automation-pros.com/ignition/modbusPublish.py) It requires the "Queue Utility" script posted here: [https://www.automation-pros.com/ignition/queueUtil.py](https://www.automation-pros.com/ignition/queueUtil.py) and described over here: Both scripts rely on my Integration Toolkit's globalVarMap() script function, but you can rework that (not quite 1:1) to use system.util.getGlobals() if you must. (Not recomme…

The **Republish** action can also be used with expression tags to revive the old OPC writeback functionality, without needing any scripting.

The **Bulk Script** action can replace most uses of the `queueUtil.py` script I introduced in this topic:

> [@Java concurrent queue for tag change scripts](https://forum.inductiveautomation.com/t/java-concurrent-queue-for-tag-change-scripts/82044/38):
>
> Okay. Draft for your edification: [queueUtil.py](https://www.automation-pros.com/ignition/queueUtil.py) Includes Google docstrings. Utterly untested. grimacing Maybe later. Edit: docstring typos fixed and ambiguities addressed. Heh: if you delete all comments, docstrings, and blank lines, it is 29 lines of code.

The key advantage of the **Bulk Script** action is that it relieves you of the task managing a long-lived queue object.

The **Divert Write** actions will likely be the most popular, though, due to a couple key use cases:

- When subscribing to complete complex objects from an OPC server due to performance or licensing limitations, where the OPC server **does** support direct access to the leaf nodes of that complex object, any Derived tags that are used to "fan out" the leaf nodes can have their write path hijacked to write directly to the leaf node. No race conditions or any unnecessary complex writes will occur.

- When receiving tags at high speed from a path that is fundamentally read-only, like Class1 EtherNet/IP buffered data, the writes to such tags can be diverted through another path that **can** write to the source node. This makes it possible to copy sealed AOI raw data into an I/O buffer or into a DINT array produced tag, decode the raw data into a byte-by-byte equivalent type in Ignition for efficient subscriptions, then divert any desired writes directly to the AOI instance members.

_ **Lightly tested.** _

---

_[View the full topic](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934)._
