Instrument Control (GPIB, Serial, VISA, IVI)

cancel
Showing results for 
Search instead for 
Did you mean: 

NI-VISA & Delphi

Hello!

 

I work with programmable power supply P9610A. I use NI-VISA 18 software and drivers. I wrote this code:

 

 

function viOpenDefaultRM(rm: PInteger)
                             : Integer; stdcall; external 'visa32.dll';
function viFindRsrc(RM: Integer; Res: PChar; PfindList, PnumInstrs:
   PInteger; Resource: PChar): Integer; stdcall; external 'visa32.dll';
function viOpen(RM: Integer; ResourceName: pChar; AccessMode,TimeOut:
       Integer; vi: PInteger): Integer; stdcall; external 'visa32.dll';
procedure TForm1.Button1Click(Sender: TObject);
 var Resource: array[0..255]of Widechar;
     Status: integer;
     SerN_: PWideChar;
     ResourceName : PWideChar;
begin
  viOpenDefaultRM(@RM);
  SerN_:= PChar('?*'+LabeledEdit1.Text+'?*');
  Status:= viFindRsrc(RM, SerN_, @findList, @numInstrs, Resource);
  Status:= viOpen(RM, Resource, 0, 0, @AKIP);
end;

It doesn't work, although in Visa Test Panel all commands are successful. I start NI I/O Trace and found this:

 

In Visa Test Panel

 

9.  viOpenDefaultRM (0x00732748)
Process ID: 0x00001450         Thread ID: 0x0000140C
Start Time: 11:23:16,8840      Call Duration 00:00:00.0190
Status: 0 (VI_SUCCESS)
10.  viParseRsrc (0x00732748, "USB0::0x164E::0x0FB2::TW00027923::INSTR", 7 (0x7), 0 (0x0))
Process ID: 0x00001450         Thread ID: 0x0000140C
Start Time: 11:23:16,9030      Call Duration 00:00:00.0000
Status: 0 (VI_SUCCESS)

in my program

 

3.  viOpenDefaultRM (0x0075C3A8)
Process ID: 0x000007F8         Thread ID: 0x00000304
Start Time: 11:22:40,5149      Call Duration 00:00:00.1980
Status: 0 (VI_SUCCESS)
> 4.  viFindRsrc (0x0075C3A8, "?", 0x00000000, 0 (0x0), "")
> Process ID: 0x000007F8         Thread ID: 0x00000304
> Start Time: 11:22:42,7131      Call Duration 00:00:00.3510
> Status: 0xBFFF0011 (VI_ERROR_RSRC_NFOUND)

I.e. in function viFindRsrc only the first character is sent. What is the reason?

 

0 Kudos
Message 1 of 2
(4,029 Views)

PChar is PWideChar.

But visa32.dll need PAnsiChar.

So, try to exchange from 'PChar' to 'PAnsiChar'.

0 Kudos
Message 2 of 2
(2,725 Views)