用Labview写一个电子称的485串口程序
关键词:Labview +串口程序
232、485串口通讯是最常见的仪器仪表通讯方式之一,本文详细介绍,用Labview编写一个电子秤的485串口程序.
一.前面板的编写
串口指示灯:如图,当串口通讯正常时,通讯等亮(绿色),BOOL控件。
串口指示窗口:当串口通讯正常时,显示:串口on,字符串控件。
数字显示窗口:显示电子秤的读数,112.345,字符串控件。
时间显示窗口:显示当前时间,16:56:25,字符串控件。
单位显示窗口:单位:g,字符串控件。
图1:电子秤的前面板
报文显示窗口:显示时间和报文,用于实时看到电子秤的报文显示,用表格控件显示。
图2:电子秤的前面板
二.各个功能的实现
系统时间的显示
系统时间的显示
按钮的禁用和变灰操作
当串口打开时:串口打开按钮需要变灰和禁用,当串口关闭时:串口关闭和零点标定等按钮需要禁用变灰。
如图所示,通过对对应按钮的属性节点的操作,完成相对应的功能,需要其变灰和隐藏时,写入禁用变灰,需要其有效时,写入Enabled值即可。
按钮禁用变灰处理
按钮禁用变灰处理
打开串口和关闭串口的操作
打开串口和关闭串口可以通过状态机+消息队列+串口的对象化编程来实现,本文要实现的功能比较简单,介绍一种简单的方式。通过条件结构和循环来实现。

通过循环和条件结构的嵌套,即可完成打开串口和关闭串口的功能实现。这种框架的弊端在于,处理错误时比较费事。用消息队列状态机来实现,就会很好的处理一些串口错误的发生,后期会讲到。
串口读写及配置

如图所示,串口的配置比较简单,本电子秤的配置为:9600 N 8 1。如图配置皆可。没什么可讲的。
如图所示,报文的读取是通过VISA读取VI来实现的,指定需要读取的字节数即可,没什么好讲的,需要说的是,需要把读取放入条件结构中,然后放一个读取字节数的属性节点来检测读取到的报文,当缓冲区有报文时再触发读取VISA来读取。如果没有这个结构,读取VISA VI将一直等待,直到指定的字节数再读取出来。
如图所示,报文的吸入是通过VISA写入 VI来实现的,需要写入时触发条件结构把报文发出即可。
着重需要说明的是报文的处理。
写入报文的处理

如图所示,读取重量的报文为 01 03 00 00 00 02 XX,刚入门时,不需要去理解特定的报文结构,有些报文时是标准格式,有些报文是自定义的,只需要直到这么发出去,电子秤就会返回重量报文。本条报文01是地址,03是功能码,00 00寄存器地址,后面的XX表示CRC检验码。需要注意的是,都是16进制。把几个16进制字节用字符串连接VI连接起来发出去即可。
如果报文时固定的,直接用一个字符串产量发出去即可。

如图所示的CRC检验子VI是本作者(Labview十年工控702)自己用公式节点写的,需要的可以留言。

16进制报文的正常显示
如图所示,因为写入报文为16进制,要在表格控件中正常显示,需要转换一下。

读取报文的处理
读取报文的处理,主要就是把需要的数据解析出来, Labview读取出来的报文是十六进制的字符串格式。
如本文介绍的这种,一条报文只有一个数据的,可以把需要的字符串截取出来,用强制转换VI转换成16位的U16数据,然后转换成需要的带小数点的实数数据即可。

如果是一条报文里面有好几个数据,比如XX XX 01 02 03 04 05 06 XX XX这条报文里面01 02表示温度,03 04表示压力,05 06表示二氧化碳浓度。可以用上的方法,先截取在转换。也可以批量处理更简单便利一些,先截取6个字节,然后转成U16数组,然后通过索引的方式处理数据。

报文的校验和乱码的处理
在实际项目中,经常会遇到报文错位和乱码的情况。尤其是一些仪器仪表抗干扰能力比较弱的时候。此时所有解析出来的数据都是错位的,都是错的。这时候就需要来校验和乱码处理了。
在解析报文时,加一个判断即可,可以用地址+功能码判断,也可以用CRC判断。作者(Labview十年工控702)喜欢简单一点,直接用前两个字节来判断即可。只有判断报文没乱时再解析,如果判断出来报文有误,清空缓冲区即可。
有其余问题,请加群交流。需要CRC校验源码和16进制转字符串显示源码的,请留言或加群交流。Labview项目分享Q群:241388930
审核编辑 黄宇
-
LabVIEW
+关注
关注
2013文章
3681浏览量
344157 -
串口通讯
+关注
关注
2文章
266浏览量
26210
发布评论请先 登录
请问各位大神,我要用一个串口控制12台串联的气体流量计,想要做好一点该怎么修改程序呢
MSC1201串口编程如何实现?
OpenHarmony测试RS232/RS485串口方法,触觉智能SBC3528工控主板演示

用Labview写一个电子称的485串口程序
评论