2

機器制御ツールボックスなしでMATLABを使用してGPIB接続を確立する方法はありますか?(私はそれを持っていません)。また、MATLABが外部デバイスのRS232パラメータ値(ボーレート、ストップビットなど)を知る方法もあります。RS232接続の場合、次のコードがあります。

% This function is meant to send commands to Potentiostat Model 263A.

% A run includes turning the cell on, reading current for time t1, turning

% the cell off, waiting for time t2.

% t1 is the duration [secs] for which the Potentiostat must run (cell is on)

% t2 is the duration [secs] to on after off

% n is the number of runs 

% port is the serial port name such as COM1

function [s] = Potentiostat_control(t1,t2,n)

port = input('type port name such as COM1', 's')

s = serial(port);

set(s,'BaudRate', 9600, 'DataBits', 8, 'Parity', 'even', 'StopBits', 2 ,'Terminator', 'CR/LF'); 

fopen(s)

%fprintf(s,'RS232?')

disp(['Total runs requested = ' num2str(n)]) 

disp('i denotes number of runs executed so far..');

for i=1:n

    i

    %data1 = query(s, '*IDN?')

    fprintf(s,'%s','CELL 1'); % sends the command 'CELL 1'

    %fprintf(s,'%s','READI');

    pause(t1);

    fprintf(s,'%s','CELL 0');

    %fprintf(s,'%s','CLEAR');

    pause(t2);

end

fclose(s)
4

3 に答える 3

2

GPIBの質問について、GPIBカードには呼び出し可能なライブラリ(Windowsを使用している場合はDLL)が付属していますか?Matlabには、外部ライブラリを呼び出すためのインターフェイスがあります。基本的な手順は、Matlabにを使用してヘッダーファイルを解析させLOADLIBRARY、次にを使用して使用可能な関数を表示し、を使用して関数をLIBFUNCTIONS呼び出すことCALLLIBです。

RS232の質問については、外部のドキュメントがなければ、ホスト側がデバイス側のパラメータを知る方法はないと思います。

于 2010-05-13T19:41:23.670 に答える
1

NationalInstrumentsVISANI488.2を使用しています。

まず、NI-VISAセットアップでをチェックしたことを確認してVisaNS.NET APIください。次の図を参照してください。

ここに画像の説明を入力してください

私はNationalInstruments.VisaNS.MessageBasedSessionMATLABの.NETインターフェイスを介して使用しています。

NIVISAをMATLABにラップする次のMATLABクラスを作成しました。

classdef Visa
    properties
        vi
        SrqMask
        SrqTimeout
    end
    methods
        function obj = Visa(resourceName)
            NET.addAssembly('NationalInstruments.VisaNS');
            obj.vi = NationalInstruments.VisaNS.MessageBasedSession(resourceName);
            obj.SrqMask = '*CLS;*ESE 1;*SRE 32';
            obj.SrqTimeout = 10000;
        end
        function obj = delete(obj)
            obj.vi.Dispose();
        end
        function obj = Dispose(obj)
            obj.vi.Dispose();
        end
        function obj = Write(obj, data)
            obj.vi.Write(data);
        end
        function data = ReadString(obj)
            data = char(obj.vi.ReadString());
        end
        function data = ReadByteArray(obj)
            data = obj.vi.ReadByteArray();
        end
        function data2 = Query(obj, data)
            data2 = char(obj.vi.Query(data));
        end
        function obj = SrqBegin(obj)
            obj.vi.EnableEvent(NationalInstruments.VisaNS.MessageBasedSessionEventType.ServiceRequest, ...
                NationalInstruments.VisaNS.EventMechanism.Queue);
            obj.vi.DiscardEvent(NationalInstruments.VisaNS.MessageBasedSessionEventType.ServiceRequest);
            obj.Write(obj.SrqMask);
        end
        function status = SrqEnd(obj)
            evt = obj.vi.WaitOnEvent(NationalInstruments.VisaNS.MessageBasedSessionEventType.ServiceRequest, ...
                obj.SrqTimeout);
            evt.Dispose();
            status = obj.vi.ReadStatusByte();
            obj.vi.DisableEvent(NationalInstruments.VisaNS.MessageBasedSessionEventType.ServiceRequest, ...
                NationalInstruments.VisaNS.EventMechanism.Queue);           
        end
        function obj = SrqWrite(obj, data)
            obj.SrqBegin();
            obj.Write(data);
            obj.SrqEnd();
        end
        function data2 = SrqQuery(obj, data)
            obj.SrqBegin();
            obj.Write(data);
            obj.SrqEnd();
            data2 = obj.ReadString();
        end
    end
end

SRQ要求を処理するためのメソッドもいくつか追加しました。

次のコードを使用すると、たとえばGPIB計測器を制御できます。

resourceName = 'GPIB0::20::INSTR'; % GPIB adapter 0, Instrument address 20
vi = Visa(resourceName);
idn = vi.QueryString('*IDN?');

AMessageBasedSessionは、GPIB、イーサネット、またはUSBを介して計測器と通信するために使用できます。

https://stackoverflow.com/a/49388678/7556646も参照してください。

于 2018-03-20T16:58:05.297 に答える
0

RS232パラメータについてはわかりませんが、tcpipを備えた機器の場合、SCPIコマンドを非常に簡単に送信できます。

これは、SCPIコマンドをRohde&Schwarzの機器に送信する例です。VISAやIVIは必要ありません。ポート5025を使用します。

t = tcpip('147.214.90.136', 5025); 
fopen(t); 
fprintf(t, '*IDN?');
fprintf(1, DataReceived)

完了したら、接続を閉じます。

fclose(t); 
delete(t); 
clear t 
于 2018-12-14T06:39:49.697 に答える