无法定位程序输入点 于动态链接库-诺顿杀毒软件企业版
![mscoree dll下载](/uploads/image/0658.jpg)
2023年4月6日发(作者:directx 9 0)
C#使⽤NIVISA实现程控仪器的⾃动化控制
转⾃
1.概述
⽣产测试当中,测试仪器不可或缺,如果是⼩规模⽣产,⼿动测试可以对付;但是要想到达⼤批量⽣产的⽬的,为了简化测试,节约时间,就需要进⾏⾃
动化测试。出于这样的需求,对仪器的⾃动化程控就有了需求。
下图是⼀个相对普遍的测试框架
整个控制过程中最为关键的部分就是上位机同测试仪器之间的通信,⾸先测试环境搭建完毕之后,能通信是关键的第⼀步,第⼆步就是⽤“仪器的语
⾔”告诉仪器我们需要它们做什么。简⽽⾔之,就是这俩步。
下⾯先介绍⼏个相关的知识点。
2.常见的控制接⼝
常见的控制接⼝主要有:GPIB、串⼝(RS-232)、USB、LAN或以太⽹。
串⾏接⼝通信速度较慢,现代测试系统已经很少使⽤。
虽然现代仪表控制接⼝丰富,但是,对于仪表⽣产⼚商和⽤户⽽⾔,使⽤最为⼴泛的是GPIB接⼝。
常⽤的USB接⼝版本为USB2.0,其⽀持三种传输速率:低速1.5Mbps,全速12Mbps和⾼速480Mbps,传输速度根据外接设备⾃动调整,⽆需设置。
直连最⼤的电缆长度5M,最多连接设备127台。
以太⽹是当今现有LAN采⽤的最通⽤的通信协议标准,可在互联设备间实现10Mbps-10Gbps数据通信。
本⼈在实际中⽤到的主要是LAN和USB⽅式,所以提及较多的主要是这俩种。
关于控制接⼝更加详细的介绍,请到相关⽹站进⾏查阅。
(可编程仪器标准语⾔)
SCPI(StandardCommandforProgrammableInstrumentation)程控仪器标准命令是1990由九家仪器公司联合推出,其建⽴在IEEE488.2的基
础,⾯向测试功能或测试信号,倡导仪器控制的⼀致性。
主要特点为:
1.程控命令⾯向测试流程,⽽不是描述仪器操作;兼容的编程环境使⽤同样的命令和参数来控制具有相同功能的仪器。
2.在与通信物理连接层硬件⽆关的⾼层次上定义程控消息。
SCPI基于IEEE488.2形成,但并不局限于GPIB接⼝,它也可⽤于RS232C,LAN,USB总线。
3.与编程⼿段和程序语⾔⽆关,SCPI⽤户测试程序模块易于移植。
SCPI有公共的命令,即对所有的仪器都是可⾏的;也有特定的命令,即不同的仪器命令不同。但所有的命令都符合SCPI标准。
对于SCPI的更详细的介绍,请查阅相关资料,这⾥不再赘述。
(虚拟仪器软件架构)
VISA是⼀个驱动程序软件架构,开发这⼀架构的⽬的在于统⼀与GPIB、串⼝、以太⽹/LAN、IEEE1394和USB仪器的通信,并简化仪器的控制应⽤。通
过VISAAPI,开发⼈员可以使⽤GPIB、串⼝、以太⽹/LAN、IEEE1394和USB仪器。
VISA具备如下优势:
接⼝独⽴性--VISA提供了⼀个单⼀的API以相同的⽅法与仪器进⾏通信,⽽不考虑其接⼝类型。例如,VISA命令,发送⼀个ASCII字符串到⼀个基于
消息的仪器,对于GPIB、串⼝、以太⽹/LAN、IEEE1394和USB接⼝是完全相同的。
⼀种⾯向对象的架构,可以⽅便地适应未来开发的仪器接⼝。
功能全⾯的仪器编程特性,通过⼀个⾮常紧凑的命令集实现。
对于VISA更详细的介绍,请查阅相关资料。
5.仪器控制过程
连接仪器:通过常⽤的控制接⼝将上位机和待控仪器连接。
确定仪器资源的名称:也称之为仪器描述符,描述了VISA资源的准确名称与位置。确认仪器的资源名称,可以到下载NI硬件驱动,打开NI-VISA软件
后可以识别出来。
在设备和接⼝选项下⾯就可以找到仪器的资源名称,如果找不到(⼤多数情况是使⽤LAN接⼝的情况),可以⼿动添加,将仪器的IP地址(有可能
需要端⼝号)输⼊,软件就可以识别仪器。
更详细的介绍请查阅NI相关⽹站或者其他资料。
编写控制程序:
这⾥需要说明两点,不同的仪器使⽤⽅法并不相同。编写仪器控制程序有⼏种⽅式。
1.使⽤仪器驱动。有的仪器⼚商可能会⾃⼰基于VISA或者SCPI开发仪器的驱动,也就是往⾼层做了进⼀步封装,同时也是是对VISA和SCPI做了进⼀
步封装,这样就进⼀步简化了开发流程。我们可以根据驱动说明或者仪器的编程说明使⽤仪器驱动软件架构。需要实现什么功能,调⽤相应的驱动API
即可。还可以参考提供的样例。
2.使⽤VISA。使⽤VISA同仪器获得通信的桥梁,然后将“仪器语⾔”通过VISA接⼝通知给仪器,仪器就会按我们的逻辑进⾏相关的操作。这⾥的仪
器语⾔需要参考仪器对应的编程说明(可以到仪器相应的官⽹下载),主要是指SCPI通信指令集。下⽂会稍作详细的介绍该⽅法。
3.实现⾃⼰的通信。这⼀点主要是针对LAN⼝通信的⽅式来说的,因为我⽬前只碰到过这⼀种情况。有的仪器并没有那么先进,去⽀持VXI-11协议,
虽然也是TCPIP类的资源名称,但是这种情况下需要我们⾃⼰去实现TCP通信过程。并不难,我们只要实现⼀个TCP的客户端就可以。通过仪器提供
的IP地址和PORT端⼝号,我们的客户端同仪器进⾏TCP连接,连接完成后给仪器发送“仪器语⾔”,同时也会接受到仪器的响应。
下⾯,详细说⼀下如何使⽤VISA同仪器进⾏通信。
⽅法⼀
平台:vs2013。
建⽴好⼯程后,现引⼊两个.NET的托管DLL,将与引⽤添加到项⽬。这两个dll⽂件在
C:ProgramFiles(x86)NationalInstrumentsMeasurementStudioVS20XXDotNETAssemblies⽬录下⾯可以找到。
打开⼀个VISA会话。
[c#]
eMessageBasedSessionmbSession;
{
ion=(MessageBasedSession)alManager().
();//资源⽂件名
5.}
(InvalidCastException){
("Resourceselectedmustbeamessage-basedsession");
8.}
(Exceptionexp){
(e);
11.}
查询数据,在创建了⼀个与我们的仪器通信的会话之后,我们可以开始发送数据⾄该仪器,并读回其响应。
[c#]
{
responseString=();
3.}
(Exceptionexp){
(e);
6.}
我们也可⽤Write函数只发送不读取数据。
最后将会话关闭
[c#]
e();
需要说明⼀点,在⽤串⼝和USB⼝控制时,我⽤这种⽅法失败了,所以⽤了第⼆种⽅法。现在我还没试验过是否该⽅法对所有的串⼝和U⼝都不能⽤,如果
你测试过了,可以相互交流⼀下。同样,这种⽅式不适⽤于使⽤Socket的仪器。
⽅法⼆
第⼆种⽅法使⽤visa接⼝。
控制流程同第⼀种⽅法差不多。⾸先,将⽂件放在⼯程的debug⽬录下⾯,如果不这么做,程序会先搜索debug⽬录,然后搜索system32⽬
录,寻找⽂件。这⾥,不像上⾯⼀样,将dll⽂件引⼊项⽬,是因为该dll⽂件是.NET⾮托管的程序集,需要显式引⼊,负责引⼊的类⽂件参考。
(注:通过dumpbin-depents***.exe或dll可以查看该⽂件是否属于托管,如果有就是托管的,否则⾮托管)
在项⽬中建⽴后就可以引⽤⾥⾯的函数。具体的使⽤⽅法请参考:NI-Visahelp。
下⾯是部分代码
[c#]
boolInit(){
(m_connect){
m_connect;
4.}
r=DefaultRM(outm_viDefaultRM);
(viError!=_SUCCESS){
false;
8.}
r=(m_viDefaultRM,resourceName,_NO_LOCK,_TMO_IMMEDIATE,outm_session);
(viError==_SUCCESS){
11.m_connect=true;
12.//clearsspectrum清除寄存器
r(m_session);
r=tf(m_session,"*CLSn");
(viError!=_SUCCESS){
16.m_connect=false;
17.}
(10);
19.}else{
20.m_connect=false;
21.}
m_connect;
23.}
这种⽅法对于不⽀持VXI-11协议的仪器也不适⽤,需要⾃⼰实现TCP通信。
对于仪器控制很多地⽅我还有弄清楚,暂时先把这段时间的收获记录⼀下,如果对这⽅⾯也有想法的话,可以随时交流。
更多推荐
mscoree dll下载
发布评论