Sometimes an error is hard to be reproduced or its occurrence seems completely random, so the necessary logs for troubleshooting cannot be recorded easily. the below script can be used to take some debugging logs until a fault has occurred.


The user just need to configure on the script the exact error we is willing to capture through the FAULT as follows:



The number of channels must be configured as well. Use 2 for dual channel controller. Then  run the script and stay at the console tab until the error has been reproduced. Copy the logs and send to a FAE for troubleshooting. 



It is important to be on console tab until the error has been replicated to acquire adequate data. If the system is not being controlled by a master device, serial commands can be given from console tab to run the motors. The watchdog timer must have a respective value to achieve that. 


The script follows:


 

'******************************************

'         LOG UNTIL FAULT SCRIPT

'******************************************

 

option explicit

 

'DISCLAIMER:

'----------

 

'The script is tested and validated by Roboteq and is believed to be fault-free. 

'The possibility always exists, however, that the particular configuration and/or use condition uncovers a fault 

'that escaped our validation test coverage. Always extensively test the script under your use conditions prior 

'to deploying it in the field.

 

'PURPOSE:

'--------

'This script can be used for cases that a fault cannot be captured easily 

'and the user is not able to stop the logging process immediately after the fault.

'The script will plot the values in colsole and stop printing once the fault has occurred

'So the user will have the timeto copy the logs from console without them being overwritten

'The script can be configured to log until a specific error.

 

 

'USE:

'----

'The error that will stop the logginh can be configured through the FAULT parameter as follows:

 

' 1: Overheat

' 2: Overvolt

' 4: Undervolt

' 8: Short

' 16: Emergency stop

' 32: Motor sensor fault

' 64: Mosfail

 

'********************************************

'           SCRIPT PRAMETRIZATION

'     modify the values below to

'         parametrize the script

'********************************************

 

#define FAULT 8  ' Define the fault that will stop the logging process. See on the use section how to conifugre the fault

#define LOOP_PERIOD ' this value is in millisecond. The console can hold maximum of 1000 lines, so total amount on logging will depend on the loop period

#define CHANNELS 'the number of channels used

 

'********************************************

'       script code starts here

'      don't modify script under this point

'********************************************

 

 

dim rampedCommand[4as integer

dim feedback[2as integer

dim power[2as integer

dim pha1[2as integer

dim pha2[2as integer

dim amps[2as integer

dim batamps[2as integer

dim temp[3as integer

dim volts[3as integer

 

dim channel as integer

 

 

 

start:

 

if (FAULT 1)

    gosub Overheat

elseif (FAULT=2)

    gosub Overvolt

elseif (FAULT=4)

    gosub Undervolt

elseif (FAULT=8)

    gosub Short

elseif (FAULT=16)

    'gosub Emergency

elseif (FAULT=32)

    'gosub Sensor

elseif (FAULT=64)

    'gosub Mosfail

end if

 

if(getvalue(_FF,1and FAULT)

    terminate

end if

 

wait(LOOP_PERIOD)

 

goto start

 

 

'-----------------------------------------

'             Overheat routine

'-----------------------------------------

 

overheat:

 

for channel andwhile channel < (CHANNELS+1)

    

    rampedCommand[channel-1] = getvalue(_RMP,channel)    

    feedback[channel-1] = getvalue(_F,channel)

    power[channel-1] = getvalue(_P,channel)

    amps[channel-1] = getvalue(_A,channel)

    

    print(rampedCommand[channel-1], "\t",feedback[channel-1], "\t",power[channel-1], "\t",amps[channel-1], "\t")    

 

next    

 

for channel andwhile channel < (CHANNELS+2)

    

    temp[channel-1] = getvalue(_T,channel)

    print(temp[channel-1],"\t")

    

next

 

print(" \n")

 

return

 

'-----------------------------------------

'             Overvolt routine

'-----------------------------------------

 

overvolt:

 

for channel andwhile channel < (CHANNELS+1)

    

    rampedCommand[channel-1] = getvalue(_RMP,channel)    

    feedback[channel-1] = getvalue(_F,channel)

    power[channel-1] = getvalue(_P,channel)

    amps[channel-1] = getvalue(_A,channel)

    batamps[channel-1] = getvalue(_BA,channel)

    

    print(rampedCommand[channel-1], "\t",feedback[channel-1], "\t",power[channel-1], "\t",amps[channel-1], "\t",batamps[channel-1], "\t")    

 

next    

    

    volts[1] = getvalue(_V,2)

    print(volts[1],"\n")

    

return

 

'-----------------------------------------

'             Undervolt routine

'-----------------------------------------

 

undervolt:

 

for channel andwhile channel < (CHANNELS+1)

    

    rampedCommand[channel-1] = getvalue(_RMP,channel)    

    feedback[channel-1] = getvalue(_F,channel)

    power[channel-1] = getvalue(_P,channel)

    amps[channel-1] = getvalue(_A,channel)

    batamps[channel-1] = getvalue(_BA,channel)

    volts[channel-1] = getvalue(_V,channel)

    

    print(rampedCommand[channel-1], "\t",feedback[channel-1], "\t",power[channel-1], "\t",amps[channel-1], "\t",batamps[channel-1], "\t"volts[channel-1],"\t")    

 

next

 

print(" \n")

 

return

 

'-----------------------------------------

'             Short routine

'-----------------------------------------

 

short:

 

for channel andwhile channel < (CHANNELS+1)

    

    rampedCommand[channel-1] = getvalue(_RMP,channel)    

    feedback[channel-1] = getvalue(_F,channel)

    power[channel-1] = getvalue(_P,channel)

    

    if (channel 1)

        pha1[channel-1] = getvalue(_PHA,1)

        pha2[channel-1] = getvalue(_PHA,2)

    else 

        pha1[channel-1] = getvalue(_PHA,3)

        pha2[channel-1] = getvalue(_PHA,4)    

    end if

    

    print(rampedCommand[channel-1], "\t",feedback[channel-1], "\t",power[channel-1], "\t",pha1[channel-1], "\t",pha2[channel-1],"\t")

 

next

 

print(" \n")

 

return