I’m glad you mentioned the “dummy outputs” because that was one of the aspects of configuring a PID w/a TPO output that puzzled me when I had a look the other day.
The PID logic (including where the output is sent) can all be self-contained within the PID, no “dummy outputs” or extra logic required. In fact, you don’t even need a strategy or a controller, since the PID loop logic is all handled on the brain.
For example, I might want my "main" strategy to run on a PC with SoftPAC, but have some distributed I/O logic elsewhere -- such as a brain (maybe a SNAP-PAC-EB2) running a PID. But I might NOT want to have an extra chart in SoftPAC to move the output of that remote PID to the remote TPO digital output point.
If the whole PID is self-contained on that remote unit, then I don't need to worry about what happens if communication with that remote brain is lost/broken -- the PID loop control will still happily run by itself.
However, PAC Control does not currently support configuring the output of a PID loop as a TPO on a digital module:
You CAN select it in PAC Manager, though, as shown here. (I’ve put in a request to engineering to add this missing piece in PAC Control.)
In the meantime, you can either use PAC Manager to configure the PID (don’t forget to save your settings to flash!) or you can add a little set-up logic in your Powerup chart to connect the dots between your PID and TPO. Essentially what you’re doing is filling in this Mem Map address for the PID’s Output:
The OptoScript would look something like this: (you’d need to change the 0, 5, and 2 -- for the PID loop number (0), module position number & channel number (5 & 2) -- to match your setup:
// Calculate the address in the PID configuration that's the MemMap address for output (as seen in PAC Manager & form 1465)
// PID 00, change 0 to 1-95 for other PID loops
nPIDOutputAddress = (0 * 0x80) + 0xF210004C;
// This example has the TPO in module position 5, channel 2.
//In this code example, point numbers on the modules start
[SIZE=2]//at 0, so the 3rd point on the module would be point 2
// T[/SIZE]he mem map addresses are based
// on 32-point modules, hence the 32 in this formula).
nTPOPercentAddress = ((5 * 32) + 2) * 0x30 + 0xF08C4000;
// Write the address for the TPO's percent into PID 0's output location
nBrainWriteStatus = WriteNumToIoUnitMemMap( self, nPIDOutputAddress, nTPOPercentAddress );
Now your PID + TPO logic is all contained on the brain!
Hope that helps.