Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MATLAB中GPIB到PyVISA的转换_Python_Matlab_Matlab Class_Gpib - Fatal编程技术网

Python MATLAB中GPIB到PyVISA的转换

Python MATLAB中GPIB到PyVISA的转换,python,matlab,matlab-class,gpib,Python,Matlab,Matlab Class,Gpib,我继承了一些用于通过GPIB连接编程XYZ阶段的MATLAB代码。为了使它更兼容Python中的一些现有代码,我需要以某种方式对其进行翻译,例如使用PyVISA包。我真的很想得到一些帮助 所以,到目前为止,我所做的只是基本的工作,即 from visa import * stage = instrument("GPIB::2") 由此,我可以使用identification命令并正确获取设备的ID: stage.write("*IDN?") 那么,你知道如何将下面的MATLAB转换成适当的P

我继承了一些用于通过GPIB连接编程XYZ阶段的MATLAB代码。为了使它更兼容Python中的一些现有代码,我需要以某种方式对其进行翻译,例如使用PyVISA包。我真的很想得到一些帮助

所以,到目前为止,我所做的只是基本的工作,即

from visa import *
stage = instrument("GPIB::2")
由此,我可以使用identification命令并正确获取设备的ID:

stage.write("*IDN?")
那么,你知道如何将下面的MATLAB转换成适当的PyVISA命令吗?我最大的问题是我真的不知道如何翻译语法

classdef cascade12000b < handle
    properties(Constant)
        GPIB_ADDRESS = 28;
        DEVICE_TAG = 'Cascade 12000B Probe Station';
        DEVICE_ID = 2;
    end

    properties
        gpib_conn;
    end

    methods
        function [obj] = cascade12000b()
            obj.open();
        end

        function [x, y, z] = get_position(obj)
            [r] = obj.exec_command(sprintf(':MOV:ABS? %d', cascade12000b.DEVICE_ID));
            tmp = sscanf(r, '%d %d %d');
            x = tmp(1);
            y = tmp(2);
            z = tmp(3);
        end

        function [] = move_absolute(obj, x, y)
            [~, ~, z] = obj.get_position();
            obj.exec_command(sprintf(':MOV:ABS %d %d %d %d', cascade12000b.DEVICE_ID, x, y, z));
        end

        function [] = move_relative(obj, dx, dy)
            obj.exec_command(sprintf(':MOV:REL %d %d %d %d', cascade12000b.DEVICE_ID, dx, dy, 0));
        end

像这样的东西会有用的

class Cascade12000b(object):
    """A Cascade12000b driver.

    :param connection: A connection object, used to communicate with the real device.
        The connection interface should conform to the following interface.
        It must have two methods:

        * `.write()` taking a string message
        * `.ask()` taking a string message, returning a string response

    :param int id: The device id

    """
    def __init__(self, connection, id=2):
        self.connection = connection
        self.id = int(id)

    def position(self):
        """Returns a tuple `(x,y,z)` with the position coordinates."""
        response = self.connection.ask(':MOV:ABS? {0:d}'.format(self.id))
        # assuming whitespace separated response
        return tuple(int(x) for x in reponse.split())

    def move_absolute(self, x, y, z=None):
        """Sets the position in absolute coordinates."""
        if z is None:
            _, _, z = self.position()
        self.connection.write(':MOV:ABS {0:d} {1:d} {2:d} {3:d}'.format(self.id, x, y, z)

    def move_relative(self, dx, dy, dz=0):
        """Sets the position in relative coordinates."""
        self.connection.write(':MOV:REL {0:d} {1:d} {2:d} {3:d}'.format(self.id, dx, dy, dz)
你会像这样使用它吗

# Injecting the connection has the advantage that you can change the implementation, e.g. # to linux-gpib
>>>connection = visa.instrument('GPIB::28')
>>>device = Cascade12000b(connection)
>>>device.move_absolute(10, 13, 20)
>>>device.position()
10, 13, 20
>>>device.move_relative(2,2)
>>>device.position()
12,15,20
如果您必须编写多个设备驱动程序,您可能需要查看一些python软件包,如Note:I'm the author of slave or