could he not set up a rung where when he presses the "reset" button it does a "move" command and moves a pre-determined value into the accumulator of the counter instead of actully "resetting" the counter -so instead of resetting it - you are just overwriting the accumular with whatever number you want - (could be a value that he entered in from a numeric entry device or a numeric dail perhaps?)
No, you must use the Linear mode, and the "Reset Value" word in that module. There is no direct access to the accumulator (it's a hardware counter... were it not, it could not count properly through scan time).
Which, is exactly why, I no longer use the "Features" on hardware counter modules, unless I specifically need to use one as a cam switch, directly controlling it's own outputs.
(At home now, so going off of memory, logic may be a bit off)
For the SLC counter, (well, ANY counter, in almost ANY PLC that supports full signed integer math):
Assume that CTR_RAW is the actual, raw value you read in from a counter module. CTR_Mine is the actual counter accumulation value you want to use, CTR_Old is a holding value, CTR_Delta is a delta value. Going to add in CTR_ResetVal as the reset value, and CTR_MyLast as the Last count value at reset. Here (all INT, DINT, whatever you like). Bools (bits) will be CTR_Reset.
This first rung, calculates the delta count every scan of the PLC: (whether cyclic, periodic, interrupt, whatever)
SOR BST SUB CTR_RAW CTR_Old CTR_Delta NXB MOV CTR_Raw CTR_Old BND
This rung maintains my "Internal Pseudo Counter Value", by adding the delta every scan:
SOR ADD CTR_Delta CTR_Mine CTR_Mine BND
This rung would be the "Reset Rung":
SOR XIC CTR_Reset ONS CTR_Reset_OS BST MOV CTR_Mine CTR_MyLast NXB MOV CTR_ResetVal CTR_Mine
This rung is (here I forget the bit I think) for SLC-500's, to deal with overflow fault at end of scan:
SOR OTU S2:5/0
I do get a little more complicated on my counters, in general, but that basic technique allows you 100% full control over counters, WITHOUT worrying about trying to deal with wierd counter module issues or programming. Another nice thing about it, is just taking that one delta count, I can maintain dozens of running counters from a single encoder. Think perhaps "Current_Footage", "Batch_Footage", "Shift_Footage" for example.
Additionally, I use other scan-delta comparisons after scaling the raw count to Engineering units count to trigger one-shots for times I need to, oh, say, shift a FIFO with data based on actual footage. In Logix CPU's, I can shift every foot almost all the time, or every inch, or every whatever. In slower processors, I might trigger that one-shot shift every 10 or 100 <units>.
Why? I used to have to deal (as a SI) with "Whatever the Customer Wanted PLC", and dealing with 30 different kinds of counter modules really sucked, so I worked it out to a way that I could just take the raw count, and run my own counters inside, without worrying about resets, or anything really.
The only caveat, is that it requires a module that runs in SIGNED INTEGER(any length, 8 bit, 12 bit, 24 bit, 189 bit) mode. For UNSIGNED integer counters, or ones that won't roll over, you still have to deal with that, but those seem to be less the norm then the signed int format.
It works, simply because signed integer math (while it may generate an overflow) will 'Wrap around' properly. That is to say (16 bit counter), if the last scan had a count of (2's compliment) 32767, and the counter rolls over exactly 1, the current scan will have a count (2's compliment) of -32768. In signed integer math (16 bit) -32768 - 32767 = 1.