LabVIEW中使用并口

总的来说,对并口进行简单的端口数字IO操作是比较简单方便的,本文将讨论如何通过VISA或者底层寄存器编程来实现该功能,同时也包括对在此过程中可能遇到的一般错误、错误信息和其他问题的说明和讨论。本文并不关心和处理信号握手、PC与PC的点对点通信,而只在必要的时候讨论IEEE-1284规范中规定的特性与通信方式。

概述

并口一般用来向打印机或者其他设备发送数据,它每次发送一个字节或者8位二进制数。并口25针连接器上除了数据线外,主要包括状态线、控制线和地线。状态线和控制线一般用来在与打印机通信的时候,实现握手、命令发送和接收反馈。而在进行某些应用的时候,需要格外考虑对这些信号线,以更好的利用并口。在Windows操作系统环境中,如果使用与串口一样的API进行编程,则并口能够获得的性能是有限的。这意味着,在Windows操作系统环境中,可以使用与串口通信时相同的 VISA VI来实现输出数据。然而, Windows操作系统中,这些API本身没有内建对数据接收的支持,尽管在某些情况下,硬件支持接收数据,但是软件不支持该功能。但是这并不意味着在LabVIEW中实现并口数据的输入, 尽管这确实意味着VISA VI不支持并口数据输入。

大多数计算机上的并口采用图1所示的DB-25连接器 ,表1列出了其引脚分配 。

注: 第1-13从首行开始,第14 - 25行从最后一行开始,一次从右至左排列。

方法1

如果使用Windows API,那么实现并口数字输出则会有些麻烦,主要是需要将第11脚(总线忙信号)和第12脚(纸张错误)与地之间短接起来。如果不这样,那么驱动程序会认为正在通信的打印机发生错误或者处于忙线中,而不会输出任何数据。并口会一直保持最后一次写入的值,直到该值被更新或者计算机关闭。另外在 LabVIEW 中,所有的串口通信发送的都是字符串数据,而在并口通信中,需要发送的是8位数值。这就需要在发送前将数据平化为字符串数据,以便其具体的二进制值不变,这里可以使用强制类型转换VI来实现。

如果一次向端口发送多于一个字节的数据,驱动程序会自动按顺序发送这些数据,并且会在每次发送一个字节的时候拉低或者拉高闸门线的电平 (第1脚)。这个过程中的时序特性会因计算机的不同而有所不同,但是也存在着标准时序。

常见错误

-1073807330 (BFFF003E) - I/O错误,VISA 无法完成操作。

错误37,使用串口兼容性VI

请根据错误代码在 知识库 中搜索解决问题的方法。

Method 2

除了VISA VI之外,另一种向并口写入数据的方法是通过直接读写硬件寄存器实现。在LabVIEW中,可以通过In Port.vi和Out Port.vi的直接硬件寄存器读写来实现并口输出数据,这两个VI在 高级-I/O端口选板中。由于不使用高级的驱动,所以不需要对任何状态信号线进行接地处理。

访问硬件的第一件事情就是获取硬件的基地址,该信息可以在Windows的资源管理器中的资源一栏中找到。

在计算机桌面上,我的电脑上单击右键,选择属性。

选择硬件选项卡,然后选择资源管理器按钮。

在端口(COM & LPT)下面找到LPT1。

双击LPT1。

接下来选择资源选项卡,这时输入/输出范围下面会出现端口地址。

并口的端口基地址一般是16进制的278、378或者3BC。并口有若干个寄存器,但是对于仅仅需要进行简单的数据输出的应用,只需要关心数据寄存器。该寄存器是并口I/O地址范围内的第一个寄存器,因此他的地址就是基地址,该寄存器的8位正好对应8位数据线(第2-9引脚)。需要做的就是通过Out Port.vi向并口写入需要发送的数据,

常见错误

In Port.vi 或者 Out Port.vi返回"功能不支持"错误"

更多关于并口和在LabWindows/CVI中编程的信息,请参考知识库文章0TL70ATL: Kno将并口作为输入/输出同道使用 。

方法3

正如前面提到的,使用VISA VI来实现并口数据输入是不现实不切实际的。但是,某些情况下却需要进行数据输入。一方面,无法保证8位的数据线是双向的,这个问题将在下一节中详细讨论。下面先假设无法实现数据的输入。幸运的是,可以利用其他信号线。数据寄存器后面的一个寄存器,也就是基地址+1的状态寄存器,他的5个数据位对应着25针连接器上的总线忙、传输结束、纸张完毕、选择和错误信号线。这5个状态信号正好对应着状态寄存器的第7、6、5、4、3位,如图5所示。这些状态线是已经被配置为可输入的,在于打印机通信的时候,这些信号是用来进行握手和反馈的,但是这些信号线必须进行取反操作,因为它们使用的是负逻辑。如果5根或者更少的信号线就足够了,那么可以直接使用In Port.vi来通过读取状态寄存器实现,如果需要更多的信号线,那么就需要使用控制信号线了。

控制寄存器的地址是基地址+2,与状态寄存器类似,它的某些位对应着连接器上的某些信号线,其中nStrobe, nAutoLF, nInit, nSelectIn与该寄存器的第0、1、2、3位相对应。这些信号线通常用作输出,但是它们可以被配置成双向信号线。实际上,只需要将这些信号线设置为高就可以设置为输入了。如果某个信号线被设置成高了,而在外部被某个信号接地,这时寄存器的这个数据位就会读到低。另外,需要注意的是,Strobe, nAutoLF和nSelectIn三根信号线使用负逻辑。如果设置使用负逻辑的信号线为低,那么实际上是在连接器一端设置其为高。如果想要读取一整个字节,那么可以读状态寄存器的高半字节和控制寄存器的低半字节,这需要在LabVIEW中进行一些二进制位处理,如图6所示,在这里仍然需要注意使用负逻辑的那些位。

注:数字逻辑的数字常量是使用二进制表示的

常见错误

In Port.vi 或者 Out Port.vi返回"功能不支持"错误

在Windows NT 和2000操作系统中,需要使用访问硬件的驱动程序,请参考开发者原地范例: Windows系统下端口和内存的实用工具。另外,请确保使用访问硬件的驱动中的In Port.vi 和 Out Port.vi,而不是vi.lib中的。

某些并口的信号线可以被配置为输入,但是这取决于生厂商对并口的 设计。某些设计中,通过将数据线置高,可以像读取控制信号线一样读取数据线上的数据,来获取外部信号的值。但是,大多数并口需要设置传输方向位以进行输入操作,这个是基地址+2的控制寄存器的第5位。如果并口具有输入的功能,将传输方向位置高可以将数据线设置为三态,从而可以被外部信号驱动。某些情况下,同时需要将第6位置高低。然而需要提到的是,某些制造商将这些位锁定了,因此在软件中无法更改。

通过下面步骤来检验您的并口是否可以实现数据输入:

设置控制寄存器的第5位为高(寄存器地址为基地址+2)。

端口上不连接任何信号的情况下,向并口写入一些值,并在每次写入后进行读取。

如果读取到的值与写入的不一样,那么您的并口很大可能性是双向的。设置控制寄存器第5位禁用了数据的输出,您读取到的是输入开路情况下的端口缓存中的值。

如果读取到的值与写入的值一致,那么您的并口不是可以双向传输的。数据的输出仍然没有被禁用,读取到的是输出的数据,同时您也不可能读取到外部信号的值。

如果您的数据线是可以被用作输入的,那么您仅需要将控制寄存器的第5位置高,然后通过基地址的数据寄存器读取数据线上的值。

常见错误

In Port.vi 或者 Out Port.vi返回"功能不支持"错误。

在Windows NT 和2000操作系统中,需要使用访问硬件的驱动程序,请参考开发者原地范例: Windows系统下端口和内存的实用工具  。另外,请确保使用访问硬件的驱动中的In Port.vi 和 Out Port.vi,而不是vi.lib中的。

LabVIEW因为串口写入兼容的VI而死机

通常这些问题是由于引脚11和12没有被接地,您应该将这些引脚通过跳线与18-25脚的底线连接起来,同时,请确保您没有错误地将引脚2和3接地。

串口设备需要被列在LabVIEW.ini文件中,以便在LabVIEW中使用串口兼容的VI。因为默认情况下INI文件中没有对某些引脚的描述,所以推荐使用VISA进行编程。一般来说,这些引脚应该描述如下:

串口设备="COM1; COM2; COM3; COM4; COM5; COM6; COM7; COM8; COM9; COM10; LPT1; LPT2;LPT3; LPT4;"

niLabVIEW在端口序号的时候,是从0开始依次分配的,因此COM0和端口0对应,LPT1与端口11对应。

更详细的内容,参加如下附件的介绍。

LabVIEW、LabVIEW开发、LabVIEW编程、LabVIEW程序

上文中提到的例子和资料,均在word中的附件里,可点击下载。进一步了解,可联系们。

LabVIEW中使用并口 - 北京瀚文网星科技有限公司 (bjcyck.com)

LabVIEW中使用并口相关推荐

  1. 圆角装饰条_天然石材在装饰工程中的收口收边工艺

    在建筑装饰工程中,收口是施工过程里使用比较频繁的一个话语,收口这项工艺贯彻在整个装饰装修工程的作业过程中,而其中石材的收口问题则非常重要. 尤其是一些细节性的石材装饰部位收口如果没有做好,不仅影响美观 ...

  2. 在Labview中调用M文件(Matlab文件)

    使用 NI LabVIEW,不论您是在开发算法.分析结果.处理信号,还是在探索 DSP 概念,您都可以自由选择用于工程计算的语法规则.您可以将直观的 LabVIEW 图形化数据流编程与 MathScr ...

  3. Labview-浅谈Labview中VISA的设计

    VISA是新一代仪器I/O标准,作为通用标准,VISA具有与仪器硬件接口和具体计算机无关的特性,即VISA是面向器件功能,而不是面向接口总线的,控制RS232等仪器时不必考虑接口总线类型.在LabVI ...

  4. #串口通信超时处理_【学院推荐】划重点!LabVIEW中串口参数需注意的几点

    串口可以说是我们最容易见到,也最容易接触到的一种总线,台式机上一般都有二个,而现在很多下位机.仪器等很多都还是使用串口通信的. 1,串口扩展的问题 先说一下串口的扩展问题,一般的台式机或工控机上都至少 ...

  5. echarts中x轴文件消失_实测实例:labview中波形图X轴刻度任意刻度设置

    学习labview中,做了一个波形图,X轴为时间,Y轴为其他位移压力温度变量,X轴最大值是一个变量,可以手动输入,所以最早选择了--刻度间隔---均匀,起初做模拟,设置时间300小时(1080000秒 ...

  6. 在LabVIEW中如何使用Flash动画

    在LabVIEW中如何使用Flash动画 已经用Macromedia Flash创建了一个动画.我想在LabVIEW中用ActiveX控件来观看这个动画,该如何实现? 解答: 利用LabVIEW 中的 ...

  7. LabVIEW中不同颜色连线的含义

    问题详述: LabVIEW中的连线具有不同的颜色,样式和宽度.每个都代表了什么? 解决方案: 下表列出了常见的连线类型: LabVIEW中不同颜色连线的含义 相关信息: 请注意,类的连线颜色是可更改的 ...

  8. labview 读取xml_在LabVIEW中使用XML

    在LabVIEW中使用XML 1.什么是XML XML是Extensible Markup Language的缩写,即可扩展标记语言,是一种可以用来创建自己的标记的标记语言.它由万维网协会(W3C)创 ...

  9. labview中java联合编程_LabVIEW与MATLAB混合编程的实现

    本栏目责任编辑:谢媛媛系统软件与软件工程 ComputerKnowledgeand Technology 电脑知识与技术 第 6 卷第 15 期 (2010 年 5 月) LabVIEW 与 MATL ...

最新文章

  1. Linux Terminal 控制终端的使用
  2. 自适应后的页面用户点击后会放大
  3. java的printf语法_java printf的一些常用的打印格式总结
  4. java to对象_java中同类对象之间的compareTo()和compare()方法对比分析
  5. C++继承中关于子类构造函数的写法
  6. 【看动漫学编程】程序员在异世界生个娃 第1篇:太极村
  7. 《Head First设计模式》第九章(1)迭代器模式
  8. 基于英特尔® 优化分析包(OAP)的 Spark 性能优化方案
  9. extjs设计器破解程序及开发调试工具
  10. 《天天数学》连载10:一月十日
  11. java-第五章-while=计算1~50中是7的被耍的数值之和
  12. 如何进入bios设置U盘启动,u盘安装系统设置启动项的方法
  13. SQL SERVER IDENTITY 约束的用法
  14. 开源多语言商城 CMS 企业建站系统,MyCms v3.9 发布
  15. 2012服务器系统如何备份,windows server 2012 r2 如何进行系统备份?
  16. 美术课上用计算机玩游戏,人教版一年级下册美术教案-07-乘上大船游世界
  17. 【语音去噪】基于matlab软阈值+硬阈值+折中阈值语音去噪【含Matlab源码 530期】
  18. python怎么爬取excel_求教! Python爬取的数据 怎么写入Excel表格中
  19. pycuda的安装,wheel报错
  20. 射频电容 cog npo 等等

热门文章

  1. 客户专访:重庆小雨点携手图数据平台领导者Neo4j,助力提升金融服务体验
  2. 0919--js基础,变量,数据类型
  3. 实现展馆灯光控制系统 单片机 MSP430 F5529
  4. webp2jpg图片格式转换源码
  5. 快速沃尔什变换(FWT) 学习笔记
  6. 生活中计算机的应用实例,线性代数在实际生活中应用实例
  7. 婚纱摄影公司企业类网站模板
  8. Xcode Embedded Binaries动态添加库
  9. 微信小程序地图返回当前位置map,
  10. 百度钱包杀入移动支付:BAT重新排位