LabVIEW串口异步查询方式操作

 

LabVIEW串口异步查询方式操作

  2007-11-09

发送命令Visa Write发送命令时,其按初始化打开串口的格式操作,如波特率,奇偶检验,结束符等。返回变量 return count 大小仅指 write buffer 的长度,write buffer "#01",那么return count 返回3

 

读取缓冲区Visa Read首先应该输入想要读取多少字节 byte countreturn 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个字节,且与数据格式不一致,程序应放弃数据,重新发送数据采集命令。

这就会造成在发送控制命令时,采集与控制混乱。可能造成报文丢失,且程序需多次发送命令,运行效率降低。

解决办法:设置一采集中断位,在发送信号控制命令前,采集中断位置位,然后再发送控制命令,待控制命令正常响应后,采集中断位复位。

 

示例程序:

数据采集:

信号控制:

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值