; @Keywords: ; -------------------------------------------------------------------------------- ; @Title: Menu for PI Analog Probe ; @Description: ; This menu can be loaded with MENU.ReProgram t32adc.men ; @Author: STA ; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Id: t32adc.men 7587 2014-08-29 09:32:38Z estahleder $ ; -------------------------------------------------------------------------------- ; Menu for PI Analog Probe ; -------------------------------------------------------------------------------- ; missing: ; - ADC probe detection add menu ( ; -------------------------------------------------------------------------------- ; Trace pulldown submenue ; -------------------------------------------------------------------------------- popup "&ProbeADC" ( default menuitem "[:aconfig]&Configuration..." "Integrator" menuitem "[:aconfig]&Configuration ADC" "Pod A" menuitem "[:aconfig]&Configuration Energy" "ETA" ; -------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------- enable INTEGRATOR() menuitem "[:time]&Recoding Time" ( &chan=0. if I.ADC.ENABLE(i.v0a) &chan=&chan+1. if I.ADC.ENABLE(i.v1a) &chan=&chan+1. if I.ADC.ENABLE(i.v2a) &chan=&chan+1. if I.ADC.ENABLE(i.v3a) &chan=&chan+1. if I.ADC.ENABLE(i.i0a)||I.ADC.ENABLE(i.p0a) &chan=&chan+1. if I.ADC.ENABLE(i.i1a)||I.ADC.ENABLE(i.p1a) &chan=&chan+1. if I.ADC.ENABLE(i.i2a)||I.ADC.ENABLE(i.p2a) &chan=&chan+1. dialog (& header "Expand Recoding Time" pos 2. 0.5 25. 1. text "Number of enabled ADC channels = &chan" pos 2. 1.5 17. 1. text "Time to trace (seconds)" pos 2. 2.5 17. 1. TIME: EDIT "2." "" pos 1. 4.5 9. defbutton "Ok" ( dialog.execute apply dialog.end ) pos 25. 4.5 9. button "Cancel" "dialog.end" pos 13. 4.5 9. apply: button "Apply" ( local &recstring &waitstring &cval &time &rectime &waittime &recstring="" &waitstring="" ; &chan=dialog.string("CHAN") &cval=dialog.string("TIME") if "&cval"!="" ( on error gosub ( &cval="" &time="" return ) EVAL &cval &t1=eval.type() ; &DInteger DIntNum DFloat DHex DNumeric if (&t1!=0x08)&&(&t1!=0x2E)&&(&t1!=0x10)&&(&t1!=0x04)&&(&t1!=0x3E) ( &t1="&cval"+" no valid time value!" print %ERROR "&t1" &cval="" ) ) &time=&cval &rectime=((&chan)*1600.) &recstring="&rectime"+"ns" &waittime=&time*&chan*1000000000.0 &waittime=(&waittime/524288.)-&rectime &waittime=conv.floattoint(&waittime) &waitstring="&waittime"+"ns" if ((&time<1)||(&chan==0)) ( Integrator.ReProgram ( ) print %ERROR "Wrong Time or Channel Count" ) else ( Integrator.ReProgram ( ; Expand Recording Time: Channels: &chan, Seconds: &time TimeCouNTer COUNT0 &recstring TimeCouNTer COUNT1 &waitstring LEVEL0: Counter.Increment COUNT0 Counter.Restart COUNT1 IF COUNT0 GOTO LEVEL1 IF COUNT0 SAMPLE.ENABLE IF !COUNT0 LEVEL1: Counter.Increment COUNT1 Counter.Restart COUNT0 IF COUNT1 GOTO LEVEL0 IF COUNT1 ) print "Analyzer programmed." ) ) ) ) ; -------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------- enable INTEGRATOR() popup "[:atrigger]&Trigger Definition" ( menuitem "[:program]&Current Program" ( Integrator.Program ) menuitem "[:program]&New Program" ( Integrator.ReProgram ( ) Integrator.Program ) menuitem "&Directory..." ( Integrator.Program *.tap ) separator menuitem "Clear Program" ( Integrator.ReProgram ) ; -------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------- menuitem "&Trace from Start to End..." ( local &csel &csel="" if I.ADC.ENABLE(i.v0a) &csel="&csel"+",V0" if I.ADC.ENABLE(i.v1a) &csel="&csel"+",V1" if I.ADC.ENABLE(i.v2a) &csel="&csel"+",V2" if I.ADC.ENABLE(i.v3a) &csel="&csel"+",V3" if I.ADC.ENABLE(i.i0a)&&(I.ADC.SHUNT(i.i0a)!=0) &csel="&csel"+",I0" if I.ADC.ENABLE(i.i1a)&&(I.ADC.SHUNT(i.i1a)!=0) &csel="&csel"+",I1" if I.ADC.ENABLE(i.i2a)&&(I.ADC.SHUNT(i.i2a)!=0) &csel="&csel"+",I2" if I.ADC.ENABLE(i.p0a)&&(I.ADC.SHUNT(i.p0a)!=0) &csel="&csel"+",P0" if I.ADC.ENABLE(i.p1a)&&(I.ADC.SHUNT(i.p1a)!=0) &csel="&csel"+",P1" if I.ADC.ENABLE(i.p2a)&&(I.ADC.SHUNT(i.p2a)!=0) &csel="&csel"+",P2" if string.mid("&csel",0,1)=="," &csel=string.cut("&csel",1) dialog (& header "Trace from Start to Stop Point" pos 0x1 1.3 6. 1. chanA: PULLDOWN "&csel" "" pos 0x8 1.3 22. addrA: defedit "" "" pos 33. 0.7 7. 1. a.eq: choosebox "equal" "" pos 33. 1.7 7. 1. a.not: choosebox "! equal" "" pos 41. 0.7 7. 1. a.ris: choosebox "rising" "" pos 41. 1.7 7. 1. a.fal: choosebox "falling" "" pos 0x1 4.3 6. 1. chanB: PULLDOWN "&csel" "" pos 0x8 4.3 22. addrB: edit "" "" pos 33. 3.7 7. 1. b.eq: choosebox "equal" "" pos 33. 4.7 7. 1. b.not: choosebox "! equal" "" pos 41. 3.7 7. 1. b.ris: choosebox "rising" "" pos 41. 4.7 7. 1. b.fal: choosebox "falling" "" pos 15. 6.5 9. defbutton "Ok" ( dialog.execute apply dialog.end ) pos 39. 6.5 9. button "Cancel" "dialog.end" pos 27. 6.5 9. apply: button "Apply" ( local &addrA &triggerA &addrB &triggerB &triggerC &triggerD local &addr1 &addr2 &channel &chanA &chanNrB local &addrAl &addrAh &addrBl &addrBh &addrCl &addrCh &addrDl &addrDh on error jumpto ( beep 5. print "Input error, please check syntax" enddo ) ; ----- A ---------------------------------------------------------------- &addrdeclA="" &addrA=dialog.string(addrA) &chanA=dialog.string(chanA) gosub CheckRange &addrA &chanA ENTRY &addrA1 &addrA2 &channelA="&channel" if dialog.boolean(a.ris) ( &triggerA=" if AlphaRange&&ChannelA" &triggerC=" if CharlyRange&&ChannelA" &addrAl=0. &addrAh=&addrA1 &addrCl=&addrA1 &addrCh=4096. ) else if dialog.boolean(a.fal) ( &triggerA=" if AlphaRange&&ChannelA" &triggerC=" if CharlyRange&&ChannelA" &addrAh=4096. &addrAl=&addrA2 &addrCh=&addrA2 &addrCl=0. ) else if dialog.boolean(a.eq) ( &triggerA="" &triggerC=" if CharlyRange&&ChannelA" &addrAl=0. &addrAh=0 &addrCl=&addrA1 &addrCh=&addrA2 ) else ( &triggerA="" &triggerC=" if !CharlyRange&&ChannelA" &addrAl=0. &addrAh=0 &addrCl=&addrA1 &addrCh=&addrA2 ) ; ----- B ---------------------------------------------------------------- &addrdeclB="" &addrB=dialog.string(addrB) &chanB=dialog.string(chanB) gosub CheckRange &addrB &chanB ENTRY &addrB1 &addrB2 &channelB="&channel" if dialog.boolean(b.ris) ( &triggerB=" if BetaRange&&ChannelB" &triggerD=" if DeltaRange&&ChannelB" &addrBl=0. &addrBh=&addrB1 &addrDl=&addrB1 &addrDh=4096. ) else if dialog.boolean(b.fal) ( &triggerB=" if BetaRange&&ChannelB" &triggerD=" if DeltaRange&&ChannelB" &addrBh=4096. &addrBl=&addrB2 &addrDh=&addrB2 &addrDl=0. ) else if dialog.boolean(b.eq) ( &triggerB="" &triggerD=" if DeltaRange&&ChannelB" &addrBl=0. &addrBh=0 &addrDl=&addrB1 &addrDh=&addrB2 ) else ( &triggerB="" &triggerD=" if !DeltaRange&&ChannelB" &addrBl=0. &addrBh=0 &addrDl=&addrB1 &addrDh=&addrB2 ) ; ------------------------------------------------------------------------ Integrator.ReProgram ( ; Volt/Amp/Watt Range for Start: &addrA SELECTORRANGE AlphaRange &addrAl--&addrAh SELECTORRANGE CharlyRange &addrCl--&addrCh ; Volt/Amp/Watt Range for Stop: &addrB SELECTORRANGE BetaRange &addrBl--&addrBh SELECTORRANGE DeltaRange &addrDl--&addrDh ; Channel Start: &chanA SELECTOR ChannelA i.A15.Falling &channelA ; Channel Stop: &chanB SELECTOR ChannelB i.A15.Falling &channelB start: CONTinue &triggerA startA: Sample.enable &triggerC CONTinue &triggerC occured: Sample.Enable CONTinue &triggerB occuredB: Sample.Enable Goto start &triggerD ) print "Analyzer programmed." goto applyend ;--------- CheckRange: ENTRY &addr &chan local &shunt &PwrVolt &shunt=0 &PwrVolt=0 ; check channel if "&chan"=="V0" &channel="i.A14.Low i.A13.Low i.A12.Low" else if "&chan"=="V1" &channel="i.A14.Low i.A13.Low i.A12.High" else if "&chan"=="V2" &channel="i.A14.Low i.A13.High i.A12.Low" else if "&chan"=="V3" &channel="i.A14.Low i.A13.High i.A12.High" else if "&chan"=="I0"||"&chan"=="P0" ( &channel="i.A14.High i.A13.Low i.A12.Low" &shunt=I.ADC.SHUNT(i.i0a) &PwrVolt=I.ADC.SHUNT(i.p0a) ) else if "&chan"=="I1"||"&chan"=="P1" ( &channel="i.A14.High i.A13.Low i.A12.High" &shunt=I.ADC.SHUNT(i.i1a) &PwrVolt=I.ADC.SHUNT(i.p1a) ) else if "&chan"=="I2"||"&chan"=="P2" ( &channel="i.A14.High i.A13.High i.A12.Low" &shunt=I.ADC.SHUNT(i.i2a) &PwrVolt=I.ADC.SHUNT(i.p2a) ) ; check empty if "&addr"=="" ( beep 5. print "Input error: Empty Range" enddo ) ; check range EVAL &addr &t1=eval.type() if (&t1==0x80) ; DRange ( &len=STRING.LEN("&addr") &cut=STRING.SCAN("&addr","--",0) &addr1=STRING.CUT("&addr",-(&len-&cut)) &addr2=STRING.CUT("&addr",&cut+2) ) else ( &addr1=&addr &addr2=&addr ) ; check lo-val EVAL &addr1 &t1=eval.type() ; &DInteger DIntNum DFloat DHex DNumeric if (&t1!=0x08)&&(&t1!=0x2E)&&(&t1!=0x10)&&(&t1!=0x04)&&(&t1!=0x3E) ( &t1="Input Error: "+"&t1"+" no valid value!" print %ERROR "&t1" enddo ) ; check hi-val EVAL &addr2 &t1=eval.type() ; &DInteger DIntNum DFloat DHex DNumeric if (&t1!=0x08)&&(&t1!=0x2E)&&(&t1!=0x10)&&(&t1!=0x04)&&(&t1!=0x3E) ( &t1="Input Error: "+"&t1"+" no valid value!" print %ERROR "&t1" enddo ) ; calculation of trigger value if "&chan"=="V0"||"&chan"=="V1"||"&chan"=="V2"||"&chan"=="V3" ( ; voltage calculation ; &addr1=&addr1*4096.*1000./5000. &addr1=&addr1*819.2 &addr2=&addr2*819.2 ) else ( if "&chan"=="P0"||"&chan"=="P1"||"&chan"=="P2" ( &addr1=&addr1/&PwrVolt &addr2=&addr2/&PwrVolt ) ; current calculation ; &addr1=&addr1*&shunt*4096.*1000.*2./125. &addr1=&addr1*&shunt*32768. &addr2=&addr2*&shunt*32768. ) if &addr1==0.0 &addr1=0. else if &addr1>4096. &addr1=4096. else &addr1=conv.floattoint(&addr1) if &addr2==0.0 &addr2=0. else if &addr2>4096. &addr2=4096. else &addr2=conv.floattoint(&addr2) return &addr1 &addr2 ;--------- applyend: ) pos 0. 0. 49. 3.5 box "Channel Volt/Amp/Watt Range for Start" pos 0. 3.0 49. 3.5 box "Channel Volt/Amp/Watt Range for Stop" ) dialog.set a.eq dialog.set b.eq ) ; -------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------- menuitem "&Selective Trace..." ( local &csel &csel="" if I.ADC.ENABLE(i.v0a) &csel="&csel"+",V0" if I.ADC.ENABLE(i.v1a) &csel="&csel"+",V1" if I.ADC.ENABLE(i.v2a) &csel="&csel"+",V2" if I.ADC.ENABLE(i.v3a) &csel="&csel"+",V3" if I.ADC.ENABLE(i.i0a)&&(I.ADC.SHUNT(i.i0a)!=0) &csel="&csel"+",I0" if I.ADC.ENABLE(i.i1a)&&(I.ADC.SHUNT(i.i1a)!=0) &csel="&csel"+",I1" if I.ADC.ENABLE(i.i2a)&&(I.ADC.SHUNT(i.i2a)!=0) &csel="&csel"+",I2" if I.ADC.ENABLE(i.p0a)&&(I.ADC.SHUNT(i.p0a)!=0) &csel="&csel"+",P0" if I.ADC.ENABLE(i.p1a)&&(I.ADC.SHUNT(i.p1a)!=0) &csel="&csel"+",P1" if I.ADC.ENABLE(i.p2a)&&(I.ADC.SHUNT(i.p2a)!=0) &csel="&csel"+",P2" if string.mid("&csel",0,1)=="," &csel=string.cut("&csel",1) dialog (& header "Voltage/Current Selective Trace" pos 0x1 1.3 6. 1. chan: PULLDOWN "&csel" "" pos 0x8 1.3 22. addr: defedit "" "" pos 0. 0. 41. 3.5 box "Channel Volt/Amp/Watt Range" pos 33. 0.7 7. 1. a.eq: choosebox "equal" "" pos 33. 1.7 7. 1. a.not: choosebox "! equal" "" pos 1. 3.5 9. defbutton "Ok" ( dialog.execute apply dialog.end ) pos 25. 3.5 9. button "Cancel" "dialog.end" pos 13. 3.5 9. apply: button "Apply" ( local &addr &addrdecl &triggerA local &addr1 &addr2 local &chan &channel on error jumpto ( beep 5. print "Input error, please check syntax" enddo ) ; ----------------------------------------------------------------------- &addrdecl="" &addr=dialog.string(addr) &chan=dialog.string(chan) gosub CheckRange &addr &chan ENTRY &addr1 &addr2 if dialog.boolean(a.eq) &triggerA="AlphaRange" else &triggerA="!AlphaRange" ; ----------------------------------------------------------------------- Integrator.ReProgram ( ; Volt/Amp/Watt Range: &addr SELECTORRANGE AlphaRange &addr1--&addr2 ; Channel &chan SELECTOR Channel &channel start: Sample.enable if AlphaRange&&Channel CONTinue if AlphaRange&&Channel occured: Sample.Enable Goto Start if !AlphaRange&&Channel ) print "Analyzer programmed." goto applyend ;--------- CheckRange: ENTRY &addr &chan local &shunt &PwrVolt &shunt=0 &PwrVolt=0 ; check channel if "&chan"=="V0" &channel="i.A14.Low i.A13.Low i.A12.Low" else if "&chan"=="V1" &channel="i.A14.Low i.A13.Low i.A12.High" else if "&chan"=="V2" &channel="i.A14.Low i.A13.High i.A12.Low" else if "&chan"=="V3" &channel="i.A14.Low i.A13.High i.A12.High" else if "&chan"=="I0"||"&chan"=="P0" ( &channel="i.A14.High i.A13.Low i.A12.Low" &shunt=I.ADC.SHUNT(i.i0a) &PwrVolt=I.ADC.SHUNT(i.p0a) ) else if "&chan"=="I1"||"&chan"=="P1" ( &channel="i.A14.High i.A13.Low i.A12.High" &shunt=I.ADC.SHUNT(i.i1a) &PwrVolt=I.ADC.SHUNT(i.p1a) ) else if "&chan"=="I2"||"&chan"=="P2" ( &channel="i.A14.High i.A13.High i.A12.Low" &shunt=I.ADC.SHUNT(i.i2a) &PwrVolt=I.ADC.SHUNT(i.p2a) ) ; check empty if "&addr"=="" ( beep 5. print "Input error: Empty Range" enddo ) ; check range EVAL &addr &t1=eval.type() if (&t1==0x80) ; DRange ( &len=STRING.LEN("&addr") &cut=STRING.SCAN("&addr","--",0) &addr1=STRING.CUT("&addr",-(&len-&cut)) &addr2=STRING.CUT("&addr",&cut+2) ) else ( beep 5. print "Input error: No Range" enddo ) ; check lo-val EVAL &addr1 &t1=eval.type() ; &DInteger DIntNum DFloat DHex DNumeric if (&t1!=0x08)&&(&t1!=0x2E)&&(&t1!=0x10)&&(&t1!=0x04)&&(&t1!=0x3E) ( &t1="Input Error: "+"&t1"+" no valid value!" print %ERROR "&t1" enddo ) ; check hi-val EVAL &addr2 &t1=eval.type() ; &DInteger DIntNum DFloat DHex DNumeric if (&t1!=0x08)&&(&t1!=0x2E)&&(&t1!=0x10)&&(&t1!=0x04)&&(&t1!=0x3E) ( &t1="Input Error: "+"&t1"+" no valid value!" print %ERROR "&t1" enddo ) ; calculation of trigger value if "&chan"=="V0"||"&chan"=="V1"||"&chan"=="V2"||"&chan"=="V3" ( ; voltage calculation ; &addr1=&addr1*4096.*1000./5000. &addr1=&addr1*819.2 &addr2=&addr2*819.2 ) else ( if "&chan"=="P0"||"&chan"=="P1"||"&chan"=="P2" ( &addr1=&addr1/&PwrVolt &addr2=&addr2/&PwrVolt ) ; current calculation ; &addr1=&addr1*&shunt*4096.*1000.*2./125. &addr1=&addr1*&shunt*32768. &addr2=&addr2*&shunt*32768. ) if &addr1==0.0 &addr1=0. else if &addr1>4096. &addr1=4096. else &addr1=conv.floattoint(&addr1) if &addr2==0.0 &addr2=0. else if &addr2>4096. &addr2=4096. else &addr2=conv.floattoint(&addr2) return &addr1 &addr2 ;--------- applyend: ) ) dialog.set a.eq ) ; -------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------- menuitem "&Trace around / Trigger..." ( local &csel &csel="" if I.ADC.ENABLE(i.v0a) &csel="&csel"+",V0" if I.ADC.ENABLE(i.v1a) &csel="&csel"+",V1" if I.ADC.ENABLE(i.v2a) &csel="&csel"+",V2" if I.ADC.ENABLE(i.v3a) &csel="&csel"+",V3" if I.ADC.ENABLE(i.i0a)&&(I.ADC.SHUNT(i.i0a)!=0) &csel="&csel"+",I0" if I.ADC.ENABLE(i.i1a)&&(I.ADC.SHUNT(i.i1a)!=0) &csel="&csel"+",I1" if I.ADC.ENABLE(i.i2a)&&(I.ADC.SHUNT(i.i2a)!=0) &csel="&csel"+",I2" if I.ADC.ENABLE(i.p0a)&&(I.ADC.SHUNT(i.p0a)!=0) &csel="&csel"+",P0" if I.ADC.ENABLE(i.p1a)&&(I.ADC.SHUNT(i.p1a)!=0) &csel="&csel"+",P1" if I.ADC.ENABLE(i.p2a)&&(I.ADC.SHUNT(i.p2a)!=0) &csel="&csel"+",P2" if string.mid("&csel",0,1)=="," &csel=string.cut("&csel",1) dialog (& header "Trace around or Trigger" pos 0x1 1.3 6. 1. chan: PULLDOWN "&csel" "" pos 0x8 1.3 22. addr: defedit "" "" pos 33. 0.7 7. 1. a.eq: choosebox "equal" "" pos 33. 1.7 7. 1. a.not: choosebox "! equal" "" pos 41. 0.7 7. 1. a.ris: choosebox "rising" "" pos 41. 1.7 7. 1. a.fal: choosebox "falling" "" pos 0. 0. 49. 3.5 box "Channel Volt/Amp/Watt Range" pos 1. 3.2 11. 1. d.pre: choosebox "TrigDelay 10%" "" d.center: choosebox "TrigDelay 50%" "" d.post: choosebox "TrigDelay 90%" "" pos 15. 3.2 12. 1. t.break: choosebox "Break Analyzer" "" t.trigg: choosebox "Break Program" "" pos 15. 5.5 9. defbutton "Ok" ( dialog.execute apply dialog.end ) pos 39. 5.5 9. button "Cancel" "dialog.end" pos 27. 5.5 9. apply: button "Apply" ( local &addr &addrdecl &triggerA &tdelay &breakarg &tracetrigger local &addr1 &addr2 &addr1l &addr1h &addr2l &addr2h local &chan &channel on error jumpto ( beep 5. print "Input error, please check syntax" enddo ) ; ----------------------------------------------------------------------- &addrdecl="" &addr=dialog.string(addr) &chan=dialog.string(chan) gosub CheckRange &addr &chan ENTRY &addr1 &addr2 ; ----------------------------------------------------------------------- if dialog.boolean(d.pre) &tdelay=52428. else if dialog.boolean(d.center) &tdelay=524288./2. else &tdelay=524288.-52428. ; &tdelay=&tdelay*1.6 ; &tdelay=conv.floattoint(&tdelay) ; &tdelay="&tdelay"+"us" I.TDelay 100% if dialog.boolean(t.break) ( &breakarg="BREAK.TRACE IF tdelay" i.TOut BusA OFF ) else ( &breakarg="TRIGGER.PODBUS IF tdelay" i.TOut BusA ON TRIGGER.Set.Break ON ) &tracetrigger="TRUE" ; ------------------------------------------------------------------------ if dialog.boolean(a.eq)||dialog.boolean(a.not) ( if dialog.boolean(a.eq) &triggerA="AlphaRange" else if dialog.boolean(a.not) &triggerA="!AlphaRange" Integrator.ReProgram ( ; Volt/Amp/Watt Range: &addr SELECTORRANGE AlphaRange &addr1--&addr2 ; Channel &chan SELECTOR Channel i.A15.Falling &channel ; DelayCounter EXTERNSYNCCOUNTER tdelay &tdelay Sample.ON start: TRIGGER.TRACE IF &triggerA&&Channel CONTinue IF &triggerA&&Channel occured: Counter.Increment tdelay &breakarg ) ) else ( if dialog.boolean(a.ris) ( &addr1l=0. &addr1h=&addr1 &addr2l=&addr1 &addr2h=4096. ) else ( &addr2l=0. &addr2h=&addr2 &addr1l=&addr2 &addr1h=4096. ) Integrator.ReProgram ( ; Volt/Amp/Watt Range: &addr SELECTORRANGE AlphaRange &addr1l--&addr1h SELECTORRANGE BetaRange &addr2l--&addr2h ; Channel &chan SELECTOR Channel i.A15.Falling &channel ; DelayCounter EXTERNSYNCCOUNTER tdelay &tdelay Sample.ON start: CONTinue IF AlphaRange&&Channel startA: TRIGGER.TRACE IF BetaRange&&Channel CONTinue IF BetaRange&&Channel occured: Counter.Increment tdelay &breakarg ) ) print "Analyzer programmed." goto applyend ;--------- CheckRange: ENTRY &addr &chan local &shunt &PwrVolt &shunt=0 &PwrVolt=0 ; check channel if "&chan"=="V0" &channel="i.A14.Low i.A13.Low i.A12.Low" else if "&chan"=="V1" &channel="i.A14.Low i.A13.Low i.A12.High" else if "&chan"=="V2" &channel="i.A14.Low i.A13.High i.A12.Low" else if "&chan"=="V3" &channel="i.A14.Low i.A13.High i.A12.High" else if "&chan"=="I0"||"&chan"=="P0" ( &channel="i.A14.High i.A13.Low i.A12.Low" &shunt=I.ADC.SHUNT(i.i0a) &PwrVolt=I.ADC.SHUNT(i.p0a) ) else if "&chan"=="I1"||"&chan"=="P1" ( &channel="i.A14.High i.A13.Low i.A12.High" &shunt=I.ADC.SHUNT(i.i1a) &PwrVolt=I.ADC.SHUNT(i.p1a) ) else if "&chan"=="I2"||"&chan"=="P2" ( &channel="i.A14.High i.A13.High i.A12.Low" &shunt=I.ADC.SHUNT(i.i2a) &PwrVolt=I.ADC.SHUNT(i.p2a) ) ; check empty if "&addr"=="" ( beep 5. print "Input error: Empty Range" enddo ) ; check range EVAL &addr &t1=eval.type() if (&t1==0x80) ; DRange ( &len=STRING.LEN("&addr") &cut=STRING.SCAN("&addr","--",0) &addr1=STRING.CUT("&addr",-(&len-&cut)) &addr2=STRING.CUT("&addr",&cut+2) ) else ( &addr1=&addr &addr2=&addr ) ; check lo-val EVAL &addr1 &t1=eval.type() ; &DInteger DIntNum DFloat DHex DNumeric if (&t1!=0x08)&&(&t1!=0x2E)&&(&t1!=0x10)&&(&t1!=0x04)&&(&t1!=0x3E) ( &t1="Input Error: "+"&t1"+" no valid value!" print %ERROR "&t1" enddo ) ; check hi-val EVAL &addr2 &t1=eval.type() ; &DInteger DIntNum DFloat DHex DNumeric if (&t1!=0x08)&&(&t1!=0x2E)&&(&t1!=0x10)&&(&t1!=0x04)&&(&t1!=0x3E) ( &t1="Input Error: "+"&t1"+" no valid value!" print %ERROR "&t1" enddo ) ; calculation of trigger value if "&chan"=="V0"||"&chan"=="V1"||"&chan"=="V2"||"&chan"=="V3" ( ; voltage calculation ; &addr1=&addr1*4096.*1000./5000. &addr1=&addr1*819.2 &addr2=&addr2*819.2 ) else ( if "&chan"=="P0"||"&chan"=="P1"||"&chan"=="P2" ( &addr1=&addr1/&PwrVolt &addr2=&addr2/&PwrVolt ) ; current calculation ; &addr1=&addr1*&shunt*4096.*1000.*2./125. &addr1=&addr1*&shunt*32768. &addr2=&addr2*&shunt*32768. ) if &addr1==0.0 &addr1=0. else if &addr1>4096. &addr1=4096. else &addr1=conv.floattoint(&addr1) if &addr2==0.0 &addr2=0. else if &addr2>4096. &addr2=4096. else &addr2=conv.floattoint(&addr2) return &addr1 &addr2 ;--------- applyend: ) ) dialog.set a.eq dialog.set d.center dialog.set t.break ) ; -------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------- menuitem "Multiple trace after..." ( local &csel &csel="" if I.ADC.ENABLE(i.v0a) &csel="&csel"+",V0" if I.ADC.ENABLE(i.v1a) &csel="&csel"+",V1" if I.ADC.ENABLE(i.v2a) &csel="&csel"+",V2" if I.ADC.ENABLE(i.v3a) &csel="&csel"+",V3" if I.ADC.ENABLE(i.i0a)&&(I.ADC.SHUNT(i.i0a)!=0) &csel="&csel"+",I0" if I.ADC.ENABLE(i.i1a)&&(I.ADC.SHUNT(i.i1a)!=0) &csel="&csel"+",I1" if I.ADC.ENABLE(i.i2a)&&(I.ADC.SHUNT(i.i2a)!=0) &csel="&csel"+",I2" if I.ADC.ENABLE(i.p0a)&&(I.ADC.SHUNT(i.p0a)!=0) &csel="&csel"+",P0" if I.ADC.ENABLE(i.p1a)&&(I.ADC.SHUNT(i.p1a)!=0) &csel="&csel"+",P1" if I.ADC.ENABLE(i.p2a)&&(I.ADC.SHUNT(i.p2a)!=0) &csel="&csel"+",P2" if string.mid("&csel",0,1)=="," &csel=string.cut("&csel",1) dialog (& header "Multiple trace after " pos 0x1 1.3 6. 1. chan: PULLDOWN "&csel" "" pos 0x8 1.3 22. addr: defedit "" "" pos 33. 0.7 7. 1. a.eq: choosebox "equal" "" pos 33. 1.7 7. 1. a.not: choosebox "! equal" "" pos 41. 0.7 7. 1. a.ris: choosebox "rising" "" pos 41. 1.7 7. 1. a.fal: choosebox "falling" "" pos 0. 0. 49. 3.5 box "Channel Volt/Amp/Watt Range" pos 1. 3. 11. 1. text "Cycles to trace:" delay: edit "1000." "" pos 15. 3.5 9. defbutton "Ok" ( dialog.execute apply dialog.end ) pos 39. 3.5 9. button "Cancel" "dialog.end" pos 27. 3.5 9. apply: button "Apply" ( local &addr &addrdecl &triggerA &tdelay &tracetrigger local &addr1 &addr2 &addr1l &addr1h &addr2l &addr2h local &chan &channel on error jumpto ( beep 5. print "Input error, please check syntax" enddo ) ; ----------------------------------------------------------------------- &addrdecl="" &addr=dialog.string(addr) &chan=dialog.string(chan) gosub CheckRange &addr &chan ENTRY &addr1 &addr2 ; ------------------------------------------------------------------------ &tdelay=dialog.string(delay) ; &tdelay=&tdelay*1.6 ; &tdelay=conv.floattoint(&tdelay) ; &tdelay="&tdelay"+"us" if dialog.boolean(a.eq)||dialog.boolean(a.not) ( if dialog.boolean(a.eq) &triggerA="AlphaRange" else if dialog.boolean(a.not) &triggerA="!AlphaRange" Integrator.ReProgram ( ; Volt/Amp/Watt Range: &addr SELECTORRANGE AlphaRange &addr1--&addr2 ; Channel &chan SELECTOR Channel i.A15.Falling &channel ; Delay Counter EXTERNSYNCCOUNTER delay &tdelay start: Sample.ON if &triggerA&&Channel CONTinue if &triggerA&&Channel occured: Counter.Enable delay Counter.Restart delay IF delay Sample.OFF IF delay GOTO start IF delay ) ) else ( if dialog.boolean(a.ris) ( &addr1l=0. &addr1h=&addr1 &addr2l=&addr1 &addr2h=4096. ) else ( &addr2l=0. &addr2h=&addr2 &addr1l=&addr2 &addr1h=4096. ) Integrator.ReProgram ( ; Voltage/Current Range: &addr SELECTORRANGE AlphaRange &addr1l--&addr1h SELECTORRANGE BetaRange &addr2l--&addr2h ; Channel &chan SELECTOR Channel i.A15.Falling &channel ; DelayCounter EXTERNSYNCCOUNTER delay &tdelay start: CONTinue IF AlphaRange&&Channel startA: Sample.ON IF BetaRange&&Channel CONTinue IF BetaRange&&Channel occured: Counter.Enable delay Counter.Restart delay IF delay Sample.OFF IF delay GOTO start IF delay ) ) print "Analyzer programmed." goto applyend ;--------- CheckRange: ENTRY &addr &chan local &shunt &PwrVolt &shunt=0 &PwrVolt=0 ; check channel if "&chan"=="V0" &channel="i.A14.Low i.A13.Low i.A12.Low" else if "&chan"=="V1" &channel="i.A14.Low i.A13.Low i.A12.High" else if "&chan"=="V2" &channel="i.A14.Low i.A13.High i.A12.Low" else if "&chan"=="V3" &channel="i.A14.Low i.A13.High i.A12.High" else if "&chan"=="I0"||"&chan"=="P0" ( &channel="i.A14.High i.A13.Low i.A12.Low" &shunt=I.ADC.SHUNT(i.i0a) &PwrVolt=I.ADC.SHUNT(i.p0a) ) else if "&chan"=="I1"||"&chan"=="P1" ( &channel="i.A14.High i.A13.Low i.A12.High" &shunt=I.ADC.SHUNT(i.i1a) &PwrVolt=I.ADC.SHUNT(i.p1a) ) else if "&chan"=="I2"||"&chan"=="P2" ( &channel="i.A14.High i.A13.High i.A12.Low" &shunt=I.ADC.SHUNT(i.i2a) &PwrVolt=I.ADC.SHUNT(i.p2a) ) ; check empty if "&addr"=="" ( beep 5. print "Input error: Empty Range" enddo ) ; check range EVAL &addr &t1=eval.type() if (&t1==0x80) ; DRange ( &len=STRING.LEN("&addr") &cut=STRING.SCAN("&addr","--",0) &addr1=STRING.CUT("&addr",-(&len-&cut)) &addr2=STRING.CUT("&addr",&cut+2) ) else ( &addr1=&addr &addr2=&addr ) ; check lo-val EVAL &addr1 &t1=eval.type() ; &DInteger DIntNum DFloat DHex DNumeric if (&t1!=0x08)&&(&t1!=0x2E)&&(&t1!=0x10)&&(&t1!=0x04)&&(&t1!=0x3E) ( &t1="Input Error: "+"&t1"+" no valid value!" print %ERROR "&t1" enddo ) ; check hi-val EVAL &addr2 &t1=eval.type() ; &DInteger DIntNum DFloat DHex DNumeric if (&t1!=0x08)&&(&t1!=0x2E)&&(&t1!=0x10)&&(&t1!=0x04)&&(&t1!=0x3E) ( &t1="Input Error: "+"&t1"+" no valid value!" print %ERROR "&t1" enddo ) ; calculation of trigger value if "&chan"=="V0"||"&chan"=="V1"||"&chan"=="V2"||"&chan"=="V3" ( ; voltage calculation ; &addr1=&addr1*4096.*1000./5000. &addr1=&addr1*819.2 &addr2=&addr2*819.2 ) else ( if "&chan"=="P0"||"&chan"=="P1"||"&chan"=="P2" ( &addr1=&addr1/&PwrVolt &addr2=&addr2/&PwrVolt ) ; current calculation ; &addr1=&addr1*&shunt*4096.*1000.*2./125. &addr1=&addr1*&shunt*32768. &addr2=&addr2*&shunt*32768. ) if &addr1==0.0 &addr1=0. else if &addr1>4096. &addr1=4096. else &addr1=conv.floattoint(&addr1) if &addr2==0.0 &addr2=0. else if &addr2>4096. &addr2=4096. else &addr2=conv.floattoint(&addr2) return &addr1 &addr2 ;--------- applyend: ; v end button OK ) ) ; v end menuitem multiple trace after dialog.set a.eq ) ) ; -------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------- popup "[:alist]&List" ( default menuitem "&Default" "Integrator.List i.V0A i.V1A i.V2A i.V3A i.I0A i.I1A i.I2A" menuitem "&All" "Integrator.List ALL" menuitem "[:correlate]&Tracking with Timing and Draw" ( Integrator.Timing /ZoomTrack Integrator.Draw i.V0A i.V1A i.V2A i.V3A i.I0A i.I1A i.I2A /ZoomTrack Integrator.List i.V0A i.V1A i.V2A i.V3A i.I0A i.I1A i.I2A /Track ) ) ; - - - - - - - - - - - - - - - - - popup "[:atiming]&Timing" ( default menuitem "&Default" "Integrator.Timing" menuitem "&All" "Integrator.Timing ALL" menuitem "[:correlate]&Tracking with List and Draw" ( Integrator.List i.V0A i.V1A i.V2A i.V3A i.I0A i.I1A i.I2A /Track Integrator.Draw i.V0A i.V1A i.V2A i.V3A i.I0A i.I1A i.I2A /ZoomTrack Integrator.Timing /ZoomTrack ) ) popup "[:adraw]&Draw" ( default menuitem "&Default" "Integrator.Draw %Float.MICRO" menuitem "&Channel V0-V1-V2-V3" "Integrator.Draw %Float.MICRO i.V0A i.V1A i.V2A i.V3A" menuitem "&Channel V0" "Integrator.Draw %Float.MICRO i.V0A" menuitem "&Channel V1" "Integrator.Draw %Float.MICRO i.V1A" menuitem "&Channel V2" "Integrator.Draw %Float.MICRO i.V2A" menuitem "&Channel V3" "Integrator.Draw %Float.MICRO i.V3A" menuitem "&Channel I0-I1-I2" "Integrator.Draw %Float.MICRO i.I0A i.I1A i.I2A" menuitem "&Channel I0" "Integrator.Draw %Float.MICRO i.I0A" menuitem "&Channel I1" "Integrator.Draw %Float.MICRO i.I1A" menuitem "&Channel I2" "Integrator.Draw %Float.MICRO i.I2A" menuitem "&Channel P0-P1-P2" "Integrator.Draw %Float.MICRO i.P0A i.P1A i.P2A" menuitem "&Channel P0" "Integrator.Draw %Float.MICRO i.P0A" menuitem "&Channel P1" "Integrator.Draw %Float.MICRO i.P1A" menuitem "&Channel P2" "Integrator.Draw %Float.MICRO i.P2A" menuitem "[:correlate]&Tracking with List and Timing" ( Integrator.List i.V0A i.V1A i.V2A i.V3A i.I0A i.I1A i.I2A /Track Integrator.Timing /ZoomTrack Integrator.Draw i.V0A i.V1A i.V2A i.V3A i.I0A i.I1A i.I2A /ZoomTrack ) ) addhere separator menuitem "[:save]Save trace data ..." "Integrator.SAVE" menuitem "[:load]Load reference data ..." "Integrator.LOAD *" separator ; - - - - - - - - - - - - - - - - - menuitem "&Reset" "Integrator.RESet" ) ) ; -------------------------------------------------------------------------------- ; --------------------------------------------------------------------------------