LABVIEW 做串口通信,接收十六进制,为什么 终止符我老是禁止不了呢。遇到一个 0x0A数据就被断掉。
首先,启用终止符那里设为False是没错的
然后你这个串口配置有问题。你自己发现没有,你那几个配置的数据连接到VISA配置函数的接线端子上都有个红色的小三角,那表示数据强制转换。就是说输入的数据类型与函数设定的输入的数据类型不匹配。其他几个参数强制转换过去倒是都能用,但是停止位不行。
停止位原本是个枚举数据类型,其停止位1.0实际对应的数据是10,见下图,而你实际输入的是1,可能问题就出在这。有可能停止位这里接到1这个数据,没法处理,只好把整个VISA任务按照默认参数来配置,那启用终止符哪里设置成什么都没用了,都会按照默认值True来处理。
对于强制数据转换这种情况,最好的处理办法是在配置参数时,在接线端子上右键单击,选择 创建》常量/输入控件,这样就能保证数据类型和函数设定的完全一致。
很多函数其接线端子内是有默认值的,如果你不连线,就会按照默认值来。你把鼠标放在端子上会显现段子对应的说明,说明后面括号里的数据就是默认值。VISA默认的串口配置数据跟你的配置一样,对于你这个程序,除了串口号和启用终止符两个端子需要连,其他的都可以不连。
此外再说一下,停止符和串口读取字节数是逻辑或的关系,如果启用停止符,那么VISA读取函数只要遇到缓冲区里有停止符或者达到了设定的读取字节数就进行读取。
你那个读取串口字节数还有选择结构其实没必要。如果你已知发过来的数据每15个字节为一组,VISA读取的字节数设置成了15,那么缓冲区内没达到15个字节,程序就会停在这一直等待,这样就避免了每次while循环轮询串口缓冲区,进而节省了系统资源。如果你怕出问题,一直等待,程序卡在这,可以再VISA配置的时候在超时端子上设置个超时时间,这样当等待的时间达到超时时间之后,VISA任务就会报超时错误,程序就出来了。