《labview如何进行串口通信——labview串口通信全方位了解.docx》由会员分享,可在线阅读,更多相关《labview如何进行串口通信——labview串口通信全方位了解.docx(11页珍藏版)》请在三一办公上搜索。
1、串口可以说是我们最简洁见到,也最简洁接触到的一种总线,台式机上一般都有二个,而现在许多卜位机、仪器等许多都还是运用串口通信的。论坛上许多挚友都常常会运用到串口,并遇到些问题,这里仃必要做个具体的说明,以便利广陶会员挚友便利运用.首先补充一个比较重耍的问题,就是在1.abvIEW中运用申口的话确定要光安装VISA这个驱动,然后生成的EXE运行时也须要在目标机上安装VlSARuntimeEngine,可以在打包时一起打包。1 .串口扩展的问题I先说一下串11的扩展问题,一般的台式机或工控机上都至少有二个串门,一般都是够用的,但是现在市场上已经很雄找到带串口的笔记本了,而有时候在外出调试时须要在笔记
2、本中运用到串口的,这时般是运用USB-RS232的转接线,价格从十几到一百多都有,许多挚友反应在运用价格低的转接线时会出现一塌糊涂的问题,而贵一点的线就很少听说有其它问题的,所以大家在运用便宜的USB-RS232转接线时要特殊留意线的质量,遇到一些惊奇的问题时先考虑换一根好点的线。PC1.RS232扩展卡也同理,便宜的卡也简洁出问题,尽量:买好点的,以免因小失大。PCl-RS232一般至少能扩展2个串口,有些BT一点的可以扩展到8-16个,一堆线和接头。转接战和扩展卡一般是要装驱动的。2 .串口功能的确认:在运用串口之前,最好先确认一下串口是否正常,特殊是运用转换接或扩展卡的。检查的方法很简洁
3、,就是将串口的2、3脚短接起来,3脚是发送数据,2脚接收数据,就是这个串口自发自收。电脑上的串口个件般是用串口调试助手,很出名的,也好用。如下图所示:4111iflUh手SCoBAsaiirtantV2.2For1II9X/HT/2000图1串口调试助手打开软件,选择已经短接好的串口号,点击“手动发送”,假如串口是好的,2、3脚乂短接起来了,立刻就可以在上面的接收框里看到接收的数据就是发送的数据。略微要留意一下的是有些电脑的CoMI和CoM2的位置是反过来的,所以要确定好串口调试助手左上角的串口上择的是已经短接的那一个,假如COMI没接收到,可以再先CoM2再发一次看一下。3 .串口线的检查:
4、检查好串口后,一般也要留意一下运用的串口线,标准的串口线是9根线都是用上的,但有些是只运用了三根线的:2、3、5.第3个脚管是发送,第2个管脚接收,另一个5是地线,这里叫它简化的申线,简化的串口线能用上的地方,标准的串口线也确定能用上,因为标准线的9根线已经包括了简化串U线中的3根线,但标准串口线能用上的地方,简化串口线就不确定能用上,所以在运用串口线之间确定要确定好串口线的类型,般买的事口线都是标准线,但自制的事口线因为应用场合不同就耍先确定一下。G串口线还有一个地方须要留意一下的,就是2、3脚的接法,标准接法中是2、3脚交叉的,即这边的2接另一边的3,这边的3接另一边的2,扭/一下,所以叫
5、交叉线,因为正常运用时,这边其次脚是发送数据,另一边第三脚是接收数据,所以要将这二个管脚连接起来,这样才能正常运用。但是有些状况F.2、3是直连的,即这边的第2脚连接另边的第2脚,第3脚连接第3脚,这种叫直连线,这种线一般是用手延长申的,比如须要将工控机的申口接头引到机柜表面上时,就运用这种线,这样机柜表面的串口线的定义还是跟电脑接出来的一样,外面的那一根串口线再运用交叉线。从电脑主板上将串口引到主机后面板上的线就是这样的直连线。购买串口线的时候般也会问你买直连的还是交叉的,要区分对待。事口线还有一个耍略微留意一下的就是DB头,因为电脑上接出来的一般是公头(针),要跟电脑接的话要母头孔),一般
6、仪器的串口也是公头,所以二边都是母头的串口线比较常见。串口的接头一般是DB9的,也有DB25的,但比较少用,有些比较BT的仪罂厂家尽然用RJIl(水晶头那种)作为串口头,让人不爽!总之,运用申口前确定要先确定好硬件没问题.不然很奢侈时间的.4 .串口参数设置:在1.abVIEW中运用串口时,有几个参数比较重要,须要先说明下的。个是申口初始化这个节点的“终止符和”禁用终止符?“这二个输入端,这二个输入端是相互作用的,“终止符”默认值为10,它的卜六进制是“OxOA”,这是一个ASCll码,是一个换行符,可以从1.abVlEw中的字符串的不同显示形式看出来,如卜.图:MormilDisplayDH
7、xDisplay/VCodesDisplayEnableTernmationChirCT)向国总,/拟仪器家园图2串口消息终止符左边是字符串的正常显示,中间是十六进制显示,右边是“代码显示,这三个字符串的值都是一样的。终止符是10,表示在接收数据时,遇到ASal码为10的字符(即换行符)时就停止接收数据,后面会仃例子进行说明。而“禁用终止符?”的默认值是FA1.SE,即启用终止符,启用终止符会有什么效果呢?终止符的意思就是当程序接收到这个字符时,就认为已经到了全部数据的未端了,从而停止接收,不管后面还有没有数据。终止符是10,表示在接收数据时,遇到ASClI码为10的字符(即换行符)时就停止接
8、收数据。可以做一个很简洁的试验,先短接串口2、3脚,然后将终止符设置为“0x33”,0x33是字符“3”的ASCII码,然后发送字符串可以看到接收回来的数据中只有“12”,即“3”被认为是字符串的未端1.它后面的数据就不再接收/.许多挚友就是因为这里设置钳误,导致接收数据时有时候只收到一半就没有了,特殊是在连续接收数据时,但又不是每次都只能收到一半,有时候也能接收齐全的,就是因为发送的数据中可能包含了终止符而使用口认为到了最终个字符了。般是将这个终止符禁用掉,即将“启用终止符?(EnableIerminaloE”这一端输入为False即可。另外还有一个比较重耍的设置,就是VISAREAD的“读
9、取字节数”这个输入,由于在串口通信中,假如指定读取100个串口缓冲区的字节数,假如当前缓冲区的数据量不足100个时,程序会始终停在VISAREAD这个节点上,假如在超时的时间(默认是10秒)内还没仃凑足100个数据的话,程序就会报,*TimeOUr的错误,假如超时时间设置得太长,有可能导致程序很长时间停止在VISAREAD这个节点上。解决的方法是运用“BytesatPOrr这个串口的屈性节点,在VISAScrialadvanceF,也可以在VISA资源线上右键创建属性节点串设置BytesatPort.如下图:VitiVlheHlEXCkcMrMrMl8aPAIyBMcVXQeVIXruyYib
10、AcXcr(i4tFrf4rrfwJMtrClkfwWIM1.CiaerUSttMJg4S(UvK(ttrt4S(tUJgnCIra/rast*TCTIPStaGP1B,RS232各个仪器略微不同,可以查仪器手册看下。然后就是确认串口的通信参数的配置,包括波特率、数据长度、校验方法等,有些仪器的某些参数是固定的,比如校验方法固定为奇校验,不能修改,只能在电脑上跟仪器设置为一样的。波特率一般是可以修改的。这些参数的配置确定要依据仪器手册上的来设置.假如参数设置不正确,也能收到一些数据,但一般是乱码,假如收到的数据都是乱码的话,就要先检查一下串口参数设置是否正确了。只仃电脑和仪器边的串口参数完全样
11、时才能收到正确的数据。接着是要留意发送指令和读回数据之间要有确定的延时,即VISAWRITE和VISAREAD之间要有确定的延时,般200考秒即可,因为串口是底层硬件,数据从软件到串口上要一点点时间,然后仪器对指令作出响应也要一点点时间,这些时间加起来确定比软件运行二个节点的时间要短,所以延时是确定要加的。在调试时假如发觉正常运行时不能收到数据,但高亮运行就能收到数据,就很有可能是没有加延时的缘由!或者是发一个查询指令,但返回的是上一条查询指令的结果,也可能是因为没有延时或延时不够。5.2 被动接收类型被动接收形的串口通信略微麻烦一点山干上位机是被动接收的,上位机不知道什么时候起先下位机就已经
12、有数据上来了,很布可能下便机发送到一半时,上位机刚好起先接也数据.这时只能接收到后面半的数据了,所以对于这种通信,殷是采纳数据帧的方式进行通除这种数据物的通信方式至少由三部分数据组成;帧头、数据、物尾(假如数据是固定长度的话,好像帧尾也可以省掉)。帕头是为了告知上位机:从这以后的数据就是有用的数据了,相当于约定好的暗号,一殷帕头至少用二个以上字忙假如只用一个字节的话,万一数据中的数据跟这个帧头一样了就会误以为这个数擀是帧头从而导致解析数据出招.怵尾的作用也差不多,告知上位机从这之前的数据才是有用的数据.但事实上一般的数据帧远不止这几个部分,还会加上一些校验字节、时间信息、帧计数器之类的东东在上
13、面.其中校验字节是为了检查数据在传输过程中有没有出错的,跟序11的校验位要区分清断,校验位也是检ft数据传输时有没有出1错的,但由底层硬件来实现,校验方法由标准规定好,但有几种可以选择,只有一个位(Bi,只能是O或I)。校脸字节是由软件层来实现的,至少有一个字节(Byle.有8个位),而且校验方式由用户定义,特别敏捷.由于被动方式中卡口的慑冲区中始终会有数据在,为了保持数据的连续性,在读取数据时跟第一种仅零限制类型不一样.而是实行将读取的全部的小11数据都保存在移位寄存着中.在软件上处理完这些数据后再将它们从移位寄存器中删除.他于VISAREAD的输出是字符串.所以一般运用连接字符串”这个函数
14、将它勺连接起来.然后接到循环结构中的移位寄存器中进行保存,当移位寄存器中的数据及达到确定时或满窗数据处理的条件时,才停止这个循环输出读取到的数据.一股如卜图所示:图5被动接收类型中的数据接收在接收下位机发送的帧数据时,确定要先了解帧格式,这样才能正确解析出帧里面的数据来.下面以例子来说明数楙帧格式的通信.设定通信数据帧每7个字节为一帧数据.其中以OXAC、0x96二个字节作为数据帧头,第三、四个帧头为帧计数器,最大值为OXFFFF到达城大位后曳新从0起先计数.第4、5、6三个字节是数据信息,分别代表数据的中学低位,第7位为状态标记字节,它的第一位为1时表示下位机出错,为。时衣示功能正常.由于1
15、.abVIEW中接收到的数据都是以字符中的形式显示图来的,所以须要将字符串转换为ASCII码,般可以干脆运用“游换为U8数组”这个函数,如卜图所示:stringunspedbyteArray图5字符申转换为U8字节转换为U8字节后,得到的是所传输字符的ASCII码,我们就很简沽进行数据帧的推断了,现收到以卜的字符*数据:三trncUrigQdbyttArray广广一一32Ienedbyte*rry2JrheC六进制显示,如图I,干脆输入“AF”即可,那么下位机接收到的就是正确的数据(十六进制数值类型)了.但实际运用过程中,一般都是须要将某个子Vl猿出一个动态的字符串通过VISAWrilc发送到
16、下位机的.这时候就须要对数据进行转换一下.这个转换过程描述起来就是:将字符串A转换为字符小B.使得正常显示的字符率A跟十六进制显示的字符小B是一样的.由于转换目标(十六进制显示的字符小)的数据类型是十六进制,要想十六进制显示的字符申跟正行显示的字符申一样,这个正常显示的字符申必需都是十六进制的字符,即只住由0-9.A-F这I六个字母中的字母组合而成,否则就没方法使二种显示方式的字符串一样了.这个转换过程首先将字符串找换为十六进制数值型,然后冉通过招这个十六进制数值创建为一个数组,最终再运用“字节数组至字符中转换”这个函数转换为字符串即可,事实上就是图5字符申转换为U8字节的反向操作,只不过是这
17、个十六进制的假初始类型是十六进制,要先转换为数值类型,具体程序如卜图所示。图IO正常显示字符串转换为相同的六进制显示的字符串由于十六进,数据由:个字节内成,而字符只有一个字符,所以每二个字符表示一个十六进制数据,FW如字符多于二个的话要先进行衽取,包二个字符转换为一个卜六进制数据,也可以用空格将正常故示的字符串每二个字符用一个空格阍开,然后先将这个字符串以空格为分隔符转换为一个字符小数组,再转换为十六进制数值再转换为字符串.须要留您一下的是假如正常显示的字符串并不是2的整数倍,僚么上图的转换程序就会少转换一个字符,可以用程序动态推断一下这个字符中的长度,假如是奇数的话在它最左边补一个“0”再运
18、用上面的程序就正常了.7 .串口问题汇总:7.1 串口资源被占用:这时候在1.abVlEW会报错,提示申口号存在,但当前不能对其进行捺作,同时打开MAX时也可以在对应的事口号下看到同样的错误,这表示这个串口己经被其它程序占用了,比如行时候打开了串口谓试助手来调试串1.l然后乂想在1.abVIEw里面试-下,这时就会报这个错,因为串门已羟被中IIiBl试助手冏用了,它不能被二个程序同时运用.解决的方法是关掉其它程序即可.串口调试助手里也可以关闭这个H;口.还有一种状况是谓试OK后生成EXE.运行EXE也出现这个何题,这时是因为串口被原来的1.abVIEW程序打开,再用EXE打开时就会报错,解决方法是关掉原来的1.abvlEw程序.最好是关押1.abVIEW.在运用小口的过程中确定要关闭由口(运用VlSAC1.OSE),否则程序在退出的时候会报错说数据丢失。