Added MuxSelect instruction. MuxSelect(clk_port,res_port,clk_pulse_width,mux_chan,mode) selects the specified channel on a multiplexer. Mux_chan can be a variable in sequential mode (it will auto-switch to sequential). Mode of 0 uses AM16/32A clocking, 1 uses AM16/32B clocking. This instruction can be used in conjunction with SubScan and PulsePort to control Muxes. Example: MuxSelect(1,2,5,4,1) ' selects the mux to channel 4 in B Mode SubScan (0,0,5) VoltDiff(Meas(i),1,mV5000,11,0,3000,250,1.0,0.0) pulseport(1,5000) ' advance the mux i = i 1 NextSubScan portset(2,0)'shut off mux (whether in A or B mode)
Added variable initialization feature, as in Public Name(Dim) as Type = {v1,v2,...vN}.
Added FormatLong() function.
Added PRTCalc instruction that behaves identical to the PRT instruction, but uses updated equations for the resistance to temperature conversion. For T>0 the exact solution to the Callendar-Van Dusen equation is used. For T<0 a revised 4th order polynomial is used.
Added Function/EndFunction, ExitFunction, and Return to CRBasic.
Added FileEncrypt(filename) function, returning true (success) or false, used to encrypt CRBasic program files.
Added EndSequence instruction and flagged compile error when illegally locating Declaration Sequences such Sub/EndSub, DataTable/EndTable, ShutDownBegin/ShutDownEnd, DialSequence/EndDialSequence, ModemHangup/EndModemHangup, and WebPageBegin/WebPageEnd. EndSequence ends the current sequence that started at BeginProg or after a SlowSequence and any accompanying Declaration Sequences. Only Declaration Sequences can occur after EndSequence and before SlowSequence or EndProg. Declaration Sequences can be located (1) prior to BeginProg, (2) after EndSequence or an infinte Scan/NextScan and before EndProg or SlowSequence, and (3) immediately following SlowSequence. SlowSequence code starts executing after any Declaration Sequences. The rule prevents insertion of a Declaration Sequence in the middle of some other executing sequence of code.
Fixed ME communications on CS I/O interface.
Fixed pre-compiler working with encrypted Include files.
Fixed using fieldname when sampling Status.TimeStamp in a data table. This was crashing the pre-compiler.
Fixed CS7500 Mode 3. This mode returns only the diagnostic, bandwidth, and delay interval.
Changed CardFlush to wait for completion when flushing TableFile Data to a card or SC115. Also, don't open anything on the SC115 if there is no new data to write. This avoids flashing the LED when no data is sent.
Changed CardFlush instruction to flush all pending TableFile data as well as CardOut data.
Improved TableFile: 1) Created a new task to handle writing to files without holding up the processing. One task will handle all TableFiles. If the last write is not complete when it is time to write again then processing will wait. Task also handles SC115 being plugged in. 2) Fix the case that digits are at the end of the file name, e.g., Table1. 3) Changed to allow Interval and TimeInto/Number of Records to be a variable expression.
Changed updating CompactFlash card bytes free to check if the info sector is used. If it is not then update it. This avoids the repeated long delays of determining bytes available on the card.
Changed Sequential mode so when starting scans, it doesn?t lock the measurement semaphore while synchronizing time to the new scan interval.
Fixed a problem calculating offsets into an existing tob3 file. This caused corrupt file headers when a table storing to a card was reset after starting to store to it. Also if the file existed when the program compiled then the table was filled and rung, the header was corrupted.
Changed DataInterval as follows: If the TrigVar in the DataTable instruction is not True when the DataInterval time for output is due, discard and reset the intermediate processing values right then rather then waiting for a time when the TrigVar is true. This way, on the next Interval step, if the TrigVar is true (and the table is called), we can get good output, with processing based on the correct Interval (based on the DataInterval instruction).
Removed a change made in OS 2.3.03 which forced x ^ y to a double to avoid overranging integers. This was causing incorrect evaluation of expressions like 180/2^15. If the result will overrange an integer then the expression should be forced to a float.
Allow Alias and Units declarations to reference a declared string constant as an aid to foreign language support, as in: Const PTempUnits = CHR(HexToDec ("C9")) CHR(HexToDec ("E3")) CHR(HexToDec("CA")) CHR(HexToDec ("CF")) CHR(HexToDec("B6")) CHR(HexToDec ("C8")) Const PTempAlias = CHR(HexToDec ("CE")) CHR(HexToDec ("C2")) CHR(HexToDec("B6")) CHR(HexToDec ("C8")) Alias PTemp = PTempAlias Units PTemp = PTempUnits
Fixed ExitScan in sequential mode not releasing the semaphore when executed from the main scan.
Added DisplayMenu mode -4. This works like -3 (show only the user menu with no system option), but adds the Display Settings menu to allow changing display parameters (timeout, contrast etc.). Also changed mode -2, and -1 to include constant table menu if there is one active.
Changed Alias declaration so that a constant string expression is legal.
Fixed Pwr(x,j) when x < 0.
Fixed SDI12Recorder so that at least 100 msec elapses between successive calls.
Changed keyboard editing so that when Num Lock is Off, the up and down cursor keys will scroll through the alphanumeric characters.
Changed editing the Constant Table and editing files via the keyboard so that the prompting is more responsive.
Fixed the User Function so that a reference to a user function name must be followed by a '(' if the function is meant to be called, else it is simply assigning or referencing a return value for the function. Also, we flag an error if a function is recursively called.
Changed TimedControl to allow for synchronization intervals greater than one hour.
Fixed a problem with Scans < 10mS that were not taking up sufficient measurement time. The end of scan task sequencer opcode was putting the A/D to sleep, but the internal timer start of scan was assuming that it was already awake. If the time was used up then the A/D is never put into sleep mode and things worked fine.
Fixed sequential mode measurement not allowing enough time for analog power to settle before making measurements. This was only a problem in certain loggers due to slower components.
Allow tables to be called from multiple sequences. The timestamp will be the system time.
Fixed some of the options in CheckSum so that if the length parameter is negative, it will exit immediately instead of locking up for a long time.
Changed Constant Table so it can be in an Include file.
Added compile error if a subroutine name is entirely numeric.
Fixed HextoDec("0"). Was returning NAN instead of 0. This was a bug in the low level sscanf function when using the %x format.
Fixed expressions such as A - B*C in the case that A is of type Float while B and C are both of type Long.
Improved the compiler's catch of a syntax error in the For statement.
Added compile error when there are multiple instances of NewFieldNames instruction.
Fixed Move() instruction to work correctly with Boolean arrays.
Fixed SplitStr when the filter is white space (space or tab), also when the right justify option is used when the destination variable is numeric (not a string).
Fixed table called outside of Scan..NextScan. When called multiple times was hanging the task that called it.
Removed possibility of pipeline mode skipped scan measurements overwriting processing data for one scan prior to detecting the skip.
Fixed encryption to work with Include files too.
Don't allow the same declared function to run simultaneously in multiple sequences.
Changed setting clock via the keyboard so that the minimum day and month is 1 instead of 0, and the year is 1990 instead of 0.
Fixed the keyboard display of the dimensionality of an array of string names.
Fixed GOES: 1) Fixed TableOpt = 0 to send the most recent record only if it has not yet been sent. 2) Fixed sending records to GOES after &H80000000 (~2 Giga) records have been sent.
Allow SubScan..NextSubscan to be used in slow sequences. The interval parameter must be zero. This change was made to make using muxes in the slow sequence easier.
Changed AM25T to allow it to be used in pipeline mode slow sequences. If slicing is required it is done on each measurement. This means that if using revdiff the two measurements may be sliced.
Disabled DMA for PC Card interface. The DMA can cause enough jitter in timing that if the Scan is filled with measurements it can spill beyond its allotted time into the next scan.
If no card present then set all card table sizes to zero in status table.
Modified formatting CompactFlash Cards to always format FAT32. When switching from FAT to FAT32 this required rewriting the partition sector. Since the partition sector does not always exist the format always reads the low level disk geometry information and creates a new partition sector then formats (quick variety) the media.
Added compile warning in compile results if re-initializing final storage memory due to table mismatch.
Changed data table instructions so that an expression can be used as the source, in which case the default field name is "Anonymous" with an incrementing suffix. For example, Average(1,2 Sin(x),IEEE4,0).
Added compile error if a string declaration is missing the '*' character before the size specification.
Fixed using TableName.FieldName used as function parameters when the next parameter is a string parameter, as in FormatFloat(Table.Field,FormatString).
If table requested table allocations change between compiles, as when new program sent with maintain data option, then re-initialize final storage memory.
Allow PortSet in pipeline Slow sequences.
Changed Warning Message to display the line number.
Fixed keyboard when attempting to change a numeric value by entering more than 16 characters.
Changed 12vLow detection and handling to work like CR1000.
Changed SetPort so delay parameter is optional parameter.
Added PulsePort instruction.
Fixed Maximum and Minimum so that if one of the rep values is NAN on scan that and output will happen, they all are not put to NAN.
Added model name, serial number, os version, and program name to the xml TableFile file header.
Fixed PulseCount instruction when doing a running average of frequency to return correct values while the running average buffer is being filled.
If running a Default.cr5, then wait to set Compile Ready until the Default program is loaded.
Changed the DataTable time stamp to be the system time when called from outside a scan and when the table does not have a DataInterval declaration.
Fixed the FindSpa function to work with Long and String data types.
Fixed the adding and concatenating strings, including functions that have string parameters, to allocate enough memory.
Changed NewFieldNames to change the field names of an array more than once.
Fixed false alarm Warning message when a Scan appears inside a subroutine before BeginProg.
Fixed the RealTime Usec when called outside a Scan/NextScan. (It had 100 usec units there instead of usec, i.e., the usec field was 100 times too large.)
Added a check for invalid measurements per excitation (MeasPEx) in bridge instructions.
Changed TOB3 files to work with changed field names.
Fixed Sort not traversing far enough into the sorting array on initial pass that sets up the heap sort.
Changed TimedControl to buffer the index values up to num_buffs deep and return the index that coincides with the scan that is being processed.
Fixed Move instruction when source is a constant string.
Fixed FieldNames description parsing when an array and description are both used.
Fixed CRBasic accessing Status fields referencing Data Table information, such as Status.DataTableName(2,1).
Changed CRBasic accessing TableName.FieldName(M,N) when the field data type is a time stamp. If M is > than the dimension of the field, and the destination is of type string, then M specifies the format of the time stamp returned as specified by TableName.TimeStamp(M,N).
Improved going to low power standby when the system background calibration is waiting for the main scan to complete to slice in measurements.
Don't allow reps on the same channel for bridges unless measurements per excitation equals reps.
Fixed Precompiler checking for valid program filename length.
Fixed Median for reps>1 using FP2 data type.
Fixed Pipeline mode slow sequence slicing for Delay, and PulsePort instructions.
Fixed Status variable RunSignature to include the expression memory into the signature. Changing constants in a program was not giving a different signature. This caused LoadFieldCal to erroneously load the calibration data.
Improved FieldCal: include the reps as part of the signature used to determine whether or not to create a new file. Reps was changed and the old file was still used. This confused the wizard (one should never confuse the wizard). Also added checking for the gf_raw parameter to force it to be the same size as the other arrays etc. And fixed gf_raw when indexing into an array with reps set to 1.