随着计算机技术与通信技术的发展,由PC机作为上位机,实现对外部信号的采集与控制,已成为切实可行的方案。传统的方法是通过作为上位机的PC串口,对外部设备或下位机进行数据传输与控制,虽然串行通信的线路简单,但是,串行通信是在单根通信线上逐位顺序传送,完成发送方和接收方之间的数据通信,所以其传输速度要比并行通信慢得多。因此上述方法传输速率较低且需要进行电平转换,而PC打印适配器的双向数据传输速率可达2 Mb/s,是一种较为理想的通用数据传输和控制方法。同时,以前利用并行口采集数据的方法,都需要编制复杂的硬件驱动程序,为此本文提出了一种利用PC打印机适配器作接口,在Windows下在VC++中编写简单的动态链接库与VB相结合简单地实现数据采集的方法。
1设计思想
打印机是计算机系统的常规输出设备,微机系统都配置了打印机的适配器,以便和打印机联机使用。PC系列机的打印机适配器是采用CENTRONICS并行接口标准,不仅提供了并行数据线,而且还有选通、回答和忙等联络信号线,信号电平又是标准的TTL电平,在硬件上不作任何改动,只需换一个插头及连接线,就可用于其他的并行设备接口,因此,比较简单易行。当用完之后,换回打印机插头及连接线,又继续进行打印输出,使用也比较方便。当把打印机适配器用作非打印机接口时,要做的工作是:更换插头连接线和重新编制输出输入驱动程序。
打印机适配器的作用是把PC机总线与打印机CENTRONICS标准总线的不同信号进行转换,建立对应的适配关系。因此,它的一侧与PC/XT总线I/O通道相连,另一侧与打印机CENTRONICS标准的36针D型插座相接。
本系统通过PC打印适配器发送数据和控制字,来实现数据锁存和电平转换。通过PC打印适配器25芯D型插座与36芯D型插座转换,与A/D转换芯片TLC1542/43相连。外部模拟信号由TLC1542/43转换成数字信号,通过打印机36芯D型插座和25芯D型插座采集到PC中,由PC机进行处理。其中使用的TLC1542 /43是CMOS,10位开关电容逐次逼近模数转换器,有3个输入端和1个3态输出端片选(CS),输入/输出时钟(I/OCLOCK),地址输入(ADDRESS)和数据输出(DATA OUT),这些器件可以从主机高速传输数据。
2硬件设计
系统的基本硬件结构如图1所示,其中36芯插座与TLC1542/43的硬件接线如图2所示。
使用打印机适配板时,主机与打印机通信的3个I/O端口地址分别为:
数据口状态口控制口
378H 379H 37AH
主机往打印口可以发5种命令,即数据写入命令、数据读出命令、控制字写入命令、控制字读出命令和状态字读出命令。这些命令的具体含义及相关的端口地址为:
数据写入:主机用输出指令往端口378H写入数据
数据读出:主机用输入命令从端口378H读取数据
控制字写入:主机用输出指令往端口37AH写入数据
控制字读出:主机用输入指令往端口37AH读出数据
状态读出:主机用输入指令往端口379H写入数据
3方法实现
3.1通信时序的实现
在VB 6.0中,提供了串行通信控件MSCOMM,但它不适用于通过PC并行口采集数据 ,不能直接对寄存器进行操作,没有直接的输入输出语句,使得它在测控方面有一定的局限性,因此本文利用VC++编制一个简单的动态链接库,库中定义对输入输出端口操作函数,然后在VB中,声明DLL函数,调用它们来完成输入输出操作。这样,既不必编写复杂的VC++动态库,又能充分利用VB强大的界面功能,设计出简便易行的控制界面。
首先实现VC中的动态库collectdata.dll的设计:
程序collectdata.def如下:
编译CPP文件,生成DLL函数collectdata.dll然后在VB中声明DLL函数:
然后按照TLC1542/43的通信时序,设计出对应的通信时序子程序,其中端口的操作调用已定义的函数port_input(portnum)和port_output(portnum,portdata)对适配器的数据口、状态口、控制口操作。
例如:读状态口数据call port_input(&h379)
控制口写数据call port-output(&h37a,0)
TLC1542/43的通信时序如图3所示。
3.2界面的实现
实现基本的数据采集功能后,用户可根据需要,使用VB编制一个操作界面,调用上述子程序即可。
4结语
本文讨论用微机打印并口实现了数据采集的功能,该方案简单实用、速度快、成本低,有较强的借鉴与参考价值。
参考文献
1马忠梅,籍顺心等.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,1999,1
2戴梅萼.微型计算机技术及应用.北京:清华大学出版社,1995,11
3刘乐善,叶济忠,胡盛斌.微型计算机接口技术及应用.武汉:华中理工大学出版社,1994,11
4张树兵,戴红,陈哲.VB 6.0入门与提高.北京:清华大学出版社,1999,4
5王晖.精通VC++6.0.北京:电子工业出版社,1999,6