From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
04-15-2008 06:20 AM - edited 04-15-2008 06:29 AM
Hello,
I am trying to analyse
the client - server communication between the Visa Interactive
Control and the Agilent Remote Server. Since it should be
comprehensible with basic knowledge of RPCs and the VXI-11 protocol
(VXIbus), I am encountering some difficulties.
(Upper half of the
table below)
The green shaded Bytes in the call (client to server)
are RPC specific information:
(44 bytes, in 4 byte
tuples)
FragmentInfo - XID - MessageType - RPCVers - Prog - Vers -
Proc - Cred.Flavor - Cred. Length - Verf.Flavor - Verf.Length
The
following 20 bytes (turquoise shaded, 4 byte tuples) are VXI-11
specific:
struct
Create_LinkParms {
long
clientId; /* implementation specific value.*/
bool lockDevice; /* attempt to lock the device */
unsigned long lock_timeout; /* time to wait on a lock */
string device<>; /* name of device */
};
Note that „device<>“ is 4 byte for „length“ followed by the string in 4byte tuples, filled with zeros. In this certain case 4 bytes „length“ and 4 bytes for the string itself.
The reply (server to client) seems pretty clear, too: Green shaded RPC, followed by grey shaded VXI11 specific reply (16 Bytes, 4byte tuples):
struct
Create_LinkResp {
Device_ErrorCode
error;
Device_Link lid;
unsigned short abortPort;
/* for the abort RPC */
unsigned long
maxRecvSize; /* specifies max data size in bytes
device will
accept on a write */
};
Everything seems to be fine, but there
is no attempt of the VISA Interactive IO to connect to the abort
port. (The assigned port is accessible, e.g. via telnet!)
Then
I have tried to connect to Agilent Remote Server with Agilent
Interactive IO.(Lower half of table below)
Call (Client to
server): Green shaded bytes are RPC specific value, turqouise shaded
bytes differ from the VXI-11 create_LinkParms call:
The last bytes
(4 tuples) are the string and the 4 bytes ahead are the length. But
what are these 4 zero bytes?? what happend to clientID, lockDevice
and lock_timeout? I assumed that lockDevice and lock_timeout are not
present if the clientID is 0x00000000.
The reply (server to
client) is strange as well:
Green shaded bytes = RPC, thats ok.
Now there are 36 Bytes insted of 16!
The grey shaded bytes are the
bytes I've expected, even in the right order:
0x00000000 for error
code(=OK), 0x003afb68 link ID (seems ok),the abort port 0x00000440
and the maxRecvSize 0xffffffff. This message is accepted as well, the
Agilent Interactive IO even connects to the abort port.
But I
can't identify the magenta bytes in between and don't know where they
come from. Are there any information about generating VXI-11 replys
aside from the VXI-11 Protocol by VXIbus? Note that I can not use the
rpcgen because my system does not support the required libaries. I am
looking forward to any help I can get!
04-15-2008 08:16 PM - edited 04-15-2008 08:22 PM
04-16-2008 02:55 AM
Thank you for the answer! I noticed the difference in the program# and the attempt to reconnect, too. But I've not traced it any further because I assumed that this is the result of not getting an Abort Channel. I'm going to examine this more closely and post my results here.