LabVIEW串口异步查询操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LabVIEW串口异步查询方式操作
Laiping
2007-11-09
发送命令Visa Write:发送命令时,其按初始化打开串口的格式操作,如波特率,奇偶检验,结束符等。返回变量return count 大小仅指write buffer 的长度,write buffer 是"#01",那么return count 返回3。
读取缓冲区Visa Read:首先应该输入想要读取多少字节byte count,return count为实际读取到的字节数量。读取之后串口缓冲区字节数将相应减少return count。比如缓冲区现在存有22个字节,如果输入byte count 等于22,那么将读出所有22字节,同时return count返回22;
如果输入byte count 等于20,那么将读出缓冲区前面20字节,return count返回20,此时缓冲区内还有2字节,这时如紧接着Visa Read调用串口属性Number of Bytes at Serial Port,其值为2,在其它情况下,其值为0。但是如果在Visa Read后先调用VISA高级节点Visa Flush IO Buffer,清空缓冲区,再调用属性Number of Bytes at Serial Port,其值也将返回0;
如果输入byte count 大于22,那么将读出所有22字节,同时return count返回22。
串口写入读取操作的以上特点,决定了在实际编写串口程序时应考虑的一些问题:
通常情况下,一个串行通信程序由数据采集与信号控制组成。数据采集需要循环采集,而信号控制只在有需要时发出控制命令。控制命令发出后,一般需要判断设备是否响应了命令,这就需要读取输入缓冲区。但在发送控制命令时,数据采集命令可能也正在发送,因为数据采集是不断循环采集的,因此此时输入缓冲区可能是采集到的数据,也有可能是控制命令的响应报文,采集的数据与控制命令响应报文在字节大小与报文格式上一般不同。比如采集的数据为:>+0022.3 ,控制命令响应报文为!01 ,那么此时如果程序先读取数据,那么读取byte count等于8,之后缓冲区大小为0,而此时再读取响应就为空,程序会认为设备未能正确响应控制,将放弃此次操作,重新发送控制命令;
如果程序先读取响应,那么读取byte count等于3,如果此时对应的缓冲区为>+0022.3,那读取到的格式与响应报文不一致,程序应判断为设备未正常响应控制命令,应放弃此次操作。读取响应之后缓冲区变为022.3,此时读取采集数据,将只读到5个字节,且与数据格式不一致,程序应放弃数据,重新发送数据采集命令。
这就会造成在发送控制命令时,采集与控制混乱。可能造成报文丢失,且程序需多次发送命令,运行效率降低。
解决办法:设置一采集中断位,在发送信号控制命令前,采集中断位置位,然后再发送控制命令,待控制命令正常响应后,采集中断位复位。
示例程序:
数据采集:
信号控制: