class WSta2012 < Instrument # function generater # Teledyne Lecroy WaveStation 2012 #include UsbTmc def instrument() channel;basic? end attr_reader :ch attr_reader :func attr_reader :freq attr_reader :amp attr_reader :offset def channel(n=1) # select channel @ch=n.to_i end def sine(freq=@freq,amp=@amp,offset=@offset) @func="SINE";@freq=freq;@amp=amp;@offset=offset basic() end alias_method :sin, :sine def square(freq=@freq,amp=@amp,offset=@offset,dcyc=50) @func="SQUARE";@freq=freq;@amp=amp;@offset=offset basic(duty:dcyc) end alias_method :squ, :square def ramp(freq=@freq,amp=@amp,offset=@offset,symm=50) @func="RAMP";@freq=freq;@amp=amp;@offset=offset basic(symmetry:symm) end def pulse(freq=@freq,amp=@amp,offset=@offset,dcyc=nil) @func="PULSE";@freq=freq;@amp=amp;@offset=offset basic(duty:dcyc) end alias_method :puls, :pulse def noise(freq=@freq,amp=@amp,offset=@offset) @func="NOISE";@freq=freq;@amp=amp;@offset=offset basic() end alias_method :nois, :noise def dc(offset=@offset) @func="DC";@freq=freq;@amp=amp;@offset=offset.to_f/2 basic() end def on(n=@ch) @ch=n.to_i talk "C%d:OUTP ON,LOAD,HZ"%@ch end def off(n=@ch) talk "C%d:OUTP OFF"%@ch end # arbitrary waveform def arbitrary(num=2,freq=@freq,amp=@amp,offset=@offset) str="C%d:ARWV %s,%s;"%[@ch,num.class==String ? "NAME" : "INDEX",num] talk(str) @func="ARB";@freq=freq;@amp=amp;@offset=offset basic() end alias_method :arb, :arbitrary def waveform(num=50,*data) #50-60 for WaveStation2000 data=data.map{|i|sprintf("%.5e",i)} data=(["Amplitude"]+data)*"\x0a"+"\x0a" str="WVCSV M%d,WAVENM,TEST,CSVLENG,%d,CSVDATA,%s;"%[num,data.size,data] talk(str) end def waveform?() # store list talk "STL?" listen(1000).chomp.split(/,\s*/).each_slice(2).map(&:last) end # burst mode def burst(period=nil,phase=0,delay=0) str="C%d:BTWV STATE,%s,PRD,%s,STPS,%s,DLAY,%s;"%[@ch,"ON",period,phase,delay] str="C%d:BTWV STATE,%s;"%[@ch,"OFF"] unless period talk(p str) end protected def basic(symmetry:nil, duty:nil, phase:nil) symmetry=",SYM,%s"%symmetry if symmetry duty=",DUTY,%.2f"%duty if duty phase=",PHSE,%.2f"%phase if phase str="C%d:BSWV WVTP,%s,FRQ,%s,AMP,%s,OFST,%s%s%s%s;"%[@ch,@func,@freq,@amp,@offset,symmetry,duty,phase] talk(str) end def basic?() talk "C%d:BSWV?"%@ch str=Hash[*listen.split[1].split(/,/)] @func=str["WVTP"]; @freq=str["FRQ"]; @amp=str["AMP"]; @offset=str["OFST"] # @func,@freq,@amp,@offset=%w"WVTP FRQ AMP OFST".map{|i|str[i]} end end #class