2013/8/12 Marcos Anzorena <anzoren...@gmail.com>:
> Hello everyone:
>
> I wanted to share the code i wrote to communicate with a tektronix
> scope MSO2024. I used [0] and [1] as reference. I'm using PyUSB,
> libusb 1.0 and Fedora 16
>
> I wrote to main functions. One for opening the scope:
>
> def tekopen(idV=0x0699,idP=0x03A4):
>   dev=usbc.find(idVendor=idV,idProduct=idP)
>   if dev is None:
>     raise ValueError('No se encontro el osciloscopio')
>   if dev.is_kernel_driver_active(0):
>     dev.detach_kernel_driver(0)
>   dev.set_configuration()
>   usbt.claim_interface(dev,0)
>   return dev
>
> idV and idP can be obtained connecting the scope and then using "lsusb"
>
> The second function is for sending commands or queries to the scope:
>
> def tekcq(dev,comd,oendp=0x01,iendp=0x82):
>   n=1
>   ncomp=n^0xFF
>   mlen=len(comd)
>   fiveb=np.divide(mlen,256)
>   fourb=np.mod(mlen,256)
>   abytes=''
>   if np.mod(mlen,4)!=0:
>     nabytes=4-np.mod(mlen+12,4)
>     for x in range(0,nabytes):
>       abytes+=struct.pack('1B',0)
>   header=struct.pack('12B',1,n,ncomp,0,fourb,fiveb,0,0,1,0,0,0)
>   msg=header+comd+abytes
>   if comd[-1]!='?':
>     dev.write(oendp,msg,0,100)
>   else:
>     n=2
>     ncomp=n^0xFF
>     inr=struct.pack('12B',2,n,ncomp,0,0,1,0,0,0,0,0,0)
>     dev.write(oendp,msg,0,100)
>     dev.write(oendp,inr,0,100)
>     if comd!=':curv?':
>       res=dev.read(iendp,256,0,1000)[12:]
>       res=res.tostring()
>       return res
>     else:
>       res=dev.read(iendp,512,0,1000)
>       fend=res[8]
>       res=res[12:]
>       data=np.array(res,dtype=np.uint8)
>       while fend!=1:
>         n+=1
>         ncomp=n^0xFF
>         inr=struct.pack('12B',2,n,ncomp,0,0,1,0,0,0,0,0,0)
>         dev.write(oendp,inr,0,100)
>         res=dev.read(iendp,512,0,1000)
>         fend=res[8]
>         res=res[12:]
>         data=np.hstack((data,res))
>       return data
>
> If we want to send a command to scope we use:
>
> tekcq(tek,':head off')
>
> If we want to send a query:
>
> a=tekcq(tek,':hor:sca?')
>
> One special case is when we want to query waveform data from the
> scope, in that case we use:
>
> data=tekcq(tek,':curv?')
>
> Hope is helpful for someone.
>
> [0] http://comments.gmane.org/gmane.comp.python.pyusb.user/477
>
> [1] http://www1.tek.com/forum/viewtopic.php?f=5&t=4389
>
>

This is something that better fits in an wiki. After I received a
sourceforge email notifying me that they were shutdown trac, I decided
to migrate everything but main page and downloads to github, but I had
no time, and eventually I think SF aborted this idea. I think I will
enable the github wiki for PyUSB, so people like you can put their
contributions there.

-- 
Best Regards,
Wander Lairson Costa

------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
pyusb-users mailing list
pyusb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pyusb-users

Reply via email to