多语言展示
当前在线:1972今日阅读:83今日分享:49

LabVIEW-TCP通信

TCP/IP参考模型是首先由ARPANET所使用的网络体系结构。这个体系结构在它的两个主要协议出现以后被称为TCP/IP参考模型(TCP/IP Reference Model)。这一网络协议共分为四层:网络访问层、互联网层、传输层和应用层。网络访问层(Network Access Layer)在TCP/IP参考模型中并没有详细描述,只是指出主机必须使用某种协议与网络相连。互联网层(Internet Layer)是整个体系结构的关键部分,其功能是使主机可以把分组发往任何网络,并使分组独立地传向目标。这些分组可能经由不同的网络,到达的顺序和发送的顺序也可能不同。高层如果需要顺序收发,那么就必须自行处理对分组的排序。互联网层使用因特网协议(IP,Internet Protocol)。TCP/IP参考模型的互联网层和OSI参考模型的网络层在功能上非常相似。传输层(Tramsport Layer)使源端和目的端机器上的对等实体可以进行会话。在这一层定义了两个端到端的协议:传输控制协议(TCP,Transmission Control Protocol)和用户数据报协议(UDP,User Datagram Protocol)。TCP是面向连接的协议,它提供可靠的报文传输和对上层应用的连接服务。为此,除了基本的数据传输外,它还有可靠性保证、流量控制、多路复用、优先权和安全性控制等功能。UDP是面向无连接的不可靠传输的协议,主要用于不需要TCP的排序和流量控制等功能的应用程序。应用层(Application Layer)包含所有的高层协议,包括:虚拟终端协议(TELNET,TELecommunications NETwork)、文件传输协议(FTP,File Transfer Protocol)、电子邮件传输协议(SMTP,Simple Mail Transfer Protocol)、域名服务(DNS,Domain Name Service)、网上新闻传输协议(NNTP,Net News Transfer Protocol)和超文本传送协议(HTTP,HyperText Transfer Protocol)等。TELNET允许一台机器上的用户登录到远程机器上,并进行工作;FTP提供有效地将文件从一台机器上移到另一台机器上的方法;SMTP用于电子邮件的收发;DNS用于把主机名映射到网络地址;NNTP用于新闻的发布、检索和获取;HTTP用于在WWW上获取主页。
工具/原料

LabVIEW

TCP函数
1

LabVIEW的TCP通信函数位于:函数选板-数据通信-协议-TCP;包括:TCP侦听,打开TCP连接,读取TCP数据,写入TCP数据,关闭TCP连接,IP地址至字符串转换,字符串至IP地址转换,解释机器别名,创建TCP侦听,等待TCP侦听;

2

TCP侦听:创建侦听器并等待位于指定端口的已接受TCP连接。网络地址(接线端):指定侦听的网络地址。有多块网卡时,如需侦听特定地址上的网卡,应指定网卡的地址。如未指定网络地址,LabVIEW可侦听所有的网络地址。 通过字符串至IP地址转换函数可获取当前计算机的IP网络地址。服务名称(接线端):创建端口号的已知引用。如指定服务名称,LabVIEW将使用NI服务定位器注册服务名称和端口号。端口(接线端):是要侦听连接的端口号。超时毫秒(接线端):指定VI等待连接的时间,以毫秒为单位。如未在指定时间内建立连接,VI可完成并返回错误。默认值为-1,表示无限等待。错误输入(接线端):表明节点运行前发生的错误。该输入将提供标准错误输入功能。分解远程地址(接线端):表明是否在远程地址调用“IP地址至字符串转换”函数。默认值为TRUE。 更多信息,见IP地址至字符串转换。侦听器ID(接线端):是唯一标识侦听器的网络连接句柄。连接ID是唯一标识TCP连接的网络连接引用句柄。该连接句柄用于在以后的VI调用中引用连接。远程地址(接线端):是与TCP连接关联的远程机器的地址。该地址使用IP句点符号格式。远程端口(接线端):是远程系统用于连接的端口。错误输出(接线端):包含错误信息。该输出将提供标准错误输出功能。

3

打开TCP连接:打开由地址和远程端口或服务名称指定的TCP网络连接。地址(接线端):是要与其建立连接的地址。该地址可以为IP句点符号格式或主机名。 如未指定地址,LabVIEW可建立与本地计算机的连接。远程端口或服务名称(接线端):可接受数字或字符串输入。远程端口或服务名称是要与其确立连接的端口或服务的名称。如指定服务名称,LabVIEW可向NI服务定位器查询所有服务已注册的端口号。如连接值0,LabVIEW将返回错误。超时毫秒(接线端):指定函数等待完成和返回错误的时间,以毫秒为单位。默认值为60000毫秒,1分钟。值–1表明无限等待。错误输入(接线端):表明节点运行前发生的错误。该输入将提供标准错误输入功能。本地端口(接线端):是用于本地连接的端口。某些服务器仅允许连使用特定范围内的端口号连接客户端,范围由服务器确定。如值为0,操作系统可选择尚未使用的端口。默认值为0。连接ID(接线端):是唯一标识TCP连接的网络连接引用句柄。该连接句柄用于在以后的VI调用中引用连接。错误输出(接线端):包含错误信息。该输出将提供标准错误输出功能。

4

读取TCP数据:从TCP网络连接读取字节并通过数据输出返回结果。模式(接线端):表明读取操作的动作。 0是Standard(默认)-等待直至读取所有读取字节中指定的字节或超时毫秒用完。返回目前已读取的字节数。如字节数少于请求的字节数,则返回部分字节数并报告超时错误。1是Buffered—等待直至读取所有读取字节中指定的字节或超时毫秒用完。如字节数少于请求的字节数,则不返回字节并报告超时错误。2是CRLF—等待直至读取字节中指定的所有字节达到,或直至函数在读取字节指定的字节数内接收到CR(回车)加上LF(换行)或超时毫秒用完。该函数可返回所有的字节,包括CR和LF。3是Immediate-在函数接收到读取字节中所指定的字节前一直等待。如该函数未收到字节则等待至超时。返回目前的字节数。如函数未接收到字节则报告超时错误。连接ID(接线端):是唯一标识TCP连接的网络连接引用句柄。读取的字节(接线端):是要读取的字节数。 下列方法可处理字节数不同的消息:发送消息,消息前带有用于描述该消息的文件头,大小固定。例如,文件头中可包含说明消息类型的命令整数,以及说明消息中其它数据大小的长度整数。服务器和客户端均可接收消息。发出8字节的读取函数(假定为两个4字节的整数),然后使函数转换为两个整数,再依据长度整数确定作为剩余消息发送至第二个读取函数的字节数。第二个读取函数完成后,可返回至8字节文件头的读取函数。这种方式最为灵活,但需要读取函数接收消息。实际上,通常第二个读取函数在消息通过写入函数写入时立即完成。发送固定大小的消息。如消息的内容小于指定的固定大小,可填充消息,使其达到固定大小。这种方式更为高效,因为即使有时会发送不必要的数据,接收消息时也只需读取函数。发送只包含ASCII数据的消息,每个消息以一个回车和一对字符换行符结束。读取函数具有模式输入,在传递CRLF后,可使函数在发现回车和换行序列前一直进行读取。这种方式在消息数据含有CRLF序列时显得较为复杂,常用于POP3、FTP和HTTP等互联网协议。超时毫秒(接线端):指定模式等待且未报告超时错误的时间,以毫秒为单位。 默认值为25,000毫秒。值–1表示无限等待。错误输入(接线端):表明节点运行前发生的错误。该输入将提供标准错误输入功能。连接ID输出(接线端):返回值与连接ID相同。数据输出(接线端):包含从TCP连接读取的数据。错误输出(接线端):包含错误信息。该输出将提供标准错误输出功能。

5

写入TCP数据:使数据写入TCP网络连接。连接ID(接线端):是唯一标识TCP连接的网络连接引用句柄。数据输入(接线端):包含要写入连接的数据。 下列方法可处理字节数不同的消息:发送消息,消息前带有用于描述该消息的文件头,大小固定。例如,文件头中可包含说明消息类型的命令整数,以及说明消息中其它数据大小的长度整数。服务器和客户端均可接收消息。发出8字节的读取函数(假定为两个4字节的整数),然后使函数转换为两个整数,再依据长度整数确定作为剩余消息发送至第二个读取函数的字节数。第二个读取函数完成后,可返回至8字节文件头的读取函数。这种方式最为灵活,但需要读取函数接收消息。实际上,通常第二个读取函数在消息通过写入函数写入时立即完成。发送固定大小的消息。如消息的内容小于指定的固定大小,可填充消息,使其达到固定大小。这种方式更为高效,因为即使有时会发送不必要的数据,接收消息时也只需读取函数。发送只包含ASCII数据的消息,每个消息以一个回车和一对字符换行符结束。读取函数具有模式输入,在传递CRLF后,可使函数在发现回车和换行序列前一直进行读取。这种方式在消息数据含有CRLF序列时显得较为复杂,常用于POP3、FTP和HTTP等互联网协议。超时毫秒(接线端):指定函数完成向设备写入字节并报告错误的时间,以毫秒为单位。默认值为25,000毫秒。值–1表示无限等待。错误输入(接线端):表明节点运行前发生的错误。该输入将提供标准错误输入功能。连接ID输出(接线端):返回值与连接ID相同。写入的字节(接线端):是VI写入连接的字节数。错误输出(接线端):包含错误信息。该输出将提供标准错误输出功能。

6

关闭TCP连接:关闭TCP网络连接。连接ID(接线端):是唯一标识要关闭的网络连接的网络句柄。中止(接线端):保留以便今后使用。错误输入(接线端):指示节点运行前产生错误的条件。在下列情况下,该输入可作为标准错误输入。 即使在节点运行前发生错误,节点仍正常运行。连接ID输出(接线端):的值与连接ID相同。请勿连线该输出端至其它TCP函数。错误输出(接线端):包含错误信息。该输出将提供标准错误输出功能。

7

IP地址至字符串转换:使IP地址转换为字符串。网络地址(接线端):是要进行转换的IP网络地址,用句点符号和无符号整数表示。句点符号?(接线端):表明名称是否为句点符号格式。默认值为FALSE,返回machinename.domain.com格式的IP地址。 句点符号格式返回128.0.0.25。名称(接线端):是等同于网络地址的字符串。

8

字符串至IP地址转换:使字符串转换为IP地址或IP地址数组。名称(接线端):是要转换的字符串。如为空,网络地址是当前机器的IP网络地址。网络地址(接线端):与名称等同,它是用句点符号和无符号整数表示的IP网络地址。

9

解释机器别名:返回机器的网络地址,用于联网或在VI服务器函数中使用。应用程序引用句柄(接线端):是对LabVIEW应用程序的引用。机器别名(接线端):是计算机的别名。错误输入(接线端):表明节点运行前发生的错误。该输入将提供标准错误输入功能。应用程序引用句柄输出(接线端):传递由应用程序引用句柄指定的应用程序引用。网络识别(接线端):是机器的网络地址(例如,IP地址)。 如VI不能解析该机器别名,VI将返回错误,或将机器别名作为网络识别返回。错误输出(接线端):包含错误信息。该输出将提供标准错误输出功能。

10

创建TCP侦听器:为TCP网络连接创建侦听器。连线0至端口输入可动态选择操作系统认为可用的TCP端口。使用打开TCP连接函数向NI服务定位器查询与服务名称注册的端口号。网络地址(接线端):指定侦听的网络地址。有多块网卡时,如需侦听特定地址上的网卡,应指定网卡的地址。如未指定网络地址,LabVIEW可侦听所有的网络地址。 通过字符串至IP地址转换函数可获取当前计算机的IP网络地址。服务名称(接线端):创建端口号的已知引用。如指定服务名称,LabVIEW将使用NI服务定位器注册服务名称和端口号。端口是要侦听连接的端口号。超时毫秒(接线端):指定函数等待完成并报告错误的时间,以毫秒为单位。默认值为25000毫秒,即25秒钟。值-1表明无限等待。错误输入(接线端):表明节点运行前发生的错误。该输入将提供标准错误输入功能。侦听器ID(接线端):是唯一标识侦听器的网络连接句柄。端口(接线端):返回函数使用的端口号。如输入端口不为0,则输出端口号等于输入端口号。连线0至端口输入可动态选择操作系统认为可用的TCP端口。 依据Internet Assigned Numbers Authority(IANA)的定义,有效的端口号在49152至65535之间。常用端口在0至1023之间,注册端口在1024至49151之间。不是所有操作系统都支持IANA标准。例如,Windows返回的动态端口在1024至5000之间。错误输出(接线端):包含错误信息。该输出将提供标准错误输出功能。

11

等待TCP侦听器:等待已接受的TCP网络连接。侦听器ID输入(接线端):是唯一标识侦听器的网络连接句柄。分解远程地址(接线端):表明是否在远程地址调用“IP地址至字符串转换”函数。默认值为TRUE。 更多信息,见IP地址至字符串转换。超时毫秒(接线端):指定函数等待连接的时间,以毫秒为单位。如在指定的时间内未建立连接,函数返回错误。默认值为-1,表示无限等待。错误输入(接线端):表明节点运行前发生的错误。该输入将提供标准错误输入功能。侦听器ID输出(接线端):的值与侦听器ID输入相同。该值用于在以后的调用中引用函数。远程地址(接线端):是与TCP连接关联的远程机器的地址。该地址使用IP句点符号格式。远程端口(接线端):是远程系统用于连接的端口。错误输出(接线端):包含错误信息。该输出将提供标准错误输出功能。连接ID(接线端):是唯一标识TCP连接的网络连接引用句柄。该连接句柄用于在以后的VI调用中引用连接。

建立服务器/客户端通信
1

首先确认服务器端的IP地址,打开控件面板-网络与共享中心-打开Local Area Connection-详细信息-PIv4地址:10.47.5.131;

2

采用同样的方法,可以查看客户端IP地址。然后在客户端测试网络连接,如何丢失为0,则表示连接建立完成;

服务器
1

客户端在指定端口连接时,TCP侦听VI生产连接引用。注意客户端有30秒时间进行连接,之后服务器将超市;

2

第一个写入TCP数据函数指定发送数据大小,第二个写入TCP数据函数发送数据;读取TCP数据监测客户端是否写入了数据,如果写入了数据,则客户端通知服务器停止执行。注意读取TCP函数超时为0,因为客户端将不会一直向服务器发送数据。由于读取TCP数据将在超时时返回错误信息,错误分支将忽略循环内的超时错误;

3

用户点击停止或者发生错误时,将关闭TCP连接;

4

如客户端VI关闭连接,可能发生错误,该情况下,忽略可能发生的错误并弹出提醒对话框;

5

整体VI前面板和程序框图如图所示;

客户端
1

通过打开TCP连接函数打开TCP连接,注意地址Address为服务器的IP地址,端口号port必须与服务器端口号一致;

2

第一个读取TCP数据函数采样数据的大小,如果数据大小大于0,则第二个读取TCP数据函数开始读取数据;

3

使用写入TCP数据发送单个字符至服务器,表面客户端已经亭子,用户单击停止或发送错误时,关闭TCP连接引用;

4

如果服务器VI关闭连接,可能发送错误信息,该情况下,忽略可能发送的错误并弹出提醒对话框;

5

整体VI前面板和程序框图如图所示;

LabVIEW
1

运行LabVIEW服务端程序;

2

运动labVIEW客户端程序;

注意事项

服务器和客户端设置在同一网段

推荐信息