1、打开LabVIEW软件,创建一个新的VI。
2、在BlockDiagram中添加SerialPort控制器,该控制器可以通过串口与外部设备进行通信。右键单击BlockDiagram,选择FunctionsPalette,然后选择MeasurementInput&Output>Serial。
3、将SerialPort控制器拖放到BlockDiagram上,右键单击SerialPort控制器,选择Create>Constant,设置串口号、波特率等信息。
4、连接SerialPort控制器的DataOut终端到WhileLoop的左侧,连接Stop按钮到WhileLoop的右侧。
5、在WhileLoop中添加Read和Parse文本模块,用于读取串口数据并解析数据。读取数据时,需要指定读取的字节数和数据类型。
6、芹局解析数据时,需要根据具体的协议格式进行解析。例如,如果数据为ASCII码格式,则需要使用字符串处理函数。如果是二进制格式,则需并首猜要使用位 *** 作或其他适当的函数进行解析。
7、在解析完成后,将数据输出到FrontPanel上的控件或图表中。将控件或图表与WhileLoop中的Parse文本模块连接起来,以实现数据的实时更新。
8、最后调试完毕后,运行程序,通过串口与外部设备进行通信,实现数据的读取和绝型更新。
如果你每次收到的字节数能确定(比如每条发过来的命令字节数固定,或者最前一两个字节表示后面的字携者稿节数),就按照字节数接收。然后直接把收到的字符串给显示控件,不使用移位寄存器或反馈节点当然就不显示之前的字符了。
别加“等待”之类的函数(手表图标哪个),串口读取函数会在读到指定数量的字符或到达超时之后返回读到的字符串。用它就能控制循环。也就是说来一条命令或者到达一次超时之后,自动循环一次,字符串显示控件里面的值就是刚收到的字符串了。
如下图:
可以把图片下载后直接拖入2012或2013的程序框图中。外层的错误分支中有个串口配置失败的d窗提示。
串口的参数我就使用默认的“9600,8,n,1”了,超时值我设置的是100ms,为了让程序运行时不会因为默认的10000ms超时显得程序卡死。但是几乎每100毫秒就会有一个超时错误并返回空字符串,所以内层的错误分支什么也没做,在超时的时候不用空字符串替换原有的显示值。
如果字符数辩孝不确定,你还不想保留之前的值,那就不好办了。很有可能会造成一句话分两次显示嫌洞的情况,某次显示前面一部分,后面一次显示后一部分。
看下图吧:
为减少上述情况的出现,我把超时值改为了1000ms,后面的条件分支根据读到的字节数区分。0的时候不更新显示控件,其它值的时候显示刚刚收到的字符串。因为你不要和前面的拼凑,所以有可能是不完整的。
其实也可以让字符串显示控件自动滚动,或者字符串长度达到一定长度时或点清空按钮时,清空显示值。可以用反馈节点/移位寄存器/局部变量/值属性等。
下图的做法最简单,因为用的是输入控件,可以随便删除之前的内容。
这个有可能是几方面原因:1. CPU变慢,因为程序结构设计不合理;
2. 内存占用过多,因为数组等控件存储数据累积太多;
3. 串口数据因为没有识别码与校验雀塌位,万一产生数据丢失,无从判断;所以当读取的数据达不到要求长度时,就会等待,直到超时才返念袜回。这跟使用属性节点优化性能没多大关系。
还木进一步看看你的程序设计,才能诊断问题。顷高圆
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)