先说一下串口的扩展问题,一般的台式机或工控机上都至少有二个串口,一般都 是够用的,但是现在市场上已经很难找到带串口的笔记本了,而有时候在外出调 试时需要在笔记本中使用到串口的,这时一般是使用 USB-RS232 的转接线,价 格从十几到一百多都有,很多朋友反应在使用价格低的转接线时会出现乱七八糟 的问题,而贵一点的线就很少听说有其它问题的,所以大家在使用便宜的 USB-RS232 转接线时要特别注意线的质量,遇到一些奇怪的问题时先考虑换一 根好一点的线。PCI-RS232 扩展卡也同理,便宜的卡也容易出问题,尽量买好一 点的,以免因小失大。PCI-RS232 一般至少能扩展 2 个串口,有些 BT 一点的可 以扩展到 8-16 个,一堆线和接头。转接线和扩展卡一般是要装驱动的。
打开软件,选择已经短接好的串口号,点击“手动发送”,如果串口是好的,2、3 脚又短接起来了,马上就可以在上面的接收框里看到接收的数据就是发送的数 据。稍微要注意一下的是有些电脑的 COM1 和 COM2 的位置是反过来的,所以 要确定好串口调试助手左上角的串口上择的是已经短接的那一个,如果 COM1 没接收到,可以再先 COM2 再发一次看一下。
检查好串口后,一般也要注意一下使用的串口线,标准的串口线是 9根线都是用 上的,但有一些是只使用了三根线的:2、3、5。第 3 个脚管是发送,第 2 个管 脚接收,另一个 5 是地线,这里叫它简化的串口线,简化的串口线能用上的地方, 标准的串口线也肯定能用上,因为标准线的 9 根线已经包括了简化串口线中的 3 根线,但标准串口线能用上的地方,简化串口线就不一定能用上,所以在使用串 口线之间一定要确定好串口线的类型,一般买的串口线都是标准线,但自制的串 口线因为应用场合不同就要先确定一下。
面上时,就使用这种线,这样机柜表面的串口线的定义还是跟电脑接出来的一样, 外面的那一根串口线再使用交叉线。从电脑主板上将串口引到主机后面板上的线 就是这样的直连线。购买串口线的时候一般也会问你买直连的还是交叉的,要区 别对待。
另外还有一个比较重要的设置,就是 VISAREAD 的“读取字节数”这个输入,由 于在串口通信中,如果指定读取 100 个串口缓冲区的字节数,如果当前缓冲区的 数据量不足 100 个时,程序会一直停在 VISA READ 这个节点上,如果在超时的 时间(默认是 10 秒)内还没有凑足 100 个数据的话,程序就会报“Timeout”的错 误,如果超时时间设置得太长,有可能导致程序很长时间停止在 VISA READ 这 个 节 点 上 。 解 决 的 办 法 是 使 用 “Bytes atPort” 这 个 串 口 的 属 性 节 点 , 在 VISA>>Serial>>advance 下,也可以在 VISA 资源线上右键>>创建>>属性节点>> 串口设置>>Bytes atPort,如下图:
目前串口的应用一般有二种类型的(以我接触到的来分类,不严格),一种是仪 器控制类型的,一般是上位机发送一个指令,然后下位机作出响应,返回数据给 上位机,上位机再读取出来,完成一次通信,即一问一答;另一类是被动接收形 的,即下位机会一直发送数据上来。这二种类型的串口通信在处理上会不太一样。
首先是要确认仪器选择的通信模式是串口通信模式。现在的仪器一般都至少有二 种通信模式,一种是 RS232,一种是 GPIB,如果仪器是设置为 GPIB 通信的话, RS232 是不可能通信上的,所以要先确认一下,方法一般是在仪器面板上选择设 置>>远程控制>>GPIB/RS232,各个仪器稍微不同,可以查仪器手册看一下。
接着是要注意发送指令和读回数据之间要有一定的延时,即VISA WRITE 和 VISA READ 之间要有一定的延时,一般 200 毫秒即可,因为串口是底层硬件, 数据从软件到串口上要一点点时间,然后仪器对指令作出响应也要一点点时间, 这些时间加起来肯定比软件运行二个节点的时间要短,所以延时是一定要加的。 在调试时如果发现正常运行时不能收到数据,但高亮运行就能收到数据,就很有 可能是没有加延时的原因!
图 5 被动接收类型中的数据接收 在接收下位机发送的帧数据时,一定要先了解帧格式,这样才能正确解析出帧里面的数据来。 下面以例子来说明数据帧格式的通信。
设定通信数据帧每 7 个字节为一帧数据,其中以 0xAC、0x96 二个字节作为数据帧头,第三、 四个帧头为帧计数器,最大值为 0xFFFF,到达最大值后重新从 0 开始计数,第 4、5、6 三 个字节是数据信息,分别代表数据的高中低位,第 7 位为状态标志字节,它的第一位为 1 时表示下位机出错,为 0 时表示功能正常。
只是在 LabVIEW 中,这些二进制数据是以字符串形式显示出来的,它们的实质还是二进制 数据,这几个二进制数据转换为十进制数据分别是“49,50,51,52”,由于字符串都是以 ASCII 码形式保存在计算机中的,那么 49,50,51,52 这几个数在 ASCII 表中就表示是字 符串“1,2,3,4”。所以这几个数据在 LabVIEW 中就显示为字符串的 1,2,3,4 了。
需要注意一下的是如果正常显示的字符串并不是 2 的整数倍,那么上图的转换程序就会少转 换一个字符,可以用程序动态判断一下这个字符串的长度,如果是奇数的话在它最左边补一 个“0”再使用上面的程序就正常了。
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |