From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



串口通信入门



主要软件: Driver Software>>NI-Serial
主要软件版本: 1.7
主要软件修正版本: N/A
次要软件: N/A
硬件: Serial

问题:
如何学习串口通信?

解答:

本文介绍串口通信的基本概念。

1,常用术语和概念
对于串口通信的常用术语和概念请参见KnowledgeBase 1M9E1L6Q: Serial Communications General Concepts

2,确认硬件操作的回路测试
有三种方式确认串口的操作:LabVIEW,超级终端和LabWindows/CVI。这三种方式进行回路测试是把串口的发送和接受引脚短接。第一步描述短接引脚的过程。LabVIEW的处理写在下面,而超级终端和LabWindows/CVI的过程在本文后面的链接里。对于LabVIEW建议使用如下步骤:
a,连接一根电缆到串口。最常用的RS-232电缆是9针或者25针(DB-9或者DB-25)。在电缆端把2、3引脚短接。这会把计算机发送数据的线连接到接收数据的线。一旦短接,BD-9的上一排变成【1 2=3 4 5】。
对于RS-485端口,电压是差分的。因此,你必须短接TXD+和RXD+、TXD-和RXD-(对于DB-9电缆,连接pin4到pin8和pin5到pin9;对于模块化接口,连接pin2到pin6和pin3到pin7;对于Combicon接头,连接pin1到pin5和pin2到pin4。)确保你的软件配置为4线模式。
注意:参考附录A“Windows用户的串口软硬件手册”(链接见下),获得不同连接器的更多信息。
b,对于超级终端或者LabWindows/CVI,请参考文章的末尾。
c,对于LabVIEW,打开名为“Serial Communication.vi”的例子程序。对于LabVIEW不同版本,你可以在不同的位置找到这个例子程序:
· LabVIEW 6.1,Help->Find Examples->Hardware Input and Output->Serial->Serial Communication VI.
· LabVIEW 6.0,Help->Examples->Search Examples->I/O Interfaces Examples->Serial Communication Examples->Serial Communication VI.
· LabVIEW 5.1,Help->Search Examples->I/O Interfaces Examples->Serial Communication Examples->Serial Communication VI.
· LabVIEW 5.0,Help->Search Examples->I/O Interfaces Examples->Serial Communication Examples->Serial Communication VI.
· 如果你使用LabVIEW 4.0或者更低的版本,请查找Developer Zone中的例子,Loopback Test for Serial Port。
现在,使用例子中的vi,把字符串写入“Write String”的文本框中,然后在Read String文本框中读回这些字符。在你运行VI之前,确保你选择了正确地COM口或者资源名称。
d,如果工作正常,字符串被读回,表明串口的硬件工作正常。许多串口通讯的问题发生在读写调用的定时或者串口的配置上。

3,常见的问题
许多问题是软件问题,而不是硬件问题。使用例子程序作为查找错误起点,使用LabVIEW带的例子程序(在Help->Search Examples中或者使用本章后面提供链接的例子程序数据库)。
a,端口参考:在LabVIEW中,端口从0开始编号。因此LabVIEW中端口0就是PC上的COM1。
· PC:0=COM1,1=COM2,等等。
· Mac:0=Modem,1=Printer,等等。
· Sun:0=ttya,1=ttyb,等等。

b,程序中定时,挂起:许多次对端口的读操作中串口Read VI导致停止运行并且等待或者挂起。这常常发生在一个读操作并且指定读取一定数量的字节。串口Read VI读取制定数量的字节,如果在串口接收buffer中没有足够的字符,它会等待到串口收到更多的字节。如果没有更多的字节写到buffer中完成读取操作,程序就会不确定的挂起和等待。这可以通过使用Serial Read with Timeout VI(位于Help->Search Examples->Serial Communication)消除。另一种方法是使用Bytes At Serial Port VI检查端口,知道buffer中还有多少字节。把结果连接到read的输入,作为读取的字节数,这样可以保证读操作完成。请看LabVIEW的串口通信例子作为一个很好的学习串口的起点。

c,程序中的定时,不完全传输:另一个常见问题是读操作完成,但是实际上没有完全收到预期的、完整的信息字符串。这也许会在你开始读但是写操作还没完成时发生。这种情况可以使用一个顺序结构或者使用数据流的依赖性解决。数据流的依赖可以通过在初始化写后连线到写操作(通常是error cluster)实现。

d,仪器终止字符:当检验和设备通信时,串口通信非常方便,因为串口能够完全按程序中制定的输出。这意味着你必须知道和编写程序指定码序,包括停止字符,这样才能保证仪器正常工作。通常出现的问题是没有使用仪器所规定的停止字符,或者在指令字符串中写了多余的空格或者其他字符。在LabVIEW中最新的和设备通信的标准是虚拟仪器软件架构(VISA)。VISA是控制VXI、GPIB、RS-232和其他类型仪器的统一接口库。如果你有串口I/O通信的问题,VISA可以帮助你消除结束字符的错误,同时能使你的代码在将来具有可重用性和设备可互换性。

4,虚拟仪器软件架构(VISA)
VISA是在所有LabVIEW平台下一个控制VXI、GPIB、RS-232和其他类型仪器的统一接口库。VISA是VXIPlug&Play联盟制定一个标准,联盟包括超过35家业界最大的仪器公司。VISA标准统一了工业界软件,使之具有可解释和可重用性,而不管时间和设备I/O的变化。NI-VISA驱动可以从网站上下载(参见文章后面的链接)。如果对VISA有问题,可以看后面VISA支持的网页。

5,打印报告和错误-37
Windows的LabVIEW 5.1及其以上版本包括报告生成的vis,使用户坑一向打印机发送文本。使用报告生成的vi,Help->Search Examples->Advanced->Report Generation。对于使用串口通信打印或者更早版本LabVIEW,请参见后面的链接。

如果打印机连接到并口,例如LPT1(或者LPT2,等等),你能够使用Serial Port Write.vi。对于更多的信息,请参见LabVIEW文档的Serial Port VIs那一章。

如果打印机是网络打印机,你不能使用serial Port Write VI;你必须使用其他方式打印,比如:

a,使用编写子Vi的方式打印一个字符串,在子VI的VI Setup中选择“Print VI When VI Completes Execution" 。

b,使用System Exec VI调用Notepad.exe可以编程的方式打印一个字符串。VI的输入是Notepad.exe /p c:\junk.txt,junk.txt是一个文本文件,放置需要打印文本。

c,对于Error-37,请根据后面的链接检查LabVIEW.ini文件。

6,LabVIEW中的Modem通信
LabVIEW中的Modem通信被NI系统联盟中的成员公司充分支持。

7,开发者交互论坛
NI的开发者交互论坛是一个强大的论坛,提供全文搜索、email订阅和其他服务。它的优势在于可以通过在论坛浏览、搜索和发文提问和许多科学家和工程师共享知识和信息。

8,COM口数据的高级故障解决
对于精确分析串口通信bits以对比编程差别(比如LabVIEW和超级终端)的高级用户,能够使用一个程序叫做Portmon。Portmon是Sysinternals提供的一个软件,它的网站提供你windos 9x和WindowsNI/2k环境下的高级工具、技术信息和源代码。


相关链接:
Product Manuals: Serial Hardware and Software for Windows User Manual

Developer Zone: Development Library
Developer Zone Example: Loopback Test for Serial Port
Developer Zone: Developer Exchange Discussion Forums

Support: Serial Products Support
Support: Verifying a Serial Port, HyperTerminal Test
Support: Verifying a Serial Port, LabWindows/CVI Test
Support: Instrument Drivers (IVI, VISA) Support
Drivers and Updates: All Versions

KnowledgeBase 1M9E1L6Q: Serial Communications General Concepts
KnowledgeBase 0ISAJ838: I Receive Error -37 When Writing to the Parallel Port (LPT1) in LabVIEW

Sysinternals Website

附件:





报告日期: 07/01/2005
最近更新: 04/28/2008
文档编号: 1M9D8H6Q