udp3

VB.net 2005实现TCP网络通信例程(.net VS2005)源码
TCP协议是TCP/IP协议簇中的传输层中的一个协议,也是TCP/IP协议簇最为重要的协议之

一。在TCP/IP协议簇中,有一个协议和TCP协议非常类似,这就是UDP协议,网络上进行

基于UDP协议的数据传送时,发送方只需知道接收方的IP地址(或主机名)和端口号就可

以发送UDP数据包。而接收方只需知道发送方发送数据对应的端口号,就能够接收UDP数

据包了。传送数据的双方并不需要进行连接就能够实现数据通讯,这样就导致基于UDP协

议的网络应用程序,在传送数据时无法保证可靠性、完整性和安全性。

   而TCP协议却与之相反,TCP协议是一种面向连接的,并提供可靠的、完整的、安

全的数据传送的网络协议。它提供可靠字节服务的协议。在网络中通过TCP协议传送数据

之前,发送方和接收方之间必须建立连接,这种连接就是所谓的"握手"。网络中TCP应用

,如同日常生活中的打电话,在通话之前,首先要拨号、震铃(犹如发送方向接收方提

出TCP连接申请,并等待TCP连接申请通过)。直到对方拿起电话时(发送方和接收方的

TCP连接已经建立),就可以通话了(传送数据)。本文的主要内容就来介绍在Visual

Basic .Net实现基于TCP协议网络数据传送的一种简单的方法。

  一.简介本文在实现TCP协议网络应用时使用的类库:

  .Net FrameWork SDK中提供了很多用以实现TCP协议或与之相关协议的类库,本文就

选择五个比较典型,也是比较简单的类加以介绍,即:TcpListener类、TcpClient类、

NetworkStream类、StreamReader类和StreamWriter类。TcpClient主要用以提出TCP连接

申请。TcpListener主要用以侦听端口号,并接收远程主机的TCP连接申请。

NetworkStream类是实现TCP数据传输的基础数据流,StreamReader类作用是通过操作

NetworkStream,实现从网络接收数据。StreamWriter类作用是通过操作NetworkStream

,实现向网络传输数据。

  1. NetworkStream类:

  NetworkStream类主要是提供用于网络访问的基础数据流。它主要是网络数据传输的

载体,并提供同步、异步方式来访问网络数据流。虽然NetworkStream类有构造函数,但

在实际情况中更多是通过TcpClient实例的GetStream方法来初始化NetworkStream实例。

以下就是使用TcpClient实例的GetStream方法来初始化NetworkStream实例具体代码:

Dim tcpClient As TcpClient
Dim nsStream As NetworkStream
tcpClient = New TcpClient( "www.microsoft.com" , 8000)
'对远程主机的8000端口提出TCP连接申请
nsStream = tcpClient.GetStream ( )
'TCP连接建立后,获得网络数据传输的基础数据流

  在下面介绍的程序示例中,就是利用NetworkStream作为传送和接收数据的载体。而

操作这个载体的就是StreamWriter类和StreamReader类。表01和表02是NetworkStream类

中一些常用的方法、属性及其说明。

方法 说明
BeginRead 开始异步读者基础数据流。
BeginWrite 开始异步写入基础数据流。
Close 关闭流并可选择关闭基础套接字。
EndRead 结束异步读取。
EndWrite 结束异步写入。
Flush 刷新流中的数据。
Read 从流中读取数据。
Seek 将流的当前位置设置为给定值。
SetLength 设置流的长度。
Write 将数据写入流。

表01:NetworkStream类中常用的方法及其说明

  其中"BeginRead"、"EndRead"和"BeginWrite"、"EndWrite"是二对异步方法,起作

用分别相当于"Read"和"Write"方法。

属性 说明
CanRead 获取当前流是否支持读取。
CanSeek 获取流是否支持查找。该属性总是返回 false。
CanWrite 获取当前流是否支持写入。
DataAvailable 获取是否可以在流上读取数据。
Length 流上可用数据的长度。
Position 获取或设置流中的当前位置。


表02:NetworkStream类中属性及其说明

  2. StreamReader类:

  StreamReader类能够实现对基础数据流的读操作,从而实现对经过基础数据流传送

来的数据。表03是StreamReader类的常用的方法及其说明:

 

方法 说明
Close 关闭StreamReader并释放与阅读器关联的所有系统资源。
DiscardBufferedData 允许StreamReader丢弃其当前数据。
Peek 返回下一个可用的字符,但不使用它。
Read 读取输入流中的下一个字符或下一组字符。
ReadBlock 从当前流中读取最大数量的字符并从索引开始将该数据写入缓冲区。
ReadLine 从当前流中读取一行字符并将数据作为字符串返回。
ReadToEnd 从流的当前位置到末尾读取流。

 

表03:NetworkStream类中常用的方法及其说明

  3. StreamWriter类:

  StreamWriter类能够实现对基础数据流的写操作,从而实现提供基础数据流来传送

数据。表04是StreamWriter类的常用方法及其说明:

 

方法 说明
Close 关闭当前的StreamWriter和基础流。
Flush 清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。
Write 写入基础数据流。
WriteLine 写入重载参数指定的某些数据,后跟行结束符。

 

表04:StreamWriter类的常用方法及其说明

4.TcpClient 类:

  TcpClient 类主要为TCP网络服务提供客户端连接。TcpClient是类基于Socket类构

建,
它以更高的抽象程度提供TCP服务。TcpClient 提供了通过网络连接、发送和接收数据的

简单方法。表05和表06分别是TcpClient类常用方法、属性及其说明。

 

方法 说明
Close 关闭 TCP 连接
Connect 使用指定的主机名和端口号将客户端连接到 TCP主机
GetStream 返回用于发送和接收数据的流

 

表05:TcpClient类常用的方法

 

属性 描述
LingerState 有关套接字逗留时间的信息
NoDelay 一个值,该值在发送或接收缓冲区未满时启用延迟
ReceiveBufferSize 接收缓冲区的大小
ReceiveTimeout TcpClient在启动后为接收数据而等待的时间长度
SendBufferSize 发送缓冲区的大小
SendTimeout 在您启动发送操作后TcpClient将为接收确认而等待的时间长度

 

表06:TcpClient类常用的属性

  5.TcpListener 类:

  TcpListener类的主要作用是从TCP网络客户端侦听连接,TcpListener类基于Socket


提供更高理念级别的TCP服务。可以使用TcpListener从TCP客户端侦听连接。像 FTP 和

HTTP 这样的应用层协议是在 TcpListener 类的基础上建立的。表7和表8分别是

TcpListener类常用方法、属性及其说明:

 

方法 说明
AcceptSocket 接受挂起的连接请求
AcceptTcpClient 接受挂起的连接请求
Pending 确定是否有挂起的连接请求
Start 开始侦听网络请求
Stop 关闭侦听器


表7:TcpListener 类常用的方法

 

属性 说明
LocalEndpoint 获取当前TcpListener的基础EndPoint
Active 获取一个值,该值指示 TcpListener 是否正主动侦听客户端连接
Server 获取基础网络Socket

 

表8:TcpListener 类常用的属性

二.Visual Basic .Net实现基于TCP协议数据传送程序的体系结构:

 

  在下面介绍的用Visual Basic .Net实现基于TCP协议的数据传送程序是由二个子程

序组成的。也可以看成是服务器端程序和客户端程序,其中:服务器端程序的功能是侦

听端口号,接收远程主要的TCP连接申请,并接收远程主机传送来的文字数据。另外一个

子程序,也就是所谓的客户端程序,主要实现向网络的远程主机提出TCP连接申请,并在

连接申请通过后,向远程主机传送文字数据。下面来详细介绍Visual Basic .Net实现

TCP协议网络数据传送的服务器端程序和客户端程序的具体步骤。

  三.服务器端程序的具体实现步骤:

  服务器端程序的实现关键在于侦听端口号,接收远程主机的TCP连接申请,获得网络

数据传输的基础数据流,并通过基础数据流接收数据。接收数据使用的是StreamReader

中ReadLine方法,由于ReadLine方法是一个阻塞式的方法,所以在下面具体的实现步骤

中,是接收数据是在创建的线程中完成的,具体可参阅下面实现步骤中的第十一和十二

步。以下是Visual Basic .Net实现TCP协议客户端程序实现的具体步骤:

  1. 启动Visual Studio .Net。

  2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3. 将【项目类型】设置为【Visual Basic项目】。

  4. 将【模板】设置为【Windows应用程序】。

  5. 在【名称】文本框中输入【服务器端程序】。

  6. 在【位置】的文本框中输入【E:/VS.NET项目】,然后单击【确定】按钮,这样

在"E:/VS.NET项目"目录中就产生了名称为"服务器端程序"的文件夹,并在里面创建了名

称为"服务器端程序"的项目文件。

  7. 把Visual Studio .Net的当前窗口切换到【Form1.vb(设计)】窗口,并从【工

具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的

操作:

  一个Label组件。
  一个StatusBar组件。
  一个ListBox组件。
  一个Button组件,并在这个Button组件拖入Form1的设计窗体后,双击它,则系统会

在Form1.vb文件分别产生这个组件的Click事件对应的处理代码。

  8. 按照表05所示调整窗体中各组件属性的数值:

 

组件类型 组件名称 属性 设置结果
Form Form1 Text 服务器端程序
Form1 MaximizeBox False
Form1 FormBorderStyle FixedSingle
Button Button1 Text 启动服务
Button1 FlatStyle Flat
Label Label1 Text 服务尚未启动
StatusBar StatusBar1 Text 无连接!


表05:【服务器端程序】项目中组件设定数值表

. 把Visual Studio .Net的当前窗口切换到Form1.vb的代码编辑窗口,并在Form1.vb文

件的最前面添加下列代码,下列代码在Form1.vb中导入程序中要使用的类所在的命名空

间:

 

Imports System.Net.Sockets
'使用到TcpListen类
Imports System.Threading
'使用到线程
Imports System.IO
'使用到StreamReader类

 

  10. 在Form1.vb中创建各种可视组件的代码中添加下列代码,下列代码的作用是创

建全局使用的实例和变量:

 

Private iPort As Integer = 8000
'定义侦听端口号
Private thThreadRead As Thread
'创建线程,用以侦听端口号,接收信息
Private tlTcpListen As TcpListener
'侦听端口号
Private blistener As Boolean = True
'设定标示位,判断侦听状态
Private nsStream As NetworkStream
'创建接收的基本数据流
Private srRead As StreamReader
'从网络基础数据流中读取数据
Private tcClient As TcpClient

 

  11. 在Form1.vb中的InitializeComponent过程之后添加下列代码,下列代码的作用

是定义Listen过程,此过程的作用是侦听本地机的8000端口号,接受网络主机的TCP连接

申请,并接收从建立申请的远程主机发送来的文本数据:

 

Private Sub Listen ( )
Try
 tlTcpListen = New TcpListener ( iPort )
 '以8000端口号来初始化TcpListener实例
 tlTcpListen.Start ( )
 '开始监听
 StatusBar1.Text = "正在监听..."
 tcClient = tlTcpListen.AcceptTcpClient ( )
 '通过TCP连接请求
 nsStream = tcClient.GetStream ( )
 '获取用以发送、接收数据的网络基础数据流
 srRead = New StreamReader ( nsStream )
 '以得到的网络基础数据流来初始化StreamReader实例
 StatusBar1.Text = "已经建立TCP连接!"
 '循环侦听
 While blistener
  Dim sMessage As String = srRead.ReadLine ( )
  '从网络基础数据流中读取一行数据
  If ( sMessage = "STOP" ) Then
   tlTcpListen.Stop ( )
   '关闭侦听
   nsStream.Close ( )
   srRead.Close ( )
   '释放资源
   StatusBar1.Text = "无连接!"
   thThreadRead.Abort ( )
   '中止线程
   Return
  Else
   '判断是否为断开TCP连接控制码
   Dim sTime As String = DateTime.Now.ToShortTimeString ( )
   '获取接收数据时的时间
   ListBox1.Items.Add ( sTime + " " + sMessage )
  End If
 End While
Catch ex As System.Security.SecurityException
 MessageBox.Show ( "侦听失败!" , "错误" )
End Try
End Sub


  12. 用下列代码替换Form1.vb中的Button1的Click事件对应的处理代码,下列代码

功能是用上面定义的Listen过程来初始化并启动线程,接收建立TCP连接的远程主机发送

来的文本数据:

 

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As

System.EventArgs ) Handles Button1.Click
 thThreadRead = New Thread ( New ThreadStart ( AddressOf Listen ) )
 '以Listen过程来初始化线程实例
 thThreadRead.Start ( )
 '启动线程
 Button1.Enabled = False
 Label1.Text = "服务已经启动!"
 Label1.ForeColor = Color.Red
End Sub

 

 

13. 用下列代码替换Form1.vb中的Dispose过程,下面代码的作用是重新定义Dispose过

程,在Dispose过程手动清除使用的资源,回收垃圾:

 

Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )
 Try
  thThreadRead.Abort ( ) '中止线程
  tlTcpListen.Stop ( ) '关闭侦听
  tcClient.Close ( )
  nsStream.Close ( )
  srRead.Close ( ) '释放资源
 Catch
 End Try
 If disposing Then
  If Not ( components Is Nothing ) Then
   components.Dispose ( )
  End If
 End If
 MyBase.Dispose ( disposing )
End Sub

 

  14. 至此在上述步骤都正确执行后,【服务器端程序】项目的全部工作就完成了。

编译、生成可执行文件后,接着介绍客户端程序的实现步骤。

四.客户端端程序的具体实现步骤:

  客户端端序的实现关键在于向网络中的远程主机提出TCP连接申请,并在申请通过后

,得到传输数据的基础数据流,并通过对基础数据流进行写操作向远程主机传送文本数

据。

由于在客户端程序中没有使用阻塞式的方法,所以程序中没有使用到线程。对远程主机

提出TCP连接申请的具体实现方法请参阅以下第步;对基础数据流进行写操作,从而实现

向远程主机传送文本数据的方法请参阅以下第步。下面客户端程序的具体实现步骤:

  1. 启动Visual Studio .Net。

  2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3. 将【项目类型】设置为【Visual Basic项目】。

  4. 将【模板】设置为【Windows应用程序】。

  5. 在【名称】文本框中输入【客户端程序】。

  6. 在【位置】的文本框中输入【E:/VS.NET项目】,然后单击【确定】按钮,这样

在"E:/VS.NET项目"目录中就产生了名称为"客户端程序"的文件夹,并在里面创建了名称

为"客户端程序"的项目文件。

  7. 把Visual Studio .Net的当前窗口切换到【Form1.vb(设计)】窗口,并从【工

具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的

操作:

  二个Label组件。
  二个TextBox组件。
  一个StatusBar组件。
  二个Button组件,并在这二个Button组件拖入Form1的设计窗体后,双击它们,则系

统会在Form1.vb文件分别产生这二个组件的Click事件对应的处理代码。

  8. 按照表01所示调整窗体中各组件属性的数值:

 

组件类型 组件名称 属性 设置结果
Form Form1 Text 客户端程序
Form1 MaximizeBox False
Form1 FormBorderStyle FixedSingle
Button Button1 Text 连接
Button1 FlatStyle Flat
Button2 Text 发送
Button2 FlatStyle Flat
Label Label1 Text 服务器IP地址:
Label2 Text 信息:
StatusBar StatusBar1 Text 无连接!
TextBox TextBox1 Text ""
TextBox1 BorderStyle FixedSingle
TextBox2 Text ""
TextBox2 BorderStyle FixedSingle

 

表06:【客户端程序】项目中组件设定数值表

  9. 把Visual Studio .Net的当前窗口切换到Form1.vb的代码编辑窗口,并在

Form1.vb文件的最前面添加下列代码,下列代码在Form1.vb中导入程序中要使用的类所

在的命名空间:

 

Imports System.Net.Sockets
'使用到TcpListen类
Imports System.IO
'使用到StreamWriter类
Imports System.Net
'使用IPAddress类、IPHostEntry类等

 

  10. 在Form1.vb中创建各种可视组件的代码中添加下列代码,下列代码的作用是创

建全局使用的实例和变量:

 

Private swWriter As StreamWriter
 '用以向网络基础数据流传送数据
 Private nsStream As NetworkStream
 '创建发送数据的网络基础数据流
 Private tcpClient As TcpClient
 '通过它实现向远程主机提出TCP连接申请
 Private tcpConnect As Boolean = False
 '定义标识符,用以表示TCP连接是否建立

11. 用下列代码替换Form1.vb中的Button1的Click事件对应的处理代码,下列代码功能

是向远程主机的8000端口号提出TCP连接申请,并在连接建立后,初始化基础数据流:

 

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As

System.EventArgs ) Handles Button1.Click
 Dim ipRemote As IPAddress
 Dim sHostName As String
 Dim tcpClient As TcpClient
 Try
  ipRemote = IPAddress.Parse ( TextBox1.Text )
 Catch
  MessageBox.Show ( "输入的IP地址不合法!" , "错误提示!" )
  Return
  '判断给定的IP地址的合法性
 End Try
 Try
  tcpClient = New TcpClient ( TextBox1.Text , 8000 )
  '对远程主机的8000端口提出TCP连接申请
  nsStream = tcpClient.GetStream ( )
  '通过申请,并获取传送数据的网络基础数据流
  swWriter = New StreamWriter ( nsStream )
  '使用获取的网络基础数据流来初始化StreamWriter实例
  Button1.Enabled = False
  Button2.Enabled = True
  tcpConnect = True
  StatusBar1.Text = "已经连接!"
 Catch
  MessageBox.Show ( "无法和远程主机8000端口建立连接!" , "错误提示!" )
  Return
 End Try
End Sub

 

  12. 用下列代码替换Form1.vb中的Button2的Click事件对应的处理代码,下列代码

功能是对基础数据流进行写操作,实现向远程主机传输文本数据:

 

Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As

System.EventArgs ) Handles Button2.Click
 If ( TextBox2.Text <> "" ) Then
  swWriter.WriteLine ( TextBox2.Text )
  '刷新当前数据流中的数据
  swWriter.Flush ( )
  TextBox2.Text = ""
 Else
  MessageBox.Show ( "发送信息不能为空!" , "错误提示!" )
 End If
End Sub

 

  13. 用下列代码替换Form1.vb中的Dispose过程,下面代码的作用是重新定义

Dispose过程,在过程中判断TCP连接是否仍然建立,如果建立则向远程主机传送控制码

,断开连接,并手动清除使用的资源,回收垃圾:

 

Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )
 If tcpConnect Then
  swWriter.WriteLine ( "STOP" )
  '发送控制码
  swWriter.Flush ( )
  '刷新当前数据流中的数据
  nsStream.Close ( )
  swWriter.Close ( )
  '清除资源 ( )
 End If
 If disposing Then
  If Not ( components Is Nothing ) Then
   components.Dispose ( )
  End If
 End If
 MyBase.Dispose ( disposing )
End Sub

 

  14. 至此【客户端程序】就完成了。在正确编译项目后。就可以选择局域网中任二

台计算机来测试了,一台运行客户端程序,一台运行服务器端程序。在服务器端程序运

行后,单击【启动服务】按钮,启动服务后。在客户端程序的【服务器IP地址】文本框

中输入网络中运行服务器端程序主机对应的IP地址后,单击【连接】按钮,就和启动服

务的服务器端程序建立TCP连接,此时就可以在客户端程序的【信息】文本框中输入文本

信息后,单击【发送】按钮就能够把文本信息传送到服务器端了。图03和图04分别是客

户端程序和服务器端程序运行后进行通讯时的界面:

  五.总结:

  虽然本文用Visual Basic .Net实现一个简单的基于TCP协议的网络应用程序。但程

序中使用的是NetworkStream作为载体,通过StreamWriter和StreamReader通过操作这个

载体从而实现数据传输和接收。这种实现TCP协议方法虽然比较简单,但却无法回避

NetworkStream作为网络传输、接收数据载体的一个致命的缺陷,那就是NetworkStream

只能传输基于文本类型的数据,如果要传输基于字节的数据,使用这种方法就勉为其难

了。而套接字(Socket)就能够胜任这项工作,套接字不仅能够实现各种类型数据在网

络上的传输和接收,也是实现网络中其他应用协议的关键。诸位若想真正成为网络编程

的高手,必须掌握Socket的使用方法。最后希望本文能够开启您编写网络应用程序之门

,对您掌握更深层次网络编程有所帮助。

 


基于JAVA的工业控制移动数据通信解决方案[日期:2008-12-3 13:27:00] 作者:未知

来源:
    J2ME技术目前在手机行业取得了较大成功,已经成为手机增值开发平台的业界事实

标准,它创造性解决了不同软硬件平台上统一应用开发的问题把这个思路引入到工业控

制无线数传终端,具有广阔的市场前景 在工业控制系统中利用J2ME技术,不但可以降低

系统的开发难度、实现嵌入式环境中基于服务级的互操作,而且可使系统具有很好的灵

活性和可靠性使无线数传终端实现了模块化、构件化设计,大大提高了系统的可扩展性

与可扩充性JAVA嵌入式软件具有标准的程序接口和协议,可解决应用互联带来的各种问

题,消除不同软件、硬件系统之间的异构问题,可支持各种通讯协议、各种通讯服务模

式、传输各种数据内容、数据格式翻译、流量控制、数据加密、数据压缩等;JAVA嵌入

式软件还可解决安全控制、并发控制、可靠性保证、效率保证等,实现了数据资源的有

效共享,并能提供基于不同平台的丰富的开发接口、支持流行的开发工具 在工业控制系

统中使用J2ME技术的优势:提供了一种独立于厂商的服务平台,使得不同厂商的现场控

制系统可以相互兼容将工业控制系统中每个设备提供的功能都可以映射成J2ME服务,使

其不仅可以被现场总线使用,而且还可以被支持J2ME的任何设备(如PDA)来访问;简化

网络编程,提高系统的安全性;将Java技术应用到无线数传终端产品中主要具有以下几

个方面的好处:将Java技术应用到无线数传终端产品中主要具有以下几个方面的好处:

可以容易地连接到Internet,这样系统变成了开放的,提高了设备的可访问性;使工业

控制系统中的设备可以与家用消费电器和自动化设备通信,增强设备的功能

    1、产品简介 基于JAVA的工业控制无线数传终端是根据工业控制领域行业用户需求

特点专门设计开发的具有良好的扩展性和可移植性产品提供完整的PPP 协议及上层

TCP/IP 协议,具有路由功能,提供100BaseT以太网接口、RS232、RS485等多种标准接口

产品具有性能高、体积小、供耗低、组网灵活、配置简单、扩展性强的特点,支持实时

数据采集、远程监控、营业网点接入等各种行业应用可广泛应用于工业现场控制、数据

采集、交通监控、远程业务点接入等多种领域,也可以内置于控制面板,智能仪表等设

备中,充分满足行业用户开展无线数据应用的需求无线数传终端产品系列包括:

    (1)无线数传终端内建TCP/IP 功能及标准的串行端口功能,集成工业级

GPRS/CDMA1X 模块,并提供完备的电源系统,使用方便简洁GPRS 无线数传终端CDMA1X

无线数传终端

    (2)嵌入式开发板内建TCP/IP功能及标准的串行端口功能,用户可灵活选配

GPRS/CDMA1X模块,自定义产品尺寸该嵌入式开发板便于二次开发和快速整合到用户原有

系统,并通过软硬件整体解决方案满足行业用户快速开发无线网络应用的需要
 
    2、技术来源 中联科技开发的无线数传终端产品核心技术来源于国家“863”计划《

无线移动自组织互联网技术及实验系统研制》技术成果,产品具有两方面的核心技术:

    (1)具有完整的嵌入式TCP/IP协议和GPRS、CDMA公众无线数据网络通信
    (2)具有针对应用的J2ME开放开发平台目前,相关产品多集中在以PC机为架构扩展

通信模块,利用PC上的资源来完成相应工作的公用市场,其中代表性产品就是GPRS、

CDMA无线上网卡其特点是产品价格较高,同时应用对行业没有深入渗透,难以形成行业

规模产业目前移动数据网络设备处于一个新兴的蓬勃发展阶段,由于GPRS、CDMA公众无

线数据网络采用TCP/IP 技术,因此相应的行业工控终端首先要解决TCP/IP 相关技术的

长期积累国内目前的技术方案多采用传统8051单片机增加简单的PPP协议来实现,而我们

开发的无线数传终端产品是在已成熟的宽带路由器和SNMP 网管设备等产品的基础上发展

起来的全新系列产品,硬件采用全新的ARM7 32位嵌入式RISC CPU,处理能力及系统资源

提高10倍以上;软件上采用完整的嵌入式OS及TCP/IP协议包,整体方案具有如下技术优

势:

    (1)完整TCP/IP协议,具有100BaseT网络接口及完整的IP 路由功能

    (2)针对应用具有TCP 可靠连接方式,专为金融交易应用而设计

    (3)内嵌WEB Server 配置方式,方便直观

    (4)支持TELNET、SNMP等网络管理功能,适合行业应用

    (5)支持远程维护,具有远程配置、远程升级和重启动的功能目前公司在嵌入式

TCP/IP技术、产品及市场方面都取得了较大成功 3、产品结构和工作原理 产品以32位嵌

入式处理器为核心,可对数据进行处理,采用嵌入式实时多任务操作系统,支持协议转

换和透明数据传输,可提供各种应用定制的嵌入式软件的代码空间,根据具体设备应用

,可在嵌入式专用处理器上开发新软件,还可提供定制的中心主机软件系统从硬件上主

要分为电源、移动通信模块、嵌入式RISC CPU、存储系统和逻辑控制电路、接口驱动电

路等五个部分,如图所示接口驱动支持同步和异步通信,采用和集成第三方的移动通信

模块

 

    图1:系统结构示意图系统软件包括实时操作系统、TCP/IP协议栈、数据加密、串行

数据流到TCP/IP的协议转换、接口驱动程序等

    4、产品功能特点

    (1)多媒体数据处理功能无线数传终端集现场图像监视,现场声音监听和数据采集

传输多媒体监控功能于一体设备集成视频频编码压缩功能,支持M-JPEG或MPEG-4的编解

码技术进行视频编解码,可以串口外接摄像头,能够随时随地拍摄照片,完成实时视频

信号的压缩、语音信号和数据的编码,并经过设备打包传送到远端的监控中心,为用户

提供高质量的实时图像,可以广泛应用于变电站、邮电、石油、水利等系统的无人值守

机房及其它环境监控

    (2)支持协议转换与透明传输透明传输模式是工业控制领域适用范围最广、通用性

最强的一种工作模式在透明传输模式下,设备与监控中心的数据传输采用TCP 连接方式

,不解析从串口收到的任何数据,直接将数据作为TCP 或UDP 的数据进行打包发送,而

对具体数据的解析分别由后端数据采集终端设备和前端数据中心的相关服务器进行处理

同时,为了满足SCADA 系统要求,设备也可配置命令串反向控制数据采集设备,按用户

所需改变数据采集设备的工作方式;定义数据成帧的方式,即设备直接将数据按要求的

格式封装成规定的帧,然后通过TCP/UDP传送到上位机数字设备分为支持TCP/IP的设备和

非TCP/IP设备两大类TCP/IP设备包括采用Windows 系列操作系统的 PC、笔记本电脑和采

用嵌入式操作系统的 PDA;而传统的工业控制设备主要是非TCP/IP设备,如RS-232、RS

-422、RS-485、CNC、PLC 串行设备或模拟传感器设备
    (3)移动数据网络底层使用的通信协议是TCP/IP,而传统的工业控制设备不支持

TCP/IP协议工业控制系统中通常采用实时、可靠的数据传输协议,如CAN、TTP等,这些

工业控制底层的通信协议也不支持TCP/IP因此,来自这些工业控制设备的数据,只有通

过适当的协议转换,才可以实现与TCP/IP 网络的连接 项目开发具有协议转换功能的嵌

入式TCP/IP协议栈用户上位系统向无线数传终端发送工作指令和数据时,数据经由嵌入

式TCP/IP协议栈进行协议转换,打成IP数据包,再以数据包的形式发送到移动数据网络

嵌入式TCP/IP协议栈使用户可在缺少TCP/IP协议栈功能的工业控制设备(如单片机、可

编程控制器PLC)通过PPP、FTP、TelNet、Direct Socket、SerialNet、E-Mail等方式实

现数据传输

    (4)支持金融卡信息交换格式标准(ISO8583)ISO8583 是POS 机或ATM 柜员机等

金融设备常用的一个标准,它定义了数据的封装格式等在8583应用模式下,无线数传终

端与后端终端设备遵循一致的消息格式定义方式,IP 数据终端 解析串口收到的消息,

并按照约定的命令格式识别消息,检查校验和提取消息字段中特定的命令字,执行相关

操作,完成一次完整的命令处理设备工作在在8583 模式下,设备按照约定执行相关操作

,包括:网络配置、建立TCP连接、发送数据、接收数据等,提取8583格式封装的业务数

据,并进行相应的传输,可以保证金融终端设备与数据中心间数据交互的完整性,能够

满足工控、金融等行业的需求

    (5)支持路由功能设备通过以太口可与多个工业控制设备相连,提供无线路由功能

,让物理位置比较近的多个终端同时连接上无线网络,实现终端设备与数据中心的双向

数据传输在此模式下,设备完成以太接口所连局域网到无线网络之间的NAT 路由而设备

的串口用作控制台配置接口,设备对串口接收到的数据作为标准的控制台命令处理,实

现对IP 数据终端的配置管理

    (6)提供AT 扩展命令集很多工业控制产品直接输出AT 命令,控制外接设备无线数

传终端作为一个带TCP/IP 功能的扩展数据终端,从串口接收数据终端发来的类AT 命令

,并执行相应的操作无线数传终端支持所有标准的AT命令,主要用于控制数据通信模块

;同时IP 数据终端还根据应用扩展实现了以下命令:设置数据通信参数、激活/断开数

据通信连接、发送/接收短消息、激活/终止TCP连接、发送/接收TCP报文、发送/接收UDP

报文等AT扩展命令还可根据用户的需求进行定制

    (7)提供多种标准通信接口提供100BaseT以太网接口、PCMCIA、RS232、USB、

RS485等多种标准接口,同时开发相应的通信组网协议软件和物理层驱动软件,以适应工

业控制设备及实验现场仪器分布式处理结构网络连接的需要

    (8)采用嵌入式高性能处理器为了支持多媒体数据业务,采用处理能力强大32位的

嵌入式处理器,提供强大的处理能力,并能够满足未来应用功能的升级同时采用实时多

任务编程技术和交叉开发工具技术来控制功能复杂性,简化应用程序设计、保障软件质

量和缩短开发周期

    (9)小尺寸、微功耗和低成本通过选用最佳的编程模型和不断改进算法,采用Java

编程模式,优化编译器性能,满足小尺寸、微功耗和低成本的特性 典型应用领域移动数

据通信正逐步进入传统的工业控制领域利用移动数据通信技术可以为工业监控系统搭建

远程数据传输平台无线数传终端利用最新的移动通信网络作为传输介质,可以与众多的

RTU终端、DTU终端、PLC终端、单片机终端、工控机、GPS车载定位仪、仪器仪表、POS终

端等工业控制设备无缝连接各种远程工业控制设备通过移动数据网络连接到数据中心,

实现实时浏览温度,设置点,报警或者其他监控功能,并使数据采样更加实时准确,用

户可以在异地远程控制监控设备,使工业控制更加高效率,有助于实现行业管理现代化

、数据采集自动化等目标

    工业控制无线数传终端产品具有支持多媒体数据传输的特点,不仅能满足工业遥控

、遥调、遥测、遥信功能,而且还能实现对工控现场远程图像实时监控,即“遥视”功

能,可集中管理各工业控制设备的工作状态,满足工业控制自动化发展的要求设备能够

应用在电力、自来水、天然气等领域表计的计量,还可实现自动测量读取、自动计量发

送、远程信息处理、远程设备监控,以及安防、车辆调度、公众流量业务、工业处理自

动化等任何需要统一管理服务终端的应用方案中,可广泛用于金融、保险、证券、商业

、公安、多媒体通信、税务、气象、石油等行业

    例如,在环保系统中,常常需要对众多的污染排放点进行实时监测,大部分监测数

据需要实时发送到管理中心的后端服务器进行处理由于监测点分散,分布范围广,而且

大多设置在环境较恶劣的地区,通过电话线传送数据往往事倍功半利用GPRS网络进行无

线数据传输,成为环保部门选择的通信手段亮点之一污染监测设备将采集到的污染数据

和告警信息,通过GPRS网络,及时发送到环保监察部门,可以实现对排污单位或个人的

及时管理,大大提高了工作效率,为环境保护提供了崭新方式

 

 

                                        无线数传终端在环保系统的应用

    无线数传终端在工业控制领域的主要应用有:

    (1)城市配电网系统与自动化抄表、变电站设备监测

    (2)自来水、煤气管道、闸门、泵站与水厂监控

    (3)供热系统实时监控和维护级

    (4)环境保护系统数据采集

    (5)三防与水文监测

    (6)气象数据采集

    (7)无人值守如仓库监控

    (8)无人值守站机房监控和远程维护(如移动基站、微波、光纤中继站等)
 
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模仿以上回答,如果代码:memcpy(UDP3 + 24, &udp3.GNSS_LLALongitude, 8);可以改写为: UDP3[24] = udp3.GNSS_LLALongitude & 0xFF; UDP3[25] = (udp3.GNSS_LLALongitude >> 8) & 0xFF; UDP3[26] = (udp3.GNSS_LLALongitude >> 16) & 0xFF; UDP3[27] = (udp3.GNSS_LLALongitude >> 24) & 0xFF; UDP3[28] = (udp3.GNSS_LLALongitude >> 32) & 0xFF; UDP3[29] = (udp3.GNSS_LLALongitude >> 40) & 0xFF; UDP3[30] = (udp3.GNSS_LLALongitude >> 48) & 0xFF; UDP3[31] = (udp3.GNSS_LLALongitude >> 56) & 0xFF; 代码:memcpy(UDP3 + 32, &udp3.GNSS_LLALatitude, 8);可以改写为: UDP2[32] = udp3.GNSS_LLALatitude & 0xFF; UDP2[33] = (udp3.GNSS_LLALatitude >> 8) & 0xFF; UDP2[34] = (udp3.GNSS_LLALatitude >> 16) & 0xFF; UDP2[35] = (udp3.GNSS_LLALatitude >> 24) & 0xFF; UDP2[36] = (udp3.GNSS_LLALatitude >> 32) & 0xFF; UDP2[37] = (udp3.GNSS_LLALatitude >> 40) & 0xFF; UDP2[38] = (udp3.GNSS_LLALatitude >> 48) & 0xFF; UDP2[39] = (udp3.GNSS_LLALatitude >> 56) & 0xFF; 请帮我改写以下程序:memcpy(UDP3 + 40, &udp3.GNSS_LLAAltitude, 4); memcpy(UDP3 + 44, &udp3.GNSS_EastVelSpeed, 4); memcpy(UDP3 + 48, &udp3.GNSS_NorthvelSpeed, 4); memcpy(UDP3 + 52, &udp3.GNSS_UpVelSpeed, 4); memcpy(UDP3 + 56, &udp3.GNSS_AzimuthAngle, 4); memcpy(UDP3 + 60, &udp3.GNSS_LLALatStd, 4); memcpy(UDP3 + 64, &udp3.GNSS_LLAlonStd, 4); memcpy(UDP3 + 68, &udp3.GNSS_LLAAltStd, 4); memcpy(UDP3 + 72, &udp3.GNSS_EastVelStd, 4); memcpy(UDP3 + 76, &udp3.GNSS_NorthvelStd, 4); memcpy(UDP3 + 80, &udp3.GNSS_UpVelStd, 4); memcpy(UDP3 + 84, &udp3.GNSS_AzimuthAngleStd, 4); memcpy(UDP3 + 88, &udp3.GNSS_GroundSpeed, 4); memcpy(UDP3 + 92, &udp3.GNSS_SolutionStatus, 1); memcpy(UDP3 + 93, &udp3.GNSS_PositionType, 1); memcpy(UDP3 + 94, &udp3.GNSS_NumSatellitesTracked, 1); memcpy(UDP3 + 95, &udp3.GNSS_NumSatellitesSolu, 1); memcpy(UDP3 + 96, &udp3.GNSS_NumL1SatellitesSolu, 1); memcpy(UDP3 + 97, &udp3.GNSS_NumL2SatellitesSolu, 1); memcpy(UDP3 + 98, &udp3.GNSS_NumL5SatellitesSolu, 1); memcpy(UDP3 + 99, &udp3.GNSS_Undulation, 4); memcpy(UDP3 + 103, &udp3.GNSS_Age, 4); memcpy(UDP3 + 107, &udp3.GNSS_leaps, 1); memcpy(UDP3 + 108, &udp3.GNSS_SafeStatus, 1);
最新发布
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值