手把手教你 LabVIEW 串口仪器控制——通信协议(指令)

http://bbs.elecfans.com/jishu_467802_1_1.html

这一节是最重要的部分。懂串口通信的,可以绕过。

问题是:很多学 LabVIEW 的各种基础都没有,真让人捉摸不透,没学过 C 或者 C++,不懂数据结构,不过,如果你真的不懂懂,我还是讲一讲。

首先你要看说明书,保证物理连接正确。其次,找到你需要的协议。
假设你找到一个仪器模块的指令,如下。一般都会有输入命令,跟返回的。

首先,用串口助手测试下。先看自己需要的功能,一般仪器的功能都特别多。而自己一般需要测试输入通道或者输出即可。所以,先找到自己需要的功能。
上位机仪器的通信方式主要分为下面几种;
①,只发送指令,不接受指令。
②,不用发送命令,就只用读取响应。
③,发送一次指令,只读取一次响应。
④,发送一次命令,就一直连续读取响应
很多人,如果自己写单片机的话,大多都一直发送命令出来,就是第②种。正常的仪器,是第①③④种居多。
所以,首先分清你的仪器的指令,有没有返回字符串等。
 

如上图所示,如果是这个仪器,你就按后面的功能发送。注意那些 dd 和 nn 是格式说明符。上图的仪器,dd 指仪器的 ID 号,如果你仪器是 01,你要输入 ASCII 格式,就是输入 *01A。注意不要混淆了格式符。


下面看看 Keithley2000 的指令怎么用。
 

如果是国外的仪器,说明手册里面,都会有个 Remote Operation.见上图,是 Keithley2000万用表的说明书。自己看相关章节指令。


如果我们要读取 Keithley2000 测量读数,就可以用下面的 SCPI 指令。
 

在串口调试助手里或者 LabVIEW 发送一个 :READ?然后就会返回仪器读数。其他指令参照说明书即可。不过国外的一些仪器,有些指令可能有先后顺序,需要按一定顺序发送。具体看说明书。
--------------------------------------------
如下是,另一个仪器的说明片段,差不多告诉了用户格式。
注意看我红框部分。每个仪器差不多都会有的。都有发送命令,和相应命令。然后发送的命令和相应的命令都是有格式的。按照说明书的格式来。这个,是发送一次指令,就返回一次响应的。后面会详细解释。
 

这台仪器,还提供了例子,自己可以用这个例子测试一下仪器通不通。后面的接受数据部分,请看字符串那一节。


下面,我们把上图的例子部分,用 LabVIEW 写一下。
注意:命令串:$012B7(cr)中$012 是 ASCII 显示下的,而 B7 是十六进制显示下的。cr是回车符,即 16 进制的 OD。



由于显示不一样,所以我用连接字符串来组合。
 

这样,最简单的收发式的仪器通信就完成了。


问:我看自带的范例,在 VISA 写之后,都有个延时,这个延时,起个什么作用?
 

这个延时,主要是因为编程人员用的是这种组合。前面已经讲过了,它读取串口缓冲区所有数据,当你发送一个数据,要等待仪器回送完响应数据,再读取才是完整的数据,所以,要等待仪器响应。这个时间,看自己摸索,最好刚好合适,毕竟一直等待也不是最好的方法。

如果是本例,由于回送的字符串是固定的,如下图,有 11 个,那你就可以不要用延时。直接用固定字符串,这样,程序自己会自动等待 11 个字符串接受完再执行下一个。


正常情况下,如果接受的字符串是固定的,推荐使用固定字符串个数,就是如下图的方式来编程,等待延时这种方式不推荐。
 

注意:以上程序是发送一次指令,仪器回送一次响应的。有些仪器的指令,可能不需要返回指令。


下面举例一下:
比如某个仪器的开关接口,开关的命令如下,没有返回值;
输出允许:OUT1
禁止:OUT0

那么最简单的程序如下,控制开
 

有些仪器,检测到串口连接或者打开电源就会往串口发送数据,利用如下组合就可以了。因为上位机只需要读串口,不需要写串口。

  • 19
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值