linux上VXI-11协仪服务器的实现
[复制链接]
本帖最后由 石玉 于 2017-4-1 14:15 编辑
此内容由EEWORLD论坛网友石玉原创,如需转载或用于商业用途需征得作者同意并注明出处
这几天在看VXI-11协仪,这个协仪应用比较少,在网上基本找不到资料,经过老大的点拨,终于成功运行了VXI-11协仪服务器,也就是模拟出了一个LXI设备
首先解释几个名词:
LXI设备:符合LXI规范的仪器设备,我的理解是用网口通信的仪器设备就是LXI设备
VXI-11:控制器和设备通过TCP/IP网络通信的网络仪器协仪
RPC:远程调用,基于C/S模型,一台计算机上的程序调用另一台计算机上的程序
XDR:外部数据表示,就是在不同的计算机系统中转换数据的格式,避免出现类似大小端的问题
使用linux做开发的好处是首先TCP/IP协仪栈已经有了,portmap和RPC也有了(如果没有就安装一个),我们只用关心RPC编程了
在网上找了一个VXI-11协仪客户端的例子,我们要做的是服务器,所我只需要他的种子文件vxi11.x(种子文件后面会给出),在种子文件中定义了VXI-11协仪的三个通道DEVICE_ASYNC,DEVICE_CORE,DEVICE_INTR,三个通道总共有17个消息,还定义了协仪交互时的一些数据结构,这些定义都会体现到生成的.c文件中
//中止通道有1个消息
program DEVICE_ASYNC
{
version DEVICE_ASYNC_VERSION
{
Device_Error device_abort (Device_Link) = 1;
} = 1;
} = 0x0607B0;
//核心通道有15个消息
program DEVICE_CORE
{
version DEVICE_CORE_VERSION
{
Create_LinkResp create_link (Create_LinkParms) = 10;
Device_WriteResp device_write (Device_WriteParms) = 11;
Device_ReadResp device_read (Device_ReadParms) = 12;
Device_ReadStbResp device_readstb (Device_GenericParms) = 13;
Device_Error device_trigger (Device_GenericParms) = 14;
Device_Error device_clear (Device_GenericParms) = 15;
Device_Error device_remote (Device_GenericParms) = 16;
Device_Error device_local (Device_GenericParms) = 17;
Dev