Files
wwtools/aot/dev-guide/appendix-b-sample-projects.md
Joseph Doherty 32f26272ae Initial commit: Wonderware / System Platform tools and reference
Five tools under one repo, all docs organized per DOCS-GUIDE.md:

- aalogcli: .NET 4.8 / x86 CliFx CLI for reading System Platform binary
  logs (*.aaLGX) for LLM debugging, built on aaOpenSource/aaLog. Commands:
  last, tail, range, unread, fields. Stable JSON envelope under --llm-json.
  Build template under lib/build/ for rebuilding aaLogReader.dll.

- aot: ArchestrA Object Toolkit 2014 v4.0 reference material. Dev guide
  (Markdown converted from CHM), API reference for the ArchestrA.Toolkit
  namespace, and the Monitor / Watchdog VS sample solutions.

- graccesscli: .NET 4.8 / x86 CliFx CLI that automates Galaxy
  configuration via the ArchestrA GRAccess COM interop. Includes session
  daemon, IPC protocol, and llm-json envelope contract.

- grdb: SQL/DDL exploration of the Galaxy Repository database. DDL
  captures, reusable queries, hierarchy / contained-name <-> tag-name
  translation notes.

- histdb: LLM-oriented reference for AVEVA Historian retrieval. INSQL
  linked-server, extension tables, every wwXxx time-domain extension,
  every retrieval mode, alarm/event SQL recipes, REST API. Distilled
  from the 243-page Historian Retrieval Guide.

Root contains:
- CLAUDE.md: thin index pointing into each tool's README.
- DOCS-GUIDE.md: doctrine for organizing docs for LLM consumption.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 18:22:20 -04:00

132 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Sample Projects
The ArchestrA Object Toolkit comes with two sample ApplicationObjects:
- Monitor object
- WatchDog object
By default, the projects for these objects are installed in the C:\Program Files\Wonderware\Toolkits\ArchestrA Object\Samples folder. You can examine these objects to learn more about the C# code generated by the ArchestrA Object Toolkit. This appendix gives a short overview of what these objects do and what their structure looks like.
> **Note**
> On a 64-bit operating system, projects for these objects are installed in C:\Program Files (x86)\Wonderware\Toolkits\ArchestrA Object\Samples.
## The Monitor Object
The Monitor object is a very simple ApplicationObject that reads an external input value and calculates its average. It also allows the user to output a new value that is below a configurable limit. It has no custom config time code and no alarm or history settings.
### Object Structure
The Monitor object uses the following primitives:
- InputOutput primitive to read and write the external value; external name: PVInputOutput
The Monitor object has the following custom attributes:
| Name | Type | Category | Description | Additional Settings |
| --- | --- | --- | --- | --- |
| PV | Float | Writeable_US | Process value | Calculated Quality, Frequently Accessed, Run Time Set Handler |
| PVHiLimit | Float | Writeable_USC | Limit value for PV output | |
| PVInputAvg | Double | CalculatedRetentive | Average value | Calculated Quality |
| ResetInputAvg | Boolean | Writeable_US | Resets the average value | Run Time Set Handler |
### Custom Object Editor
The custom editor of the Monitor object has only one custom tab with controls to configure the following attributes:
- PVHiLimit
- PVInputOutput.Reference
- PVInputOutput.SeparateFeedbackConfigured
- PVInputOutput.ReferenceSecondary
### Run Time Code
The Monitor object has the following custom run time code:
- **SetScanState event:**
- When going OnScan, set the quality of calculated attributes to Initializing.
- When going OffScan, set the quality of calculated attributes to Bad.
- **Execute event:**
- Get the new input value and write it to the PV attribute.
- Set the PV attributes quality to the quality of the new input value.
- Calculate the new average value and write it to the PVInputAvg attribute.
- **GetStatusDesc event:** Return messages for custom error codes.
- **Set handler for PV attribute:** Check that new value is less than PVHiLimit.
- **Set handler for ResetInputAvg:** Reset the average calculation.
## The WatchDog Object
The WatchDog object demonstrates basic input/output, alarming, and historization. It also shows how to use virtual primitives. The object:
- Monitors whether an input bit has changed.
- Calculates the time since the bit last changed.
- Raises an alarm if this time exceeds a timeout limit.
- Historizes this time.
- Provides optional statistics via a virtual primitive: average and maximum time since last change, time of last timeout, total number of timeouts.
### Object Structure
The WatchDog object uses the following primitives:
- Input primitive to read the external bit that should be monitored; external name: MonitoredBit
- Alarm primitive
- History primitive
- Custom virtual local primitive to calculate statistics; external name: Stats
The WatchDog object has the following custom attributes:
| Name | Type | Category | Description | Additional Settings |
| --- | --- | --- | --- | --- |
| TimeSinceChange | ElapsedTime | Calculated | Time since the MonitoredBit value last changed state | Historizable |
| Timeout.Limit | ElapsedTime | Writeable_USC_Lockable | Limit value for timeout alarm | Frequently Accessed, Run Time and Config Time Set Handlers |
| Timeout | Boolean | Calculated | Set when timeout has occurred | Alarmable |
| Stats.Enable | Boolean | PackageOnly_Lockable | Enable/disable Stats virtual primitive | Config Time Set Handler |
The Stats virtual primitive has the following custom attributes:
| Name | Type | Category | Description | Additional Settings |
| --- | --- | --- | --- | --- |
| Stats.DelayAverage | ElapsedTime | Calculated | Average time since last change | |
| Stats.DelayMax | ElapsedTime | Calculated | Maximum time since last change | |
| Stats.TimeoutCnt | Integer | Calculated | Timeout count | Historizable |
| Stats.LastTimeout | Time | Calculated | Time of last timeout | |
| Stats.Reset | Boolean | Writeable_U | Reset statistics | Run Time Set Handler |
### Custom Object Editor
The custom editor of the WatchDog object has two custom tabs with controls to configure the following:
- **General tab:**
- Input bit (MonitoredBit.InputSource)
- Enable statistics (Stats.Enable)
- Enable history and alarms for attributes
- **Advanced tab:**
- History and alarm settings for attributes
### Config Time Code
The WatchDog object has the following custom config time code:
- **Set handler for Stats.Enable attribute:** Enable/disable the Stats virtual primitive.
- **Set handler for Timeout.Alarmed attribute:** Enable/disable the timeout alarm primitive.
- **Set handler for Timeout.Limit attribute:** Check that the new value is positive.
- **Set handler for TimeSinceChanged.Historized** **attribute:** Enable/disable the history primitive for the TimeSinceChanged attribute.
### Object Run Time Code
The WatchDog object has the following custom run time code:
- **Startup event:** Initialize the time of last change.
- **Execute event:**
- Get the new input value.
- Calculate the time since the last change and write it to the TimeSinceChanged attribute.
- If the time exceeds the timeout limit, raise an alarm by setting the Timeout.Condition attribute to true.
- **GetStatusDesc event:** Return messages for custom error codes.
- **Set handler for Timeout.Limit attribute:** Check that the new value is positive.
### Stats Primitive Run Time Code
The Stats virtual primitive has the following custom run time code:
- **Execute event:** Calculate statistics (average/maximum time since last change, timeout count, last timeout time) and write them to the appropriate attributes.
- **Set handler for Reset attribute:** Reset all statistics attributes.