首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ioctl errorno: 25在使用python-gpib的GPIB通信中

ioctl errorno: 25在使用python-gpib的GPIB通信中
EN

Stack Overflow用户
提问于 2015-11-27 03:55:12
回答 1查看 596关注 0票数 1

我正在尝试使用National Instruments的GPIB-USB-HS适配器与Tektronix示波器TDS 210通信。我的系统是Ubuntu14.04.3,我在其中安装了linux-gpib,链接如下:Linux GPIB Driver package (source)和python-gpib。我像这样重新配置了/etc/gpib.conf:

代码语言:javascript
复制
interface {
    minor = 0   /* board index, minor = 0 uses /dev/gpib0, minor = 1 uses /dev/gpib1, etc. */
    board_type = "ni_usb_b" /* type of interface board being used */
    name = "tds"    /* optional name, allows you to get a board descriptor using ibfind() */
    pad = 0 /* primary address of interface             */
    sad = 0 /* secondary address of interface           */
    master = yes    /* interface board is system controller */
    timeout = TNONE /* timeout for commands */
}
device {
       minor = 0
       name = "ATTN"
       pad = 0
       sad = 0
}

lsmod给了我这个:

代码语言:javascript
复制
$ lsmod | grep gpib
ni_usb_gpib            36515  1 
gpib_common            38274  3 ni_usb_gpib

dmesg:

代码语言:javascript
复制
$ dmesg | grep gpib
[ 2173.992039] ni_usb_gpib driver loadingni_usb_gpib: probe succeeded for path: usb-0000:00:1a.0-1.2
[ 2173.992098] usbcore: registered new interface driver ni_usb_gpib
[ 2173.992102] gpib: registered ni_usb_b interface
[ 2173.995077] ni_usb_gpib: attach

但是,当尝试使用ibtest与示波器通信时,我收到以下错误:

代码语言:javascript
复制
gpib status is: 
ibsta = 0x8100  < ERR CMPL >
iberr= 0
EDVR 0: OS error
ibcnt = 25

使用Python:

代码语言:javascript
复制
import Gpib
tds = Gpib.Gpib(0,0)
tds.write("*IDN?")
---------------------------------------------------------------------------
GpibError                                 Traceback (most recent call last)
<ipython-input-4-e61e6a76ac49> in <module>()
      1 import Gpib
      2 inst = Gpib.Gpib(0,0)
----> 3 inst.write("*IDN?")

/usr/local/lib/python2.7/dist-packages/Gpib.pyc in write(self, str)
     47 
     48         def write(self,str):
---> 49                 gpib.write(self.id, str)
     50 
     51         def write_async(self,str):

GpibError: write() error: Inappropriate ioctl for device (errno: 25)

是否有人已经有了类似的问题,或者知道如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2016-03-29 00:58:19

我在ibtest和python中遇到了与您完全相同的错误。我在试着让gpib在圆周率上工作。我遵循了教程https://xdevs.com/guide/ni_gpib_rpi/

我通过更改我的/etc/gpib.conf (注意eos)修复了它:

代码语言:javascript
复制
interface {
minor = 0  
board_type = "ni_usb_b"
name = "violet"
pad = 0 
sad = 0 
timeout = T30s  
eos = 0xd       /* EOS Byte, was 0xa and I got same errors as you */
set-reos = yes   
set-bin = no    
set-xeos = no   
set-eot = yes   
master = yes    
}

现在一切都正常了!

代码语言:javascript
复制
$ sudo gpib_config
$ sudo ibtest
Do you wish to open a (d)evice or an interface (b)oard?
    (you probably want to open a device): d
enter primary gpib address for device you wish to open [0-30]: 3
trying to open pad = 3 on /dev/gpib0 ...
You can:
    w(a)it for an event
    ...
    (w)rite data string
: w
enter a string to send to your device: *idn?
sending string: *idn?

gpib status is:
ibsta = 0x2100  < END CMPL >
iberr= 0

ibcnt = 6
You can:
    w(a)it for an event
    ...      
    (r)ead string

: r
enter maximum number of bytes to read [1024]:
trying to read 1024 bytes from device...
received string: 'AEROFLEX,3920,1000662592,3.7.0,2'
Number of bytes read: 32
gpib status is:
ibsta = 0x2100  < END CMPL >
iberr= 0

ibcnt = 32

在Python中,除非我在实例化后调用clear,否则我会得到错误,然后就可以运行了:

代码语言:javascript
复制
? sudo python
Python 2.7.9 (default, Mar  8 2015, 00:52:26)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Gpib
>>> inst = Gpib.Gpib(0,3)
>>> inst.clear()
>>> inst.write("*idn?")
>>> inst.read(100)
'AEROFLEX,3920,1000662592,3.7.0,2'

如果你仍然不能与乐器对话,试试字符串ID?而不是*IDN?一些hp设备有一个备用的命令语法,它使用不同的命令字符串,请查看手册(可能在后面顺便提到),你通常可以用一个命令来回切换语法。祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33946130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档