*** R3 Revision History *** Version 105 initial release of boot loader Version 107 initial release of OS Version 108, 3/3/03: -added port input and Rx and Tx progress outputs to ComSetup -confirmed operation of GetStrFromPort, Poll, and Parsing modules Version 109, 3/4/03: -corrected NumStr outpot of ReadRTC module Version 110, 3/10/2003: -added SendAlertData module Version 112, 3/14/2003: -added Modbus protocol -corrected error in application of multiplication factors in RX arrays Version 113, 3/15/2003: -forced modem key line off on bootup and with ComSetup installation -used tristate mode on key line driver to minimize leakage through optoisolator LED Version 114, 3/26/2003: -added code to require entry for ComSetup buffer size, and all constants in module inputs -added AGA3 flow calculation module -added SyncToRTC module -added Ladder Logic compiler Version 115, 4/03/2003: -added Sin, Cos, and Tan trig functions -corrected display function failing to show sign if value between 0.0 and -1.0 -corrected turn off order error in LeadLag4 sequencer -corrected error in TLM transfer of floating point values -corrected watch window not showing integer database values...also truncated trailing dp and zeroes on integers and statuses Version 116, 4/29/2003: -fixed SyncToRTC module not handling hour triggers properly -widened I/O representation boxes to show longer names -added FIFOQueue module -corrected error in SequenPoll module delay timing -corrected error in RX and TX array setup involving R3 as master to multiple remote R3's -added timer range limiting to OnDelay and OffDelay modules -fixed error that lead to blank display at end of display list when cycling through displays using the ENTER key Version 117, not released Version 118, 5/02/2003: -added Anemometer module...module to read windspeed or other low level AC signal on AI6 -added 5 second trigger output to SysSetup module -added ShaftEncoder module...module to read shaft encoders using pairs of DI's -made OS clear LCD when display selected from onboard keyboard -deleted factory cal storage modules from user I/O module list -added R3Burnin.rgd program to distributed program list Version 119, 5/06/2003: -changed crystal oscillator initialization resulting in 3 to 10 times processing speed -added scans per second output to SysSetup module Version 120, 5/10/2003: -corrected error in display of large floating point numbers (>65535.0) Version 121, 5/14/2003: -deleted FIFOQueue module -added EventFIFOQueue module -changed R5/R9 button icons to R3 references -changed LeadLag4 sequencer to skip locked out pumps as lead pump choice -fixed error in address assignments of receive array statuses -fixed error in handling multiple receive arrays -corrected incomplete transmit shutoff when ComSetup installation interrupts transmission Version 122, 6/04/2003: -corrected error in mode[] pointer that could lead to zero CRC on transmissions -corrected error in SendStringToPort turning on port improperly Version 123, 6/09/2003: -increased status and trigger space from 320 to 480 statuses -revised modem channel UART initialization per TI instructions -changed PulseDurationOutput module to avoid latching ON relay in case of pulse <.004 sec. Version 124, 6/25/2003: -added code to support new modem design for board rev 1 -eliminated ^R's from pgm loading sequence -added 'port open' tests to avoid multiple commands to open port in R3Setup Version 125, 7/17/2003: -corrected DumpLogToPort error in using wrong port to determine if buffer empty before sending string to port. -corrected LogMany storage error leading to sample storage on wrong pages Version 126, 7/21/2003: -improved detection of non-RUG3 programs to assure they are not loadable by accident -fixed backlight misoperation caused by board version change Version 127, 8/02/2003: -added changes for new board revision (rev 1) -corrected errors in ASCII mode for port 2 Version 128, 9/08/2003: -added @F, formfeed insertion, to display panel -synchronized modem tone transitions to timer 2 -improved security of transition to low speed crystal when power fails -added code to SysSetup module to turn off loop supply if battery voltage below 11.0 volts; allow turn on if battery voltage above 12.0 volts Version 129, 9/09/2003: -corrected error in KB handler that cleared serial port mode settings on keystroke Version 130, 9/20/2003: -corrected error in SysSetup module not turning off loop supply by command if batt voltage between 11.0 and 12.0 V -changed loop controls to occur on 1 sec. ticks Version 131, 9/25/2003: -changed loop supply cutoff/enable voltages to 10.0 and 11.0 respectively -added 10 sec. low pass filter to onboard temperature measurement -added StringSwitchPriority module to enable display of active alarms from list of strings Version 132, 10/10/2003: -corrected error in control of reference output (alternate use of DI8) Version 133, not released Version 134, 10/11/2003: -corrected error in TLM handling 1st status in status array and intermittent handling of all statuses Version 135, 10/16/2003: -to DumpLogToPort module, added header fields, WISKI format, and ability to specify starting sample and #samples per line of dump from stored data Version 136, not released Version 137, 10/23/2003: -added RS485 controls to port 2 for optional RS485 Version 138, 10/27/2003: -added modbus protocol to programming port (port 1) -added RUG6 protocol to modem port (port 2) Version 139, 11/11/2003: -added disable to background AI filtering when foreground AI disabled Version 140, 11/17/2003: -corrected error in initialization of LogMany module's starting index value -added test to compiler to find duplicate/missing display numbers on each port Version 141, 11/18/2003: -corrected error in DumpLogToPort starting index value Version 142, 11/25/2003: -changed TotalizeTime module to sample every second and output both hrs. and seconds Version 143, 11/26/2003: -corrected missing SysSetup.Scans from integer database -corrected missing input prompt and changed total seconds to floating point in TotalizeTime module Version 144, 12/02/2003: -forced GlobalRTC radio button checked to be false on presentation -fixed shaft encoder code erroneous writing into other DI counter registers Version 145, 12/19/2003: -corrected error in rcv port definition by compiler when both ports are using telemetry arrays Version 146, 1/03/2004: -increased range of registers (16 bit to 32 bit) involved in LogMany and DumpLogToPort modules to handle larger log files -implemented interrupt on anemometer channel to handle faster pulse rates, tested to 1270 Hz Version 147, 1/05/2004: -corrected error in RUG6-compatible telemetry header Version 148, 1/06/2004: -altered TriggerOnRcv module to output destination address of message as documented Version 149, 1/09/2004: -fixed error in handling RUG6 replies Version 150, 1/19/2004: -altered TrigOnRcv to output addresses of all messages having valid CRC, not just ones involving station's address Version 151, 2/15/2004: -added more extensive initialization of system background timers and comparison registers to eliminate possibility of stalling on bootup after short power outage. Version 152, 2/19/2004: -added analog output module -re-installed interrupt enable in initialization that is independent of board revision Version 153, 3/01/2004: -added PID module Version 154, 4/26/2004: -added 10 sec. filter to battery voltage measurement -increased temperature measurement filter to 20 sec. -fixed SequencerTimed and TrigOnRcv modules to use more secure 1/sec. flag -release lacks DumpLogToPort module...not released to web site Version 155, 5/13/2004: -added test to prevent GetStrFromPort module from pulling characters from port while that port is transmitting. -added left fill function to NumericToString module -added StringMid module to give Left, Mid, and Right string functions -release lacks DumpLogToPort module...not released to web site Version 156, 5/22/2004: -first version of overloaded OS -modified LogMany to enable continuous wrap-around logging over oldest records -modified DumpLogToPort to enable oldest/newest starting point and specifying number of records to dump -added ReadFromLogMany module to enable reading samples from log for running total, change of level, change of rate...type functions Version 157, 6/28/2004: -modified GetStrFromPort module to handle strings up to the length of the input buffer, using the input buffer for storage. -modified string parsing modules to handle longer strings, using source string for storage. Version 158, 7/15/2004: -added user-defined delay to preferences in R3Setup to slow com fail time to accommodate high latency links such as satellite. -improved end of message TX/RX switching on modem port to avoid switching during byte transmission Version 159, 7/17/2004: -altered parsing modules to regard multiple blank characters as single delimiter in instance that blank is specified as delimiter Version 160, 8/13/2004: -altered SendStrtoPort to eliminate RAM use when only sending to port Version 161, 9/29/2004: -altered bus voltage calculation in SysSetup module to extend range Version 162, 11/03/2004: -decreased power fail detection from 0.1 sec. to 0.005 sec; increased power up delay to 0.5 sec. -added code to force AI6 current sense resistor open when AI6 used for anemometer -altered parsers to reject incoming string that is nonexistant or short but still matches the initial portion of search string Version 163, 1/30/2005: -increased reserved status/trigger table from 60 to 80 bytes Version 164, 2/05/2005: -added test to assure that CRC-secured transmissions will not attempt to transmit data past end of TX array definitions -changed R3Setup to always load the last job loaded when R3Setup was previously shut down Version 165, 3/03/2005: not released -added code to support external watchdog timer Version 166, 3/10/2005: -altered startup code to start at low speed to avoid draining lithium battery when reset occurs while on battery power Version 167, 4/04/2005: -fixed TrigOnRcv module not issuing trigger on reception of Modbus messages -added key control on port 2 RS232 messages including tx delay -added modem receive gain control Version 168, 4/05/2005: -fixed modbus message decoding not recording destination address for TrigOnRcv function Version 169, 4/07/2005: -fixed improperly initialized mask in decoding modbus message type 15, preset multiple coils Version 170, 6/09/2005: -altered P3.3 to sense USB connection for Rev 5 board Version 171, 12/02/2005: -added PulseGenFast pulse generator module with 0.1 sec resolution -added received string length, input buffer character count, and new char trigger outputs to GetStringFromPort module -added implied delimiter feature to ParseString modules where setting delimiter to zero forces parsing every X characters -added button to re-send the watch table to the RUG5/9 so table entries do not have to be re-entered -added ComWatch module to give serial port visibility Version 172, 2/02/2006: -changed OS to shut down CPU when on lithium battery, and interrupt using 32768 Hz xtal only every 0.5 sec. -added GetUserValue module Version 173, 5/01/2006: -added P3 initialization for Rev 7 board -added IndexValueSave module Version 174, 5/02/2006: -corrected error in header search function in parsing modules Version 175, 5/05/2006: -corrected DumpLogToPort module not printing year in date/time string when sending to port 2 Version 176, 6/27/2006: -corrected error in handling RUG6 format messages leading to unit resetting erroneously Version 177, 7/20/2006: -altered eeprom logging interface to avoid missed interrupts Version 178, not released Version 179, 9/6/2006: -fixed error in compiler that assigned same address to last RX array cell and last installed module -added ValueTestTrig module -added code to interface with external RTC chip (for rev 9 boards) -added option to prepend leading zeroes or leading blanks to messages created with the SendStringToPort module -corrected inability to use programming port for general R9 protocol messages Version 180, 9/7/2006: -corrected error in formatting floating point numbers for display Version 181, 9/7/2006: -corrected error in prepending function Version 182, 1/10/2007: -added code to assure port 2 startup in the instance of RS232 with no delay -corrected quiescent controller error where it would trigger same message twice if change occured while timer running after ack -disabled 32Khz clock for rev 9 boards and later...power down now completely shuts off processor -altered AverageValue module to handle reset even if not enabled -altered reference control to reflect addition of reference regulator with on/off control -added shaft encoder type 4 that uses interrupts to handle narrow pulses -corrected SendStrToPort to handle longer input strings than 20 characters Version 183, 1/16/2007: -added board revision field to status response from OS (but not from boot loader) -added board revision display to terminal panel -added code to use expanded (2 MByte) EEPROM for logging -changed LogMany and DumpLogToPort to accept larger floating point numbers of samples for expanded logger -corrected CRLF reversal in SendStringToPort module Version 184, 1/17/2007: -corrected SendStringToPort module to suppress leading nulls in ASCII strings Version 185, 2/16/2007: -added SeqTimedTrigger module Version 186, 2/23/2007: -corrected done trigger in SeqTimedTrigger module to be asserted after max state done timing out -altered string input function compilation so that integer constants in inputs expecting strings will be regarded as strings instead of numeric constants -added ClearRAM module to enable program to set all application RAM to zero -added BackspinTimer module to implement backspin delay timer -corrected handling of user notes in module panels so that deleted modules do not result in corruption of user note assignments Version 187, 2/27/2007: -added general database search for inputs expecting strings but not finding them in string database Version 188, 3/02/2007: -fixed misoperating lamp test input in DigitalAlarmOutput module Version 189, 4/6/2007: -fixed ComWatch module not clearing first byte of buffer -fixed GetStringFromPort erroneously counting buffer characters during transmission -added ability of SendStrToPort module to convert fields to ASCII equivalent Version 190, 5/10/2007: -altered modem reception bit decoding algorithm to improve performance in noisy environment Version 191, 5/14/2007: -altered serial ports to continue to accept chars even if buffer full...overwriting oldest chars in buffer -Added SnapShotCount module to provide snapshot value of high speed DI count since last trigger without altering counter -improved accuracy of 5 second time tick Version 192, 5/26/2007: -added flag to SysSetup module to suppress action of '-' key menu function on realtime displays -modified R3Setupd to avoid replicating module outputs on inputs when a new input is added to module definition Version 193, 6/24/2007: -added OS revision as output to SysSetup module -corrected errors in installation of SysSetup module after hitting the 'New' menu item -increased sampling of power fail pin to eliminate possibility of trying to run full speed from lithium battery Version 194, 7/19/2007: -added test for blank lockout entries in LeadLagSeq4 module -corrected one second timing error in PulseToFlow module Version 195, 7/23/2007: -corrected error in TX array pointer accessing Version 196, 7/25/2007: -corrected SetRTC module not writing to RTC chip after trigger Version 197, 8/08/2007: -corrected CounterUpDnRollover to correctly handle negative count values Version 198, 8/09/2007: -corrected RX/TX array addressing error introduced in 1.94...caused unit to receive data destined for another address Version 199, 8/24/2007: -modified modem TX timing to improve modem function. Modified RX filter. Version 200, 11/05/2007: -increased sample count range of TotalizeFlow module to 65536 samples/minute. -added TriggerOnSpecialKeys module -added EventLogger and EventLogSetup modules -corrected control error in RS485 communications option Version 201, 02/20/2008: -added '...8I/O' prompt to LCD -added various DNP3 flags to logged events in EventLogger module -increased serial/USB port selection under com port setup menu item to COM1 to COM25 -added extended address range to R3 communications -altered display code to show '---' where programmer has omitted pointer to dynamic data -added Modbus TCP slave modes -disabled GetStrFromPort except when in ASCII-user mode (mode 7) -forced buffer reset at beginning of SendStrToPort before sending characters to buffer Version 202, 04/17/2008: not released -defaulted MAXCS signal hi to conserve power immediately after boot up -changed loop supply shutoff on low battery to 7.0V if board rev>=11 (for low voltage operation) -added RTC watchdog to watch for stalled RTC or RTC seconds out of range Version 203, 06/10/2008: not released -added logger binary dump messaging, DumpLogTLM module -added PackValues module to pack multiple analog values into 16 bit integer -corrected ReadFromLogMany not accounting for larger EEPROM in later revisions -added a trigger output to the Setpoint module to indicate when a new value has been entered -corrected operation of AlarmHiLo module in event that programmer has not specified delay -altered LogMany time resolution from 1.0 seconds to 4 milliseconds and switched to Unix time tags Version 204, 07/14/2008: -added event log dumping to DumpLogTLM module -added PollModbus, modbus master capability -corrected error in setpoint listing capability wherein only the first setpoint was listed multiple times -corrected watch window showing integer values incorrectly -added SyncValues module -added com flags to ComSetup module to suppress trailing nulls in modbus messages and to suppress replies in R9 messages if no data requested to be in reply -corrected compiler error that could lead to code not being included for module at end of one of the three partitions Version 205, 07/24/2008: -added UnPackToFloat and UnPackToInt modules Version 206, 08/27/2008: -corrected modbus slave response sending one byte too few, truncating CRC Version 207, 09/16/2008: -installed test to eliminate 'List index out of bounds' error when R3Setup initializes without a .ini file -corrected com port designator saved in R3Setup.ini to correctly allow ports greater than 9 (max limit is port 25). -added RAM optimization switch to the preferences panel that directs the compiler to not assign RAM to unused outputs, thereby reducing user program RAM requirements -altered GetStringFromPort module to remove received string from port upon reception rather than to clear the entire buffer upon reception Version 208, 10/02/2008: -altered compiler so that it does not erroneously delete module input properties on modules that have had new properties added to the module definition -also forced deletion of inputs in ComSetup and System modules that have the same name as the module to avoid erroneous wrapping of outputs to inputs Version 209, 10/29/2008: -added TX identifier and protocol identifier previously missing from modbus tcp protocol Version 210, 11/19/2008: -added port 2 buffer size error checking to detect multiple ComSetup modules with differing buffer size specifications -added more robust end of transmit buffer checking for CRC-secured messages -corrected DumpLogTlm to not dump incorrect records in case where logger has rolled past the end of its allocated flash space Version 211, 11/24/2008: -corrected modbus polling incorrectly handling register offsets -altered ClearRam module to refrain from clearing memory used by triggers Version 212, 12/09/2008: -corrected some modules that need outputs for internal use erroneously not allocating RAM for some outputs if RAM optimization selected. Version 213, 12/31/2008: -changed background AI filter from integer to floating point to improve resolution Version 214, 01/07/2009: -implemented/corrected suppress trailing nulls flag in ComSetup for log dumping RUG9 format messages version 215, 01/09/2009: -corrected error in recording Unix format time stamp on logged data Version 216, 02/11/2009: -corrected errors in suppressing trailing nulls and resynchronizing buffer associated with using modbus on port 1 Version 217, 02/18/2009: -corrected improper handling of serial port numbers greater than 9 Version 218, 02/20/2009: -added FlowParshall module to provide industry standard Parshall flume flow calculation -changed AnalogOut module to sample once per second instead of when enabled -corrected TriggerOnChange module .Old output to 'internal use' designation to eliminate error in case of optimized RAM use Version 219, 05/28/2009: -altered databus use to minimize LCD pullup current draw Version 220, 06/16/2009: -added procedure on boot up to burn off silver whiskers, if any exist, on keyboard switch matrix -added program name visibility to main LCD system menu by hitting the down arrow key -made AI's on processor DO's set to zero to protect processor from voltage applied to AI's when no power applied to board Version 221, 08/17/2009: -corrected TrigOnRcv not working for replies to modbus polls -altered AnalogInput module to ignore unspecified range limits -added code to assure that the system flags in SysSetup module result in flags=0 if flags field is left blank -forced keyboard scanning unconditionally instead of scanning only if realtime display on port 0 is defined to assure scanning not halted for any reason -added PulseToFlowTLM module -corrected error that led to erroneous presentation of an extra setpoint in setpoint menu -added delay to RUG3 after reception of each program load message to give time for PC's serial port and USB interface to transition from Tx to Rx mode to reduce occurance of msg repeats Version 222, 08/28/2009: -added modified R3BurninA program that enables disabling/enabling relay cycling to deployment -added revision codes to OSCode and ModuleCode files to assure that R3 code matches R3Setup revision Version 223, 11/12/2009: -fixed watch window error that had disabled the 'Resend to RTU' button -changed interrupt buffer writing in ASCII mode to show full buffer if interrupt (writing) index attempts to advance past foreground (reading) index on character reception Version 224, 11/23/2009: -fixed erroneous application of upper and lower limits in AnalogInput modules Version 225, 02/04/2010: -added WriteToEEPROM and ReadFromEEPROM modules, enabling EEPROM to be used to write and read random two-dimensional floating point array entries. -added TriggerEveryXScans module -corrected inoperative new user entry trigger output in Setpoint module Version 226, 05/07/2010: -added CounterRangeExtend module to handle rollover of 16 bit counters and give extended counter range Version 227, 09/28/2010: -added complile-time check for unused modules and then presented list as warnings in error panel -added compression of statuses to eliminate unused statuses from status database if use selects to use RAM optimization Version 228, 11/19/2010: -corrected erroneous 'module outputs not used' warning issued when not using RAM optimization -added InMarsat communication modules for status check, info and error tests, time setting, and data file loading and transmitting Version 229, 12/16/2010: -added InMarSat receive data module Version 230, 12/28/2010: -corrected poll module failing to poll when it has three forwarding addresses Version 231, 01/07/2011: -added ConcreteCureCalc module Version 232, 01/24/2011: -corrected InMarSatTX module trigger output not triggering at the end of message -corrected SendStringToPort module incorrectly handling the port input being left blank Version 233, 01/27/2011: -added SetpointString module Version 234, 01/31/2011: -corrected InMarSatRX interfering with other InMarSat modules -added received file extension output to InmarsatcheckEvents module -added NumericToHexString module Version 235, 02/03/2011: -changed InMarSatRx module to trigger at the end of the process regardless of the result instead of only when reception is successful Version 236, 01/23/2012: -added serial number outputs to InmarsatPollForStatus module Version 237, 02/06/2012: -altered SysSetup code to give full control of contrast if specified in the module Version 238, 04/03/2012: -changed FlipFlop module .old output and Q output designation for internal use so they are not defaulted out when RAM optimization asserted -increased status list size by 20 bytes Version 239, 07/11/2012: -added hex to integer conversion to ParseStringToInt module Version 240, 08/12/2012: -added three outputs to FloatToInteger module to accommodate telemetry floating point formats with swapped words Version 241, 02/07/2013: -added ability to transmit GlobalRTC in TX array -added LatchBits module Version 242, 03/31/2014: -corrected erroneous warning of module not in use if only has internal use outputs -Removed back ground filtering of analog signals to speed up changes -Removed 0.7 from battery voltage calaculation to fix error -Changed high end limit of battery voltage to 41V -Changed sampel and hold time for analogs from 1 (4 counts) to 4 (32 counts) -Changed FlowParshall for larger widths, used http://www.usbr.gov/pmts/hydraulics_lab/pubs/wmm/chap08_10.html for values. Version 243, 09/06/2014: -corrected error that would prevent the first character from being issued on port 1 after installing comsetup -corrected error that prevented Modbus Slave mode 2 from working correctly -corrected error that prevented PulseToFlow module from updating when RAM optimization was selected -corrected error with DelayTimer module not working correctly when RAM optimization was selected Version 244, 02/12/15: -added support for 7 data bits on Port 2 if mode is SDI-12. -modified parsing functions so a delim value of 255 will parse text based on sign, + or - -added support for SDI-12 -flagged BattV output of SysSetup as internal use so when RAM optimization is enabled, loop supply will not shut off becasue of low voltage -flagged Count output of DiginCount as internal use so when RAM optimization is enabled, count ouput is saved for other modules -flagged ValMid output of ShaftEncoderInput as internal use so when RAM optimization is enabled, ValMid is saved -flagged Coarse output of CounterRangeExtend as internal use so when RAM optimization is enabled, coarse count is saved -flagged Lead output of LeadLagSeq4 as internal use so when RAM optimization is enabled, Lead pump is saved -flagged Pulse output of PulseGen as internal -flagged Pulse output of PulseGenFast as internal -flagged Sec, CopyLS and CopyMS outputs of PulseToFlowTLM as internal -flagged State output of SeqTimedTrigger as internal -flagged Time output of SequencerTimed as internal Version 245 Version 247, 01/06/2020 -removed support for RUG3 board versions less than Rev11 -added flag to ComSetup module to allow both COM ports to use the same RX and TX array Version 248, 03/13/2022 -added input to Poll module to allow for polling with R9 protocol on both P1and P2 -added support for Rev14 boards that allows for selectable commuincation hardware on P2 -flagged Status output in ValueTestTrig module as internal so trigger works correctly when RAM optimization is on and status output is not used -added SetpointRX module to allow using RX memory for setpoints that are both locally and remotely set, one memory location removing need to poking Version 249, 05/08/2023 - NOT WIDELY RELEASED -added modules: -VolumePT -AI_0to5_Cal Version 249.1, 10/30/2023 -added logging option for board rev 15 with logging capacity of 64 Mbit.